openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit ef13049206581d5d5a1d237b7b95c542d2e73be4
parent 9d968304bdfb9f57ea8a34313981c6b75f70cb55
Author: Jan Dankert <develop@jandankert.de>
Date:   Sun,  7 Nov 2021 23:45:50 +0100

Fix: First successful migration to the new "content" table.

Diffstat:
Mmodules/cms/status/Status.class.php | 5+++++
Mmodules/cms/update/Update.class.php | 2+-
Mmodules/cms/update/version/DBVersion000029.class.php | 17+++++++++++------
Mmodules/cms/update/version/DBVersion000030.class.php | 17+++++++++++------
Mmodules/cms/update/version/DBVersion000031.class.php | 26+++++++++++++++++---------
Mmodules/database/Table.class.php | 9+++++++--
6 files changed, 52 insertions(+), 24 deletions(-)

diff --git a/modules/cms/status/Status.class.php b/modules/cms/status/Status.class.php @@ -139,6 +139,11 @@ class Status // If you don't do this explicitly, PHP will automatically close the connection when your script ends. $adminDb = null; unset($adminDb); + + $dbState = [ + 'state' => 'UP', + 'message' => 'Updated', + ]; } } diff --git a/modules/cms/update/Update.class.php b/modules/cms/update/Update.class.php @@ -12,7 +12,7 @@ use logger\Logger; class Update { // This is the required DB version: - const SUPPORTED_VERSION = 28; + const SUPPORTED_VERSION = 31; // -----------------------^^----------------------------- const STATUS_UPDATE_PROGRESS = 0; diff --git a/modules/cms/update/version/DBVersion000029.class.php b/modules/cms/update/version/DBVersion000029.class.php @@ -26,7 +26,7 @@ class DBVersion000029 extends DbVersion $valueTable = $this->table('value'); $valueTable->column('contentid')->nullable()->add(); $valueTable->addConstraint('contentid','content'); - $valueTable->column('binary')->type( Column::TYPE_BLOB )->add(); + $valueTable->column('file')->type( Column::TYPE_BLOB )->nullable()->add(); $pageContentTable = $this->table('pagecontent'); $pageContentTable->add(); @@ -51,16 +51,21 @@ class DBVersion000029 extends DbVersion $stmt = $db->sql('INSERT INTO '.$contentTable->getSqlName().' (id) VALUES('.$contentid.')'); $stmt->execute(); - $stmt = $db->sql('INSERT INTO '.$pageContentTable->getSqlName().' (id,pageid,elementid,languageid,contentid) VALUES('.$contentid.','.$row['pageid'].','.$row['elementidid'].','.$row['languageid'].','.$contentid.')'); + $stmt = $db->sql('INSERT INTO '.$pageContentTable->getSqlName().' (id,pageid,elementid,languageid,contentid) VALUES('.$contentid.','.$row['pageid'].','.$row['elementid'].','.$row['languageid'].','.$contentid.')'); $stmt->execute(); - $stmt = $db->sql('UPDATE '.$valueTable->getSqlName().' SET contentid='.$contentid.' WHERE pageid='.$row['pageid'].' AND elementid='.$row['elementid'].' AND languageid='.$row['languageid'].')'); + $stmt = $db->sql('UPDATE '.$valueTable->getSqlName().' SET contentid='.$contentid.' WHERE pageid='.$row['pageid'].' AND elementid='.$row['elementid'].' AND languageid='.$row['languageid'] ); $stmt->execute(); } - //$valueTable->column('pageid' )->drop(); - //$valueTable->column('elementid' )->drop(); - //$valueTable->column('languageid')->drop(); + $valueTable->dropConstraint('pageid'); + $valueTable->column('pageid' )->drop(); + + $valueTable->dropConstraint('elementid'); + $valueTable->column('elementid' )->drop(); + + $valueTable->dropConstraint('languageid'); + $valueTable->column('languageid')->drop(); } } diff --git a/modules/cms/update/version/DBVersion000030.class.php b/modules/cms/update/version/DBVersion000030.class.php @@ -2,6 +2,7 @@ namespace cms\update\version; +use cms\base\Startup; use database\DbVersion; use database\Column; use security\Password; @@ -24,28 +25,32 @@ class DBVersion000030 extends DbVersion $templateModelTable = $this->table('templatemodel' ); $templateModelTable->column('contentid')->add(); - $templateModelTable->addConstraint('contentid' , 'content' ); $db = $this->getDb(); $stmt = $db->sql('SELECT * FROM '.$templateModelTable->getSqlName().'' ); - foreach($stmt->getAll() as $row ) + foreach($stmt->getAll() as $row ) // all templates should fit into memory. { $stmt = $db->sql('SELECT MAX(id) FROM '.$contentTable->getSqlName().''); - $contentid = $stmt->getOne(); + $contentid = $stmt->getOne() + 1; $stmt = $db->sql('INSERT INTO '.$contentTable->getSqlName().' (id) VALUES('.$contentid.')') ; $stmt->execute(); $stmt = $db->sql('SELECT MAX(id) FROM '.$valueTable->getSqlName().''); - $valueid = $stmt->getOne(); + $valueid = $stmt->getOne() + 1; - $stmt = $db->sql('INSERT INTO '.$valueTable->getSqlName().' (id,contentid,active,publish,text) VALUES('.$valueid.','.$contentid.',1,1,{text}'); + $stmt = $db->sql('INSERT INTO '.$valueTable->getSqlName().' (id,contentid,active,publish,text,lastchange_date) VALUES('.$valueid.','.$contentid.',1,1,{text},{time})'); $stmt->setString( 'text', $row['text'] ); + $stmt->setInt ( 'time', Startup::getStartTime() ); + $stmt->execute(); + + $stmt = $db->sql('UPDATE '.$templateModelTable->getSqlName().' SET contentid='.$contentid); $stmt->execute(); } - //$templateModelTable->column('text')->drop(); + $templateModelTable->addConstraint('contentid' , 'content' ); + $templateModelTable->column('text')->drop(); } } diff --git a/modules/cms/update/version/DBVersion000031.class.php b/modules/cms/update/version/DBVersion000031.class.php @@ -2,6 +2,7 @@ namespace cms\update\version; +use cms\base\Startup; use database\DbVersion; use database\Column; use security\Password; @@ -24,28 +25,35 @@ class DBVersion000031 extends DbVersion $fileTable = $this->table('file' ); $fileTable->column('contentid')->add(); - $fileTable->addConstraint('contentid' , 'content' ); $db = $this->getDb(); - $stmt = $db->sql('SELECT * FROM '.$fileTable->getSqlName().'' ); + $stmt = $db->sql('SELECT id FROM '.$fileTable->getSqlName() ); - foreach($stmt->getAll() as $row ) + foreach($stmt->getCol() as $fileid ) { - $stmt = $db->sql('SELECT MAX(id) FROM '.$contentTable->getSqlName().''); - $contentid = $stmt->getOne(); + $stmt = $db->sql('SELECT * FROM '.$fileTable->getSqlName().' WHERE id='.$fileid ); + $row = $stmt->getRow(); + + $stmt = $db->sql('SELECT MAX(id) FROM '.$contentTable->getSqlName() ); + $contentid = $stmt->getOne() + 1; $stmt = $db->sql('INSERT INTO '.$contentTable->getSqlName().' (id) VALUES('.$contentid.')') ; $stmt->execute(); - $stmt = $db->sql('SELECT MAX(id) FROM '.$valueTable->getSqlName().''); - $valueid = $stmt->getOne(); + $stmt = $db->sql('SELECT MAX(id) FROM '.$valueTable->getSqlName() ); + $valueid = $stmt->getOne() + 1; - $stmt = $db->sql('INSERT INTO '.$valueTable->getSqlName().' (id,contentid,active,publish,binary) VALUES('.$valueid.','.$contentid.',1,1,{file}'); + $stmt = $db->sql('INSERT INTO '.$valueTable->getSqlName().' (id,contentid,active,publish,file,lastchange_date) VALUES('.$valueid.','.$contentid.',1,1,{file},{time})'); $stmt->setString( 'file', $row['value'] ); + $stmt->setInt ( 'time', Startup::getStartTime() ); + $stmt->execute(); + + $stmt = $db->sql('UPDATE '.$fileTable->getSqlName().' SET contentid='.$contentid); $stmt->execute(); } - //$fileTable->column('value')->drop(); + $fileTable->addConstraint('contentid' , 'content' ); + $fileTable->column('value')->drop(); } } diff --git a/modules/database/Table.class.php b/modules/database/Table.class.php @@ -179,9 +179,14 @@ class Table } - public function dropConstraint($constraintName) + public function dropConstraint($columnName) { - $ddl = $this->db->sql('DROP CONSTRAINT ' . $constraintName . ';'); + + $constraintName = $this->tablePrefix . self::CONSTRAINT_PREFIX . '_' . $this->name . $this->tableSuffix . '_' . $columnName; + + $table = $this->getSqlName(); + // In MySQL, there’s no DROP CONSTRAINT, you have to use DROP FOREIGN KEY instead + $ddl = $this->db->sql('ALTER TABLE ' . $table . ' DROP FOREIGN KEY ' . $constraintName . ';'); $ddl->execute(); }