Changeset 21478 for branches/version-2_12-dev
- Timestamp:
- 2012/02/10 18:49:02 (12 years ago)
- Location:
- branches/version-2_12-dev/data/class
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_12-dev/data/class/helper/SC_Helper_Plugin.php
r21458 r21478 54 54 foreach ($arrPluginDataList as $arrPluginData) { 55 55 // プラグイン本体ファイル名が取得したプラグインディレクトリ一覧にある事を確認 56 if (array_search($arrPluginData['plugin_code'], $arrPluginDirectory) !== false 56 if (array_search($arrPluginData['plugin_code'], $arrPluginDirectory) !== false) { 57 57 // プラグイン本体ファイルをrequire. 58 58 require_once(PLUGIN_UPLOAD_REALDIR . $arrPluginData['plugin_code'] . '/' . $arrPluginData['plugin_code'] . '.php'); 59 59 60 60 // プラグインのインスタンス生成. 61 61 $objPlugin = new $arrPluginData['plugin_code']($arrPluginData); … … 166 166 return $plugin; 167 167 } 168 168 169 169 /** 170 170 * プラグインコードをキーにプラグインを取得する。 -
branches/version-2_12-dev/data/class/pages/admin/LC_Page_Admin.php
r21458 r21478 64 64 // ディスプレイクラス生成 65 65 $this->objDisplay = new SC_Display_Ex(); 66 if ($_SERVER['PHP_SELF'] !== ROOT_URLPATH . ADMIN_DIR . "system/plugin.php") {66 if ($_SERVER['PHP_SELF'] !== ROOT_URLPATH . ADMIN_DIR . "system/plugin.php") { 67 67 // スーパーフックポイントを実行. 68 68 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 69 69 $objPlugin->doAction('lc_page_preProcess', array($this)); 70 70 } 71 71 72 72 // トランザクショントークンの検証と生成 73 73 $this->doValidToken(true); … … 90 90 function sendResponse() { 91 91 92 if ($_SERVER['PHP_SELF'] !== ROOT_URLPATH . ADMIN_DIR . "system/plugin.php") {93 92 if ($_SERVER['PHP_SELF'] !== ROOT_URLPATH . ADMIN_DIR . "system/plugin.php") { 93 94 94 // プラグインによってトランスフォームされたテンプレートがあればセットする 95 95 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); … … 100 100 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 101 101 $objPlugin->doAction('lc_page_process', array($this)); 102 102 103 103 // HeadNaviにpluginテンプレートを追加する. 104 104 $objTemplateTransformList = SC_Plugin_Template_Transform_List::getSingletonInstance(); 105 105 $objTemplateTransformList->setHeadNaviBlocs($this->arrPageLayout['HeadNavi']); 106 106 } 107 107 108 108 $this->objDisplay->prepare($this, true); 109 109 $this->objDisplay->response->write(); -
branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php
r21455 r21478 78 78 $objFormParam->setParam($_POST); 79 79 $objFormParam->convParam(); 80 80 81 81 // フックポイントを実行. 82 82 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 83 83 $objPlugin->doAction('lc_page_admin_products_category_action_start', array($this)); 84 84 85 85 switch ($this->getMode()) { 86 86 // カテゴリ登録/編集実行 -
branches/version-2_12-dev/data/class/pages/admin/system/LC_Page_Admin_System_Plugin.php
r21467 r21478 81 81 $file_key = "plugin_file"; 82 82 $this->arrErr = $this->checkUploadFile($file_key); 83 if ($this->isError($this->arrErr) === false){83 if ($this->isError($this->arrErr) === false) { 84 84 $plugin_file = $_FILES[$file_key]; 85 85 $plugin_file_name = $plugin_file['name']; … … 87 87 88 88 // 既に登録されていないか判定. 89 if ($this->isInstalledPlugin($plugin_code) === false){89 if ($this->isInstalledPlugin($plugin_code) === false) { 90 90 // インストール処理. 91 91 $this->arrErr = $this->installPlugin($plugin_code, $plugin_file_name); 92 if ($this->isError($this->arrErr) === false) {92 if ($this->isError($this->arrErr) === false) { 93 93 // テンプレート再生成. 94 94 $this->remakeTemplate(); … … 104 104 // エラーチェック 105 105 $this->arrErr = $objFormParam->checkError(); 106 if ($this->isError($this->arrErr) === false) {106 if ($this->isError($this->arrErr) === false) { 107 107 $plugin_code = $objFormParam->getValue('plugin_code'); 108 108 $plugin_id = $objFormParam->getValue('plugin_id'); 109 109 110 $this->arrErr = $this->uninstallPlugin( 110 $this->arrErr = $this->uninstallPlugin($plugin_id, $plugin_code); 111 111 // 完了メッセージアラート設定. 112 if ($this->isError($this->arrErr) === false) {112 if ($this->isError($this->arrErr) === false) { 113 113 $plugin = SC_Helper_Plugin_Ex::getPluginByPluginId($plugin_id); 114 114 // テンプレート再生成. … … 122 122 // エラーチェック 123 123 $arrErr = $objFormParam->checkError(); 124 if ($this->isError($arrErr) === false) {124 if ($this->isError($arrErr) === false) { 125 125 $plugin_id = $objFormParam->getValue('plugin_id'); 126 126 // プラグイン取得. … … 128 128 // ステータス更新 129 129 $arrErr = $this->enablePlugin($plugin_id, $plugin['plugin_code']); 130 if ($this->isError($arrErr) === false) {130 if ($this->isError($arrErr) === false) { 131 131 // テンプレート再生成. 132 132 $this->remakeTemplate(); … … 140 140 // エラーチェック 141 141 $arrErr = $objFormParam->checkError(); 142 if ($this->isError($arrErr) === false) {142 if ($this->isError($arrErr) === false) { 143 143 $plugin_id = $objFormParam->getValue('plugin_id'); 144 144 // プラグイン取得. … … 146 146 // プラグインを無効にします 147 147 $arrErr = $this->disablePlugin($plugin_id, $plugin['plugin_code']); 148 if ($this->isError($arrErr) === false) {148 if ($this->isError($arrErr) === false) { 149 149 // テンプレート再生成. 150 150 $this->remakeTemplate(); … … 158 158 // エラーチェック 159 159 $this->arrErr = $objFormParam->checkError(); 160 if ($this->isError($this->arrErr) === false){160 if ($this->isError($this->arrErr) === false) { 161 161 $plugin_code = $objFormParam->getValue('plugin_code'); // アップデート対象のプラグインコード 162 162 $this->arrErr = $this->checkUploadFile($plugin_code); 163 164 if ($this->isError($this->arrErr) === false){163 164 if ($this->isError($this->arrErr) === false) { 165 165 $update_plugin_file = $_FILES[$plugin_code]; 166 166 $update_plugin_file_name = $update_plugin_file['name']; // アップデートファイルのファイル名. 167 167 $update_plugin_code = $this->getPluginCode($update_plugin_file_name); // アップデートファイルのプラグインコード. 168 168 // インストールされているプラグインかを判定. 169 if ($this->isInstalledPlugin($update_plugin_code) === true && $update_plugin_code === $plugin_code){169 if ($this->isInstalledPlugin($update_plugin_code) === true && $update_plugin_code === $plugin_code) { 170 170 // インストール処理. 171 171 $this->arrErr = $this->updatePlugin($plugin_code, $update_plugin_file_name, $plugin_code, $objFormParam->getValue('plugin_id')); 172 if ($this->isError($this->arrErr) === false) {172 if ($this->isError($this->arrErr) === false) { 173 173 // テンプレート再生成. 174 174 $this->remakeTemplate(); … … 204 204 // 設定ファイルがあるかを判定. 205 205 $plugins[$key]['config_flg'] = $this->isContainsFile(PLUGIN_UPLOAD_REALDIR . $plugin['plugin_code'], "config.php"); 206 if ($plugins[$key]['enable'] === PLUGIN_ENABLE_TRUE){206 if ($plugins[$key]['enable'] === PLUGIN_ENABLE_TRUE) { 207 207 // 競合するプラグインがあるかを判定. 208 208 $plugins[$key]['conflict_message']= $this->checkConflictPlugin($plugin['plugin_id']); … … 261 261 // ファイル名チェック 262 262 $objErr->doFunc(array('プラグインファイル', $file_key), array("FILE_NAME_CHECK")); 263 263 264 264 return $objErr->arrErr; 265 265 } 266 266 267 267 /** 268 268 * 既にインストールされているプラグインかを判定します. … … 273 273 function isInstalledPlugin($plugin_code) { 274 274 $plugin = SC_Helper_Plugin_Ex::getPluginByPluginCode($plugin_code); 275 if (!empty($plugin)) {275 if (!empty($plugin)) { 276 276 return true; 277 277 } … … 288 288 function checkPluginFile($file_path, $plugin_code, $key_file) { 289 289 $arrErr = array(); 290 290 291 291 // Archive_Tarを生成します. 292 292 $tar_obj = new Archive_Tar($file_path); 293 293 294 294 // 圧縮ファイル名とディレクトリ名が同一であるかを判定します. 295 if ($this->checkUploadFileName($tar_obj, $plugin_code) === false) {295 if ($this->checkUploadFileName($tar_obj, $plugin_code) === false) { 296 296 $arrErr[$key_file] = "※ 圧縮ファイル名 or フォルダ名が不正です。圧縮ファイル名とフォルダ名が同一である事を確認して下さい。<br/>"; 297 297 return $arrErr; 298 298 } 299 299 300 300 // 必須となるクラスファイルが含まれているかを判定します. 301 301 $plugin_main_file = $plugin_code . "/" . $plugin_code . ".php"; 302 if ($this->checkContainsFile($tar_obj, $plugin_main_file) === false) {302 if ($this->checkContainsFile($tar_obj, $plugin_main_file) === false) { 303 303 $arrErr[$key_file] = "※ ファイルに" . $plugin_code . ".phpが含まれていません。<br/>"; 304 304 return $arrErr; … … 321 321 $array_file_name = array_diff($array_ext, array('tar','gz')); 322 322 // 結合 323 $plugin_code = implode( '.', $array_file_name);323 $plugin_code = implode('.', $array_file_name); 324 324 return $plugin_code; 325 325 } … … 335 335 return $plugin_dir_path; 336 336 } 337 337 338 338 /** 339 339 * プラグインHTMLディレクトリのパスを取得する. … … 357 357 return $plugin_file_path; 358 358 } 359 359 360 360 /** 361 361 * プラグインをインストールします. … … 366 366 */ 367 367 function installPlugin($plugin_code, $plugin_file_name) { 368 368 369 369 $arrErr = array(); 370 370 // 保存ディレクトリ. 371 371 $plugin_dir = $this->getPluginDir($plugin_code); 372 372 373 373 // ファイルをチェックし展開します. 374 374 $arrErr = $this->unpackPluginFile($plugin_file_name, $plugin_dir, $plugin_code, "plugin_file"); … … 376 376 return $arrErr; 377 377 } 378 378 379 379 // プラグインファイルを読み込み. 380 380 $plugin_class_file_path = $this->getPluginFilePath($plugin_code); … … 384 384 return $arrErr; 385 385 } 386 386 387 387 // リフレクションオブジェクトを生成. 388 388 $objReflection = new ReflectionClass($plugin_code); 389 389 390 390 // プラグインクラスに必須となるパラメータが定義されているかチェック. 391 391 $arrErr = $this->checkPluginConstants($objReflection); … … 394 394 return $arrErr; 395 395 } 396 396 397 397 // プラグイン情報をDB登録 398 398 if ($this->registerData($objReflection) === false) { … … 401 401 return $arrErr; 402 402 } 403 403 404 404 // プラグインhtmlディレクトリ作成 405 405 $plugin_html_dir = PLUGIN_HTML_REALDIR . $plugin_code; 406 406 $this->makeDir($plugin_html_dir); 407 407 408 408 $plugin = SC_Helper_Plugin_Ex::getPluginByPluginCode($plugin_code); 409 409 $arrErr = $this->execPlugin($plugin['plugin_id'], $plugin_code, "install"); … … 411 411 return $arrErr; 412 412 } 413 413 414 414 /** 415 415 * プラグインクラス内の定数をチェックします. … … 420 420 function checkPluginConstants(ReflectionClass $objReflection) { 421 421 $arrErr = array(); 422 423 if ($objReflection->getConstant("PLUGIN_NAME") === false){422 423 if ($objReflection->getConstant("PLUGIN_NAME") === false) { 424 424 $arrErr['plugin_file'] = "※ PLUGIN_NAMEが定義されていません。<br/>"; 425 425 return $arrErr; 426 426 } 427 if ($objReflection->getConstant("PLUGIN_VERSION") === false){427 if ($objReflection->getConstant("PLUGIN_VERSION") === false) { 428 428 $arrErr['plugin_file'] = "※ PLUGIN_VERSIONが定義されていません。<br/>"; 429 429 return $arrErr; 430 430 } 431 if ($objReflection->getConstant("COMPLIANT_VERSION") === false){431 if ($objReflection->getConstant("COMPLIANT_VERSION") === false) { 432 432 $arrErr['plugin_file'] = "※ COMPLIANT_VERSIONが定義されていません。<br/>"; 433 433 return $arrErr; 434 434 } 435 if ($objReflection->getConstant("AUTHOR") === false){435 if ($objReflection->getConstant("AUTHOR") === false) { 436 436 $arrErr['plugin_file'] = "※ AUTHORが定義されていません。<br/>"; 437 437 return $arrErr; 438 438 } 439 if ($objReflection->getConstant("DESCRIPTION") === false){439 if ($objReflection->getConstant("DESCRIPTION") === false) { 440 440 $arrErr['plugin_file'] = "※ DESCRIPTIONが定義されていません。<br/>"; 441 441 return $arrErr; 442 442 } 443 443 444 444 $objErr = new SC_CheckError_Ex($objReflection->getConstants()); 445 $objErr->doFunc(array('PLUGIN_NAME', 'PLUGIN_NAME', STEXT_LEN), array("MAX_LENGTH_CHECK", 445 $objErr->doFunc(array('PLUGIN_NAME', 'PLUGIN_NAME', STEXT_LEN), array("MAX_LENGTH_CHECK",)); 446 446 $objErr->doFunc(array('PLUGIN_VERSION', 'PLUGIN_VERSION', STEXT_LEN), array("MAX_LENGTH_CHECK")); 447 447 $objErr->doFunc(array('COMPLIANT_VERSION', 'COMPLIANT_VERSION', STEXT_LEN), array("MAX_LENGTH_CHECK")); 448 448 $objErr->doFunc(array('AUTHOR', 'AUTHOR', STEXT_LEN), array("MAX_LENGTH_CHECK")); 449 449 $objErr->doFunc(array('DESCRIPTION', 'DESCRIPTION', SLTEXT_LEN), array("MAX_LENGTH_CHECK")); 450 if ($objReflection->getConstant("PLUGIN_SITE_URL") !== false){450 if ($objReflection->getConstant("PLUGIN_SITE_URL") !== false) { 451 451 $objErr->doFunc(array('PLUGIN_SITE_URL', 'PLUGIN_SITE_URL', URL_LEN), array("MAX_LENGTH_CHECK","GRAPH_CHECK")); 452 452 } 453 if ($objReflection->getConstant("AUTHOR_SITE_URL") !== false){453 if ($objReflection->getConstant("AUTHOR_SITE_URL") !== false) { 454 454 $objErr->doFunc(array('AUTHOR_SITE_URL', 'AUTHOR_SITE_URL', URL_LEN), array("MAX_LENGTH_CHECK","GRAPH_CHECK")); 455 455 } 456 456 // エラー内容を出力用の配列にセットします. 457 if ($this->isError($objErr->arrErr)){457 if ($this->isError($objErr->arrErr)) { 458 458 $arrErr['plugin_file'] = ""; 459 foreach ($objErr->arrErr as $error) {459 foreach ($objErr->arrErr as $error) { 460 460 $arrErr['plugin_file'] .= $error; 461 461 } … … 463 463 return $arrErr; 464 464 } 465 465 466 466 /** 467 467 * プラグインをアップデートします. … … 476 476 // アップロードしたファイルのエラーチェック. 477 477 $arrErr = array(); 478 478 479 479 // 展開先ディレクトリ. 480 480 $temp_plugin_dir = DOWNLOADS_TEMP_DIR . $plugin_code; 481 481 482 482 // ファイルをチェックし展開します. 483 483 $arrErr = $this->unpackPluginFile($plugin_file_name, $temp_plugin_dir, $plugin_code, $plugin_code); … … 485 485 return $arrErr; 486 486 } 487 487 488 488 // 展開されたディレクトリからプラグインクラスファイルを読み込みます. 489 489 $update_plugin_class_path = $temp_plugin_dir . "/" . $plugin_code . ".php"; … … 494 494 // プラグインクラスファイルのUPDATE処理を実行. 495 495 $arrErr = $this->execPlugin($plugin_id, $plugin_code, "update"); 496 496 497 497 // 保存ディレクトリの削除. 498 498 SC_Utils_Ex::deleteFile($temp_plugin_dir); … … 500 500 return $arrErr; 501 501 } 502 502 503 503 /** 504 504 * ファイルをアップロードし、解凍先のディレクトリに解凍します. … … 536 536 $this->makeDir($unpack_dir); 537 537 $objUpFile->moveTempFile(); 538 538 539 539 // 解凍 540 540 $update_plugin_file_path = $unpack_dir . "/" . $unpack_file_name; … … 545 545 return $arrErr; 546 546 } 547 547 548 548 /** 549 549 * プラグインをアンインストールします. … … 561 561 return $arrErr; 562 562 } 563 563 564 564 // modeで指定されたメソッドを実行. 565 565 $arrErr = $this->execPlugin($plugin_id, $plugin_code, "uninstall"); … … 569 569 // プラグインの削除処理. 570 570 $arrErr = $this->deletePlugin($plugin_id, $plugin_code); 571 572 return $arrErr; 573 } 574 571 572 return $arrErr; 573 } 574 575 575 /** 576 576 * プラグインを有効にします. … … 595 595 // プラグインを有効にします. 596 596 $this->updatePluginEnable($plugin_id, PLUGIN_ENABLE_TRUE); 597 598 return $arrErr; 599 } 600 597 598 return $arrErr; 599 } 600 601 601 /** 602 602 * プラグインを無効にします. … … 614 614 return $arrErr; 615 615 } 616 616 617 617 // 無効化処理を実行します. 618 618 $arrErr = $this->execPlugin($plugin_id, $plugin_code, "disable"); … … 622 622 // プラグインを無効にします. 623 623 $this->updatePluginEnable($plugin_id, PLUGIN_ENABLE_FALSE); 624 624 625 625 return $arrErr; 626 626 } … … 659 659 // フックポイントをDB登録. 660 660 $hook_point = $objReflection->getConstant("HOOK_POINTS"); 661 if ($hook_point !== false){661 if ($hook_point !== false) { 662 662 $array_hook_point = explode(",", $hook_point); 663 if (is_array($array_hook_point)){663 if (is_array($array_hook_point)) { 664 664 foreach ($array_hook_point as $hook_point) { 665 665 $arr_sqlval_plugin_hookpoint = array(); … … 685 685 function requirePluginFile($file_path, $key) { 686 686 $arrErr = array(); 687 if (file_exists($file_path)) {687 if (file_exists($file_path)) { 688 688 require_once $file_path; 689 689 } else { … … 706 706 // インスタンスの生成. 707 707 $objPlugin = new $plugin_code(); 708 if (method_exists($objPlugin, $exec_func) === true){708 if (method_exists($objPlugin, $exec_func) === true) { 709 709 $arrErr = $objPlugin->$exec_func($plugin_id); 710 710 } else { … … 752 752 function deletePlugin($plugin_id, $plugin_code) { 753 753 $arrErr = array(); 754 754 755 755 $objQuery =& SC_Query_Ex::getSingletonInstance(); 756 756 $objQuery->begin(); … … 758 758 $objQuery->delete("dtb_plugin", $where, array($plugin_id)); 759 759 $objQuery->delete("dtb_plugin_hookpoint", $where, array($plugin_id)); 760 761 if ($objQuery->commit()){762 if (SC_Utils_Ex::deleteFile($this->getPluginDir($plugin_code)) === false){760 761 if ($objQuery->commit()) { 762 if (SC_Utils_Ex::deleteFile($this->getPluginDir($plugin_code)) === false) { 763 763 // TODO エラー処理 764 764 } 765 766 if (SC_Utils_Ex::deleteFile($this->getHtmlPluginDir($plugin_code)) === false){765 766 if (SC_Utils_Ex::deleteFile($this->getHtmlPluginDir($plugin_code)) === false) { 767 767 // TODO エラー処理 768 768 } … … 770 770 return $arrErr; 771 771 } 772 772 773 773 /** 774 774 * ファイルがあるかを判定します. … … 780 780 function isContainsFile($plugin_dir, $file_name) { 781 781 if (file_exists($plugin_dir) && is_dir($plugin_dir)) { 782 if ($handle = opendir($plugin_dir)){783 while (($item = readdir($handle)) !== false) {782 if ($handle = opendir($plugin_dir)) { 783 while (($item = readdir($handle)) !== false) { 784 784 if ($item === $file_name) return true; 785 785 } … … 789 789 return false; 790 790 } 791 791 792 792 /** 793 793 * アーカイブ内に指定のファイルが存在するかを判定します. … … 823 823 return false;; 824 824 } 825 825 826 826 /** 827 827 * ディレクトリを作成します. … … 831 831 function makeDir($dir_path){ 832 832 // ディレクトリ作成 833 if (!file_exists($dir_path)) {833 if (!file_exists($dir_path)) { 834 834 mkdir($dir_path); 835 835 } … … 846 846 $table = "dtb_plugin_hookpoint"; 847 847 $where = "plugin_id = ?"; 848 $conflictHookPoints = $objQuery->select( 849 848 $conflictHookPoints = $objQuery->select("*", $table, $where, array($plugin_id)); 849 850 850 $conflict_alert_message = ""; 851 851 foreach ($conflictHookPoints as $conflictHookPoint) { … … 853 853 $table = "dtb_plugin_hookpoint AS T1 LEFT JOIN dtb_plugin AS T2 ON T1.plugin_id = T2.plugin_id"; 854 854 $where = "T1.hook_point = ? AND NOT T1.plugin_id = ? AND T2.enable = " . PLUGIN_ENABLE_TRUE . " GROUP BY T1.plugin_id"; 855 $conflictPlugins = $objQuery->select( 856 855 $conflictPlugins = $objQuery->select("T1.plugin_id, T2.plugin_name", $table, $where, array($conflictHookPoint['hook_point'], $conflictHookPoint['plugin_id'])); 856 857 857 foreach ($conflictPlugins as $conflictPlugin) { 858 858 $conflict_alert_message =+ "* " . $conflictPlugin['plugin_name'] . "と競合する可能性があります。<br/>"; … … 861 861 return $conflict_alert_message; 862 862 } 863 863 864 864 /** 865 865 * エラー情報が格納されているか判定します. … … 869 869 */ 870 870 function isError($arrErr) { 871 if (is_array($arrErr) && count($arrErr) > 0){871 if (is_array($arrErr) && count($arrErr) > 0) { 872 872 return true; 873 873 }
Note: See TracChangeset
for help on using the changeset viewer.