1
0
Fork 0
mirror of https://github.com/Yetangitu/ampache synced 2025-10-03 17:59:21 +02:00
ampache/lib/class/update.class.php
Karl 'vollmerk' Vollmer efbeea70c7 new db update
2005-07-08 06:26:32 +00:00

953 lines
37 KiB
PHP

<?php
/*
Copyright (c) 2001 - 2005 Ampache.org
All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/*!
@header Update Class
@discussion this class handles updating from one version of
maintain to the next. Versions are a 6 digit number
220000
^
Major Revision
220000
^
Minor Revision
The last 4 digits are a build number...
If Minor can't go over 9 Major can go as high as we want
*/
class Update {
var $key;
var $value;
var $versions; // array containing version information
/*!
@function Update
@discussion Constructor, pulls out information about
the desired key
*/
function Update ( $key=0 ) {
if ($key) {
$info = $this->get_info();
$this->key = $key;
$this->value = $info->value;
$this->versions = $this->populate_version();
}
} // constructor
/*!
@function get_info
@discussion gets the information for the zone
*/
function get_info() {
global $conf;
$sql = "SELECT * FROM update_info WHERE key='$this->key'";
$db_results = mysql_query($sql, dbh());
return mysql_fetch_object($db_results);
} //get_info
/*!
@function get_version
@discussion this checks to see what version you are currently running
because we may not have the update_info table we have to check
for it's existance first.
*/
function get_version() {
/* Make sure that update_info exits */
$sql = "SHOW TABLES LIKE 'update_info'";
$db_results = mysql_query($sql, dbh());
// If no table
if (!mysql_num_rows($db_results)) {
$version = '310000';
} // if table isn't found
else {
// If we've found the update_info table, let's get the version from it
$sql = "SELECT * FROM update_info WHERE `key`='db_version'";
$db_results = mysql_query($sql, dbh());
$results = mysql_fetch_object($db_results);
$version = $results->value;
}
return $version;
} // get_version
/*!
@function format_version
@discussion make the version number pretty
*/
function format_version($data) {
$new_version = substr($data,0,strlen($data) - 5) . "." . substr($data,strlen($data)-5,1) . " Build:" .
substr($data,strlen($data)-4,strlen($data));
return $new_version;
} // format_version
/*!
@function need_update
@discussion checks to see if we need to update
maintain at all
*/
function need_update() {
$current_version = $this->get_version();
if (!is_array($this->versions)) {
$this->versions = $this->populate_version();
}
/*
Go through the versions we have and see if
we need to apply any updates
*/
foreach ($this->versions as $update) {
if ($update['version'] > $current_version) {
return true;
}
} // end foreach version
return false;
} // need_update
/*!
@function populate_version
@discussion just sets an array the current differences
that require an update
*/
function populate_version() {
/* Define the array */
$version = array();
/* Version 3.2 Build 0001 */
$update_string = "- Add update_info table to the database<br />" .
"- Add Now Playing Table<br />" .
"- Add album art columns to album table<br />" .
"- Compleatly Changed Preferences table<br />" .
"- Added Upload table<br />";
$version[] = array('version' => '320001', 'description' => $update_string);
$update_string = "- Add back in catalog_type for XML-RPC Mojo<br />" .
"- Add level to access list to allow for play/download/xml-rpc share permissions<br />" .
"- Changed access_list table to allow start-end (so we can set full ip ranges)<br />" .
"- Add default_play to preferences to allow quicktime/localplay/stream<br />" .
"- Switched Artist ID from 10 --> 11 to match other tables<br />";
$version[] = array('version' => '320002', 'description' => $update_string);
$update_string = "- Added a last_seen field user table to track users<br />" .
"- Made preferences table key/value based<br />";
$version[] = array('version' => '320003', 'description' => $update_string);
$update_string = "- Added play_type to preferences table<br />" .
"- Removed multicast,downsample,localplay from preferences table<br />" .
"- Dropped old config table which was no longer needed<br />";
$version[] = array('version' => '320004', 'description' => $update_string);
$update_string = "- Added type to preferences to allow for site/user preferences<br />";
$version[] = array('version' => '330000', 'description' => $update_string);
$update_string = "- Added Year to album table<br />" .
"- Increased length of password field in User table<br />";
$version[] = array('version' => '330001', 'description' => $update_string);
$update_string = "- Changed user.access to varchar from enum for more flexibility<br />" .
"- Added catalog.private for future catalog access control<br />" .
"- Added user_catalog table for future catalog access control<br />";
$version[] = array('version' => '330002', 'description' => $update_string);
$update_string = "- Added user_preferences table to once and for all fix preferences.<br />" .
"- Moved Contents of preferences into new table, and modifies old preferences table.<br />";
$version[] = array('version' => '330003', 'description' => $update_string);
$update_string = "- Changed song comment from varchar255 in order to handle comments longer than 255 chr.<br />" .
"- Added Language and Playlist Type as a per user preference.<br />" .
"- Added Level to Catalog_User table for future use.<br />" .
"- Added gather_types to Catalog table for future use.<br />";
$version[] = array('version' => '330004', 'description' => $update_string);
$update_string = "- Added Theme config option.<br />";
$version[] = array('version' => '331000', 'description' => $update_string);
$update_string = "- Added Elipse Threshold Preferences.<br />";
$version[] = array('version' => '331001', 'description' => $update_string);
$update_string = "- Added Show bottom menu option.<br />";
$version[] = array('version' => '331002', 'description' => $update_string);
$update_string = "- Cleaned up user management.<br />";
$version[] = array('version' => '331003', 'description' => $update_string);
$update_string = "- Added Genre and Catalog to the stats tracking enum.<br />" .
"- Added CondPL preference for the new MPD playlist.<br />";
$version[] = array('version' => '332001', 'description' => $update_string);
return $version;
} // populate_version
/*!
@function display_update
@discussion This displays a list of the needed
updates to the database. This will actually
echo out the list...
*/
function display_update() {
$current_version = $this->get_version();
if (!is_array($this->versions)) {
$this->versions = $this->populate_version();
}
echo "<ul>\n";
foreach ($this->versions as $version) {
if ($version['version'] > $current_version) {
$updated = true;
echo "<b>Version: " . $this->format_version($version['version']) . "</b><br />";
echo $version['description'] . "<br />\n";
} // if newer
} // foreach versions
echo "</ul>\n";
if (!$updated) { echo "<p align=\"center\">No Updates Needed [<a href=\"" . conf('web_path') . "\">Return]</a></p>"; }
} // display_update
/*!
@function run_update
@discussion This function actually updates the db.
it goes through versions and finds the ones
that need to be run. Checking to make sure
the function exists first.
*/
function run_update() {
/* Nuke All Active session before we start the mojo */
$sql = "DELETE * FROM session";
$db_results = mysql_query($sql, dbh());
$methods = array();
$current_version = $this->get_version();
$methods = get_class_methods('Update');
if (!is_array($this->versions)) {
$this->versions = $this->populate_version();
}
foreach ($this->versions as $version) {
// If it's newer than our current version
// let's see if a function exists and run the
// bugger
if ($version['version'] > $current_version) {
$update_function = "update_" . $version['version'];
if (in_array($update_function,$methods)) {
$this->{$update_function}();
}
}
} // end foreach version
} // run_update
/*!
@function set_version
@discussion sets a new version takes
a key and value
*/
function set_version($key,$value) {
$sql = "UPDATE update_info SET value='$value' WHERE `key`='$key'";
$db_results = mysql_query($sql, dbh());
} //set_version
/*!
@function update_320001
@discussion Migration function for 3.2 Build 0001
*/
function update_320001() {
// Add the update_info table to the database
$sql = "CREATE TABLE `update_info` (`key` VARCHAR( 128 ) NOT NULL ,`value` VARCHAR( 255 ) NOT NULL ,INDEX ( `key` ) )";
$db_results = mysql_query($sql, dbh());
// Insert the first version info
$sql = "INSERT INTO update_info (`key`,`value`) VALUES ('db_version','320001')";
$db_results = mysql_query($sql, dbh());
// Add now_playing table to database
$sql = "CREATE TABLE now_playing (" .
"id int(11) unsigned NOT NULL auto_increment, " .
"song_id int(11) unsigned NOT NULL default '0', " .
"user_id int(11) unsigned default NULL, " .
"start_time int(11) unsigned NOT NULL default '0', " .
"PRIMARY KEY (id) " .
") TYPE=MyISAM";
$db_results = mysql_query($sql, dbh());
// Add the upload table to the database
$sql = "CREATE TABLE upload ( id int(11) unsigned NOT NULL auto_increment, `user` int(11) unsigned NOT NULL," .
"`file` varchar(255) NOT NULL , `comment` varchar(255) NOT NULL , action enum('add','quarantine','delete') NOT NULL default 'quarantine', " .
"addition_time int(11) unsigned default '0', PRIMARY KEY (id), KEY action (`action`), KEY user (`user`) )";
$db_results = mysql_query($sql, dbh());
/*
Ok we need to compleatly tweak the preferences table
first things first, nuke the damn thing so we can
setup our new mojo
*/
$sql = "DROP TABLE `preferences`";
$db_results = mysql_query($sql, dbh());
$sql = "CREATE TABLE `preferences` (`id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT , `user` INT( 11 ) UNSIGNED NOT NULL ," .
"`download` ENUM( 'true', 'false' ) DEFAULT 'false' NOT NULL , `upload` ENUM( 'disabled', 'html', 'gui' ) DEFAULT 'disabled' NOT NULL ," .
"`downsample` ENUM( 'true', 'false' ) DEFAULT 'false' NOT NULL , `local_play` ENUM( 'true', 'false' ) DEFAULT 'false' NOT NULL ," .
"`multicast` ENUM( 'true', 'false' ) DEFAULT 'false' NOT NULL , `quarantine` ENUM( 'true', 'false' ) DEFAULT 'true' NOT NULL ," .
"`popular_threshold` INT( 11 ) UNSIGNED DEFAULT '10' NOT NULL , `font` VARCHAR( 255 ) DEFAULT 'Verdana, Helvetica, sans-serif' NOT NULL ," .
"`bg_color1` VARCHAR( 32 ) DEFAULT '#ffffff' NOT NULL , `bg_color2` VARCHAR( 32 ) DEFAULT '#000000' NOT NULL , `base_color1` VARCHAR( 32 ) DEFAULT '#bbbbbb' NOT NULL , " .
"`base_color2` VARCHAR( 32 ) DEFAULT '#dddddd' NOT NULL , `font_color1` VARCHAR( 32 ) DEFAULT '#222222' NOT NULL , " .
"`font_color2` VARCHAR( 32 ) DEFAULT '#000000' NOT NULL , `font_color3` VARCHAR( 32 ) DEFAULT '#ffffff' NOT NULL , " .
"`row_color1` VARCHAR( 32 ) DEFAULT '#cccccc' NOT NULL , `row_color2` VARCHAR( 32 ) DEFAULT '#bbbbbb' NOT NULL , " .
"`row_color3` VARCHAR( 32 ) DEFAULT '#dddddd' NOT NULL , `error_color` VARCHAR( 32 ) DEFAULT '#990033' NOT NULL , " .
"`font_size` INT( 11 ) UNSIGNED DEFAULT '10' NOT NULL , `upload_dir` VARCHAR( 255 ) NOT NULL , " .
"`sample_rate` INT( 11 ) UNSIGNED DEFAULT '32' NOT NULL , PRIMARY KEY ( `id` ), KEY user (`user`) )";
$db_results = mysql_query($sql, dbh());
$sql = "INSERT INTO preferences (`user`,`font_size`) VALUES ('0','12')";
$db_results = mysql_query($sql, dbh());
// Now we need to give everyone some preferences
$sql = "SELECT * FROM user";
$db_results = mysql_query($sql, dbh());
while ($r = mysql_fetch_object($db_results)) {
$users[] = $r;
}
foreach ($users as $user) {
$sql = "INSERT INTO preferences (`user`) VALUES ('$user->id')";
$db_results = mysql_query($sql, dbh());
}
// Add album art columns to album table
$sql = "ALTER TABLE album ADD art MEDIUMBLOB, ADD art_mime VARCHAR(128)";
$db_result = mysql_query($sql, dbh());
} // update_320001
/*!
@function update_320002
@discussion update to alpha 2
*/
function update_320002() {
/* Add catalog_type back in for XML-RPC */
$sql = "ALTER TABLE `catalog` ADD `catalog_type` ENUM( 'local', 'remote' ) DEFAULT 'local' NOT NULL AFTER `path`";
$db_results = mysql_query($sql, dbh());
/* Add default_play to pick between stream/localplay/quicktime */
$sql = "ALTER TABLE `preferences` ADD `default_play` VARCHAR( 128 ) DEFAULT 'stream' NOT NULL AFTER `popular_threshold`";
$db_results = mysql_query($sql, dbh());
/* Should be INT(11) Why not eah? */
$sql = "ALTER TABLE `artist` CHANGE `id` `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT";
$db_results = mysql_query($sql, dbh());
/* Add level to access_list so we can limit playback/download/xml-rpc share */
$sql = "ALTER TABLE `access_list` ADD `level` SMALLINT( 3 ) UNSIGNED DEFAULT '5' NOT NULL";
$db_results = mysql_query($sql, dbh());
/* Shouldn't be zero fill... not needed */
$sql = "ALTER TABLE `user` CHANGE `offset_limit` `offset_limit` INT( 5 ) UNSIGNED DEFAULT '00050' NOT NULL";
$db_results = mysql_query($sql, dbh());
/* Let's knock it up a notch 11.. BAM */
$sql = "ALTER TABLE `user` CHANGE `id` `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT";
$db_results = mysql_query($sql, dbh());
/* Change IP --> Start */
$sql = "ALTER TABLE `access_list` CHANGE `ip` `start` INT( 11 ) UNSIGNED NOT NULL";
$db_results = mysql_query($sql, dbh());
/* Add End */
$sql = "ALTER TABLE `access_list` ADD `end` INT( 11 ) UNSIGNED NOT NULL AFTER `start`";
$db_results = mysql_query($sql, dbh());
/* Update Version */
$this->set_version('db_version', '320002');
} // update_320002
/*!
@function update_320003
@discussion updates to the alpha 3 of 3.2
*/
function update_320003() {
/* Add last_seen to user table */
$sql = "ALTER TABLE `user` ADD `last_seen` INT( 11 ) UNSIGNED NOT NULL";
$db_results = mysql_query($sql, dbh());
/*
Load the preferences table into an array
so we can migrate it to the new format
*/
$sql = "SELECT * FROM preferences";
$db_results = mysql_query($sql, dbh());
$results = array();
while ($r = mysql_fetch_object($db_results)) {
$results[$r->user]['download'] = $r->download;
$results[$r->user]['upload'] = $r->upload;
$results[$r->user]['downsample'] = $r->downsample;
$results[$r->user]['local_play'] = $r->local_play;
$results[$r->user]['multicast'] = $r->multicast;
$results[$r->user]['quarantine'] = $r->quarantine;
$results[$r->user]['popular_threshold'] = $r->popular_threshold;
$results[$r->user]['default_play'] = $r->default_play;
$results[$r->user]['font'] = $r->font;
$results[$r->user]['bg_color1'] = $r->bg_color1;
$results[$r->user]['bg_color2'] = $r->bg_color2;
$results[$r->user]['base_color1'] = $r->base_color1;
$results[$r->user]['base_color2'] = $r->base_color2;
$results[$r->user]['font_color1'] = $r->font_color1;
$results[$r->user]['font_color2'] = $r->font_color2;
$results[$r->user]['font_color3'] = $r->font_color3;
$results[$r->user]['row_color1'] = $r->row_color1;
$results[$r->user]['row_color2'] = $r->row_color2;
$results[$r->user]['row_color3'] = $r->row_color3;
$results[$r->user]['error_color'] = $r->error_color;
$results[$r->user]['font_size'] = $r->font_size;
$results[$r->user]['upload_dir'] = $r->upload_dir;
$results[$r->user]['sample_rate'] = $r->sample_rate;
} // while preferences
/* Drop the preferences table so we can start over */
$sql = "DROP TABLE `preferences`";
$db_results = mysql_query($sql, dbh()) or die('Query failed: ' . mysql_error());
/* Create the new preferences table */
$sql = "CREATE TABLE `preferences` (`key` VARCHAR( 255 ) NOT NULL , `value` VARCHAR( 255 ) NOT NULL , `user` INT( 11 ) UNSIGNED NOT NULL)";
$db_results = mysql_query($sql, dbh());
$sql = "ALTER TABLE `preferences` ADD INDEX ( `key` )";
$db_results = mysql_query($sql, dbh());
$sql = "ALTER TABLE `preferences` ADD INDEX ( `user` )";
$db_results = mysql_query($sql, dbh());
$user = new User();
/* Populate the mofo! */
foreach ($results as $key => $data) {
$user->add_preference('download',$results[$key]['download'],$key);
$user->add_preference('upload',$results[$key]['upload'], $key);
$user->add_preference('downsample',$results[$key]['downsample'], $key);
$user->add_preference('local_play', $results[$key]['local_play'], $key);
$user->add_preference('multicast', $results[$key]['multicast'], $key);
$user->add_preference('quarantine', $results[$key]['quarantine'], $key);
$user->add_preference('popular_threshold',$results[$key]['popular_threshold'], $key);
$user->add_preference('font', $results[$key]['font'], $key);
$user->add_preference('bg_color1',$results[$key]['bg_color1'], $key);
$user->add_preference('bg_color2',$results[$key]['bg_color2'], $key);
$user->add_preference('base_color1',$results[$key]['base_color1'], $key);
$user->add_preference('base_color2',$results[$key]['base_color2'], $key);
$user->add_preference('font_color1',$results[$key]['font_color1'], $key);
$user->add_preference('font_color2',$results[$key]['font_color2'], $key);
$user->add_preference('font_color3',$results[$key]['font_color3'], $key);
$user->add_preference('row_color1',$results[$key]['row_color1'], $key);
$user->add_preference('row_color2',$results[$key]['row_color2'], $key);
$user->add_preference('row_color3',$results[$key]['row_color3'], $key);
$user->add_preference('error_color', $results[$key]['error_color'], $key);
$user->add_preference('font_size', $results[$key]['font_size'], $key);
$user->add_preference('upload_dir', $results[$key]['upload_dir'], $key);
$user->add_preference('sample_rate', $results[$key]['sample_rate'], $key);
} // foreach preferences
/* Update Version */
$this->set_version('db_version', '320003');
} // update_320003
/*!
@function update_320004
@discussion updates to the 320004
version of the db
*/
function update_320004() {
$results = array();
$sql = "SELECT * FROM preferences WHERE `key`='local_play' AND `value`='true'";
$db_results = mysql_query($sql, dbh());
while ($r = mysql_fetch_object($db_results)) {
$results[$r->user] = 'local_play';
}
$sql = "SELECT * FROM preferences WHERE `key`='downsample' AND `value`='true'";
$db_results = mysql_query($sql, dbh());
while ($r = mysql_fetch_object($db_results)) {
$results[$r->user] = 'downsample';
}
$sql = "SELECT * FROM preferences WHERE `key`='multicast' AND `value`='true'";
$db_results = mysql_query($sql, dbh());
while ($r = mysql_fetch_object($db_results)) {
$results[$r->user] = 'multicast';
}
$sql = "SELECT DISTINCT(user) FROM preferences";
$db_results = mysql_query($sql, dbh());
while ($r = mysql_fetch_object($db_results)) {
if (!isset($results[$r->user])) {
$results[$r->user] = 'normal';
}
}
foreach ($results as $key => $value) {
$sql = "INSERT INTO preferences (`key`,`value`,`user`) VALUES ('play_type','$value','$key')";
$db_results = mysql_query($sql, dbh());
}
$sql = "DELETE FROM preferences WHERE `key`='downsample'";
$db_results = mysql_query($sql, dbh());
$sql = "DELETE FROM preferences WHERE `key`='local_play'";
$db_results = mysql_query($sql, dbh());
$sql = "DELETE FROM preferences WHERE `key`='multicast'";
$db_results = mysql_query($sql, dbh());
$sql = "DROP TABLE `config`";
$db_results = mysql_query($sql, dbh());
/* Update Version */
$this->set_version('db_version', '320004');
} // update_320004
/*!
@function update_330000
@discussion updates to 3.3 Build 0
*/
function update_330000() {
/* Add Type to preferences */
$sql = "ALTER TABLE `preferences` ADD `type` VARCHAR( 128 ) NOT NULL";
$db_results = mysql_query($sql, dbh());
/* Set Type on current preferences */
$sql = "UPDATE `preferences` SET type='user'";
$db_results = mysql_query($sql, dbh());
/* Add New Preferences */
$new_prefs[] = array('key' => 'local_length', 'value' => libglue_param('local_length'));
$new_prefs[] = array('key' => 'site_title', 'value' => conf('site_title'));
$new_prefs[] = array('key' => 'access_control', 'value' => conf('access_control'));
$new_prefs[] = array('key' => 'xml_rpc', 'value' => conf('xml_rpc'));
$new_prefs[] = array('key' => 'lock_songs', 'value' => conf('lock_songs'));
$new_prefs[] = array('key' => 'force_http_play', 'value' => conf('force_http_play'));
$new_prefs[] = array('key' => 'http_port', 'value' => conf('http_port'));
$new_prefs[] = array('key' => 'do_mp3_md5', 'value' => conf('do_mp3_md5'));
$new_prefs[] = array('key' => 'catalog_echo_count', 'value' => conf('catalog_echo_count'));
$new_prefs[] = array('key' => 'no_symlinks', 'value' => conf('no_symlinks'));
$new_prefs[] = array('key' => 'album_cache_limit', 'value' => conf('album_cache_limit'));
$new_prefs[] = array('key' => 'artist_cache_limit', 'value' => conf('artist_cache_limit'));
$new_prefs[] = array('key' => 'memory_limit', 'value' => conf('memory_limit'));
$new_prefs[] = array('key' => 'refresh_limit', 'value' => conf('refresh_interval'));
foreach ($new_prefs as $pref) {
$sql = "INSERT INTO `preferences` (`key`,`value`,`type`) VALUES ('".$pref['key']."','".$pref['value']."','system')";
$db_results = mysql_query($sql, dbh());
}
/* Update Version */
$this->set_version('db_version','330000');
} // update_330000
/*!
@function update_330001
@discussion adds year to album and tweaks
the password field in session
*/
function update_330001() {
/* Add Year to Album Table */
$sql = "ALTER TABLE `album` ADD `year` INT( 4 ) UNSIGNED NOT NULL AFTER `prefix`";
$db_results = mysql_query($sql, dbh());
/* Alter Password Field */
$sql = "ALTER TABLE `user` CHANGE `password` `password` VARCHAR( 64 ) NOT NULL";
$db_results = mysql_query($sql, dbh());
/* Update Version */
$this->set_version('db_version', '330001');
} // update_330001
/*!
@function update_330002
@discussion changes user.access from enum to a
varchr field
*/
function update_330002() {
/* Alter user table */
$sql = "ALTER TABLE `user` CHANGE `access` `access` VARCHAR( 64 ) NOT NULL";
$db_results = mysql_query($sql, dbh());
/* Add private option to catalog */
$sql = "ALTER TABLE `catalog` ADD `private` INT( 1 ) UNSIGNED DEFAULT '0' NOT NULL AFTER `enabled`";
$db_results = mysql_query($sql, dbh());
/* Add new user_catalog table */
$sql = "CREATE TABLE `user_catalog` ( `user` INT( 11 ) UNSIGNED NOT NULL , `catalog` INT( 11 ) UNSIGNED NOT NULL )";
$db_results = mysql_query($sql, dbh());
/* Update Version */
$this->set_version('db_version', '330002');
} // update_330002
/*!
@function update_330003
@discussion adds user_preference and modifies the
existing preferences table
*/
function update_330003() {
/* Add new user_preference table */
$sql = "CREATE TABLE `user_preference` ( `user` INT( 11 ) UNSIGNED NOT NULL , `preference` INT( 11 ) UNSIGNED NOT NULL, `value` VARCHAR( 255 ) NOT NULL )";
$db_results = mysql_query($sql, dbh());
/* Add indexes */
$sql = "ALTER TABLE `user_preference` ADD INDEX ( `user` )";
$db_results = mysql_query($sql, dbh());
$sql = "ALTER TABLE `user_preference` ADD INDEX ( `preference` )";
$db_results = mysql_query($sql, dbh());
/* Pull and store all preference information */
$sql = "SELECT * FROM preferences";
$db_results = mysql_query($sql, dbh());
$results = array();
while ($r = mysql_fetch_object($db_results)) {
$results[] = $r;
}
/* Re-combobulate preferences table */
/* Drop the preferences table so we can start over */
$sql = "DROP TABLE `preferences`";
$db_results = mysql_query($sql, dbh()) or die('Query failed: ' . mysql_error());
/* Insert new preference table */
$sql = "CREATE TABLE `preferences` ( `id` INT ( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR ( 128 ) NOT NULL, `value` VARCHAR ( 255 ) NOT NULL," .
" `description` VARCHAR ( 255 ) NOT NULL, `level` INT ( 11 ) UNSIGNED NOT NULL DEFAULT '100', `type` VARCHAR ( 128 ) NOT NULL, `locked` SMALLINT ( 1 ) NOT NULL Default '1'" .
", PRIMARY KEY ( `id` ) )";
$db_results = mysql_query($sql, dbh()) or die("Query failed: " . mysql_error());
/* Create Array of Preferences */
$new_prefs = array();
$new_prefs[] = array('name' => 'download', 'value' => '0', 'description' => 'Allow Downloads', 'level' => '100', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'upload', 'value' => '0', 'description' => 'Allow Uploads', 'level' => '100', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'quarantine', 'value' => '1', 'description' => 'Quarantine All Uploads', 'level' => '100', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'popular_threshold', 'value' => '10', 'description' => 'Popular Threshold', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'font', 'value' => 'Verdana, Helvetica, sans-serif', 'description' => 'Interface Font', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'bg_color1', 'value' => '#ffffff', 'description' => 'Background Color 1', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'bg_color2', 'value' => '#000000', 'description' => 'Background Color 2', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'base_color1', 'value' => '#bbbbbb', 'description' => 'Base Color 1', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'base_color2', 'value' => '#dddddd', 'description' => 'Base Color 2', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'font_color1', 'value' => '#222222', 'description' => 'Font Color 1', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'font_color2', 'value' => '#000000', 'description' => 'Font Color 2', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'font_color3', 'value' => '#ffffff', 'description' => 'Font Color 3', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'row_color1', 'value' => '#cccccc', 'description' => 'Row Color 1', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'row_color2', 'value' => '#bbbbbb', 'description' => 'Row Color 2', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'row_color3', 'value' => '#dddddd', 'description' => 'Row Color 3', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'error_color', 'value' => '#990033', 'description' => 'Error Color', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'font_size', 'value' => '10', 'description' => 'Font Size', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'upload_dir', 'value' => '/tmp', 'description' => 'Upload Directory', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'sample_rate', 'value' => '32', 'description' => 'Downsample Bitrate', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'refresh_limit', 'value' => '0', 'description' => 'Refresh Rate for Homepage', 'level' => '100', 'locked' => '0', 'type' => 'system');
$new_prefs[] = array('name' => 'local_length', 'value' => '900', 'description' => 'Session Expire in Seconds', 'level' => '100', 'locked' => '0', 'type' => 'system');
$new_prefs[] = array('name' => 'site_title', 'value' => 'For The Love of Music', 'description' => 'Website Title', 'level' => '100', 'locked' => '0', 'type' => 'system');
$new_prefs[] = array('name' => 'lock_songs', 'value' => '0', 'description' => 'Lock Songs', 'level' => '100', 'locked' => '1', 'type' => 'system');
$new_prefs[] = array('name' => 'force_http_play', 'value' => '1', 'description' => 'Forces Http play regardless of port', 'level' => '100', 'locked' => '1', 'type' => 'system');
$new_prefs[] = array('name' => 'http_port', 'value' => '80', 'description' => 'Non-Standard Http Port', 'level' => '100', 'locked' => '1', 'type' => 'system');
$new_prefs[] = array('name' => 'catalog_echo_count', 'value' => '100', 'description' => 'Catalog Echo Interval', 'level' => '100', 'locked' => '0', 'type' => 'system');
$new_prefs[] = array('name' => 'no_symlinks', 'value' => '0', 'description' => 'Don\'t Follow Symlinks', 'level' => '100', 'locked' => '0', 'type' => 'system');
$new_prefs[] = array('name' => 'album_cache_limit', 'value' => '25', 'description' => 'Album Cache Limit', 'level' => '100', 'locked' => '0', 'type' => 'system');
$new_prefs[] = array('name' => 'artist_cache_limit', 'value' => '50', 'description' => 'Artist Cache Limit', 'level' => '100', 'locked' => '0', 'type' => 'system');
$new_prefs[] = array('name' => 'play_type', 'value' => 'stream', 'description' => 'Type of Playback', 'level' => '25', 'locked' => '0', 'type' => 'user');
$new_prefs[] = array('name' => 'direct_link', 'value' => '1', 'description' => 'Allow Direct Links', 'level' => '100', 'locked' => '0', 'type' => 'user');
foreach ($new_prefs as $prefs) {
$sql = "INSERT INTO preferences (`name`,`value`,`description`,`level`,`locked`,`type`) VALUES ('" . $prefs['name'] . "','" . $prefs['value'] ."','". $prefs['description'] ."','" . $prefs['level'] ."','". $prefs['locked'] ."','" . $prefs['type'] . "')";
$db_results = mysql_query($sql, dbh());
} // foreach prefs
/* Re-insert Data into preferences table */
$user = new User();
$users = array();
foreach ($results as $old_pref) {
// This makes sure that true/false yes no get turned into 0/1
$temp_array = fix_preferences(array('old' => $old_pref->value));
$old_pref->value = $temp_array['old'];
$user->add_preference($old_pref->key,$old_pref->value,$old_pref->user);
$users[$old_pref->user] = 1;
} // end foreach old preferences
/* Fix missing preferences */
foreach ($users as $userid => $data) {
$user->fix_preferences($userid);
} // end foreach user
/* Update Version */
$this->set_version('db_version', '330003');
} // update_330003
/*!
@function update_330004
@discussion changes comment from varchar to text
and also adds a few preferences options and
adds the per db art functions
*/
function update_330004() {
/* Change comment field in song */
$sql = "ALTER TABLE `song` CHANGE `comment` `comment` TEXT NOT NULL";
$db_results = mysql_query($sql, dbh());
/* Add Extra Preferences */
$sql = "INSERT INTO `preferences` ( `id` , `name` , `value` , `description` , `level` , `type` , `locked` ) VALUES ('', 'lang', 'en_US', 'Language', '100', 'user', '0')";
$db_results = mysql_query($sql, dbh());
$sql = "INSERT INTO `preferences` ( `id` , `name` , `value` , `description` , `level` , `type` , `locked` ) VALUES ('', 'playlist_type','m3u','Playlist Type','100','user','0')";
$db_results = mysql_query($sql, dbh());
/* Add Gathertype to Catalog for future use */
$sql = "ALTER TABLE `catalog` ADD `gather_types` VARCHAR( 255 ) NOT NULL AFTER `sort_pattern`";
$db_results = mysql_query($sql, dbh());
/* Add level to user_catalog for future use */
$sql = "ALTER TABLE `user_catalog` ADD `level` SMALLINT( 3 ) DEFAULT '25' NOT NULL AFTER `catalog`";
$db_results = mysql_query($sql, dbh());
/* Fix existing preferences */
$sql = "SELECT id FROM user";
$db_results = mysql_query($sql, dbh());
$user = new User(0);
while ($results = mysql_fetch_array($db_results)) {
$user->fix_preferences($results[0]);
}
/* Update Version */
$this->set_version('db_version', '330004');
} // update_330004
/*!
@function update_331000
@discussion this updates is for 3.3.1 it adds
the theme preference.
*/
function update_331000() {
/* Add new preference */
$sql = "INSERT INTO `preferences` (`id`,`name`,`value`,`description`,`level`,`type`,`locked`) VALUES ('','theme_name','classic','Theme','0','user','0')";
$db_results = mysql_query($sql, dbh());
/* Fix existing preferecnes */
$sql = "SELECT DISTINCT(user) FROM user_preference";
$db_results = mysql_query($sql, dbh());
$user = new User(0);
while ($results = mysql_fetch_array($db_results)) {
$user->fix_preferences($results[0]);
}
/* Update Version */
$this->set_version('db_version','331000');
} // update_331000
/*!
@function update_331001
@discussion this adds a few more user preferences
*/
function update_331001() {
/* Add new preference */
$sql = "INSERT INTO `preferences` (`id`,`name`,`value`,`description`,`level`,`type`,`locked`) VALUES ('','ellipse_threshold_album','27','Album Ellipse Threshold','0','user','0')";
$db_results = mysql_query($sql, dbh());
$sql = "INSERT INTO `preferences` (`id`,`name`,`value`,`description`,`level`,`type`,`locked`) VALUES ('','ellipse_threshold_artist','27','Artist Ellipse Threshold','0','user','0')";
$db_results = mysql_query($sql, dbh());
$sql = "INSERT INTO `preferences` (`id`,`name`,`value`,`description`,`level`,`type`,`locked`) VALUES ('','ellipse_threshold_title','27','Title Ellipse Threshold','0','user','0')";
$db_results = mysql_query($sql, dbh());
/* Fix existing preferecnes */
$sql = "SELECT DISTINCT(user) FROM user_preference";
$db_results = mysql_query($sql, dbh());
$user = new User(0);
while ($results = mysql_fetch_array($db_results)) {
$user->fix_preferences($results[0]);
}
/* Update Version */
$this->set_version('db_version','331001');
} // update_331001
function update_331002() {
/* Add new preference */
$sql = "INSERT INTO `preferences` (`id`,`name`,`value`,`description`,`level`,`type`,`locked`) VALUES ('','display_menu','1','Show Bottom Menu','0','user','0')";
$db_results = mysql_query($sql, dbh());
/* Fix existing preferecnes */
$sql = "SELECT DISTINCT(user) FROM user_preference";
$db_results = mysql_query($sql, dbh());
$user = new User(0);
while ($results = mysql_fetch_array($db_results)) {
$user->fix_preferences($results[0]);
}
/* Update Version */
$this->set_version('db_version','331002');
} // update_331002
function update_331003() {
/* Add `disabled` column to user table */
$sql = "ALTER TABLE `user` ADD `disabled` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `access`";
$db_results = mysql_query($sql, dbh());
/* Set `disabled` to '1' to all users that have an access level of 'disabled',
* then change their access level to 'user' because an access level of 'disabled'
* is now going to cause problems.
*/
$sql = "UPDATE `user` SET `disabled`='1',`access`='user' WHERE `access`='disabled'";
$db_results = mysql_query($sql, dbh());
$this->set_version('db_version','331003');
} //update 331003
function update_332001() {
$sql = "ALTER TABLE `object_count` CHANGE `object_type` `object_type` ENUM( 'album', 'artist', 'song', 'playlist', 'genre', 'catalog' ) NOT NULL DEFAULT 'song'";
$sql = "ALTER TABLE `session` CHANGE `type` `type` ENUM( 'sso', 'mysql', 'ldap', 'http' ) NOT NULL DEFAULT 'mysql'";
/* Add new preference */
$sql = "INSERT INTO `preferences` (`id`,`name`,`value`,`description`,`level`,`type`,`locked`) " .
"VALUES ('','condPL','1','Condense Localplay Playlist','0','user','0')";
$db_results = mysql_query($sql, dbh());
/* Fix existing preferecnes */
$sql = "SELECT DISTINCT(user) FROM user_preference";
$db_results = mysql_query($sql, dbh());
$user = new User(0);
while ($results = mysql_fetch_array($db_results)) {
$user->fix_preferences($results[0]);
}
$this->set_version('db_version','332001');
} // update_332001
} // end update class
?>