mirror of
https://github.com/maxpozdeev/mytinytodo.git
synced 2026-03-11 08:55:27 +00:00
dropped the ability to upgrade database from old versions 1.3.0 and 1.3.1
This commit is contained in:
parent
34f837d8d2
commit
8e33015f68
1 changed files with 1 additions and 297 deletions
298
src/setup.php
298
src/setup.php
|
|
@ -256,7 +256,7 @@ elseif($ver == $lastVer)
|
|||
}
|
||||
else
|
||||
{
|
||||
if(!in_array($ver, array('1.3.0','1.3.1','1.4'))) {
|
||||
if(!in_array($ver, array('1.4'))) {
|
||||
exitMessage("Can not update. Unsupported database version ($ver).");
|
||||
}
|
||||
if(!isset($_POST['update'])) {
|
||||
|
|
@ -271,17 +271,6 @@ else
|
|||
{
|
||||
update_14_17($db, $dbtype);
|
||||
}
|
||||
elseif ($ver == '1.3.1')
|
||||
{
|
||||
update_131_14($db, $dbtype);
|
||||
update_14_17($db, $dbtype);
|
||||
}
|
||||
elseif ($ver == '1.3.0')
|
||||
{
|
||||
update_130_131($db, $dbtype);
|
||||
update_131_14($db, $dbtype);
|
||||
update_14_17($db, $dbtype);
|
||||
}
|
||||
}
|
||||
echo "Done<br><br> <b>Attention!</b> Delete this file for security reasons.";
|
||||
printFooter();
|
||||
|
|
@ -403,291 +392,6 @@ function myExceptionHandler($e)
|
|||
}
|
||||
|
||||
|
||||
### 1.3.0 to 1.3.1 ##########
|
||||
function update_130_131(Database_Abstract $db, $dbtype)
|
||||
{
|
||||
$tz = null;
|
||||
if(isset($_POST['tz'])) {
|
||||
$tz = (int)$_POST['tz'];
|
||||
if($tz<-720 || $tz>720 || $tz%30!=0) $tz = null;
|
||||
else $tz = $tz*60;
|
||||
}
|
||||
if(is_null($tz)) $tz = (int)date('Z');
|
||||
|
||||
# if($dbtype=='sqlite') {
|
||||
# $temp_store_pragma = $db->sq("PRAGMA temp_store");
|
||||
# $db->ex("PRAGMA temp_store = MEMORY");
|
||||
# }
|
||||
|
||||
$db->ex("BEGIN");
|
||||
if($dbtype=='mysql')
|
||||
{
|
||||
$db->ex("ALTER TABLE lists ADD `ow` INT NOT NULL default 0");
|
||||
$db->ex("ALTER TABLE lists ADD `d_created` INT UNSIGNED NOT NULL default 0");
|
||||
$db->ex("ALTER TABLE lists ADD `sorting` TINYINT UNSIGNED NOT NULL default 0");
|
||||
$db->ex("ALTER TABLE lists ADD `published` TINYINT UNSIGNED NOT NULL default 0");
|
||||
$db->ex("ALTER TABLE lists ADD `taskview` INT UNSIGNED NOT NULL default 0");
|
||||
|
||||
$db->ex("ALTER TABLE todolist ADD `d_created` INT UNSIGNED NOT NULL default 0");
|
||||
$db->ex("ALTER TABLE todolist ADD `d_completed` INT UNSIGNED NOT NULL default 0");
|
||||
|
||||
# convert task date...
|
||||
$db_session_timezone = $db->sq("SELECT @@session.time_zone");;
|
||||
$db->ex("SET time_zone='+0:00'");
|
||||
$tz = -1*$tz;
|
||||
$db->ex("UPDATE todolist SET d_created = UNIX_TIMESTAMP(d) + TIME_TO_SEC(TIMEDIFF(NOW(),UTC_TIMESTAMP())) ".($tz<0?'-':'+').abs($tz));
|
||||
$db->ex("SET time_zone=?", array($db_session_timezone));
|
||||
|
||||
$db->ex("ALTER TABLE todolist DROP `d`");
|
||||
}
|
||||
else
|
||||
{
|
||||
$db->ex("ALTER TABLE lists ADD ow INTEGER NOT NULL default 0");
|
||||
$db->ex("ALTER TABLE lists ADD d_created INTEGER UNSIGNED NOT NULL default 0");
|
||||
$db->ex("ALTER TABLE lists ADD sorting TINYINT UNSIGNED NOT NULL default 0");
|
||||
$db->ex("ALTER TABLE lists ADD published TINYINT UNSIGNED NOT NULL default 0");
|
||||
$db->ex("ALTER TABLE lists ADD taskview INTEGER UNSIGNED NOT NULL default 0");
|
||||
|
||||
$db->ex("ALTER TABLE todolist ADD d_created INTEGER UNSIGNED NOT NULL default 0");
|
||||
$db->ex("ALTER TABLE todolist ADD d_completed INTEGER UNSIGNED NOT NULL default 0");
|
||||
|
||||
# convert task date to timestamp
|
||||
$tz = -1*$tz;
|
||||
$db->ex("UPDATE todolist SET d_created=strftime('%s',d) ".($tz<0?'-':'+').abs($tz));
|
||||
|
||||
# drop unnecessary field 'd'
|
||||
$db->ex(
|
||||
"CREATE TEMPORARY TABLE todolist_backup (
|
||||
id INTEGER,
|
||||
list_id INTEGER UNSIGNED NOT NULL default 0,
|
||||
d_created INTEGER UNSIGNED NOT NULL default 0,
|
||||
d_completed INTEGER UNSIGNED NOT NULL default 0,
|
||||
compl TINYINT UNSIGNED NOT NULL default 0,
|
||||
title VARCHAR(250) NOT NULL,
|
||||
note TEXT,
|
||||
prio TINYINT NOT NULL default 0,
|
||||
ow INT NOT NULL default 0,
|
||||
tags VARCHAR(250) NOT NULL default '',
|
||||
duedate DATE default NULL
|
||||
) ");
|
||||
$db->ex("INSERT INTO todolist_backup (id,list_id,d_created,d_completed,compl,title,note,prio,ow,tags,duedate) ".
|
||||
" SELECT id,list_id,d_created,d_completed,compl,title,note,prio,ow,tags,duedate FROM todolist");
|
||||
$db->ex("DROP TABLE todolist");
|
||||
|
||||
$db->ex(
|
||||
"CREATE TABLE todolist (
|
||||
id INTEGER PRIMARY KEY,
|
||||
list_id INTEGER UNSIGNED NOT NULL default 0,
|
||||
d_created INTEGER UNSIGNED NOT NULL default 0,
|
||||
d_completed INTEGER UNSIGNED NOT NULL default 0,
|
||||
compl TINYINT UNSIGNED NOT NULL default 0,
|
||||
title VARCHAR(250) NOT NULL,
|
||||
note TEXT,
|
||||
prio TINYINT NOT NULL default 0,
|
||||
ow INT NOT NULL default 0,
|
||||
tags VARCHAR(250) NOT NULL default '',
|
||||
duedate DATE default NULL
|
||||
) ");
|
||||
$db->ex("CREATE INDEX list_id ON todolist (list_id)");
|
||||
|
||||
$db->ex("INSERT INTO todolist (id,list_id,d_created,d_completed,compl,title,note,prio,ow,tags,duedate) ".
|
||||
" SELECT id,list_id,d_created,d_completed,compl,title,note,prio,ow,tags,duedate FROM todolist_backup");
|
||||
$db->ex("DROP TABLE todolist_backup");
|
||||
}
|
||||
|
||||
$sort = 0;
|
||||
if(isset($_COOKIE['sort']) && $_COOKIE['sort'] != ''){
|
||||
$sort = (int)$_COOKIE['sort'];
|
||||
if($sort < 0 || $sort > 2) $sort = 0;
|
||||
}
|
||||
|
||||
if(Config::get('password') != '' && Config::get('allowread')) $published = 1;
|
||||
else $published = 0;
|
||||
|
||||
$db->ex("UPDATE lists SET d_created=?, sorting=?, published=?", array(time(), $sort, $published));
|
||||
$db->ex("UPDATE todolist SET d_completed=d_created WHERE compl=1");
|
||||
|
||||
$db->ex("COMMIT");
|
||||
|
||||
# if($dbtype=='sqlite') {
|
||||
# $db->ex("PRAGMA temp_store = $temp_store_pragma");
|
||||
# }
|
||||
}
|
||||
|
||||
### end of 1.3.0 to 1.3.1 ##########
|
||||
|
||||
### update v1.3.1 to v1.4 ##########
|
||||
function update_131_14(Database_Abstract $db, $dbtype)
|
||||
{
|
||||
$db->ex("BEGIN");
|
||||
if($dbtype=='mysql')
|
||||
{
|
||||
$db->ex("DROP TABLE {$db->prefix}tags");
|
||||
$db->ex(
|
||||
"CREATE TABLE {$db->prefix}tags (
|
||||
`id` INT UNSIGNED NOT NULL auto_increment,
|
||||
`name` VARCHAR(50) NOT NULL,
|
||||
PRIMARY KEY(`id`),
|
||||
UNIQUE KEY `name` (`name`)
|
||||
) CHARSET=utf8 ");
|
||||
|
||||
$db->ex("ALTER TABLE {$db->prefix}todolist CHANGE `tags` `tags` VARCHAR(600) NOT NULL default ''");
|
||||
$db->ex("ALTER TABLE {$db->prefix}todolist ADD `tags_ids` VARCHAR(250) NOT NULL default ''");
|
||||
$db->ex("ALTER TABLE {$db->prefix}todolist ADD `uuid` CHAR(36) NOT NULL default ''");
|
||||
$db->ex("ALTER TABLE {$db->prefix}todolist ADD `d_edited` INT UNSIGNED NOT NULL default 0");
|
||||
|
||||
$db->ex("ALTER TABLE {$db->prefix}tag2task ADD `list_id` INT UNSIGNED NOT NULL");
|
||||
$db->ex("ALTER TABLE {$db->prefix}tag2task ADD KEY(`list_id`)");
|
||||
|
||||
$db->ex("ALTER TABLE {$db->prefix}lists ADD `uuid` CHAR(36) NOT NULL default ''");
|
||||
$db->ex("ALTER TABLE {$db->prefix}lists ADD `d_edited` INT UNSIGNED NOT NULL default 0");
|
||||
|
||||
}
|
||||
else #sqlite
|
||||
{
|
||||
# changes in tags table: fully new
|
||||
$db->ex("DROP TABLE {$db->prefix}tags"); //index will be deleted too
|
||||
$db->ex(
|
||||
"CREATE TABLE {$db->prefix}tags (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name VARCHAR(50) NOT NULL COLLATE NOCASE
|
||||
) ");
|
||||
$db->ex("CREATE UNIQUE INDEX tags_name ON {$db->prefix}tags (name COLLATE NOCASE)");
|
||||
|
||||
# changes in todolist table: uuid, d_edited, tags, tags_ids
|
||||
$db->ex(
|
||||
"CREATE TABLE todolist_new (
|
||||
id INTEGER PRIMARY KEY,
|
||||
uuid CHAR(36) NOT NULL default '',
|
||||
list_id INTEGER UNSIGNED NOT NULL default 0,
|
||||
d_created INTEGER UNSIGNED NOT NULL default 0,
|
||||
d_completed INTEGER UNSIGNED NOT NULL default 0,
|
||||
d_edited INTEGER UNSIGNED NOT NULL default 0,
|
||||
compl TINYINT UNSIGNED NOT NULL default 0,
|
||||
title VARCHAR(250) NOT NULL,
|
||||
note TEXT,
|
||||
prio TINYINT NOT NULL default 0,
|
||||
ow INTEGER NOT NULL default 0,
|
||||
tags VARCHAR(600) NOT NULL default '',
|
||||
tags_ids VARCHAR(250) NOT NULL default '',
|
||||
duedate DATE default NULL
|
||||
) ");
|
||||
$db->ex("INSERT INTO todolist_new (id,list_id,d_created,d_completed,compl,title,note,prio,ow,tags,duedate)".
|
||||
" SELECT id,list_id,d_created,d_completed,compl,title,note,prio,ow,tags,duedate FROM {$db->prefix}todolist");
|
||||
$db->ex("DROP TABLE {$db->prefix}todolist");
|
||||
$db->ex("ALTER TABLE todolist_new RENAME TO {$db->prefix}todolist");
|
||||
$db->ex("CREATE INDEX todo_list_id ON {$db->prefix}todolist (list_id)"); #1st index of 2
|
||||
|
||||
# changes in tag2task table: new column and index, new names of indexes
|
||||
$db->ex("ALTER TABLE {$db->prefix}tag2task ADD list_id INTEGER NOT NULL default 0");
|
||||
$db->ex("DROP INDEX tag_id");
|
||||
$db->ex("DROP INDEX task_id ");
|
||||
$db->ex("CREATE INDEX tag2task_tag_id ON {$db->prefix}tag2task (tag_id)");
|
||||
$db->ex("CREATE INDEX tag2task_task_id ON {$db->prefix}tag2task (task_id)");
|
||||
$db->ex("CREATE INDEX tag2task_list_id ON {$db->prefix}tag2task (list_id)");
|
||||
|
||||
# changes in lists table: uuid, d_edited
|
||||
$db->ex("ALTER TABLE {$db->prefix}lists ADD uuid CHAR(36) NOT NULL default ''");
|
||||
$db->ex("ALTER TABLE {$db->prefix}lists ADD d_edited INTEGER UNSIGNED NOT NULL default 0");
|
||||
|
||||
}
|
||||
|
||||
# recreate tags
|
||||
$db->ex("DELETE FROM {$db->prefix}tag2task");
|
||||
|
||||
$q = $db->dq("SELECT id,list_id,tags FROM {$db->prefix}todolist WHERE tags != ''");
|
||||
$ar = array();
|
||||
while($r = $q->fetchAssoc()) $ar[] = $r;
|
||||
foreach($ar as $r)
|
||||
{
|
||||
$aTags = v14_prepareTags($r['tags']);
|
||||
if($aTags)
|
||||
{
|
||||
v14_addTaskTags($r['id'], $aTags['ids'], $r['list_id']);
|
||||
$db->ex("UPDATE {$db->prefix}todolist SET tags=?,tags_ids=? WHERE id=".$r['id'],
|
||||
array(implode(',',$aTags['tags']), implode(',',$aTags['ids'])) );
|
||||
}
|
||||
}
|
||||
|
||||
# fix bug with empty lists.d_created
|
||||
$db->ex("UPDATE {$db->prefix}lists SET d_created=?", time());
|
||||
|
||||
# init d_edited
|
||||
$db->ex("UPDATE {$db->prefix}todolist SET d_edited=d_created");
|
||||
$db->ex("UPDATE {$db->prefix}todolist SET d_edited=d_completed WHERE d_completed > d_edited");
|
||||
$db->ex("UPDATE {$db->prefix}lists SET d_edited=d_created");
|
||||
|
||||
# add UUID
|
||||
$q = $db->dq("SELECT id FROM {$db->prefix}todolist");
|
||||
$ar = array();
|
||||
while($r = $q->fetchAssoc()) $ar[] = $r;
|
||||
foreach($ar as $r) {
|
||||
$db->ex("UPDATE {$db->prefix}todolist SET uuid=? WHERE id=".$r['id'], array(generateUUID()) );
|
||||
}
|
||||
|
||||
$q = $db->dq("SELECT id FROM {$db->prefix}lists");
|
||||
$ar = array();
|
||||
while($r = $q->fetchAssoc()) $ar[] = $r;
|
||||
foreach($ar as $r) {
|
||||
$db->ex("UPDATE {$db->prefix}lists SET uuid=? WHERE id=".$r['id'], array(generateUUID()) );
|
||||
}
|
||||
|
||||
# create unique indexes for UUID
|
||||
if($dbtype=='mysql')
|
||||
{
|
||||
$db->ex("ALTER TABLE {$db->prefix}lists ADD UNIQUE KEY (`uuid`)");
|
||||
$db->ex("ALTER TABLE {$db->prefix}todolist ADD UNIQUE KEY (`uuid`)");
|
||||
}
|
||||
else
|
||||
{
|
||||
$db->ex("CREATE UNIQUE INDEX lists_uuid ON {$db->prefix}lists (uuid)");
|
||||
$db->ex("CREATE UNIQUE INDEX todo_uuid ON {$db->prefix}todolist (uuid)");
|
||||
}
|
||||
|
||||
$db->ex("COMMIT");
|
||||
}
|
||||
|
||||
function v14_prepareTags($tagsStr)
|
||||
{
|
||||
$tags = explode(',', $tagsStr);
|
||||
if(!$tags) return 0;
|
||||
|
||||
$aTags = array('tags'=>array(), 'ids'=>array());
|
||||
foreach($tags as $tag)
|
||||
{
|
||||
$tag = str_replace(array('"',"'",'<','>','&','/','\\','^'),'',trim($tag));
|
||||
if($tag == '') continue;
|
||||
|
||||
$aTag = v14_getOrCreateTag($tag);
|
||||
if($aTag && !in_array($aTag['id'], $aTags['ids'])) {
|
||||
$aTags['tags'][] = $aTag['name'];
|
||||
$aTags['ids'][] = $aTag['id'];
|
||||
}
|
||||
}
|
||||
return $aTags;
|
||||
}
|
||||
|
||||
function v14_getOrCreateTag($name)
|
||||
{
|
||||
global $db;
|
||||
$tagId = $db->sq("SELECT id FROM {$db->prefix}tags WHERE name=?", array($name));
|
||||
if($tagId) return array('id'=>$tagId, 'name'=>$name);
|
||||
|
||||
$db->ex("INSERT INTO {$db->prefix}tags (name) VALUES (?)", array($name));
|
||||
return array('id'=>$db->lastInsertId(), 'name'=>$name);
|
||||
}
|
||||
|
||||
function v14_addTaskTags($taskId, $tagIds, $listId)
|
||||
{
|
||||
global $db;
|
||||
if(!$tagIds) return;
|
||||
foreach($tagIds as $tagId)
|
||||
{
|
||||
$db->ex("INSERT INTO {$db->prefix}tag2task (task_id,tag_id,list_id) VALUES (?,?,?)", array($taskId,$tagId,$listId));
|
||||
}
|
||||
}
|
||||
### end of 1.4 #####
|
||||
|
||||
### update v1.4 to v1.7 ##########
|
||||
function update_14_17(Database_Abstract $db, $dbtype)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue