From 8e33015f68d9822da42b51ca71b56187d79b4ebd Mon Sep 17 00:00:00 2001 From: Max Pozdeev Date: Wed, 28 Jul 2021 18:07:40 +0300 Subject: [PATCH] dropped the ability to upgrade database from old versions 1.3.0 and 1.3.1 --- src/setup.php | 298 +------------------------------------------------- 1 file changed, 1 insertion(+), 297 deletions(-) diff --git a/src/setup.php b/src/setup.php index aa1a56a..eab0629 100644 --- a/src/setup.php +++ b/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

Attention! 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) {