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:
2026-05-11 09:49:52 +02:00
commit f55c91276e
1230 changed files with 252321 additions and 0 deletions

233
videodb/install/install.sql Normal file
View 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);

View 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
View 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);

View 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;
?>

View 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;
?>

View 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;
?>