Changeset 21555 for branches/version-2_12-dev
- Timestamp:
- 2012/02/27 17:39:02 (12 years ago)
- Location:
- branches/version-2_12-dev
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_12-dev/data/class/SC_View.php
r21552 r21555 128 128 function prefilter_transforme($source, &$smarty) { 129 129 // フックポイントを実行. 130 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance( );130 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance($this->objPage->plugin_activate_flg); 131 131 $objPlugin->doAction('prefilterTransforme', array(&$source, $this->objPage)); 132 132 return $source; … … 141 141 function outputfilter_transforme($source, &$smarty) { 142 142 // フックポイントを実行. 143 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance( );143 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance($this->objPage->plugin_activate_flg); 144 144 $objPlugin->doAction('outputfilterTransforme', array(&$source, $this->objPage)); 145 145 return $source; -
branches/version-2_12-dev/data/class/helper/SC_Helper_Plugin.php
r21552 r21555 44 44 * @return void 45 45 */ 46 function load( ) {46 function load($plugin_activate_flg = true) { 47 47 48 48 if (!defined('CONFIG_REALFILE') || !file_exists(CONFIG_REALFILE)) return; // インストール前 49 49 if (SC_Utils_Ex::sfIsInstallFunction()) return; // インストール中 50 50 if ($plugin_activate_flg === false) return; 51 51 // 有効なプラグインを取得 52 52 $arrPluginDataList = $this->getEnablePlugin(); … … 58 58 if (array_search($arrPluginData['plugin_code'], $arrPluginDirectory) !== false) { 59 59 // プラグイン本体ファイルをrequire. 60 require_once PLUGIN_UPLOAD_REALDIR . $arrPluginData['plugin_code'] . '/' . $arrPluginData[' plugin_code'] . '.php';60 require_once PLUGIN_UPLOAD_REALDIR . $arrPluginData['plugin_code'] . '/' . $arrPluginData['class_name'] . '.php'; 61 61 62 62 // プラグインのインスタンス生成. 63 $objPlugin = new $arrPluginData[' plugin_code']($arrPluginData);63 $objPlugin = new $arrPluginData['class_name']($arrPluginData); 64 64 // メンバ変数にプラグインのインスタンスを登録. 65 65 $this->arrPluginInstances[$arrPluginData['plugin_id']] = $objPlugin; … … 79 79 * @return object SC_Helper_Pluginオブジェクト 80 80 */ 81 function getSingletonInstance( ) {81 function getSingletonInstance($plugin_activate_flg = true) { 82 82 if (!isset($GLOBALS['_SC_Helper_Plugin_instance']) || is_null($GLOBALS['_SC_Helper_Plugin_instance'])) { 83 83 $GLOBALS['_SC_Helper_Plugin_instance'] =& new SC_Helper_Plugin_Ex(); 84 $GLOBALS['_SC_Helper_Plugin_instance']->load( );84 $GLOBALS['_SC_Helper_Plugin_instance']->load($plugin_activate_flg); 85 85 } 86 86 return $GLOBALS['_SC_Helper_Plugin_instance']; … … 156 156 */ 157 157 function getPluginByPluginId($plugin_id) { 158 $objQuery = new SC_Query_Ex();158 $objQuery =& SC_Query_Ex::getSingletonInstance(); 159 159 $col = '*'; 160 160 $table = 'dtb_plugin'; … … 171 171 */ 172 172 function getPluginByPluginCode($plugin_code) { 173 $objQuery = new SC_Query_Ex();173 $objQuery =& SC_Query_Ex::getSingletonInstance(); 174 174 $col = '*'; 175 175 $table = 'dtb_plugin'; … … 179 179 } 180 180 181 /** 182 * プラグインIDをキーにプラグインを削除する。 183 * 184 * @param string $plugin_id プラグインID. 185 * @return array プラグインの基本情報. 186 */ 187 function deletePluginByPluginId($plugin_id) { 188 $objQuery =& SC_Query_Ex::getSingletonInstance(); 189 $objQuery->begin(); 190 $where = 'plugin_id = ?'; 191 $objQuery->delete('dtb_plugin', $where, array($plugin_id)); 192 $objQuery->delete('dtb_plugin_hookpoint', $where, array($plugin_id)); 193 } 194 181 195 /** 182 196 * プラグインディレクトリの取得 -
branches/version-2_12-dev/data/class/pages/LC_Page.php
r21546 r21555 72 72 /** 店舗基本情報 */ 73 73 var $arrSiteInfo; 74 75 /** プラグインを実行フラグ */ 76 var $plugin_activate_flg = true; 74 77 75 78 // }}} … … 94 97 $this->objDisplay->detectDevice()); 95 98 99 // プラグインを実行するかを判定します. 100 // プラグイン管理ではプラグインが実行されません 101 if ($_SERVER['PHP_SELF'] !== ROOT_URLPATH . ADMIN_DIR . 'system/plugin.php') { 102 $this->plugin_activate_flg = false; 103 } 104 96 105 // スーパーフックポイントを実行. 97 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance( );106 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance($this->plugin_activate_flg); 98 107 $objPlugin->doAction('lc_page_preProcess', array($this)); 99 108 … … 121 130 122 131 // HeadNaviにpluginテンプレートを追加する. 123 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance( );132 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance($this->plugin_activate_flg); 124 133 $objPlugin->setHeadNaviBlocs($this->arrPageLayout['HeadNavi']); 125 134 … … 169 178 /** 170 179 * テンプレート取得 171 * 180 * 172 181 */ 173 182 function getTemplate() { … … 177 186 /** 178 187 * テンプレート設定(ポップアップなどの場合) 179 * 188 * 180 189 */ 181 190 function setTemplate($template) { -
branches/version-2_12-dev/data/class/pages/admin/LC_Page_Admin.php
r21546 r21555 36 36 // }}} 37 37 // {{{ functions 38 38 39 39 /** 40 40 * Page を初期化する. … … 64 64 // ディスプレイクラス生成 65 65 $this->objDisplay = new SC_Display_Ex(); 66 if ($_SERVER['PHP_SELF'] !== ROOT_URLPATH . ADMIN_DIR . 'system/plugin.php') { 67 // スーパーフックポイントを実行. 68 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 69 $objPlugin->doAction('lc_page_preProcess', array($this)); 66 67 // プラグインを実行するかを判定します. 68 // プラグイン管理ではプラグインが実行されません 69 if ($_SERVER['PHP_SELF'] === ROOT_URLPATH . ADMIN_DIR . 'system/plugin.php') { 70 $this->plugin_activate_flg = false; 70 71 } 72 73 // スーパーフックポイントを実行. 74 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance($this->plugin_activate_flg); 75 76 $objPlugin->doAction('lc_page_preProcess', array($this)); 71 77 72 78 // トランザクショントークンの検証と生成 … … 90 96 function sendResponse() { 91 97 92 if ($_SERVER['PHP_SELF'] !== ROOT_URLPATH . ADMIN_DIR . 'system/plugin.php') { 98 // HeadNaviにpluginテンプレートを追加する. 99 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance($this->plugin_activate_flg); 100 $objPlugin->setHeadNaviBlocs($this->arrPageLayout['HeadNavi']); 93 101 94 // HeadNaviにpluginテンプレートを追加する. 95 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 96 $objPlugin->setHeadNaviBlocs($this->arrPageLayout['HeadNavi']); 97 98 // スーパーフックポイントを実行. 99 $objPlugin->doAction('lc_page_process', array($this)); 100 } 102 // スーパーフックポイントを実行. 103 $objPlugin->doAction('lc_page_process', array($this)); 101 104 102 105 $this->objDisplay->prepare($this, true); -
branches/version-2_12-dev/data/class/pages/admin/system/LC_Page_Admin_System_Plugin.php
r21552 r21555 71 71 $mode = $this->getMode(); 72 72 // パラメーター情報の初期化 73 $this-> lfInitParam($objFormParam, $mode);73 $this->initParam($objFormParam, $mode); 74 74 $objFormParam->setParam($_POST); 75 75 … … 82 82 $this->arrErr = $this->checkUploadFile($file_key); 83 83 if ($this->isError($this->arrErr) === false) { 84 $plugin_file = $_FILES[$file_key]; 85 $plugin_file_name = $plugin_file['name']; 86 $plugin_code = $this->getPluginCode($plugin_file_name); 87 88 // 既に登録されていないか判定. 89 if ($this->isInstalledPlugin($plugin_code) === false) { 90 // インストール処理. 91 $this->arrErr = $this->installPlugin($plugin_code, $plugin_file_name); 92 if ($this->isError($this->arrErr) === false) { 93 // コンパイルファイルのクリア処理 94 SC_Utils_Ex::clearCompliedTemplate(); 95 $this->tpl_onload = "alert('プラグインをインストールしました。');"; 96 } 97 } else { 98 $this->arrErr[$file_key] = '※ 既にインストールされているプラグインです。<br/>'; 84 $upload_file = $_FILES[$file_key]; 85 $upload_file_file_name = $upload_file['name']; 86 // インストール処理. 87 $this->arrErr = $this->installPlugin($upload_file_file_name, "plugin_file"); 88 if ($this->isError($this->arrErr) === false) { 89 // コンパイルファイルのクリア処理 90 SC_Utils_Ex::clearCompliedTemplate(); 91 $this->tpl_onload = "alert('プラグインをインストールしました。');"; 99 92 } 100 93 } … … 105 98 $this->arrErr = $objFormParam->checkError(); 106 99 if ($this->isError($this->arrErr) === false) { 107 $plugin_code = $objFormParam->getValue('plugin_code');108 100 $plugin_id = $objFormParam->getValue('plugin_id'); 109 101 $plugin = SC_Helper_Plugin_Ex::getPluginByPluginId($plugin_id); 110 111 $this->arrErr = $this->uninstallPlugin($plugin_id, $plugin_code); 112 // 完了メッセージアラート設定. 102 $this->arrErr = $this->uninstallPlugin($plugin); 113 103 if ($this->isError($this->arrErr) === false) { 114 104 // コンパイルファイルのクリア処理 … … 126 116 // プラグイン取得. 127 117 $plugin = SC_Helper_Plugin_Ex::getPluginByPluginId($plugin_id); 128 // ステータス更新 129 $this->arrErr = $this->enablePlugin($plugin_id, $plugin['plugin_code']); 118 $this->arrErr = $this->enablePlugin($plugin); 130 119 if ($this->isError($this->arrErr) === false) { 131 120 // コンパイルファイルのクリア処理 … … 143 132 // プラグイン取得. 144 133 $plugin = SC_Helper_Plugin_Ex::getPluginByPluginId($plugin_id); 145 // プラグインを無効にします 146 $this->arrErr = $this->disablePlugin($plugin_id, $plugin['plugin_code']); 134 $this->arrErr = $this->disablePlugin($plugin); 147 135 if ($this->isError($this->arrErr) === false) { 148 136 // コンパイルファイルのクリア処理 … … 157 145 $this->arrErr = $objFormParam->checkError(); 158 146 if ($this->isError($this->arrErr) === false) { 159 $ plugin_code = $objFormParam->getValue('plugin_code'); // アップデート対象のプラグインコード160 $this->arrErr = $this->checkUploadFile($ plugin_code);161 147 $target_plugin_code = $objFormParam->getValue('plugin_code'); // アップデート対象のプラグインコード 148 $this->arrErr = $this->checkUploadFile($target_plugin_code); 149 162 150 if ($this->isError($this->arrErr) === false) { 163 $update_plugin_file = $_FILES[$ plugin_code];151 $update_plugin_file = $_FILES[$target_plugin_code]; 164 152 $update_plugin_file_name = $update_plugin_file['name']; // アップデートファイルのファイル名. 165 $update_plugin_code = $this->getPluginCode($update_plugin_file_name); // アップデートファイルのプラグインコード. 166 // インストールされているプラグインかを判定. 167 if ($this->isInstalledPlugin($update_plugin_code) === true && $update_plugin_code === $plugin_code) { 168 // インストール処理. 169 $this->arrErr = $this->updatePlugin($plugin_code, $update_plugin_file_name, $plugin_code, $objFormParam->getValue('plugin_id')); 170 if ($this->isError($this->arrErr) === false) { 171 // コンパイルファイルのクリア処理 172 SC_Utils_Ex::clearCompliedTemplate(); 173 $this->tpl_onload = "alert('プラグインをアップデートしました。');"; 174 } 175 } else { 176 $this->arrErr[$plugin_code] = '※ プラグインファイルが不正です。<br/>'; 153 // インストール処理. 154 $target_plugin = SC_Helper_Plugin_Ex::getPluginByPluginCode($target_plugin_code); 155 $this->arrErr = $this->updatePlugin($target_plugin, $update_plugin_file_name, $target_plugin_code); 156 if ($this->isError($this->arrErr) === false) { 157 // コンパイルファイルのクリア処理 158 SC_Utils_Ex::clearCompliedTemplate(); 159 $this->tpl_onload = "alert('プラグインをアップデートしました。');"; 177 160 } 178 161 } … … 230 213 * @return void 231 214 */ 232 function lfInitParam(&$objFormParam, $mode) {215 function initParam(&$objFormParam, $mode) { 233 216 $objFormParam->addParam('mode', 'mode', INT_LEN, '', array('ALPHA_CHECK', 'MAX_LENGTH_CHECK')); 234 217 $objFormParam->addParam('plugin_id', 'plugin_id', INT_LEN, '', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); … … 246 229 * @return void 247 230 */ 248 function lfInitUploadFile(&$objUpFile, $key) {231 function initUploadFile(&$objUpFile, $key) { 249 232 $objUpFile->addFile('プラグインファイル', $key, explode(',', PLUGIN_EXTENSION), FILE_SIZE, true, 0, 0, false); 250 233 } … … 284 267 285 268 /** 286 * アップロードされた圧縮ファイルが正常であるかを検証します.287 *288 * @param string $file_path チェックするファイルのパス289 * @param string $plugin_code プラグインコード290 * @return array エラー情報を格納した連想配列.291 */292 function checkPluginFile($file_path, $plugin_code, $key_file) {293 $arrErr = array();294 295 // Archive_Tarを生成します.296 $tar_obj = new Archive_Tar($file_path);297 298 // 圧縮ファイル名とディレクトリ名が同一であるかを判定します.299 if ($this->checkUploadFileName($tar_obj, $plugin_code) === false) {300 $arrErr[$key_file] = '※ 圧縮ファイル名 or フォルダ名が不正です。圧縮ファイル名とフォルダ名が同一である事を確認して下さい。<br/>';301 return $arrErr;302 }303 304 // 必須となるクラスファイルが含まれているかを判定します.305 $plugin_main_file = $plugin_code . '/' . $plugin_code . '.php';306 if ($this->checkContainsFile($tar_obj, $plugin_main_file) === false) {307 $arrErr[$key_file] = '※ ファイルに' . $plugin_code . '.phpが含まれていません。<br/>';308 return $arrErr;309 }310 return $arrErr;311 }312 313 /**314 269 * ファイル名からプラグインコードを取得する. 315 270 * … … 366 321 * 367 322 * @param string $plugin_code プラグインコード. 368 * @param string $ plugin_file_name プラグインファイル名.323 * @param string $key キー. 369 324 * @return array エラー情報を格納した連想配列. 370 325 */ 371 function installPlugin($plugin_code, $plugin_file_name) { 372 373 $arrErr = array(); 374 // 保存ディレクトリ. 375 $plugin_dir = $this->getPluginDir($plugin_code); 376 377 // ファイルをチェックし展開します. 378 $arrErr = $this->unpackPluginFile($plugin_file_name, $plugin_dir, $plugin_code, 'plugin_file'); 379 if ($this->isError($arrErr) === true) { 380 return $arrErr; 381 } 382 383 // プラグインファイルを読み込み. 384 $plugin_class_file_path = $this->getPluginFilePath($plugin_code); 385 $arrErr = $this->requirePluginFile($plugin_class_file_path, 'plugin_file'); 386 if ($this->isError($arrErr) === true) { 387 SC_Utils_Ex::deleteFile($plugin_dir); 388 return $arrErr; 389 } 390 326 function installPlugin($upload_file_file_name, $key) { 327 328 $arrErr = array(); 329 // ファイルをチェックし一時展開用ディレクトリに展開します. 330 $arrErr = $this->unpackPluginFile($upload_file_file_name, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $key); 331 if ($this->isError($arrErr) === true) { 332 return $arrErr; 333 } 334 // plugin_infoを読み込み. 335 $arrErr = $this->requirePluginFile(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR . "plugin_info.php", $key); 336 if ($this->isError($arrErr) === true) { 337 $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR); 338 return $arrErr; 339 } 340 391 341 // リフレクションオブジェクトを生成. 392 $objReflection = new ReflectionClass($plugin_code); 393 394 // プラグインクラスに必須となるパラメータが定義されているかチェック. 395 $arrErr = $this->checkPluginConstants($objReflection); 396 if ($this->isError($arrErr) === true) { 397 SC_Utils_Ex::deleteFile($plugin_dir); 342 $objReflection = new ReflectionClass("plugin_info"); 343 // プラグインクラスに必須となるパラメータが正常に定義されているかチェックします. 344 $arrErr = $this->checkPluginConstants($objReflection, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR); 345 if ($this->isError($arrErr) === true) { 346 $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR); 347 return $arrErr; 348 } 349 350 // プラグインコード 351 $plugin_code = $objReflection->getConstant('PLUGIN_CODE'); 352 // プラグイン名 353 $plugin_name = $objReflection->getConstant('PLUGIN_NAME'); 354 355 // 既にインストールされていないかを判定. 356 if ($this->isInstalledPlugin($plugin_code) === true) { 357 $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR); 358 $arrErr['plugin_file'] = "※ " . $plugin_name . "は既にインストールされています。<br/>"; 398 359 return $arrErr; 399 360 } … … 401 362 // プラグイン情報をDB登録 402 363 if ($this->registerData($objReflection) === false) { 403 SC_Utils_Ex::deleteFile($plugin_dir);364 $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR); 404 365 $arrErr['plugin_file'] = '※ DB登録に失敗しました。<br/>'; 405 366 return $arrErr; 406 367 } 407 368 369 // プラグイン保存ディレクトリを作成し、一時展開用ディレクトリから移動します. 370 $plugin_dir_path = PLUGIN_UPLOAD_REALDIR . $plugin_code . "/"; 371 $this->makeDir($plugin_dir_path); 372 SC_Utils_Ex::copyDirectory(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $plugin_dir_path); 373 374 // プラグイン情報を取得 375 $plugin = SC_Helper_Plugin_Ex::getPluginByPluginCode($plugin_code); 376 377 // クラスファイルを読み込み. 378 $plugin_class_file_path = $plugin_dir_path . $plugin['class_name'] . ".php"; 379 $arrErr = $this->requirePluginFile($plugin_class_file_path, $key); 380 if ($this->isError($arrErr) === true) { 381 $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $plugin['plugin_id']); 382 return $arrErr; 383 } 408 384 // プラグインhtmlディレクトリ作成 409 385 $plugin_html_dir = PLUGIN_HTML_REALDIR . $plugin_code; 410 386 $this->makeDir($plugin_html_dir); 411 412 $plugin = SC_Helper_Plugin_Ex::getPluginByPluginCode($plugin_code); 413 $arrErr = $this->execPlugin($plugin['plugin_id'], $plugin_code, 'install'); 414 415 return $arrErr; 387 388 $arrErr = $this->execPlugin($plugin['plugin_id'], $plugin['class_name'], 'install'); 389 if ($this->isError($arrErr) === true) { 390 $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $plugin['plugin_id'], $plugin_html_dir); 391 return $arrErr; 392 } 393 394 // 不要なファイルの削除 395 SC_Utils_EX::deleteFile(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, false); 396 return $arrErr; 397 } 398 399 /** 400 * ロールバック処理 401 * インストール失敗時などに不要な一時ファイルを削除します. 402 * 403 * @param string $temp_dir インストール・アップデート時の一時展開用ディレクトリのパス. 404 * @param string $plugin_id プラグインID. 405 * @param string $plugin_html_dir プラグイン毎に生成されるhtmlディレクトリのパス. 406 */ 407 function rollBack($temp_dir, $plugin_id = "", $plugin_html_dir ="") { 408 // 一時ディレクトリを削除. 409 SC_Utils_Ex::deleteFile($temp_dir, false); 410 // DBからプラグイン情報を削除 411 if(empty($plugin_id) === false) SC_Helper_Plugin_Ex::deletePluginByPluginId($plugin_id); 412 // htmlディレクトリを削除 413 if(empty($plugin_html_dir) === false) SC_Utils_Ex::deleteFile($plugin_html_dir, true); 416 414 } 417 415 … … 422 420 * @return array エラー情報を格納した連想配列. 423 421 */ 424 function checkPluginConstants(ReflectionClass $objReflection) { 425 $arrErr = array(); 426 427 if ($objReflection->getConstant('PLUGIN_NAME') === false) { 422 function checkPluginConstants(ReflectionClass $objReflection, $unpack_dir) { 423 $arrErr = array(); 424 $plugin_code = $objReflection->getConstant('PLUGIN_CODE'); 425 if ($plugin_code === false) { 426 $arrErr['plugin_file'] = '※ PLUGIN_CODEが定義されていません。<br/>'; 427 return $arrErr; 428 } 429 $plugin_name = $objReflection->getConstant('PLUGIN_NAME'); 430 if ($plugin_name === false) { 428 431 $arrErr['plugin_file'] = '※ PLUGIN_NAMEが定義されていません。<br/>'; 432 return $arrErr; 433 } 434 $class_name = $objReflection->getConstant('CLASS_NAME') . ".php"; 435 if ($class_name === false ||file_exists($unpack_dir . $class_name) === false) { 436 $arrErr['plugin_file'] = '※ CLASS_NAMEが定義されていません。またはCLASS_NAMEが正しく定義されていません。<br/>'; 429 437 return $arrErr; 430 438 } … … 445 453 return $arrErr; 446 454 } 447 448 455 $objErr = new SC_CheckError_Ex($objReflection->getConstants()); 449 $objErr->doFunc(array('PLUGIN_NAME', 'PLUGIN_NAME', STEXT_LEN), array('MAX_LENGTH_CHECK',)); 456 $objErr->doFunc(array('PLUGIN_CODE', 'PLUGIN_CODE', STEXT_LEN), array('MAX_LENGTH_CHECK','GRAPH_CHECK')); 457 $objErr->doFunc(array('PLUGIN_NAME', 'PLUGIN_NAME', STEXT_LEN), array('MAX_LENGTH_CHECK')); 458 $objErr->doFunc(array('CLASS_NAME', 'CLASS_NAME', STEXT_LEN), array('MAX_LENGTH_CHECK','GRAPH_CHECK')); 450 459 $objErr->doFunc(array('PLUGIN_VERSION', 'PLUGIN_VERSION', STEXT_LEN), array('MAX_LENGTH_CHECK')); 451 460 $objErr->doFunc(array('COMPLIANT_VERSION', 'COMPLIANT_VERSION', STEXT_LEN), array('MAX_LENGTH_CHECK')); … … 471 480 * プラグインをアップデートします. 472 481 * 473 * @param string $plugin_code プラグインコード. 474 * @param string $plugin_file_name プラグインファイル名. 475 * @param string $file_key ファイルキー. 476 * @param string $plugin_id プラグインID. 482 * @param string $target_plugin_code アップデートするプラグインコード. 483 * @param string $upload_file_name アップロードファイル名. 477 484 * @return array エラー情報を格納した連想配列. 478 485 */ 479 function updatePlugin($plugin_code, $plugin_file_name, $file_key, $plugin_id) { 480 // アップロードしたファイルのエラーチェック. 481 $arrErr = array(); 482 483 // 展開先ディレクトリ. 484 $temp_plugin_dir = DOWNLOADS_TEMP_DIR . $plugin_code; 486 function updatePlugin($target_plugin, $upload_file_name) { 487 $arrErr = array(); 485 488 486 489 // ファイルをチェックし展開します. 487 $arrErr = $this->unpackPluginFile($plugin_file_name, $temp_plugin_dir, $plugin_code, $plugin_code); 488 if ($this->isError($arrErr) === true) { 489 return $arrErr; 490 } 491 490 $arrErr = $this->unpackPluginFile($upload_file_name, DOWNLOADS_TEMP_PLUGIN_UPDATE_DIR, $target_plugin['plugin_code']); 491 if ($this->isError($arrErr) === true) { 492 return $arrErr; 493 } 494 495 // plugin_infoを読み込み. 496 $arrErr = $this->requirePluginFile(DOWNLOADS_TEMP_PLUGIN_UPDATE_DIR . "plugin_info.php", $target_plugin['plugin_code']); 497 if ($this->isError($arrErr) === true) { 498 $this->rollBack(DOWNLOADS_TEMP_PLUGIN_UPDATE_DIR); 499 return $arrErr; 500 } 501 502 // リフレクションオブジェクトを生成. 503 $objReflection = new ReflectionClass("plugin_info"); 504 // プラグインクラスに必須となるパラメータが正常に定義されているかチェックします. 505 $arrErr = $this->checkPluginConstants($objReflection, DOWNLOADS_TEMP_PLUGIN_UPDATE_DIR); 506 if ($this->isError($arrErr) === true) { 507 $this->rollBack(DOWNLOADS_TEMP_PLUGIN_UPDATE_DIR); 508 return $arrErr; 509 } 510 511 // プラグインのクラス名を取得; 512 $class_name = $objReflection->getConstant('CLASS_NAME'); 513 492 514 // 展開されたディレクトリからプラグインクラスファイルを読み込みます. 493 $update_plugin_class_path = $temp_plugin_dir . '/' . $plugin_code . '.php'; 494 $arrErr = $this->requirePluginFile($update_plugin_class_path, $file_key); 495 if ($this->isError($arrErr) === true) { 515 $update_plugin_class_path = DOWNLOADS_TEMP_PLUGIN_UPDATE_DIR . $class_name . '.php'; 516 $arrErr = $this->requirePluginFile($update_plugin_class_path, $target_plugin['plugin_code']); 517 if ($this->isError($arrErr) === true) { 518 $this->rollBack(DOWNLOADS_TEMP_PLUGIN_UPDATE_DIR); 496 519 return $arrErr; 497 520 } 498 521 // プラグインクラスファイルのUPDATE処理を実行. 499 $arrErr = $this->execPlugin($plugin_id, $ plugin_code, 'update');500 522 $arrErr = $this->execPlugin($plugin_id, $class_name, 'update'); 523 501 524 // 保存ディレクトリの削除. 502 SC_Utils_Ex::deleteFile( $temp_plugin_dir);503 525 SC_Utils_Ex::deleteFile(DOWNLOADS_TEMP_PLUGIN_UPDATE_DIR, false); 526 504 527 return $arrErr; 505 528 } … … 508 531 * ファイルをアップロードし、解凍先のディレクトリに解凍します. 509 532 * 510 * @param string $unpack_file_name ファイル名 511 * @param string $unpack_dir 解凍ディレクトリ 512 * @param string $plugin_code プラグインコード. 533 * @param string $unpack_file_name 解凍ファイル名 534 * @param string $unpack_dir 解凍先ディレクトリ 513 535 * @param string $file_key ファイルキー 514 536 * @return array エラー情報を格納した連想配列. 515 537 */ 516 function unpackPluginFile($unpack_file_name, $unpack_dir, $ plugin_code, $file_key) {538 function unpackPluginFile($unpack_file_name, $unpack_dir, $file_key) { 517 539 $arrErr = array(); 518 540 // 解凍ディレクトリディレクトリを作成し、一時ディレクトリからファイルを移動 519 541 $objUpFile = new SC_UploadFile_Ex(PLUGIN_TEMP_REALDIR, $unpack_dir); 520 $this-> lfInitUploadFile($objUpFile, $file_key);542 $this->initUploadFile($objUpFile, $file_key); 521 543 $arrErr = $objUpFile->makeTempFile($file_key, false); 522 544 if ($this->isError($arrErr) === true) { 523 545 return $arrErr; 524 546 } 525 547 526 548 // 正常にアップロードされているかをチェック. 527 549 $arrErr = $objUpFile->checkEXISTS($file_key); … … 529 551 return $arrErr; 530 552 } 531 532 // 圧縮ファイルの中をチェック.533 $plugin_file_path = PLUGIN_TEMP_REALDIR . $unpack_file_name;534 $arrErr = $this->checkPluginFile($plugin_file_path, $plugin_code, $file_key);535 if ($this->isError($arrErr) === true) {536 return $arrErr;537 }538 539 // 展開用ディレクトリを作成し、一時ディレクトリから移動540 $this->makeDir($unpack_dir);541 553 $objUpFile->moveTempFile(); 542 543 554 // 解凍 544 $update_plugin_file_path = $unpack_dir . '/' .$unpack_file_name;555 $update_plugin_file_path = $unpack_dir . $unpack_file_name; 545 556 if (!SC_Helper_FileManager_Ex::unpackFile($update_plugin_file_path)) { 546 557 $arrErr['plugin_file'] = '※ 解凍に失敗しました。<br/>'; … … 553 564 * プラグインをアンインストールします. 554 565 * 555 * @param int $plugin_id プラグインID. 556 * @param string $plugin_code プラグインコード. 566 * @param array $plugin プラグイン情報を確認した連想配列. 557 567 * @return array エラー情報を格納した連想配列. 558 568 */ 559 function uninstallPlugin($plugin _id, $plugin_code) {569 function uninstallPlugin($plugin) { 560 570 $arrErr = array(); 561 571 // プラグインファイルを読み込みます. 562 $plugin_class_path = $this->getPluginFilePath($plugin_code); 563 $arrErr = $this->requirePluginFile($plugin_class_path, 'plugin_error'); 564 if ($this->isError($arrErr) === true) { 565 return $arrErr; 566 } 567 568 // modeで指定されたメソッドを実行. 569 $arrErr = $this->execPlugin($plugin_id, $plugin_code, 'uninstall'); 572 $plugin_class_file_path = PLUGIN_UPLOAD_REALDIR . $plugin['plugin_code'] . "/" . $plugin['class_name'] . ".php"; 573 $arrErr = $this->requirePluginFile($plugin_class_file_path, 'plugin_error'); 574 if ($this->isError($arrErr) === true) { 575 return $arrErr; 576 } 577 578 $arrErr = $this->execPlugin($plugin['plugin_id'], $plugin['class_name'], 'uninstall'); 570 579 if ($this->isError($arrErr) === true) { 571 580 return $arrErr; 572 581 } 573 582 // プラグインの削除処理. 574 $arrErr = $this->deletePlugin($plugin _id, $plugin_code);583 $arrErr = $this->deletePlugin($plugin['plugin_id'], $plugin['plugin_code']); 575 584 576 585 return $arrErr; … … 580 589 * プラグインを有効にします. 581 590 * 582 * @param int $plugin_id プラグインID. 583 * @param string $plugin_code プラグインコード. 591 * @param array $plugin プラグイン情報を確認した連想配列. 584 592 * @return array $arrErr エラー情報を格納した連想配列. 585 593 */ 586 function enablePlugin($plugin _id, $plugin_code) {594 function enablePlugin($plugin) { 587 595 $arrErr = array(); 588 596 // クラスファイルを読み込み. 589 $plugin_class_path = $this->getPluginFilePath($plugin_code); 590 $arrErr = $this->requirePluginFile($plugin_class_path, 'plugin_error'); 591 if ($this->isError($arrErr) === true) { 592 return $arrErr; 593 } 597 $plugin_class_file_path = PLUGIN_UPLOAD_REALDIR . $plugin['plugin_code'] . "/" . $plugin['class_name'] . ".php"; 598 $arrErr = $this->requirePluginFile($plugin_class_file_path, 'plugin_error'); 599 if ($this->isError($arrErr) === true) { 600 return $arrErr; 601 } 602 // 有効化処理を実行します. 603 $arrErr = $this->execPlugin($plugin['plugin_id'], $plugin['class_name'], 'enable'); 604 if ($this->isError($arrErr) === true) { 605 return $arrErr; 606 } 607 // プラグインを有効にします. 608 $this->updatePluginEnable($plugin['plugin_id'], PLUGIN_ENABLE_TRUE); 609 610 return $arrErr; 611 } 612 613 /** 614 * プラグインを無効にします. 615 * 616 * @param array $plugin プラグイン情報を確認した連想配列. 617 * @return array $arrErr エラー情報を格納した連想配列. 618 */ 619 function disablePlugin($plugin) { 620 $arrErr = array(); 621 // クラスファイルを読み込み. 622 $plugin_class_file_path = PLUGIN_UPLOAD_REALDIR . $plugin['plugin_code'] . "/" . $plugin['class_name'] . ".php"; 623 $arrErr = $this->requirePluginFile($plugin_class_file_path, 'plugin_error'); 624 if ($this->isError($arrErr) === true) { 625 return $arrErr; 626 } 627 594 628 // 無効化処理を実行します. 595 $arrErr = $this->execPlugin($plugin_id, $plugin_code, 'enable'); 596 if ($this->isError($arrErr) === true) { 597 return $arrErr; 598 } 599 // プラグインを有効にします. 600 $this->updatePluginEnable($plugin_id, PLUGIN_ENABLE_TRUE); 601 602 return $arrErr; 603 } 604 605 /** 606 * プラグインを無効にします. 607 * 608 * @param int $plugin_id プラグインID. 609 * @param string $plugin_code プラグインコード. 610 * @return array エラー情報を格納した連想配列. 611 */ 612 function disablePlugin($plugin_id, $plugin_code) { 613 $arrErr = array(); 614 // クラスファイルを読み込み. 615 $plugin_class_path = $this->getPluginFilePath($plugin_code); 616 $arrErr = $this->requirePluginFile($plugin_class_path, 'plugin_error'); 617 if ($this->isError($arrErr) === true) { 618 return $arrErr; 619 } 620 621 // 無効化処理を実行します. 622 $arrErr = $this->execPlugin($plugin_id, $plugin_code, 'disable'); 629 $arrErr = $this->execPlugin($plugin['plugin_id'], $plugin['class_name'], 'disable'); 623 630 if ($this->isError($arrErr) === true) { 624 631 return $arrErr; 625 632 } 626 633 // プラグインを無効にします. 627 $this->updatePluginEnable($plugin _id, PLUGIN_ENABLE_FALSE);634 $this->updatePluginEnable($plugin['plugin_id'], PLUGIN_ENABLE_FALSE); 628 635 629 636 return $arrErr; … … 663 670 $arr_sqlval_plugin['plugin_id'] = $plugin_id; 664 671 $arr_sqlval_plugin['plugin_name'] = $objReflection->getConstant('PLUGIN_NAME'); 665 $arr_sqlval_plugin['plugin_code'] = $objReflection->getName(); 672 $arr_sqlval_plugin['plugin_code'] = $objReflection->getConstant('PLUGIN_CODE'); 673 $arr_sqlval_plugin['class_name'] = $objReflection->getConstant('CLASS_NAME'); 666 674 $arr_sqlval_plugin['author'] = $objReflection->getConstant('AUTHOR'); 667 675 // AUTHOR_SITE_URLが定義されているか判定. … … 703 711 * @param string $file_path クラスのpath 704 712 * @param string $key エラー情報のキー. 705 * @return array エラー情報を格納した連想配列.713 * @return array $arrErr エラー情報を格納した連想配列. 706 714 */ 707 715 function requirePluginFile($file_path, $key) { … … 710 718 require_once $file_path; 711 719 } else { 712 $arrErr[$key] = '※ ' . $file_path .'の読み込みに失敗しました。<br/>';720 $arrErr[$key] = "※ " . $file_path ."の読み込みに失敗しました。<br/>"; 713 721 } 714 722 return $arrErr; … … 724 732 * 725 733 */ 726 function execPlugin($plugin_id, $ plugin_code, $exec_func) {727 $arrErr = array(); 728 if (method_exists($ plugin_code, $exec_func) === true) {729 call_user_func(array($ plugin_code, $exec_func), $plugin_id);734 function execPlugin($plugin_id, $class_name, $exec_func) { 735 $arrErr = array(); 736 if (method_exists($class_name, $exec_func) === true) { 737 call_user_func(array($class_name, $exec_func), $plugin_id); 730 738 } else { 731 $arrErr['plugin_error'] = '※ ' . $plugin_code . '.php に' . $exec_func . 'が見つかりません。<br/>'; 732 } 733 739 $arrErr['plugin_error'] = '※ ' . $class_name . '.php に' . $exec_func . 'が見つかりません。<br/>'; 740 } 734 741 return $arrErr; 735 742 } … … 817 824 818 825 /** 819 * 圧縮ファイル名と中のディレクトリ名が同じであるかをチェックします.820 *821 * @param Archive_Tar $tar_obj Archive_Tarクラスのオブジェクト822 * @param string $dir_name ディレクトリ名.823 * @return boolean824 */825 function checkUploadFileName($tar_obj, $dir_name) {826 // ファイル一覧を取得827 $arrayFile = $tar_obj->listContent();828 // ディレクトリ名と圧縮ファイル名が同じかをチェック.829 $pattern = ('|^'. preg_quote($dir_name) ."\/(.*?)|");830 foreach ($arrayFile as $value) {831 if(preg_match($pattern, $value['filename'])) return true;832 }833 return false;;834 }835 836 /**837 826 * ディレクトリを作成します. 838 827 * … … 879 868 * @return boolean. 880 869 */ 881 function isError($ arrErr) {882 if (is_array($ arrErr) && count($arrErr) > 0) {870 function isError($error) { 871 if (is_array($error) && count($error) > 0) { 883 872 return true; 884 873 } -
branches/version-2_12-dev/data/class/util/SC_Utils.php
r21552 r21555 2189 2189 SC_Utils_Ex::deleteFile(MOBILE_COMPILE_REALDIR, false); 2190 2190 } 2191 2192 /** 2193 * 指定されたパスの配下を再帰的にコピーします. 2194 * @param string $imageDir コピー元ディレクトリのパス 2195 * @param string $destDir コピー先ディレクトリのパス 2196 */ 2197 function copyDirectory($source_path, $dest_path) { 2198 2199 $handle=opendir($source_path); 2200 while($filename = readdir($handle)) { 2201 if($filename === '.' || $filename === '..') continue; 2202 $cur_path = $source_path . $filename; 2203 $dest_file_path = $dest_path . $filename; 2204 if(is_dir($cur_path)) { 2205 // ディレクトリの場合 2206 // コピー先に無いディレクトリの場合、ディレクトリ作成. 2207 if(!empty($filename) && !file_exists($dest_file_path)) mkdir($dest_file_path); 2208 SC_Utils_EX::copyDirectory($cur_path . '/', $dest_file_path . '/'); 2209 } else { 2210 if(file_exists($dest_file_path)) unlink($dest_file_path); 2211 copy($cur_path, $dest_file_path); 2212 } 2213 } 2214 } 2215 2191 2216 } -
branches/version-2_12-dev/data/mtb_constants_init.php
r21547 r21555 389 389 /** アップロード一時ディレクトリ */ 390 390 define('DOWNLOADS_TEMP_DIR', DATA_REALDIR . "downloads/tmp/"); 391 /** プラグイン一時展開用ディレクトリ(アップデート用) */ 392 define('DOWNLOADS_TEMP_PLUGIN_UPDATE_DIR', DOWNLOADS_TEMP_DIR . "plugin_update/"); 393 /** プラグイン一時展開用ディレクトリ(インストール用) */ 394 define('DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR', DOWNLOADS_TEMP_DIR . "plugin_install/"); 391 395 /** プラグイン 外部ファイルURL */ 392 396 define('PLUGIN_HTML_URL', USER_URL . PLUGIN_DIR); -
branches/version-2_12-dev/html/install/sql/insert_data.sql
r21547 r21555 1230 1230 INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('PLUGIN_HTML_URL', 'USER_URL . PLUGIN_DIR', 610, 'プラグイン 外部ファイルURL'); 1231 1231 INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('PLUGIN_EXTENSION', '"tar,tar.gz"', 611, 'プラグインファイル登録可能拡張子(カンマ区切り)'); 1232 INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('DOWNLOADS_TEMP_PLUGIN_UPDATE_DIR', 'DOWNLOADS_TEMP_DIR . "plugin_update/"', 612, 'プラグイン一時展開用ディレクトリ(アップデート用)'); 1233 INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR', 'DOWNLOADS_TEMP_DIR . "plugin_install/"', 613, 'プラグイン一時展開用ディレクトリ(インストール用)'); 1232 1234 INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('DOWNLOAD_DAYS_LEN', '3', 700, '日数桁数'); 1233 1235 INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('DOWNLOAD_EXTENSION', '"zip,lzh,jpg,jpeg,gif,png,mp3,pdf,csv"', 701, 'ダウンロードファイル登録可能拡張子(カンマ区切り)"');
Note: See TracChangeset
for help on using the changeset viewer.