/** * Installer Step 4 */ protected function runStep4() { $sqlFiles = array(); $files = \fpcm\classes\database::getTableFiles(); foreach ($files as $value) { $sqlFiles[substr(basename($value, '.yml'), 2)] = base64_encode(str_rot13(base64_encode($value))); } $this->view->addJsVars(array('fpcmSqlFilesCount' => count($sqlFiles), 'fpcmSqlFiles' => $sqlFiles, 'fpcmSqlFileExec' => $this->lang->translate('INSTALLER_CREATETABLES_STEP'))); }
/** * Änderungen an Tabellen-Struktur vornehmen * @return bool */ private function alterTables() { $res = true; if ($this->checkVersion('3.0.4')) { $res = $res && $this->dbcon->insert(\fpcm\classes\database::tableCronjobs, "`id`, `cjname`, `lastexec`", "7, 'dbBackup', 0"); } if ($this->checkVersion('3.1.4')) { $res = $res && $this->dbcon->insert(\fpcm\classes\database::tableCronjobs, "`id`, `cjname`, `lastexec`", "8, 'fileindex', 0"); } if ($this->checkVersion('3.1.0-rc1')) { $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableArticles, 'ADD', '`imagepath`', 'TEXT NOT NULL'); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableArticles, 'ADD INDEX', '( `title` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableArticles, 'ADD INDEX', '( `categories` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableArticles, 'ADD INDEX', '( `createuser` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableArticles, 'ADD INDEX', '( `createtime` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableArticles, 'ADD INDEX', '( `pinned` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableArticles, 'ADD INDEX', '( `postponed` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableArticles, 'ADD INDEX', '( `deleted` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableArticles, 'ADD INDEX', '( `approval` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableArticles, 'ADD INDEX', '( `draft` )', '', false); } if ($this->checkVersion('3.2.0-dev')) { if (method_exists($this->dbcon, 'getDbtype') && $this->dbcon->getDbtype() == 'pgsql') { $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableCronjobs, 'ADD', '"execinterval"', ' BIGINT', false); } else { $res = $res && $this->dbcon->alter(\fpcm\classes\database::tablePermissions, 'CHANGE', '`permissionData`', '`permissiondata` BLOB NOT NULL', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tablePermissions, 'CHANGE', '`rollId`', '`rollid` bigint(20) NOT NULL', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableCategories, 'CHANGE', '`iconPath`', '`iconpath` text NOT NULL', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableSessions, 'CHANGE', '`userId`', '`userid` BIGINT( 20 ) NOT NULL ', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableSessions, 'CHANGE', '`sessionId`', '`sessionid` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableCronjobs, 'ADD', '`execinterval`', ' BIGINT( 20 ) NOT NULL', false); } $rows = array('anonymizeIps' => 2419200, 'clearLogs' => 2419200, 'clearTemp' => 604800, 'fmThumbs' => 604800, 'postponedArticles' => 600, 'updateCheck' => 86400, 'dbBackup' => 604800, 'fileindex' => 86400); foreach ($rows as $key => $value) { $res = $res && $this->dbcon->update(\fpcm\classes\database::tableCronjobs, array('execinterval'), array($value, $key), "cjname = ? AND execinterval = 0"); } } if ($this->checkVersion('3.3.0-a1') && (!method_exists($this->dbcon, 'getDbtype') || $this->dbcon->getDbtype() == 'mysql')) { $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableComments, 'ADD INDEX', '( `name` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableComments, 'ADD INDEX', '( `email` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableComments, 'ADD INDEX', '( `website` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableComments, 'ADD INDEX', '( `private` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableComments, 'ADD INDEX', '( `approved` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableComments, 'ADD INDEX', '( `spammer` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableComments, 'ADD INDEX', '( `createtime` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableCronjobs, 'ADD UNIQUE', '( `cjname` )', '', false); $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableCronjobs, 'ADD INDEX', '( `lastexec` )', '', false); } if ($this->checkVersion('3.3.0-rc6') && (!method_exists($this->dbcon, 'getDbtype') || $this->dbcon->getDbtype() == 'mysql')) { $res = $res && $this->dbcon->alter(\fpcm\classes\database::tableConfig, 'ADD UNIQUE', '( `config_name` )', '', false); } if (method_exists($this->dbcon, 'getDbtype') && $this->checkVersion('3.3.0-rc6') && $this->dbcon->getDbtype() == 'pgsql') { $data = 'CREATE INDEX ' . $this->dbcon->getDbprefix() . '_comments_name ON ' . $this->dbcon->getDbprefix() . '_comments USING btree (name);' . 'CREATE INDEX ' . $this->dbcon->getDbprefix() . '_comments_email ON ' . $this->dbcon->getDbprefix() . '_comments USING btree (email);' . 'CREATE INDEX ' . $this->dbcon->getDbprefix() . '_comments_website ON ' . $this->dbcon->getDbprefix() . '_comments USING btree (website);' . 'CREATE INDEX ' . $this->dbcon->getDbprefix() . '_comments_private ON ' . $this->dbcon->getDbprefix() . '_comments USING btree (private);' . 'CREATE INDEX ' . $this->dbcon->getDbprefix() . '_comments_approved ON ' . $this->dbcon->getDbprefix() . '_comments USING btree (approved);' . 'CREATE INDEX ' . $this->dbcon->getDbprefix() . '_comments_spammer ON ' . $this->dbcon->getDbprefix() . '_comments USING btree (spammer);' . 'CREATE INDEX ' . $this->dbcon->getDbprefix() . '_comments_createtime ON ' . $this->dbcon->getDbprefix() . '_comments USING btree (createtime);' . 'CREATE UNIQUE INDEX ' . $this->dbcon->getDbprefix() . '_cronjobs_cjname ON ' . $this->dbcon->getDbprefix() . '_cronjobs USING btree (cjname);' . 'CREATE INDEX ' . $this->dbcon->getDbprefix() . '_cronjobs_lastexec ON ' . $this->dbcon->getDbprefix() . '_cronjobs USING btree (lastexec);' . 'CREATE UNIQUE INDEX ' . $this->dbcon->getDbprefix() . '_config_config_name ON ' . $this->dbcon->getDbprefix() . '_config USING btree (config_name);'; $path = \fpcm\classes\baseconfig::$tempDir . 'indices.sql'; file_put_contents($path, $data); $res = $res && $this->dbcon->execSqlFile($path); unlink($path); } if (!method_exists($this->dbcon, 'checkTableStructure')) { return $res; } $files = \fpcm\classes\database::getTableFiles(); foreach ($files as $file) { $this->dbcon->checkTableStructure(basename($file, '.yml')); } if ($this->checkVersion('3.4.0-b2')) { $res = $res && $this->dbcon->insert(\fpcm\classes\database::tableCronjobs, "cjname, lastexec, execinterval", "'removeRevisions', 0, 2419200"); } if ($this->checkVersion('3.4.0-b5')) { $this->dbcon->createIndex(\fpcm\classes\database::tableRevisions, 'hashsum_idx', 'hashsum'); } if ($this->checkVersion('3.4.0-rc1')) { $this->dbcon->alter(\fpcm\classes\database::tableFiles, 'DROP', 'subfolder', '', false); } return $res; }