feat: add videodb media index with Docker stack
- Add videodb PHP/MySQL media collection manager (Blu-ray, DVD, CD) - Dockerfile: PHP 8.1 + Apache with GD/mysqli/exif extensions - docker-compose.yml: app on port 6761 + MySQL 8.0 with health checks - docker-entrypoint.sh: auto-generates config.inc.php from env vars, waits for MySQL, initializes DB schema idempotently - init-db.php: CLI schema installer using app's own prefix_query() logic - Persistent volumes for DB, cache, and cover images Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
233
videodb/install/install.sql
Normal file
233
videodb/install/install.sql
Normal file
@@ -0,0 +1,233 @@
|
||||
#
|
||||
# Database installation script
|
||||
#
|
||||
# This script should not be run directly, but rather be executed by using install.php
|
||||
#
|
||||
# @package Setup
|
||||
# @author Andreas Goetz <cpuidle@gmx.de>
|
||||
# @version $Id: install.sql,v 1.22 2013/03/13 15:26:50 andig2 Exp $
|
||||
#
|
||||
|
||||
# genres
|
||||
CREATE TABLE genres (
|
||||
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
) CHARACTER SET UTF8;
|
||||
|
||||
# lent
|
||||
CREATE TABLE lent (
|
||||
diskid VARCHAR(15) NOT NULL,
|
||||
who VARCHAR(255) NOT NULL,
|
||||
dt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (diskid)
|
||||
) CHARACTER SET UTF8;
|
||||
|
||||
# mediatypes
|
||||
CREATE TABLE mediatypes (
|
||||
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
name VARCHAR(15) NULL,
|
||||
PRIMARY KEY (id)
|
||||
) CHARACTER SET UTF8;
|
||||
|
||||
# videodata
|
||||
CREATE TABLE videodata (
|
||||
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
md5 VARCHAR(32) DEFAULT NULL,
|
||||
title VARCHAR(255) DEFAULT NULL,
|
||||
subtitle VARCHAR(255) DEFAULT NULL,
|
||||
language VARCHAR(255) DEFAULT NULL,
|
||||
diskid VARCHAR(15) DEFAULT NULL,
|
||||
comment VARCHAR(255) DEFAULT NULL,
|
||||
disklabel VARCHAR(32) DEFAULT NULL,
|
||||
imdbID VARCHAR(30) DEFAULT NULL,
|
||||
year INT(4) UNSIGNED NOT NULL DEFAULT '0',
|
||||
imgurl VARCHAR(255) DEFAULT NULL,
|
||||
director VARCHAR(255) DEFAULT NULL,
|
||||
actors MEDIUMTEXT,
|
||||
runtime INT(10) UNSIGNED DEFAULT NULL,
|
||||
country VARCHAR(255) DEFAULT NULL,
|
||||
plot TEXT,
|
||||
rating VARCHAR(15) DEFAULT NULL,
|
||||
filename VARCHAR(255) DEFAULT NULL,
|
||||
filesize BIGINT UNSIGNED DEFAULT NULL,
|
||||
filedate DATETIME DEFAULT NULL,
|
||||
audio_codec VARCHAR(255) DEFAULT NULL,
|
||||
video_codec VARCHAR(255) DEFAULT NULL,
|
||||
video_width INT(10) UNSIGNED DEFAULT NULL,
|
||||
video_height INT(10) UNSIGNED DEFAULT NULL,
|
||||
istv tinyINT(1) UNSIGNED NOT NULL DEFAULT '0',
|
||||
lastupdate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
mediatype INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
custom1 VARCHAR(255) DEFAULT NULL,
|
||||
custom2 VARCHAR(255) DEFAULT NULL,
|
||||
custom3 VARCHAR(255) DEFAULT NULL,
|
||||
custom4 VARCHAR(255) DEFAULT NULL,
|
||||
created DATETIME DEFAULT NULL,
|
||||
`owner_id` INT(11) NOT NULL DEFAULT '1',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `title_idx` (`title`),
|
||||
KEY `diskid_idx` (`diskid`),
|
||||
KEY `mediatype` (`mediatype`,`istv`),
|
||||
FULLTEXT KEY `plot_idx` (`plot`),
|
||||
FULLTEXT KEY `actors_idx` (`actors`),
|
||||
FULLTEXT KEY `comment` (`comment`)
|
||||
) CHARACTER SET UTF8, ENGINE=MyISAM;
|
||||
|
||||
# videogenre
|
||||
CREATE TABLE videogenre (
|
||||
video_id INT(10) UNSIGNED NOT NULL,
|
||||
genre_id INT(10) UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (video_id, genre_id)
|
||||
) CHARACTER SET UTF8;
|
||||
|
||||
# add genres
|
||||
|
||||
INSERT INTO genres (id, name) VALUES (1,'Action');
|
||||
INSERT INTO genres (id, name) VALUES (2,'Adventure');
|
||||
INSERT INTO genres (id, name) VALUES (3,'Animation');
|
||||
INSERT INTO genres (id, name) VALUES (4,'Comedy');
|
||||
INSERT INTO genres (id, name) VALUES (5,'Crime');
|
||||
INSERT INTO genres (id, name) VALUES (6,'Documentary');
|
||||
INSERT INTO genres (id, name) VALUES (7,'Drama');
|
||||
INSERT INTO genres (id, name) VALUES (8,'Family');
|
||||
INSERT INTO genres (id, name) VALUES (9,'Fantasy');
|
||||
INSERT INTO genres (id, name) VALUES (10,'Film-Noir');
|
||||
INSERT INTO genres (id, name) VALUES (11,'Horror');
|
||||
INSERT INTO genres (id, name) VALUES (12,'Musical');
|
||||
INSERT INTO genres (id, name) VALUES (13,'Mystery');
|
||||
INSERT INTO genres (id, name) VALUES (14,'Romance');
|
||||
INSERT INTO genres (id, name) VALUES (15,'Sci-Fi');
|
||||
INSERT INTO genres (id, name) VALUES (16,'Short');
|
||||
INSERT INTO genres (id, name) VALUES (17,'Thriller');
|
||||
INSERT INTO genres (id, name) VALUES (18,'War');
|
||||
INSERT INTO genres (id, name) VALUES (19,'Western');
|
||||
INSERT INTO genres (id, name) VALUES (20,'Adult');
|
||||
INSERT INTO genres (id, name) VALUES (21,'Music');
|
||||
INSERT INTO genres (id, name) VALUES (22,'Biography');
|
||||
INSERT INTO genres (id, name) VALUES (23,'History');
|
||||
INSERT INTO genres (id, name) VALUES (24,'Sport');
|
||||
|
||||
# add mediatypes
|
||||
|
||||
INSERT INTO mediatypes (id, name) VALUES (1,'DVD');
|
||||
INSERT INTO mediatypes (id, name) VALUES (2,'SVCD');
|
||||
INSERT INTO mediatypes (id, name) VALUES (3,'VCD');
|
||||
INSERT INTO mediatypes (id, name) VALUES (4,'CD-R');
|
||||
INSERT INTO mediatypes (id, name) VALUES (5,'CD-RW');
|
||||
INSERT INTO mediatypes (id, name) VALUES (6,'VHS');
|
||||
INSERT INTO mediatypes (id, name) VALUES (7,'DVD-R');
|
||||
INSERT INTO mediatypes (id, name) VALUES (8,'DVD-RW');
|
||||
INSERT INTO mediatypes (id, name) VALUES (9,'DVD+R');
|
||||
INSERT INTO mediatypes (id, name) VALUES (10,'DVD+RW');
|
||||
INSERT INTO mediatypes (id, name) VALUES (11,'DVD-DL');
|
||||
INSERT INTO mediatypes (id, name) VALUES (12,'DVD+DL');
|
||||
INSERT INTO mediatypes (id, name) VALUES (13,'LaserDisc');
|
||||
INSERT INTO mediatypes (id, name) VALUES (14,'HDD');
|
||||
INSERT INTO mediatypes (id, name) VALUES (15,'HD-DVD');
|
||||
INSERT INTO mediatypes (id, name) VALUES (16,'Blu-ray');
|
||||
INSERT INTO mediatypes (id, name) VALUES (17,'AVCHD');
|
||||
INSERT INTO mediatypes (id, name) VALUES (18,'CD');
|
||||
INSERT INTO mediatypes (id, name) VALUES (50,'wanted');
|
||||
|
||||
# configuration
|
||||
CREATE TABLE config (
|
||||
opt VARCHAR(50) NOT NULL,
|
||||
value VARCHAR(255) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (opt)
|
||||
) CHARACTER SET UTF8;
|
||||
|
||||
# actors
|
||||
CREATE TABLE actors (
|
||||
name VARCHAR(255) NOT NULL,
|
||||
actorid VARCHAR(15) NOT NULL DEFAULT '',
|
||||
imgurl VARCHAR(255) NOT NULL DEFAULT '',
|
||||
checked TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`name`),
|
||||
KEY `actorid` (`actorid`)
|
||||
) CHARACTER SET UTF8;
|
||||
|
||||
# multiusersupport
|
||||
CREATE TABLE users (
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`passwd` VARCHAR(100) NOT NULL DEFAULT '',
|
||||
`cookiecode` VARCHAR(100) DEFAULT NULL,
|
||||
`permissions` INT(10) UNSIGNED DEFAULT NULL,
|
||||
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`email` VARCHAR(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `name` (`name`)
|
||||
) CHARACTER SET UTF8;
|
||||
INSERT INTO users (id, name, passwd, permissions) VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 7);
|
||||
|
||||
# user-specific configuration
|
||||
CREATE TABLE userconfig (
|
||||
`user_id` INT(11) NOT NULL DEFAULT '0',
|
||||
`opt` VARCHAR(50) NOT NULL DEFAULT '',
|
||||
`value` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`user_id`,`opt`)
|
||||
) CHARACTER SET UTF8;
|
||||
|
||||
# user seen table
|
||||
CREATE TABLE userseen (
|
||||
`video_id` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`user_id` INT(11) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`video_id`,`user_id`)
|
||||
) CHARACTER SET UTF8;
|
||||
|
||||
# cache table
|
||||
CREATE TABLE cache (
|
||||
`tag` VARCHAR(45) NOT NULL,
|
||||
`value` VARCHAR(32) DEFAULT NULL,
|
||||
PRIMARY KEY (`tag`)
|
||||
) CHARACTER SET UTF8;
|
||||
|
||||
# set DEFAULT options
|
||||
|
||||
# some defaults
|
||||
REPLACE INTO `config` (opt, value) VALUES ('language', 'en');
|
||||
REPLACE INTO `config` (opt, value) VALUES ('mediadefault', '4');
|
||||
REPLACE INTO `config` (opt, value) VALUES ('langdefault', 'english');
|
||||
REPLACE INTO `config` (opt, value) VALUES ('filterdefault', 'unseen');
|
||||
REPLACE INTO `config` (opt, value) VALUES ('IMDBage', '432000');
|
||||
REPLACE INTO `config` (opt, value) VALUES ('thumbnail', '1');
|
||||
REPLACE INTO `config` (opt, value) VALUES ('template', 'nexgen::nexgen');
|
||||
REPLACE INTO `config` (opt, value) VALUES ('languageflags', 'german::spanish::english::french');
|
||||
REPLACE INTO `config` (opt, value) VALUES ('adultgenres', '20');
|
||||
|
||||
REPLACE INTO `config` (opt, value) VALUES ('imdbBrowser', 1);
|
||||
REPLACE INTO `config` (opt, value) VALUES ('actorpics', 1);
|
||||
REPLACE INTO `config` (opt, value) VALUES ('listcolumns', 6);
|
||||
REPLACE INTO `config` (opt, value) VALUES ('castcolumns', 4);
|
||||
|
||||
REPLACE INTO `config` (opt, value) VALUES ('enginedefault', 'imdb');
|
||||
REPLACE INTO `config` (opt, value) VALUES ('engineimdb', 1);
|
||||
REPLACE INTO `config` (opt, value) VALUES ('engineamazon', 1);
|
||||
REPLACE INTO `config` (opt, value) VALUES ('engineamazonaws', 1);
|
||||
REPLACE INTO `config` (opt, value) VALUES ('enginegoogle', 1);
|
||||
REPLACE INTO `config` (opt, value) VALUES ('engineyoutube', 1);
|
||||
|
||||
# user permissions
|
||||
CREATE TABLE permissions (
|
||||
`from_uid` INT(11) NOT NULL,
|
||||
`to_uid` INT(11) NOT NULL,
|
||||
`permissions` INT(10) UNSIGNED DEFAULT NULL,
|
||||
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`from_uid`,`to_uid`)
|
||||
) CHARACTER SET UTF8;
|
||||
|
||||
# create guest user
|
||||
INSERT IGNORE INTO config (opt, value) VALUES ('guestid', '10000');
|
||||
INSERT IGNORE INTO config (opt, value) VALUES ('adminid', '1');
|
||||
INSERT IGNORE INTO config (opt, value) VALUES ('denyguest', '1');
|
||||
INSERT IGNORE INTO users (id, name, passwd, permissions) VALUES (10000 ,'Guest', '---', 2);
|
||||
|
||||
#
|
||||
# IMPORTANT
|
||||
#
|
||||
# Always increase this number in install/install.sql, install/upgrade.sql and
|
||||
# core/constants.php when changing the database structure!
|
||||
#
|
||||
|
||||
REPLACE INTO config (opt,value) VALUES ('dbversion', 41);
|
||||
57
videodb/install/upgrade.php
Normal file
57
videodb/install/upgrade.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
/**
|
||||
* Database encoding conversion for unicode
|
||||
*
|
||||
* @package Setup
|
||||
* @author Andreas Goetz <cpuidle@gmx.net>
|
||||
* @version $Id: upgrade.php,v 1.9 2013/03/13 15:54:24 andig2 Exp $
|
||||
*/
|
||||
|
||||
// clear cache table
|
||||
$res = runSQL("SELECT value FROM config WHERE opt='dbversion'", $dbh, true);
|
||||
if (count($res) && ($res[0]['value'] >= 30))
|
||||
{
|
||||
runSQL("DELETE FROM cache", $dbh, true);
|
||||
}
|
||||
|
||||
$sql = '';
|
||||
|
||||
// check db encoding
|
||||
$res = runSQL("SHOW VARIABLES LIKE 'character_set_database'", $dbh, true);
|
||||
$enc = strtoupper($res[0]['Value']);
|
||||
|
||||
if ($enc !== 'UTF8')
|
||||
{
|
||||
$sql = "ALTER DATABASE CHARACTER SET UTF8;";
|
||||
}
|
||||
|
||||
$tables = array('actors', 'cache', 'config', 'genres', 'lent', 'mediatypes', 'permissions',
|
||||
'userconfig', 'users', 'userseen', 'videodata', 'videogenre');
|
||||
|
||||
foreach ($tables as $table)
|
||||
{
|
||||
#!! note: new code- checking table encoding on table level, too
|
||||
# this is for the case that the DB ist alreaady utf8 but the tables are not
|
||||
#
|
||||
# alternative approach:
|
||||
# SELECT TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'videodb'
|
||||
$res = runSQL("SHOW TABLE STATUS WHERE name = '".$table."'", $dbh, true);
|
||||
$enc = $res[0]['Collation'];
|
||||
|
||||
if (!preg_match('/UTF8/i', $enc)) $sql .= "\nALTER TABLE ".$table." CONVERT TO CHARACTER SET UTF8;";
|
||||
}
|
||||
|
||||
if ($sql)
|
||||
{
|
||||
// add DB prefix
|
||||
$sql = prefix_query($sql);
|
||||
|
||||
warn('<b>Note:</b><br/>
|
||||
Install detected that your database encoding is not UTF8 (current encoding: '.$enc.'). Please make sure to convert your database encoding to UTF8 before you continue using videoDB. If you do not upgrade your database encoding, you may experience problems using videoDB such as SQL error messages or when exporting data. To perform the conversion please execute the following SQL statements against your database:
|
||||
<p><pre>'.$sql.'</pre></p>');
|
||||
}
|
||||
|
||||
// signal success
|
||||
return true;
|
||||
|
||||
?>
|
||||
411
videodb/install/upgrade.sql
Normal file
411
videodb/install/upgrade.sql
Normal file
@@ -0,0 +1,411 @@
|
||||
#
|
||||
# Database upgrade script
|
||||
#
|
||||
# This script should not be run directly, but rather be executed by using install.php.
|
||||
# Otherwise, important data conversion steps may be missing.
|
||||
#
|
||||
# @package Setup
|
||||
# @author Andreas Goetz <cpuidle@gmx.de>
|
||||
# @version $Id: upgrade.sql,v 1.21 2013/03/16 10:10:07 andig2 Exp $
|
||||
#
|
||||
|
||||
# These were introduced by accident but are not needed
|
||||
DROP TABLE IF EXISTS codec;
|
||||
DROP TABLE IF EXISTS files;
|
||||
DROP TABLE IF EXISTS imdb;
|
||||
DROP TABLE IF EXISTS video;
|
||||
|
||||
# mediatypes
|
||||
CREATE TABLE IF NOT EXISTS mediatypes(
|
||||
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
name VARCHAR(15) NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
# add mediatypes
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (1,'DVD');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (2,'SVCD');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (3,'VCD');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (4,'CD-R');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (5,'CD-RW');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (6,'VHS');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (7,'DVD-R');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (8,'DVD-RW');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (9,'DVD+R');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (10,'DVD+RW');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (11,'DVD-DL');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (12,'DVD+DL');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (13,'LaserDisc');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (50,'wanted');
|
||||
|
||||
# add genres
|
||||
INSERT IGNORE INTO genres (id, name) VALUES (20,'Adult');
|
||||
|
||||
# modify videodata
|
||||
ALTER TABLE videodata ADD mediatype INT(10) UNSIGNED NOT NULL;
|
||||
ALTER TABLE videodata ADD custom1 VARCHAR(255) NULL;
|
||||
ALTER TABLE videodata ADD custom2 VARCHAR(255) NULL;
|
||||
ALTER TABLE videodata ADD custom3 VARCHAR(255) NULL;
|
||||
ALTER TABLE videodata ADD custom4 VARCHAR(255) NULL;
|
||||
|
||||
# configuration
|
||||
CREATE TABLE IF NOT EXISTS config (
|
||||
opt VARCHAR(50) NOT NULL,
|
||||
value VARCHAR(255) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (opt)
|
||||
);
|
||||
|
||||
# some DEFAULTs
|
||||
INSERT IGNORE INTO config (opt, value) VALUES ('language', 'en');
|
||||
INSERT IGNORE INTO config (opt, value) VALUES ('mediaDEFAULT', '4');
|
||||
INSERT IGNORE INTO config (opt, value) VALUES ('langDEFAULT', 'english');
|
||||
INSERT IGNORE INTO config (opt, value) VALUES ('filterDEFAULT', 'unseen');
|
||||
INSERT IGNORE INTO config (opt, value) VALUES ('IMDBage', '432000');
|
||||
INSERT IGNORE INTO config (opt, value) VALUES ('thumbnail', '1');
|
||||
INSERT IGNORE INTO config (opt, value) VALUES ('castcolumns', '1');
|
||||
INSERT IGNORE INTO config (opt, value) VALUES ('template', 'modern::compact');
|
||||
INSERT IGNORE INTO config (opt, value) VALUES ('languageflags', 'german::spanish::english::french');
|
||||
|
||||
# actor headshots
|
||||
CREATE TABLE IF NOT EXISTS actors (
|
||||
name VARCHAR(255) NOT NULL,
|
||||
imgurl VARCHAR(255) NOT NULL DEFAULT '',
|
||||
checked TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (name)
|
||||
);
|
||||
|
||||
# some indexes
|
||||
ALTER TABLE videodata ENGINE=MyISAM;
|
||||
ALTER TABLE videodata ADD INDEX title_idx (title);
|
||||
ALTER TABLE videodata ADD INDEX diskid_idx (diskid);
|
||||
ALTER TABLE videodata ADD FULLTEXT actors_idx (actors);
|
||||
|
||||
# creation date
|
||||
ALTER TABLE videodata ADD created DATETIME;
|
||||
UPDATE videodata SET created = lastupdate WHERE created IS NULL;
|
||||
|
||||
# multiusersupport
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INT(11) NOT NULL AUTO_INCREMENT,
|
||||
name VARCHAR(255) NOT NULL DEFAULT '',
|
||||
passwd VARCHAR(100) NOT NULL DEFAULT '',
|
||||
cookiecode VARCHAR(100) DEFAULT NULL,
|
||||
permissions INT(10) UNSIGNED DEFAULT NULL,
|
||||
email VARCHAR(255) DEFAULT NULL,
|
||||
timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY `name` (`name`)
|
||||
);
|
||||
INSERT IGNORE INTO users (name, passwd, permissions) VALUES ('admin', '21232f297a57a5a743894a0e4a801fc3', 15);
|
||||
ALTER TABLE videodata ADD owner VARCHAR(255) DEFAULT NULL;
|
||||
|
||||
#
|
||||
# changes in DB version 4
|
||||
#
|
||||
|
||||
ALTER TABLE `actors` ADD `actorid` VARCHAR( 15 ) NOT NULL AFTER `name` ;
|
||||
|
||||
#
|
||||
# changes in DB version 5
|
||||
#
|
||||
|
||||
ALTER TABLE `users` ADD `email` VARCHAR( 255 ) ;
|
||||
|
||||
#
|
||||
# changes in DB version 6
|
||||
#
|
||||
|
||||
CREATE TABLE IF NOT EXISTS userconfig (
|
||||
user VARCHAR(255) NOT NULL DEFAULT '',
|
||||
opt VARCHAR(50) NOT NULL DEFAULT '',
|
||||
value VARCHAR(255) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (user,opt)
|
||||
);
|
||||
|
||||
#
|
||||
# changes in DB version 7
|
||||
#
|
||||
|
||||
INSERT IGNORE INTO genres (id, name) VALUES (21,'Music');
|
||||
|
||||
#
|
||||
# changes in DB version 8
|
||||
#
|
||||
|
||||
CREATE TABLE userseen (
|
||||
user VARCHAR(255) NOT NULL,
|
||||
id INT(10) UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (user,id)
|
||||
);
|
||||
|
||||
#
|
||||
# changes in DB version 9
|
||||
#
|
||||
|
||||
ALTER TABLE `videodata` CHANGE `imdbID` `imdbID` VARCHAR( 15 ) DEFAULT NULL;
|
||||
|
||||
#
|
||||
# changes in DB version 10
|
||||
#
|
||||
|
||||
ALTER TABLE `users` ADD `name` VARCHAR( 255 ) NOT NULL AFTER `user`;
|
||||
UPDATE `users` SET `name` = `user`;
|
||||
ALTER TABLE `users` DROP PRIMARY KEY;
|
||||
ALTER TABLE `users` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
|
||||
ALTER TABLE `users` ADD UNIQUE (`name`);
|
||||
ALTER TABLE `users` DROP `user`;
|
||||
|
||||
ALTER TABLE `userseen` CHANGE `id` `video_id` INT UNSIGNED DEFAULT '0' NOT NULL;
|
||||
ALTER TABLE `userseen` ADD `user_id` INT NOT NULL ;
|
||||
ALTER TABLE `userconfig` ADD `user_id` INT NOT NULL FIRST;
|
||||
ALTER TABLE `videodata` ADD `owner_id` INT NOT NULL ;
|
||||
|
||||
#
|
||||
# changes in DB version 11
|
||||
#
|
||||
# Note- before this step is applied, the user data conversion must be performed!
|
||||
#
|
||||
|
||||
ALTER TABLE `userseen` DROP PRIMARY KEY, ADD PRIMARY KEY ( `video_id`, `user_id` );
|
||||
ALTER TABLE `userseen` DROP `user`;
|
||||
ALTER TABLE `userconfig` DROP PRIMARY KEY, ADD PRIMARY KEY ( `user_id`, `opt` );
|
||||
ALTER TABLE `userconfig` DROP `user`;
|
||||
ALTER TABLE `videodata` DROP `owner`;
|
||||
|
||||
#
|
||||
# changes in DB version 12
|
||||
#
|
||||
|
||||
ALTER TABLE `videogenre` CHANGE `id` `video_id` INT( 10 ) UNSIGNED DEFAULT '0' NOT NULL ;
|
||||
ALTER TABLE `videogenre` CHANGE `gid` `genre_id` INT( 10 ) UNSIGNED DEFAULT '0' NOT NULL ;
|
||||
|
||||
#
|
||||
# changes in DB version 13
|
||||
#
|
||||
|
||||
ALTER TABLE `videodata` MODIFY COLUMN `imgurl` VARCHAR(255) DEFAULT NULL;
|
||||
|
||||
#
|
||||
# changes in DB version 14
|
||||
#
|
||||
|
||||
CREATE TABLE IF NOT EXISTS permissions (
|
||||
`from_uid` INT(11) NOT NULL,
|
||||
`to_uid` INT(11) NOT NULL,
|
||||
`permissions` INT(10) UNSIGNED DEFAULT NULL,
|
||||
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`from_uid`, `to_uid`)
|
||||
);
|
||||
|
||||
# convert old permissions -> new permissions
|
||||
CREATE TABLE temp_perm (
|
||||
`from_uid` INT(11) NOT NULL,
|
||||
`to_uid` INT(11) NOT NULL,
|
||||
`permissions` INT(10) UNSIGNED DEFAULT NULL,
|
||||
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`from_uid`, `to_uid`)
|
||||
);
|
||||
|
||||
INSERT IGNORE INTO temp_perm (from_uid,to_uid,permissions)
|
||||
SELECT a.id AS from_uid,
|
||||
b.id AS to_uid,
|
||||
CASE
|
||||
WHEN a.permissions & 2 = 2 THEN 6 | COALESCE(c.permissions,0)
|
||||
WHEN a.permissions & 4 = 4 THEN
|
||||
CASE
|
||||
WHEN a.id = b.id THEN 6 | COALESCE(c.permissions,0)
|
||||
ELSE 2 | COALESCE(c.permissions,0)
|
||||
END
|
||||
ELSE 0 | COALESCE(c.permissions,0)
|
||||
END AS permissions
|
||||
FROM (users a, users b)
|
||||
LEFT OUTER JOIN permissions c
|
||||
ON c.from_uid = a.id
|
||||
AND c.to_uid = b.id
|
||||
ORDER BY from_uid DESC;
|
||||
|
||||
DELETE FROM temp_perm WHERE permissions = 0;
|
||||
|
||||
UPDATE users SET permissions =
|
||||
CASE WHEN (permissions & 2) = 2
|
||||
THEN (permissions & 11) | 4
|
||||
ELSE (permissions & 9) | 2
|
||||
END;
|
||||
|
||||
DELETE FROM permissions;
|
||||
|
||||
INSERT INTO permissions SELECT * FROM temp_perm;
|
||||
|
||||
DROP TABLE temp_perm;
|
||||
|
||||
INSERT IGNORE INTO config (opt, value) VALUES ('guestid', '10000');
|
||||
INSERT IGNORE INTO users (id, name, passwd, permissions) VALUES (10000 ,'Guest', '---', 2);
|
||||
|
||||
#
|
||||
# changes in DB version 15
|
||||
#
|
||||
|
||||
INSERT IGNORE INTO genres (id, name) VALUES (22,'Biography');
|
||||
INSERT IGNORE INTO genres (id, name) VALUES (23,'History');
|
||||
INSERT IGNORE INTO genres (id, name) VALUES (24,'Sport');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (11,'DVD-DL');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (12,'DVD+DL');
|
||||
|
||||
#
|
||||
# changes in DB version 16
|
||||
#
|
||||
|
||||
ALTER TABLE `videodata` MODIFY COLUMN `imdbID` VARCHAR(30);
|
||||
|
||||
#
|
||||
# changes in DB version 17
|
||||
#
|
||||
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (13,'LaserDisc');
|
||||
|
||||
#
|
||||
# changes in DB version 18
|
||||
#
|
||||
|
||||
ALTER TABLE `actors` ADD KEY `actorid` (`actorid`);
|
||||
|
||||
#
|
||||
# changes in DB version 19
|
||||
#
|
||||
|
||||
INSERT IGNORE INTO config (opt, value) VALUES ('adminid', '1');
|
||||
UPDATE videodata SET owner_id = 1 WHERE owner_id = 0;
|
||||
|
||||
#
|
||||
# changes in DB version 20
|
||||
#
|
||||
|
||||
SELECT 1;
|
||||
|
||||
#
|
||||
# changes in DB version 21
|
||||
#
|
||||
|
||||
ALTER TABLE `videodata` DROP COLUMN `seen`;
|
||||
|
||||
#
|
||||
# changes in DB version 22
|
||||
#
|
||||
|
||||
ALTER TABLE `videodata` MODIFY COLUMN `owner_id` INT NOT NULL DEFAULT '1';
|
||||
|
||||
#
|
||||
# changes in DB version 23
|
||||
#
|
||||
|
||||
ALTER TABLE `videodata` ADD COLUMN `rating` VARCHAR(15) DEFAULT NULL AFTER `plot`;
|
||||
|
||||
UPDATE lent SET dt=NOW() WHERE dt IS NULL;
|
||||
ALTER TABLE `lent` CHANGE dt dt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
|
||||
|
||||
#
|
||||
# changes in DB version 24
|
||||
#
|
||||
|
||||
ALTER TABLE `videodata` ADD FULLTEXT INDEX `plot_idx`(`plot`);
|
||||
|
||||
#
|
||||
# changes in DB version 25
|
||||
#
|
||||
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (14,'HDD');
|
||||
|
||||
#
|
||||
# changes in DB version 26
|
||||
#
|
||||
|
||||
UPDATE config SET value='elegant::modern' WHERE opt='template' AND value LIKE 'modern%';
|
||||
|
||||
#
|
||||
# changes in DB version 27
|
||||
#
|
||||
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (15,'HD DVD');
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (16,'Blu-ray');
|
||||
|
||||
#
|
||||
# changes in DB version 28
|
||||
#
|
||||
|
||||
ALTER TABLE `videodata` MODIFY COLUMN `year` INT(4) UNSIGNED NOT NULL DEFAULT '0';
|
||||
|
||||
#
|
||||
# changes in DB version 29
|
||||
#
|
||||
|
||||
CREATE TABLE cache (
|
||||
`tag` VARCHAR(32) NOT NULL,
|
||||
`value` VARCHAR(32) DEFAULT NULL,
|
||||
PRIMARY KEY (`tag`)
|
||||
);
|
||||
|
||||
#
|
||||
# changes in DB version 30
|
||||
#
|
||||
|
||||
SELECT 1;
|
||||
|
||||
#
|
||||
# changes in DB version 31
|
||||
#
|
||||
|
||||
ALTER TABLE `cache` MODIFY COLUMN `tag` VARCHAR(45) NOT NULL;
|
||||
|
||||
#
|
||||
# changes in DB version 32
|
||||
#
|
||||
|
||||
UPDATE mediatypes SET name='HD-DVD' WHERE name='HD DVD';
|
||||
|
||||
#
|
||||
# changes in DB version 33
|
||||
#
|
||||
|
||||
DELETE FROM permissions WHERE NOT EXISTS (SELECT 1 FROM users WHERE id=from_uid);
|
||||
|
||||
#
|
||||
# changes in DB version 34
|
||||
#
|
||||
|
||||
ALTER TABLE `videodata` MODIFY COLUMN `filesize` BIGINT UNSIGNED DEFAULT NULL;
|
||||
|
||||
#
|
||||
# changes in DB version 35
|
||||
#
|
||||
|
||||
INSERT INTO mediatypes (id, name) VALUES (17,'CD');
|
||||
|
||||
#
|
||||
# changes in DB version 36
|
||||
#
|
||||
|
||||
UPDATE mediatypes SET id=18 WHERE id=17 AND name='CD';
|
||||
INSERT IGNORE INTO mediatypes (id, name) VALUES (17,'AVCHD');
|
||||
|
||||
#
|
||||
# changes in DB version 40
|
||||
#
|
||||
|
||||
REPLACE INTO config (opt,value) VALUES ('template', 'nexgen::nexgen');
|
||||
REPLACE INTO config (opt,value) VALUES ('actorpics', '1');
|
||||
REPLACE INTO config (opt,value) VALUES ('imdbBrowser', '1');
|
||||
|
||||
#
|
||||
# changes in DB version 41
|
||||
#
|
||||
|
||||
ALTER TABLE videodata MODIFY actors MEDIUMTEXT;
|
||||
|
||||
#
|
||||
# IMPORTANT
|
||||
#
|
||||
# Always increase this number in install/install.sql, install/upgrade.sql and
|
||||
# core/constants.php when changing the database structure!
|
||||
#
|
||||
|
||||
REPLACE INTO config (opt,value) VALUES ('dbversion', 41);
|
||||
84
videodb/install/upgrade_v10.php
Normal file
84
videodb/install/upgrade_v10.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
/**
|
||||
* Database conversion script for DB v10
|
||||
*
|
||||
* Handles saving of the various config options.
|
||||
*
|
||||
* @package Setup
|
||||
* @author Andreas Goetz <cpuidle@gmx.net>
|
||||
* @version $Id: upgrade_v10.php,v 1.1 2007/01/04 16:14:16 andig2 Exp $
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* userseen table upgrade
|
||||
*/
|
||||
|
||||
$sql = 'SELECT video_id, user, users.id AS user_id
|
||||
FROM userseen
|
||||
LEFT JOIN users ON userseen.user = users.name';
|
||||
$set = runSQL($sql, $dbh, true);
|
||||
if ($set === false) return(false);
|
||||
|
||||
foreach ($set as $row)
|
||||
{
|
||||
// don't convert fishy data
|
||||
if (!empty($row['user_id']))
|
||||
{
|
||||
$sql = "UPDATE userseen SET user_id = ".$row['user_id']." ".
|
||||
"WHERE video_id = ".$row['video_id']." AND user = '".$row['user']."'";
|
||||
|
||||
if (runSQL($sql, $dbh) === false) return(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* userconfig table upgrade
|
||||
*/
|
||||
|
||||
$sql = 'SELECT user, opt, users.id AS user_id
|
||||
FROM userconfig
|
||||
LEFT JOIN users ON userconfig.user = users.name';
|
||||
$set = runSQL($sql, $dbh);
|
||||
if ($set === false) return(false);
|
||||
|
||||
foreach ($set as $row)
|
||||
{
|
||||
// don't convert fishy data
|
||||
if (!empty($row['user_id']))
|
||||
{
|
||||
$sql = "UPDATE userconfig SET user_id = ".$row['user_id']." ".
|
||||
"WHERE opt = '".$row['opt']."' AND user = '".$row['user']."'";
|
||||
|
||||
if (runSQL($sql, $dbh) === false) return(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* videodata table upgrade
|
||||
*/
|
||||
|
||||
$sql = 'SELECT videodata.id AS id, owner, users.id AS owner_id
|
||||
FROM videodata
|
||||
LEFT JOIN users ON videodata.owner = users.name';
|
||||
$set = runSQL($sql, $dbh);
|
||||
if ($set === false) return(false);
|
||||
|
||||
foreach ($set as $row)
|
||||
{
|
||||
// don't convert fishy data
|
||||
if (!empty($row['owner_id']))
|
||||
{
|
||||
$sql = "UPDATE videodata SET owner_id = ".$row['owner_id']." ".
|
||||
"WHERE id = ".$row['id'];
|
||||
|
||||
if (runSQL($sql, $dbh) === false) return(false);
|
||||
}
|
||||
}
|
||||
|
||||
// signal success
|
||||
return true;
|
||||
|
||||
?>
|
||||
35
videodb/install/upgrade_v20.php
Normal file
35
videodb/install/upgrade_v20.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* Database conversion script for DB v20
|
||||
*
|
||||
* @package Setup
|
||||
* @author Andreas Goetz <cpuidle@gmx.net>
|
||||
* @version $Id: upgrade_v20.php,v 1.1 2007/01/04 16:14:16 andig2 Exp $
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Userseen data migration
|
||||
*/
|
||||
|
||||
$sql = 'SELECT owner_id, seen
|
||||
FROM videodata
|
||||
WHERE seen > 0';
|
||||
$set = runSQL($sql, $dbh, true);
|
||||
if ($set === false) return(false);
|
||||
|
||||
foreach ($set as $row)
|
||||
{
|
||||
// don't convert fishy data
|
||||
if (!empty($row['user_id']))
|
||||
{
|
||||
$sql = "REPLACE INTO ".TBL_USERSEEN." SET user_id=".$row['owner_id'].", video_id=".$row['id'];
|
||||
|
||||
if (runSQL($sql, $dbh) === false) return(false);
|
||||
}
|
||||
}
|
||||
|
||||
// signal success
|
||||
return true;
|
||||
|
||||
?>
|
||||
47
videodb/install/upgrade_v26.php
Normal file
47
videodb/install/upgrade_v26.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
/**
|
||||
* Database conversion script for DB v26
|
||||
*
|
||||
* Rating custom field conversion
|
||||
*
|
||||
* @package Setup
|
||||
* @author Andreas Goetz <cpuidle@gmx.net>
|
||||
* @version $Id: upgrade_v26.php,v 1.2 2007/12/30 11:09:24 andig2 Exp $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Rating data migration
|
||||
*/
|
||||
function migrate_rating($field)
|
||||
{
|
||||
global $dbh;
|
||||
|
||||
$set = runSQL('UPDATE videodata SET rating='.$field.' WHERE '.$field.'>0', $dbh, true);
|
||||
return $set;
|
||||
}
|
||||
|
||||
$sql = "SELECT * FROM config WHERE opt LIKE 'custom%type'";
|
||||
$set = runSQL($sql, $dbh, true);
|
||||
if ($set === false) return(false);
|
||||
|
||||
foreach ($set as $row)
|
||||
{
|
||||
if ($row['value'] == 'rating')
|
||||
{
|
||||
if (preg_match('/(custom\d)/', $row['opt'], $m))
|
||||
{
|
||||
$field = $m[1];
|
||||
$set = migrate_rating($field);
|
||||
if ($set === false) return(false);
|
||||
|
||||
$sql = "UPDATE config SET value='' WHERE opt LIKE '".$field."%'";
|
||||
$set = runSQL($sql, $dbh, true);
|
||||
if ($set === false) return(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// signal success
|
||||
return true;
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user