/** * Page のアクション. * * @return void */ public function action() { // パラメーター管理クラス $objFormParam = Application::alias('eccube.form_param'); $this->initParam($objFormParam); $objFormParam->setParam($_POST); $mode = $this->getMode(); switch ($mode) { // ON/OFF case 'update_use': // エラーチェック $this->arrErr = $objFormParam->checkError(); if (!(count($this->arrErr) > 0)) { $arrPluginHookpointUse = $objFormParam->getValue('plugin_hookpoint_use'); $plugin_hookpoint_id = $objFormParam->getValue('plugin_hookpoint_id'); $use_flg = $arrPluginHookpointUse[$plugin_hookpoint_id] == 1 ? 1 : 0; PluginUtil::setPluginHookPointChangeUse($plugin_hookpoint_id, $use_flg); // Smartyコンパイルファイルをクリア Utils::clearCompliedTemplate(); } break; default: break; } // DBからプラグイン情報を取得 $arrRet = PluginUtil::getPluginHookPointList(); // 競合チェック $this->arrConflict = PluginUtil::checkConflictPlugin(); $arrHookPoint = array(); foreach ($arrRet as $key => $val) { $arrHookPoint[$val['hook_point']][$val['plugin_id']] = $val; } $this->arrHookPoint = $arrHookPoint; }
/** * 有効なプラグインのロード. プラグインエンジンが有効になっていない場合は * プラグインエンジン自身のインストール処理を起動する * * @return void */ public function load($plugin_activate_flg = true) { if (!defined('CONFIG_REALFILE') || !file_exists(CONFIG_REALFILE)) { return; } // インストール前 if (GcUtils::isInstallFunction()) { return; } // インストール中 if ($plugin_activate_flg === false) { return; } // 有効なプラグインを取得 $arrPluginDataList = PluginUtil::getEnablePlugin(); // pluginディレクトリを取得 $arrPluginDirectory = PluginUtil::getPluginDirectory(); foreach ($arrPluginDataList as $arrPluginData) { // プラグイン本体ファイル名が取得したプラグインディレクトリ一覧にある事を確認 if (array_search($arrPluginData['plugin_code'], $arrPluginDirectory) !== false) { $plugin_file_path = PLUGIN_UPLOAD_REALDIR . $arrPluginData['plugin_code'] . '/' . $arrPluginData['class_name'] . '.php'; // プラグイン本体ファイルが存在しない場合 if (!file_exists($plugin_file_path)) { // エラー出力 $msg = 'プラグイン本体ファイルが存在しない。当該プラグインを無視して続行する。'; $msg .= 'ファイル=' . var_export($plugin_file_path, true) . '; '; trigger_error($msg, E_USER_WARNING); // 次のプラグインへ続行 continue 1; } // プラグイン本体ファイルをrequire. require_once $plugin_file_path; // プラグインのインスタンス生成. $objPlugin = new $arrPluginData['class_name']($arrPluginData); // メンバ変数にプラグインのインスタンスを登録. $this->arrPluginInstances[$arrPluginData['plugin_id']] = $objPlugin; $this->arrPluginIds[] = $arrPluginData['plugin_id']; // ローカルフックポイントの登録. $this->registerLocalHookPoint($objPlugin, $arrPluginData['priority']); // スーパーフックポイントの登録. $this->registerSuperHookPoint($objPlugin, HOOK_POINT_PREPROCESS, 'preProcess', $arrPluginData['priority']); $this->registerSuperHookPoint($objPlugin, HOOK_POINT_PROCESS, 'process', $arrPluginData['priority']); } } }
/** * plugin_idをキーにdtb_plugin, dtb_plugin_hookpointから物理削除します. * * @param int $plugin_id プラグインID. * @param string $plugin_code プラグインコード. * @return array $arrErr エラー情報を格納した連想配列. */ public function deletePlugin($plugin_id, $plugin_code) { $arrErr = array(); $objQuery = Application::alias('eccube.query'); $objQuery->begin(); PluginUtil::deletePluginByPluginId($plugin_id); if (Application::alias('eccube.helper.file_manager')->deleteFile($this->getPluginDir($plugin_code)) === false) { // TODO エラー処理 } if (Application::alias('eccube.helper.file_manager')->deleteFile($this->getHtmlPluginDir($plugin_code)) === false) { // TODO エラー処理 } $objQuery->commit(); return $arrErr; }