miniflux-legacy/app/schemas/mysql.php
2017-01-14 11:34:48 -05:00

139 lines
4.6 KiB
PHP

<?php
namespace Miniflux\Schema;
use PDO;
use Miniflux\Helper;
const VERSION = 1;
function version_1(PDO $pdo)
{
$pdo->exec("CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
is_admin TINYINT(1) DEFAULT '0',
last_login BIGINT,
api_token VARCHAR(255) NOT NULL UNIQUE,
bookmarklet_token VARCHAR(255) NOT NULL UNIQUE,
cronjob_token VARCHAR(255) NOT NULL UNIQUE,
feed_token VARCHAR(255) NOT NULL UNIQUE,
fever_token VARCHAR(255) NOT NULL UNIQUE,
fever_api_key VARCHAR(255) NOT NULL UNIQUE
) ENGINE=InnoDB CHARSET=utf8");
$pdo->exec("CREATE TABLE user_settings (
`user_id` INT NOT NULL,
`key` VARCHAR(255) NOT NULL,
`value` TEXT NOT NULL,
PRIMARY KEY(`user_id`, `key`),
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB CHARSET=utf8");
$pdo->exec("CREATE TABLE feeds (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
feed_url VARCHAR(512) NOT NULL,
site_url VARCHAR(512),
title VARCHAR(255) NOT NULL,
expiration BIGINT DEFAULT 0,
last_checked BIGINT DEFAULT 0,
last_modified VARCHAR(255),
etag VARCHAR(255),
enabled TINYINT(1) DEFAULT TRUE,
download_content TINYINT(1) DEFAULT '0',
parsing_error INT DEFAULT 0,
parsing_error_message VARCHAR(255),
rtl TINYINT(1) DEFAULT '0',
cloak_referrer TINYINT(1) DEFAULT '0',
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE,
UNIQUE(user_id, feed_url)
) ENGINE=InnoDB CHARSET=utf8");
$pdo->exec("CREATE TABLE items (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
feed_id BIGINT NOT NULL,
checksum VARCHAR(255) NOT NULL,
status VARCHAR(10) NOT NULL,
bookmark INT DEFAULT 0,
url TEXT NOT NULL,
title TEXT NOT NULL,
author TEXT,
content LONGTEXT,
updated BIGINT,
enclosure_url TEXT,
enclosure_type VARCHAR(50),
language VARCHAR(50),
rtl TINYINT(1) DEFAULT '0',
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY(feed_id) REFERENCES feeds(id) ON DELETE CASCADE,
UNIQUE(feed_id, checksum)
) ENGINE=InnoDB CHARSET=utf8");
$pdo->exec("CREATE TABLE `groups` (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE,
UNIQUE(user_id, title)
) ENGINE=InnoDB CHARSET=utf8");
$pdo->exec("CREATE TABLE `feeds_groups` (
feed_id BIGINT NOT NULL,
group_id INT NOT NULL,
PRIMARY KEY(feed_id, group_id),
FOREIGN KEY(group_id) REFERENCES groups(id) ON DELETE CASCADE,
FOREIGN KEY(feed_id) REFERENCES feeds(id) ON DELETE CASCADE
) ENGINE=InnoDB CHARSET=utf8");
$pdo->exec("CREATE TABLE favicons (
id INT AUTO_INCREMENT PRIMARY KEY,
hash VARCHAR(255) UNIQUE,
type VARCHAR(50)
) ENGINE=InnoDB CHARSET=utf8");
$pdo->exec("CREATE TABLE `favicons_feeds` (
feed_id BIGINT NOT NULL,
favicon_id INT NOT NULL,
PRIMARY KEY(feed_id, favicon_id),
FOREIGN KEY(favicon_id) REFERENCES favicons(id) ON DELETE CASCADE,
FOREIGN KEY(feed_id) REFERENCES feeds(id) ON DELETE CASCADE
) ENGINE=InnoDB CHARSET=utf8");
$pdo->exec("CREATE TABLE remember_me (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
ip VARCHAR(255),
user_agent VARCHAR(255),
token VARCHAR(255),
sequence VARCHAR(255),
expiration BIGINT,
date_creation BIGINT,
FOREIGN KEY(user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB CHARSET=utf8");
$fever_token = Helper\generate_token();
$rq = $pdo->prepare('
INSERT INTO users
(username, password, is_admin, api_token, bookmarklet_token, cronjob_token, feed_token, fever_token, fever_api_key)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
');
$rq->execute(array(
'admin',
password_hash('admin', PASSWORD_BCRYPT),
'1',
Helper\generate_token(),
Helper\generate_token(),
Helper\generate_token(),
Helper\generate_token(),
$fever_token,
md5('admin:'.$fever_token),
));
$pdo->exec('CREATE INDEX items_user_status_idx ON items(user_id, status)');
$pdo->exec('CREATE INDEX items_user_feed_idx ON items(user_id, feed_id)');
}