/** * set up * * @return void */ public function setUp() { parent::setUp(); $this->Content = ClassRegistry::init('Content'); BcSite::flash(); }
/** * 初期データを読み込む * * @param string $dbDataPattern 初期データのパターン * @param string $currentTheme テーマ名 * @return bool */ protected function _load_default_data_pattern($dbDataPattern, $currentTheme = '') { list($theme, $pattern) = explode('.', $dbDataPattern); if (!$this->BcManager->checkDefaultDataPattern($pattern, $theme)) { $this->setMessage('初期データのバージョンが違うか、初期データの構造が壊れています。', true); return false; } $excludes = array('plugins', 'dblogs', 'users'); $User = ClassRegistry::init('User'); /* データを削除する */ $this->BcManager->resetAllTables(null, $excludes); $result = true; /* コアデータ */ if (!$this->BcManager->loadDefaultDataPattern('default', null, $pattern, $theme, 'core', $excludes)) { $result = false; $this->log($dbDataPattern . " の初期データのロードに失敗しました。"); } /* プラグインデータ */ $corePlugins = Configure::read('BcApp.corePlugins'); $plugins = array_merge($corePlugins, BcUtil::getCurrentThemesPlugins()); foreach ($plugins as $plugin) { $this->BcManager->loadDefaultDataPattern('default', null, $pattern, $theme, $plugin, $excludes); } if (!$result) { /* 指定したデータセットでの読み込みに失敗した場合、コアのデータ読み込みを試みる */ if (!$this->BcManager->loadDefaultDataPattern('default', null, 'default', 'core', 'core', $excludes)) { $this->log("コアの初期データのロードに失敗しました。"); $result = false; } foreach ($corePlugins as $corePlugin) { if (!$this->BcManager->loadDefaultDataPattern('default', null, 'default', 'core', $corePlugin, $excludes)) { $this->log("コアのプラグインの初期データのロードに失敗しました。"); $result = false; } } if ($result) { $this->setMessage('初期データの読み込みに失敗しましたので baserCMSコアの初期データを読み込みました。', true); } else { $this->setMessage('初期データの読み込みに失敗しました。データが不完全な状態です。正常に動作しない可能性があります。', true); } } clearAllCache(); // メール受信テーブルの作成 App::uses('MailMessage', 'Mail.Model'); $MailMessage = new MailMessage(); if (!$MailMessage->reconstructionAll()) { $this->log('メールプラグインのメール受信用テーブルの生成に失敗しました。'); $result = false; } clearAllCache(); ClassRegistry::flush(); BcSite::flash(); if ($currentTheme) { $siteConfigs = array('SiteConfig' => array('theme' => $currentTheme)); $this->SiteConfig->saveKeyValue($siteConfigs); } if (!$this->Page->createAllPageTemplate()) { $result = false; $this->log('初期データの読み込み中にページテンプレートの生成に失敗しました。' . '「Pages」フォルダに書き込み権限が付与されていない可能性があります。' . '権限設定後、テーマの適用をやり直すか、表示できないページについて固定ページ管理より更新処理を行ってください。'); } // システムデータの初期化 // TODO $this->BcManager->initSystemData() は、$this->Page->createAllPageTemplate() の // 後に呼出さないと $this->Page の実体が何故か AppModel にすりかわってしまい、 // createAllPageTemplate メソッドが呼び出せないので注意 if (!$this->BcManager->initSystemData(null, array('excludeUsers' => true))) { $result = false; $this->log('システムデータの初期化に失敗しました。'); } // ユーザーデータの初期化 $UserGroup = ClassRegistry::init('UserGroup'); $adminGroupId = $UserGroup->field('id', array('UserGroup.name' => 'admins')); $users = $User->find('all', array('recursive' => -1)); foreach ($users as $user) { $user['User']['user_group_id'] = $adminGroupId; unset($user['User']['password']); if (!$User->save($user)) { $result = false; $this->log('ユーザーデータの初期化に失敗しました。手動で各ユーザーのユーザーグループの設定を行なってください。'); } if (!$User->applyDefaultFavorites($user['User']['id'], $user['User']['user_group_id'])) { $result = false; $this->log('ユーザーのよく使う項目データの初期化に失敗しました。手動で各ユーザーのよく使う項目の設定を行なってください。'); } } $Db = ConnectionManager::getDataSource('default'); if ($Db->config['datasource'] == 'Database/BcPostgres') { $Db->updateSequence(); } // システム基本設定の更新 $siteConfigs = array('SiteConfig' => array('email' => $this->siteConfigs['email'], 'google_analytics_id' => $this->siteConfigs['google_analytics_id'], 'first_access' => null, 'version' => $this->siteConfigs['version'])); $this->SiteConfig->saveKeyValue($siteConfigs); return $result; }
/** * データメンテナンス * * @param string $mode * @return void */ public function admin_maintenance($mode = '') { switch ($mode) { case 'backup': set_time_limit(0); $this->_backupDb(); break; case 'restore': set_time_limit(0); if (!$this->request->data) { $this->notFound(); } $messages = array(); if ($this->_restoreDb($this->request->data)) { $messages[] = 'データの復元が完了しました。'; $error = false; } else { $messages[] = 'データの復元に失敗しました。ログの確認を行なって下さい。'; $error = true; } // Pageモデルがレストア処理でAppModelで初期化されClassRegistryにセットされている為 ClassRegistry::flush(); BcSite::flash(); if (!$error && !$this->Page->createAllPageTemplate()) { $messages[] = 'ページテンプレートの生成に失敗しました。<br />表示できないページはページ管理より更新処理を行ってください。'; } if ($messages) { $this->setMessage(implode('<br />', $messages), $error); } clearAllCache(); $this->redirect(array('action' => 'maintenance')); break; } $this->pageTitle = 'データメンテナンス'; $this->help = 'tools_maintenance'; }
/** * set up * * @return void */ public function setUp() { parent::setUp(); $this->BcContentsRoute = new BcContentsRoute('/', [], []); BcSite::flash(); }
/** * アップデートを実行する * * アップデートスクリプトを読み込む為、 * よく使われるような変数名はダブらないように * アンダースコアを二つつける * * @param string $targetVersion * @param string $sourceVersion * @param string $plugin * @return boolean */ protected function _update($plugin = '') { $targetVersion = $this->getBaserVersion($plugin); $sourceVersion = $this->getSiteVersion($plugin); $path = $this->_getUpdateFolder($plugin); $updaters = $this->_getUpdaters($plugin); if (!$plugin) { $name = 'baserCMSコア'; } else { $name = $this->Plugin->field('title', array('name' => $plugin)) . 'プラグイン'; } $this->setUpdateLog($name . ' ' . $targetVersion . ' へのアップデートを開始します。'); if ($updaters) { asort($updaters); foreach ($updaters as $version => $updateVerPoint) { $this->setUpdateLog('アップデートプログラム ' . $version . ' を実行します。'); ClassRegistry::flush(); BcSite::flash(); $this->_execScript($plugin, $version); } } ClassRegistry::flush(); BcSite::flash(); if (!isset($updaters['test'])) { if (!$plugin) { /* サイト基本設定にバージョンを保存 */ $SiteConfigClass = ClassRegistry::init('SiteConfig'); $SiteConfigClass->cacheQueries = false; $data['SiteConfig']['version'] = $targetVersion; $result = $SiteConfigClass->saveKeyValue($data); } else { // 1.6.7 では plugins テーブルの構造が変わったので、find でデータが取得できないのでスキップする // DB の再接続を行えば取得できるかも if ($targetVersion == '1.6.7') { $result = true; } else { $data = $this->Plugin->find('first', array('conditions' => array('name' => $plugin))); $data['Plugin']['version'] = $targetVersion; $result = $this->Plugin->save($data); } } } else { $result = true; } $this->BcManager->deployAdminAssets(); $this->setUpdateLog($name . ' ' . $targetVersion . ' へのアップデートが完了しました。'); return $result; }
/** * フィールド名を変更する * * @param array $options [ new / old / table ] * @param array $column * @return boolean */ public function renameField($options) { extract($options); if (!isset($new) || !isset($old)) { return false; } if (!isset($table)) { $table = $this->useTable; } $this->_schema = null; $db = ConnectionManager::getDataSource($this->useDbConfig); $options = ['new' => $new, 'old' => $old, 'table' => $table]; $ret = $db->renameColumn($options); $this->deleteModelCache(); ClassRegistry::flush(); BcSite::flash(); return $ret; }