getDB(); $tblRenames = [ 'installinfo' => 'installinfos', 'log' => 'logs', 'moduleinstanceacl' => 'moduleinstanceacls', 'acl' => 'acls', 'content' => 'contents', 'comment' => 'comments' ]; switch ($STEP) { case 1: echo ''; require_once($updatefile); echo 'Upgrade'; break; case 2: $db->isTransactionSupported() and $db->startTransaction(); if (!$db->tableExists('systemsettings')) { foreach ($TABLESDEF as $tabledef) { $tableInfo = TableInfo::fromXML($tabledef); if ($tableInfo->getName() == 'systemsettings') { echo '

'.$LANG->tr('update_create_table', [$tableInfo->getName()])."

\n"; $db->createTable($tableInfo); } } } // migrating data to new table echo "

Migrating data

\n"; $result = $db->table('websitesettings')->select(['site_id' => [0,NULL]]); while ($row = $result->fetchObject()) { $data = [ 'area' => $row->instance, 'key' => $row->key ]; if ($db->table('systemsettings')->getObject($data)) { echo 'ignoring duplicate setting '.$row->instance.':'.$row->key.' with value '.$row->value.'
'; continue; } $data = [ 'area' => $row->instance, 'key' => $row->key, 'value'=> $row->value ]; echo 'moving '.$row->instance.':'.$row->key.'
'; $db->table('systemsettings')->insert($data); $data = [ 'site_id' => $row->site_id, 'instance' => $row->instance, 'key' => $row->key, 'value'=> $row->value ]; $db->table('websitesettings')->delete($data); } $result->close(); $error = false; foreach ($tblRenames as $fromName => $toName) { if ($db->tableExists($fromName)) { echo '

'.$LANG->tr('update_rename_table',[$fromName,$toName]); try { $db->renameTable($fromName, $toName); echo "

\n"; } catch (DBException $ex) { echo "

\n"; echo '

'.$ex->getMessage().'

'; echo '
'.$ex->getTraceAsString().'
'; $error = true; } } } foreach ($TABLESDEF as $tabledef) { $tableInfo = TableInfo::fromXML($tabledef); if ($tableInfo->getName() == 'logs') { if (!$db->table('logs')->getInfo()->columnExists('readed')) $db->table('logs')->addColumn($tableInfo->getColumnInfo('readed'),'code'); break; } } $db->table('websitesettings')->update(['value' => 'mcms.ckeditor'], ['key' => 'editors.html', 'value' => 'fckedit']); $db->table('websitesettings')->update(['value' => 'mcms.tinymce'], ['key' => 'editors.html', 'value' => 'tinymce']); if ($error) { echo 'ERROR, aborting'; die(); } foreach([ 'websitesettings', 'websites', 'menuitems', 'menus', 'menublocks', 'moduleinstances', 'blocks', 'contents', 'comments', 'accounts', 'accountsettings', 'accounttextsettings', 'accountbinsettings', 'groups', 'groupsettings', 'groupbinsettings', 'grouptextsettings', 'groupmembers' ] as $tbl) { foreach ($db->table($tbl)->getFKeyList() as $fKey) { $db->table($tbl)->removeFKey($fKey); echo 'removing fk '.$fKey.' from '.$tbl.'
'; } } foreach([ 'websitesettings', 'menublocks', 'contents', 'comments', 'accounts', 'moduleinstanceacls', 'blocks', 'logs' ] as $tbl) { foreach ($db->table($tbl)->getIndexList() as $idx) { $db->table($tbl)->removeIndex($idx); echo '

removing index '.$idx.' from '.$tbl.'

'; } } if ($db->getDialect() instanceof Mysql) { foreach ($TABLESDEF as $tabledef) { $tableInfo = TableInfo::fromXML($tabledef); if ($tableInfo->getName() == 'dirurls') continue; if ($db->tableExists($tableInfo->getName())) { $db->query('ALTER TABLE '.$db->escapeTableName($tableInfo->getName()).' ENGINE=InnoDB;'); echo '

Engine of '.$tableInfo->getName().' forced to be InnoDB

'; } } } if (!($db->getDialect() instanceof \Mammut\DB\Sql\Dialect\Mysql)) $db->table('websitesettings')->removePKey(); echo '

altering websites

'; if (!($db->getDialect() instanceof \Mammut\DB\Sql\Dialect\Mysql)) $db->table('websites')->removePKey(); if (!($db->getDialect() instanceof \Mammut\DB\Sql\Dialect\SqlServer)) $db->table('websites')->alterColumn('id', new ColumnInfo('id', Types::TYPE_INT, -1, [ColumnInfo::P_UNSIGNED,ColumnInfo::P_AUTONUM])); else $db->table('websites')->alterColumn('id', new ColumnInfo('id', Types::TYPE_INT, -1, [ColumnInfo::P_UNSIGNED])); if (!($db->getDialect() instanceof \Mammut\DB\Sql\Dialect\Mysql)) $db->table('websites')->setPKey(['id']); $db->table('websites')->alterColumn('parent_id', new ColumnInfo('parent_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); $db->table('websites')->update(['parent_id' => NULL], ['parent_id' => 0]); $db->table('websites')->addFKey('FK_websites_parent_id', ['parent_id'], 'websites', ['id'], 'CASCADE', 'CASCADE'); echo '

altering websitesettings

'; if ($db->table('websitesettings')->getPKeyFields()) $db->table('websitesettings')->removePKey(); $db->table('websitesettings')->alterColumn('site_id', new ColumnInfo('site_id', Types::TYPE_INT, -1, [ColumnInfo::P_UNSIGNED])); $db->table('websitesettings')->alterColumn('instance', new ColumnInfo('instance', Types::TYPE_VCHAR, 64)); $db->table('websitesettings')->alterColumn('key', new ColumnInfo('key', Types::TYPE_VCHAR, 64)); $db->table('websitesettings')->alterColumn('value', new ColumnInfo('value', Types::TYPE_VCHAR, 255, [ColumnInfo::P_ALLOW_NULL])); $db->table('websitesettings')->setPKey(['site_id','instance','key']); $db->table('websitesettings')->addFKey('FK_websitesettings_site_id', ['site_id'], 'websites', ['id'], 'CASCADE', 'CASCADE'); echo '

altering installinfos

'; $db->table('installinfos')->removePKey(); $db->table('installinfos')->alterColumn('key', new ColumnInfo('key', Types::TYPE_VCHAR, 64)); $db->table('installinfos')->alterColumn('attrib', new ColumnInfo('attrib', Types::TYPE_INT)); $db->table('installinfos')->setPKey(['type','key']); echo '

altering moduleinstances

'; $db->table('moduleinstances')->removePKey(); $db->table('moduleinstances')->alterColumn('site_id', new ColumnInfo('site_id', Types::TYPE_INT, -1, [ColumnInfo::P_UNSIGNED])); $db->table('moduleinstances')->alterColumn('base_menu_id', new ColumnInfo('base_menu_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); $db->table('moduleinstances')->alterColumn('instance', new ColumnInfo('instance', Types::TYPE_VCHAR, 64)); $db->table('moduleinstances')->alterColumn('module', new ColumnInfo('module', Types::TYPE_VCHAR, 128)); $db->table('moduleinstances')->setPKey(['site_id','instance']); $db->table('moduleinstances')->addFKey('FK_moduleinstances_site_id', ['site_id'], 'websites', ['id'], 'CASCADE', 'PREVENT'); echo '

altering menus

'; $db->table('menus')->alterColumn('site_id', new ColumnInfo('site_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); $db->table('menus')->alterColumn('langu', new ColumnInfo('langu', Types::TYPE_VCHAR, 16, [ColumnInfo::P_ALLOW_NULL])); $db->table('menus')->alterColumn('langukey', new ColumnInfo('langukey', Types::TYPE_VCHAR, 64, [ColumnInfo::P_ALLOW_NULL])); $db->table('menus')->addFKey('FK_menus_site_id', ['site_id'], 'websites', ['id'], 'CASCADE', 'PREVENT'); echo '

altering menuitems

'; $db->table('menuitems')->alterColumn('parent_id', new ColumnInfo('parent_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); $db->table('menuitems')->update(['parent_id' => NULL], ['parent_id' => 0]); // fixing invalid menuitems, moving them to top level $result = $db->query('SELECT a.id, a.parent_id, b.id AS pid FROM menuitems a LEFT JOIN menuitems b ON b.id=a.parent_id WHERE a.parent_id IS NOT NULL AND b.id IS NULL'); while ($row = $result->fetchObject()) $db->table('menuitems')->update(['parent_id' => NULL], ['id' => $row->id]); $result->close(); $db->table('menuitems')->alterColumn('visible', new ColumnInfo('visible', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL])); $db->table('menuitems')->alterColumn('langu', new ColumnInfo('langu', Types::TYPE_VCHAR, 16, [ColumnInfo::P_ALLOW_NULL])); $db->table('menuitems')->alterColumn('langukey', new ColumnInfo('langukey', Types::TYPE_VCHAR, 64, [ColumnInfo::P_ALLOW_NULL])); $db->table('menuitems')->alterColumn('priority', new ColumnInfo('priority', Types::TYPE_SHORT)); $db->table('menuitems')->alterColumn('target', new ColumnInfo('target', Types::TYPE_SHORT)); $db->table('menuitems')->addFKey('FK_menuitems_menu_id', ['menu_id'], 'menus', ['id'], 'CASCADE', 'CASCADE'); $db->table('menuitems')->addFKey('FK_menuitems_parent_id', ['parent_id'], 'menuitems', ['id'], 'PREVENT', 'PREVENT'); echo '

altering menublocks

'; if (!($db->getDialect() instanceof \Mammut\DB\Sql\Dialect\SqlServer)) { $db->table('menublocks')->alterColumn('site_id', new ColumnInfo('site_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); } $db->table('menublocks')->alterColumn('block_id', new ColumnInfo('block_id', Types::TYPE_VCHAR, 64)); $db->table('menublocks')->alterColumn('start_level', new ColumnInfo('start_level', Types::TYPE_SHORT)); $db->table('menublocks')->alterColumn('end_level', new ColumnInfo('end_level', Types::TYPE_SHORT)); $db->table('menublocks')->alterColumn('visual', new ColumnInfo('visual', Types::TYPE_VCHAR, 64)); $db->table('menublocks')->alterColumn('class', new ColumnInfo('class', Types::TYPE_VCHAR, 64)); $db->table('menublocks')->addFKey('FK_menublocks_site_id', ['site_id'], 'websites', ['id'], 'PREVENT', 'PREVENT'); $db->table('menublocks')->addFKey('FK_menublocks_menu_id', ['menu_id'], 'menus', ['id'], 'PREVENT', 'PREVENT'); $db->table('menublocks')->setIndex('site_block',['site_id','block_id']); echo '

altering account/grouptables

'; if (!($db->getDialect() instanceof \Mammut\DB\Sql\Dialect\SqlServer)) { $db->table('accounts')->alterColumn('id', new ColumnInfo('id', Types::TYPE_INT, -1, [ColumnInfo::P_UNSIGNED,ColumnInfo::P_AUTONUM])); $db->table('accounts')->alterColumn('site_id', new ColumnInfo('site_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); $db->table('accountsettings')->alterColumn('id', new ColumnInfo('id', Types::TYPE_INT, -1, [ColumnInfo::P_UNSIGNED])); $db->table('accountbinsettings')->alterColumn('id', new ColumnInfo('id', Types::TYPE_INT, -1, [ColumnInfo::P_UNSIGNED])); $db->table('accounttextsettings')->alterColumn('id', new ColumnInfo('id', Types::TYPE_INT, -1, [ColumnInfo::P_UNSIGNED])); $db->table('groups')->alterColumn('id', new ColumnInfo('id', Types::TYPE_INT, -1, [ColumnInfo::P_UNSIGNED,ColumnInfo::P_AUTONUM])); $db->table('groups')->alterColumn('site_id', new ColumnInfo('site_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); $db->table('groupsettings')->alterColumn('id', new ColumnInfo('id', Types::TYPE_INT, -1, [ColumnInfo::P_UNSIGNED])); $db->table('groupbinsettings')->alterColumn('id', new ColumnInfo('id', Types::TYPE_INT, -1, [ColumnInfo::P_UNSIGNED])); $db->table('grouptextsettings')->alterColumn('id', new ColumnInfo('id', Types::TYPE_INT, -1, [ColumnInfo::P_UNSIGNED])); $db->table('groupmembers')->alterColumn('account_id', new ColumnInfo('account_id', Types::TYPE_INT, -1, [ColumnInfo::P_UNSIGNED])); $db->table('groupmembers')->alterColumn('group_id', new ColumnInfo('group_id', Types::TYPE_INT, -1, [ColumnInfo::P_UNSIGNED])); } /** @var TableInfo */ $tableInfo = NULL; foreach ($TABLESDEF as $tabledef) { $tableInfo = TableInfo::fromXML($tabledef); if ($tableInfo->getName() == 'accounts') break; $tableInfo = NULL; } $db->table('accounts')->update(['site_id' => NULL], ['site_id' => 0]); $db->table('accounts')->alterColumn('login', $tableInfo->getColumnInfo('login')); $db->table('accounts')->alterColumn('state', $tableInfo->getColumnInfo('state')); $db->table('accounts')->alterColumn('masteradmin', $tableInfo->getColumnInfo('masteradmin')); $db->table('accounts')->addFKey('FK_accounts_site_id', ['site_id'], 'websites', ['id'], 'PREVENT', 'CASCADE'); $db->table('accounts')->setIndex('uid', ['site_id','login'], true); if (!$db->table('accounts')->getInfo()->columnExists('last_login')) $db->table('accounts')->addColumn($tableInfo->getColumnInfo('last_login'),'authtoken'); if (!$db->table('accounts')->getInfo()->columnExists('last_active')) $db->table('accounts')->addColumn($tableInfo->getColumnInfo('last_active'),'last_login'); if (!$db->table('accounts')->getInfo()->columnExists('failed_login_count')) $db->table('accounts')->addColumn($tableInfo->getColumnInfo('failed_login_count'),'last_active'); if (!$db->table('accounts')->getInfo()->columnExists('failed_login_last')) $db->table('accounts')->addColumn($tableInfo->getColumnInfo('failed_login_last'),'failed_login_count'); if (!$db->table('accounts')->getInfo()->columnExists('failed_login_lastsrc')) $db->table('accounts')->addColumn($tableInfo->getColumnInfo('failed_login_lastsrc'),'failed_login_last'); if (!$db->table('accounts')->getInfo()->columnExists('disabled')) $db->table('accounts')->addColumn($tableInfo->getColumnInfo('disabled'),'valid_until'); if ($db->table('accountsettings')->getPKeyFields()) $db->table('accountsettings')->removePKey(); $db->table('accountsettings')->alterColumn('instance', new ColumnInfo('instance', Types::TYPE_VCHAR, 64)); $db->table('accountsettings')->alterColumn('key', new ColumnInfo('key', Types::TYPE_VCHAR, 64)); $db->table('accountsettings')->setPKey(['id','instance','key']); $db->table('accountsettings')->addFKey('FK_accountsettings_id', ['id'], 'accounts', ['id'], 'CASCADE', 'CASCADE'); if ($db->table('accounttextsettings')->getPKeyFields()) $db->table('accounttextsettings')->removePKey(); $db->table('accounttextsettings')->alterColumn('instance', new ColumnInfo('instance', Types::TYPE_VCHAR, 64)); $db->table('accounttextsettings')->alterColumn('key', new ColumnInfo('key', Types::TYPE_VCHAR, 64)); $db->table('accounttextsettings')->setPKey(['id','instance','key']); $db->table('accounttextsettings')->addFKey('FK_accounttextsettings_id', ['id'], 'accounts', ['id'], 'CASCADE', 'CASCADE'); if ($db->table('accountbinsettings')->getPKeyFields()) $db->table('accountbinsettings')->removePKey(); $db->table('accountbinsettings')->alterColumn('instance', new ColumnInfo('instance', Types::TYPE_VCHAR, 64)); $db->table('accountbinsettings')->alterColumn('key', new ColumnInfo('key', Types::TYPE_VCHAR, 64)); $db->table('accountbinsettings')->setPKey(['id','instance','key']); $db->table('accountbinsettings')->addFKey('FK_accountbinsettings_id', ['id'], 'accounts', ['id'], 'CASCADE', 'CASCADE'); /** @var TableInfo */ $tableInfo = NULL; foreach ($TABLESDEF as $tabledef) { $tableInfo = TableInfo::fromXML($tabledef); if ($tableInfo->getName() == 'groups') break; $tableInfo = NULL; } $db->table('groups')->alterColumn('name', $tableInfo->getColumnInfo('name')); $db->table('groups')->alterColumn('masteradmin', $tableInfo->getColumnInfo('masteradmin')); $db->table('groups')->addFKey('FK_groups_site_id', ['site_id'], 'websites', ['id'], 'PREVENT', 'CASCADE'); if ($db->table('groupsettings')->getPKeyFields()) $db->table('groupsettings')->removePKey(); $db->table('groupsettings')->alterColumn('instance', new ColumnInfo('instance', Types::TYPE_VCHAR, 64)); $db->table('groupsettings')->alterColumn('key', new ColumnInfo('key', Types::TYPE_VCHAR, 64)); $db->table('groupsettings')->setPKey(['id','instance','key']); $db->table('groupsettings')->addFKey('FK_groupsettings_id', ['id'], 'groups', ['id'], 'CASCADE', 'CASCADE'); if ($db->table('grouptextsettings')->getPKeyFields()) $db->table('grouptextsettings')->removePKey(); $db->table('grouptextsettings')->alterColumn('instance', new ColumnInfo('instance', Types::TYPE_VCHAR, 64)); $db->table('grouptextsettings')->alterColumn('key', new ColumnInfo('key', Types::TYPE_VCHAR, 64)); $db->table('grouptextsettings')->setPKey(['id','instance','key']); $db->table('grouptextsettings')->addFKey('FK_grouptextsettings_id', ['id'], 'groups', ['id'], 'CASCADE', 'CASCADE'); if ($db->table('groupbinsettings')->getPKeyFields()) $db->table('groupbinsettings')->removePKey(); $db->table('groupbinsettings')->alterColumn('instance', new ColumnInfo('instance', Types::TYPE_VCHAR, 64)); $db->table('groupbinsettings')->alterColumn('key', new ColumnInfo('key', Types::TYPE_VCHAR, 64)); $db->table('groupbinsettings')->setPKey(['id','instance','key']); $db->table('groupbinsettings')->addFKey('FK_groupbinsettings_id', ['id'], 'groups', ['id'], 'CASCADE', 'CASCADE'); $db->table('groupmembers')->addFKey('FK_groupmembers_account_id', ['account_id'], 'accounts', ['id'], 'CASCADE', 'CASCADE'); $db->table('groupmembers')->addFKey('FK_groupmembers_group_id', ['group_id'], 'groups', ['id'], 'CASCADE', 'CASCADE'); echo '

altering acl tables

'; if (!($db->getDialect() instanceof \Mammut\DB\Sql\Dialect\SqlServer)) { $db->table('acls')->alterColumn('site_id', new ColumnInfo('site_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); $db->table('acls')->alterColumn('account_id', new ColumnInfo('account_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); $db->table('acls')->alterColumn('group_id', new ColumnInfo('group_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); } $db->table('acls')->alterColumn('instance', new ColumnInfo('instance', Types::TYPE_VCHAR, 64, [ColumnInfo::P_ALLOW_NULL])); $db->table('acls')->alterColumn('key', new ColumnInfo('key', Types::TYPE_VCHAR, 64)); if (!($db->getDialect() instanceof \Mammut\DB\Sql\Dialect\SqlServer)) { $db->table('moduleinstanceacls')->alterColumn('site_id', new ColumnInfo('site_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); $db->table('moduleinstanceacls')->alterColumn('account_id', new ColumnInfo('account_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); $db->table('moduleinstanceacls')->alterColumn('group_id', new ColumnInfo('group_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); } $db->table('moduleinstanceacls')->alterColumn('instance', new ColumnInfo('instance', Types::TYPE_VCHAR, 64, [ColumnInfo::P_ALLOW_NULL])); if ($db->table('moduleinstanceacls')->getInfo()->columnExists('start')) $db->table('moduleinstanceacls')->renameColumn('start', 'publish_start'); if ($db->table('moduleinstanceacls')->getInfo()->columnExists('end')) $db->table('moduleinstanceacls')->renameColumn('end', 'publish_end'); $db->table('moduleinstanceacls')->setIndex('site_instance', ['site_id','instance']); echo '

altering blocks

'; if ($db->table('blocks')->getPKeyFields()) $db->table('blocks')->removePKey(); $db->table('blocks')->alterColumn('site_id', new ColumnInfo('site_id', Types::TYPE_INT, -1, [ColumnInfo::P_UNSIGNED])); if ($db->table('blocks')->getInfo()->columnExists('start')) $db->table('blocks')->renameColumn('start', 'publish_start'); if ($db->table('blocks')->getInfo()->columnExists('end')) $db->table('blocks')->renameColumn('end', 'publish_end'); $db->table('blocks')->setPKey(['site_id','name']); $db->table('blocks')->addFKey('FK_blocks_site_id', ['site_id'], 'websites', ['id'], 'PREVENT', 'PREVENT'); echo '

altering logs

'; $db->table('logs')->alterColumn('site_id', new ColumnInfo('site_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL])); $db->table('logs')->alterColumn('area', new ColumnInfo('area', Types::TYPE_VCHAR, 20)); $db->table('logs')->alterColumn('code', new ColumnInfo('code', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL])); $db->table('logs')->setIndex('event', ['eventtime','site_id','level']); echo '

altering contents

'; $db->table('contents')->alterColumn('site_id', new ColumnInfo('site_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); $db->table('contents')->alterColumn('instance', new ColumnInfo('instance', Types::TYPE_VCHAR, 64)); $db->table('contents')->alterColumn('key', new ColumnInfo('key', Types::TYPE_VCHAR, 64, [ColumnInfo::P_ALLOW_NULL])); $db->table('contents')->alterColumn('langu', new ColumnInfo('langu', Types::TYPE_VCHAR, 16, [ColumnInfo::P_ALLOW_NULL])); $db->table('contents')->alterColumn('langukey', new ColumnInfo('langukey', Types::TYPE_VCHAR, 64, [ColumnInfo::P_ALLOW_NULL])); $db->table('contents')->alterColumn('state', new ColumnInfo('state', Types::TYPE_INT)); $db->table('contents')->setIndex('site_instance',['site_id','instance','key']); $select = $db->select()->from("websitesettings")->where(['key' => 'textId']); $update = $db->update()->from("contents")->set(['key' => 'text1'])->where(['id' => new Parameter()]); $result = $db->query($select); while($row = $result->fetchObject()) { $db->executeP($update,[$row->value]); } echo '

altering comments

'; $db->table('comments')->alterColumn('site_id', new ColumnInfo('site_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); $db->table('comments')->alterColumn('instance', new ColumnInfo('instance', Types::TYPE_VCHAR, 64)); $db->table('comments')->alterColumn('key', new ColumnInfo('key', Types::TYPE_VCHAR, 64, [ColumnInfo::P_ALLOW_NULL])); if ($db->table('comments')->getInfo()->columnExists('parent')) $db->table('comments')->renameColumn('parent', 'parent_id'); $db->table('comments')->alterColumn('parent_id', new ColumnInfo('parent_id', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL])); if ($db->table('comments')->getInfo()->columnExists('parentkey')) $db->table('comments')->renameColumn('parentkey', 'parent_key'); $db->table('comments')->alterColumn('parent_key', new ColumnInfo('parent_key', Types::TYPE_VCHAR, 64, [ColumnInfo::P_ALLOW_NULL])); if (!$db->table('comments')->getInfo()->columnExists('parent_comment')) $db->table('comments')->addColumn(new ColumnInfo('parent_comment', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); else $db->table('comments')->alterColumn('parent_comment', new ColumnInfo('parent_comment', Types::TYPE_INT, -1, [ColumnInfo::P_ALLOW_NULL, ColumnInfo::P_UNSIGNED])); $db->table('comments')->alterColumn('langu', new ColumnInfo('langu', Types::TYPE_VCHAR, 16, [ColumnInfo::P_ALLOW_NULL])); $db->table('comments')->alterColumn('langukey', new ColumnInfo('langukey', Types::TYPE_VCHAR, 64, [ColumnInfo::P_ALLOW_NULL])); $db->table('comments')->addFKey('FK_comments_parent_comment', ['parent_comment'], 'comments', ['id'], 'PREVENT', 'PREVENT'); $db->table('comments')->setIndex('site_instance',['site_id','instance','key']); echo '

updating instance infos

'; $db->table('moduleinstances')->update(['module' => '\\MCMS\\_\\Mod\\MCMS\\StaticBlock\\StaticBlock'], ['module' => 'mcms.static']); $db->table('moduleinstances')->update(['module' => '\\MCMS\\_\\Mod\\MCMS\\Guestbook\\Guestbook'], ['module' => 'mcms.guestbook']); $db->table('moduleinstances')->update(['module' => '\\MCMS\\_\\Modx\\MCMS\\Gallery\\Gallery'], ['module' => 'mcms.gallery']); echo '

updating installinfo content

'; $db->table('installinfos')->update(['key' => '\\MCMS\\_\\Pluginx\\Content\\MCMS\\Statistic\\Statistic'], ['key' => 'content:mcms.mmpistatistic']); // do generated update commands echo '

calling generated update script

'; require_once($updatefile); $result = $db->table('menuitems')->getObjectList(['instance' => ['',NULL]]); foreach ($result as $r) { $oldlink = explode(':', $r->link, 2); if ($oldlink[0] == 'self') { if (isset($oldlink[1]) && preg_match('#mod=([a-zA-Z0-9_-]+)#', $oldlink[1], $match)) { $instance = $match[1]; $data = array(); $data['type'] = $oldlink[0]; $data['instance'] = $instance; if (preg_match('#view=([a-zA-Z0-9_-]+)#', $oldlink[1], $match)) { $data['viewname'] = $match[1]; } $db->table('menuitems')->update($data, ['id' => $r->id]); } } if ($oldlink[0] == 'url') { $db->table('menuitems')->update(['type' => 'url'], ['id' => $r->id]); } if ($oldlink[0] == 'admin') { $db->table('menuitems')->update(['type' => 'admin'], ['id' => $r->id]); } } $db->table('installinfos')->delete(array('type' =>'system', 'key' => 'mcms')); $db->table('installinfos')->delete(array('type' =>'system', 'key' => 'mcmsdb')); $db->table('installinfos')->insert(array('type' =>'system', 'key' => 'mcms', 'version' => MCMS, 'attrib' => 0)); $db->table('installinfos')->insert(array('type' =>'system', 'key' => 'mcmsdb', 'version' => $DBV, 'attrib' => 0)); $db->isTransactionSupported() and $db->commit(); echo '

upgrade finished, remove the install folder and return to your system

'; echo 'Back to main page'; break; }