Changeset 21794
- Timestamp:
- 2012/04/27 12:17:09 (11 years ago)
- Location:
- branches/version-2_12-dev/data/class
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_12-dev/data/class/pages/admin/ownersstore/LC_Page_Admin_OwnersStore.php
r21783 r21794 347 347 // リフレクションオブジェクトを生成. 348 348 $objReflection = new ReflectionClass('plugin_info'); 349 $arrPluginInfo = $this->getPluginInfo($objReflection); 349 350 // プラグインクラスに必須となるパラメータが正常に定義されているかチェックします. 350 351 $arrErr = $this->checkPluginConstants($objReflection, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR); … … 355 356 356 357 // プラグインコード 357 $plugin_code = $ objReflection->getConstant('PLUGIN_CODE');358 $plugin_code = $arrPluginInfo['PLUGIN_CODE']; 358 359 // プラグイン名 359 $plugin_name = $ objReflection->getConstant('PLUGIN_NAME');360 $plugin_name = $arrPluginInfo['PLUGIN_NAME']; 360 361 361 362 // 既にインストールされていないかを判定. … … 367 368 368 369 // プラグイン情報をDB登録 369 if ($this->registerData($ objReflection) === false) {370 if ($this->registerData($arrPluginInfo) === false) { 370 371 $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR); 371 372 $arrErr['plugin_file'] = '※ DB登録に失敗しました。<br/>'; … … 425 426 426 427 /** 428 * プラグイン情報を取得します. 429 * 430 * @param ReflectionClass $objReflection 431 * @return array プラグイン情報の配列 432 */ 433 function getPluginInfo(ReflectionClass $objReflection) { 434 $arrStaticProps = $objReflection->getStaticProperties(); 435 $arrConstants = $objReflection->getConstants(); 436 437 $arrPluginInfoKey = array( 438 'PLUGIN_CODE', 439 'PLUGIN_NAME', 440 'CLASS_NAME', 441 'PLUGIN_VERSION', 442 'COMPLIANT_VERSION', 443 'AUTHOR', 444 'DESCRIPTION', 445 'PLUGIN_SITE_URL', 446 'AUTHOR_SITE_URL', 447 'HOOK_POINTS', 448 ); 449 $arrPluginInfo = array(); 450 foreach ($arrPluginInfoKey as $key) { 451 // クラス変数での定義を優先 452 if (isset($arrStaticProps[$key])) { 453 $arrPluginInfo[$key] = $arrStaticProps[$key]; 454 // クラス変数定義がなければ, クラス定数での定義を読み込み. 455 } elseif ($arrConstants[$key]) { 456 $arrPluginInfo[$key] = $arrConstants[$key]; 457 } else { 458 $arrPluginInfo[$key] = null; 459 } 460 } 461 return $arrPluginInfo; 462 } 463 464 /** 427 465 * プラグインクラス内の定数をチェックします. 428 466 * … … 432 470 function checkPluginConstants(ReflectionClass $objReflection, $unpack_dir) { 433 471 $arrErr = array(); 434 $plugin_code = $objReflection->getConstant('PLUGIN_CODE'); 435 if ($plugin_code === false) { 472 // プラグイン情報を取得 473 $arrPluginInfo = $this->getPluginInfo($objReflection); 474 475 if (!isset($arrPluginInfo['PLUGIN_CODE'])) { 436 476 $arrErr['plugin_file'] = '※ PLUGIN_CODEが定義されていません。<br/>'; 437 477 return $arrErr; 438 478 } 439 $plugin_name = $objReflection->getConstant('PLUGIN_NAME'); 440 if ($plugin_name === false) { 479 if (!isset($arrPluginInfo['PLUGIN_NAME'])) { 441 480 $arrErr['plugin_file'] = '※ PLUGIN_NAMEが定義されていません。<br/>'; 442 481 return $arrErr; 443 482 } 444 $class_name = $objReflection->getConstant('CLASS_NAME') . '.php'; 445 if ($class_name === false ||file_exists($unpack_dir . $class_name) === false) { 446 $arrErr['plugin_file'] = '※ CLASS_NAMEが定義されていません。またはCLASS_NAMEが正しく定義されていません。<br/>'; 447 return $arrErr; 448 } 449 if ($objReflection->getConstant('PLUGIN_VERSION') === false) { 483 if (!isset($arrPluginInfo['CLASS_NAME'])) { 484 $arrErr['plugin_file'] = '※ CLASS_NAMEが定義されていません。<br/>'; 485 return $arrErr; 486 } 487 $class_path = $unpack_dir . $arrPluginInfo['CLASS_NAME'] . '.php'; 488 if (file_exists($class_path) === false) { 489 $arrErr['plugin_file'] = '※ CLASS_NAMEが正しく定義されていません。<br/>'; 490 return $arrErr; 491 } 492 if (!isset($arrPluginInfo['PLUGIN_VERSION'])) { 450 493 $arrErr['plugin_file'] = '※ PLUGIN_VERSIONが定義されていません。<br/>'; 451 494 return $arrErr; 452 495 } 453 if ( $objReflection->getConstant('COMPLIANT_VERSION') === false) {496 if (!isset($arrPluginInfo['COMPLIANT_VERSION'])) { 454 497 $arrErr['plugin_file'] = '※ COMPLIANT_VERSIONが定義されていません。<br/>'; 455 498 return $arrErr; 456 499 } 457 if ( $objReflection->getConstant('AUTHOR') === false) {500 if (!isset($arrPluginInfo['AUTHOR'])) { 458 501 $arrErr['plugin_file'] = '※ AUTHORが定義されていません。<br/>'; 459 502 return $arrErr; 460 503 } 461 if ( $objReflection->getConstant('DESCRIPTION') === false) {504 if (!isset($arrPluginInfo['DESCRIPTION'])) { 462 505 $arrErr['plugin_file'] = '※ DESCRIPTIONが定義されていません。<br/>'; 463 506 return $arrErr; 464 507 } 465 $objErr = new SC_CheckError_Ex($ objReflection->getConstants());508 $objErr = new SC_CheckError_Ex($arrPluginInfo); 466 509 $objErr->doFunc(array('PLUGIN_CODE', 'PLUGIN_CODE', STEXT_LEN), array('MAX_LENGTH_CHECK','GRAPH_CHECK')); 467 510 $objErr->doFunc(array('PLUGIN_NAME', 'PLUGIN_NAME', STEXT_LEN), array('MAX_LENGTH_CHECK')); … … 471 514 $objErr->doFunc(array('AUTHOR', 'AUTHOR', STEXT_LEN), array('MAX_LENGTH_CHECK')); 472 515 $objErr->doFunc(array('DESCRIPTION', 'DESCRIPTION', MTEXT_LEN), array('MAX_LENGTH_CHECK')); 473 if ( $objReflection->getConstant('PLUGIN_SITE_URL') !== false) {516 if (isset($arrPluginInfo['PLUGIN_SITE_URL'])) { 474 517 $objErr->doFunc(array('PLUGIN_SITE_URL', 'PLUGIN_SITE_URL', URL_LEN), array('MAX_LENGTH_CHECK','GRAPH_CHECK')); 475 518 } 476 if ( $objReflection->getConstant('AUTHOR_SITE_URL') !== false) {519 if (isset($arrPluginInfo['AUTHOR_SITE_URL'])) { 477 520 $objErr->doFunc(array('AUTHOR_SITE_URL', 'AUTHOR_SITE_URL', URL_LEN), array('MAX_LENGTH_CHECK','GRAPH_CHECK')); 478 521 } … … 509 552 } 510 553 // プラグインクラスファイルのUPDATE処理を実行. 511 $arrErr = $this->execPlugin($ objPluginUpdate, 'plugin_update', 'update');554 $arrErr = $this->execPlugin($target_plugin, 'plugin_update', 'update'); 512 555 513 556 // 保存ディレクトリの削除. … … 647 690 * プラグイン情報をDB登録. 648 691 * 649 * @param ReflectionClass $objReflection リフレクションオブジェクト692 * @param array $arrPluginInfo プラグイン情報を格納した連想配列. 650 693 * @return array エラー情報を格納した連想配列. 651 694 */ 652 function registerData( ReflectionClass $objReflection) {695 function registerData($arrPluginInfo) { 653 696 654 697 // プラグイン情報をDB登録. … … 658 701 $plugin_id = $objQuery->nextVal('dtb_plugin_plugin_id'); 659 702 $arr_sqlval_plugin['plugin_id'] = $plugin_id; 660 $arr_sqlval_plugin['plugin_name'] = $ objReflection->getConstant('PLUGIN_NAME');661 $arr_sqlval_plugin['plugin_code'] = $ objReflection->getConstant('PLUGIN_CODE');662 $arr_sqlval_plugin['class_name'] = $ objReflection->getConstant('CLASS_NAME');663 $arr_sqlval_plugin['author'] = $ objReflection->getConstant('AUTHOR');703 $arr_sqlval_plugin['plugin_name'] = $arrPluginInfo['PLUGIN_NAME']; 704 $arr_sqlval_plugin['plugin_code'] = $arrPluginInfo['PLUGIN_CODE']; 705 $arr_sqlval_plugin['class_name'] = $arrPluginInfo['CLASS_NAME']; 706 $arr_sqlval_plugin['author'] = $arrPluginInfo['AUTHOR']; 664 707 // AUTHOR_SITE_URLが定義されているか判定. 665 $author_site_url = $ objReflection->getConstant('AUTHOR_SITE_URL');666 if ($author_site_url !== false) {667 $arr_sqlval_plugin['author_site_url'] = $a uthor_site_url;708 $author_site_url = $arrPluginInfo['AUTHOR_SITE_URL']; 709 if ($author_site_url !== null) { 710 $arr_sqlval_plugin['author_site_url'] = $arrPluginInfo['AUTHOR']; 668 711 } 669 712 // PLUGIN_SITE_URLが定義されているか判定. 670 $plugin_site_url = $ objReflection->getConstant('PLUGIN_SITE_URL');671 if ($plugin_site_url !== false) {713 $plugin_site_url = $arrPluginInfo['PLUGIN_SITE_URL']; 714 if ($plugin_site_url !== null) { 672 715 $arr_sqlval_plugin['plugin_site_url'] = $plugin_site_url; 673 716 } 674 $arr_sqlval_plugin['plugin_version'] = $ objReflection->getConstant('PLUGIN_VERSION');675 $arr_sqlval_plugin['compliant_version'] = $ objReflection->getConstant('COMPLIANT_VERSION');676 $arr_sqlval_plugin['plugin_description'] = $ objReflection->getConstant('DESCRIPTION');717 $arr_sqlval_plugin['plugin_version'] = $arrPluginInfo['PLUGIN_VERSION']; 718 $arr_sqlval_plugin['compliant_version'] = $arrPluginInfo['COMPLIANT_VERSION']; 719 $arr_sqlval_plugin['plugin_description'] = $arrPluginInfo['DESCRIPTION']; 677 720 $arr_sqlval_plugin['priority'] = 0; 678 721 $arr_sqlval_plugin['enable'] = PLUGIN_ENABLE_FALSE; … … 681 724 682 725 // フックポイントをDB登録. 683 $hook_point = $objReflection->getConstant('HOOK_POINTS'); 684 if ($hook_point !== false) { 685 $array_hook_point = explode(',', $hook_point); 686 if (is_array($array_hook_point)) { 687 foreach ($array_hook_point as $hook_point) { 726 $hook_point = $arrPluginInfo['HOOK_POINTS']; 727 if ($hook_point !== null) { 728 /** 729 * FIXME コードが重複しているため、要修正 730 */ 731 // フックポイントが配列で定義されている場合 732 if (is_array($hook_point)) { 733 foreach ($hook_point as $h) { 688 734 $arr_sqlval_plugin_hookpoint = array(); 689 735 $id = $objQuery->nextVal('dtb_plugin_hookpoint_plugin_hookpoint_id'); 690 736 $arr_sqlval_plugin_hookpoint['plugin_hookpoint_id'] = $id; 691 737 $arr_sqlval_plugin_hookpoint['plugin_id'] = $plugin_id; 692 $arr_sqlval_plugin_hookpoint['hook_point'] = $hook_point; 738 $arr_sqlval_plugin_hookpoint['hook_point'] = $h[0]; 739 $arr_sqlval_plugin_hookpoint['callback'] = $h[1]; 740 $arr_sqlval_plugin_hookpoint['update_date'] = 'CURRENT_TIMESTAMP'; 741 $objQuery->insert('dtb_plugin_hookpoint', $arr_sqlval_plugin_hookpoint); 742 } 743 // 文字列定義の場合 744 } else { 745 $array_hook_point = explode(',', $hook_point); 746 foreach ($array_hook_point as $h) { 747 $arr_sqlval_plugin_hookpoint = array(); 748 $id = $objQuery->nextVal('dtb_plugin_hookpoint_plugin_hookpoint_id'); 749 $arr_sqlval_plugin_hookpoint['plugin_hookpoint_id'] = $id; 750 $arr_sqlval_plugin_hookpoint['plugin_id'] = $plugin_id; 751 $arr_sqlval_plugin_hookpoint['hook_point'] = $h; 693 752 $arr_sqlval_plugin_hookpoint['update_date'] = 'CURRENT_TIMESTAMP'; 694 753 $objQuery->insert('dtb_plugin_hookpoint', $arr_sqlval_plugin_hookpoint); -
branches/version-2_12-dev/data/class/plugin/SC_Plugin_Base.php
r21785 r21794 3 3 * This file is part of EC-CUBE 4 4 * 5 * Copyright(c) 2000-201 1LOCKON CO.,LTD. All Rights Reserved.5 * Copyright(c) 2000-2012 LOCKON CO.,LTD. All Rights Reserved. 6 6 * 7 7 * http://www.lockon.co.jp/ … … 33 33 abstract class SC_Plugin_Base { 34 34 35 var$arrSelfInfo;35 protected $arrSelfInfo; 36 36 37 37 /** … … 83 83 */ 84 84 abstract function disable($arrPlugin); 85 86 /** 87 * プラグインヘルパーへ, コールバックメソッドを登録します. 88 * 89 * @param object $objPluginHelper 90 * @param integer $priority 91 */ 92 function register(SC_Helper_Plugin $objHelperPlugin, $priority) { 93 if (isset($this->arrSelfInfo['plugin_hook_point'])) { 94 $arrHookPoints = $this->arrSelfInfo['plugin_hook_point']; 95 foreach ($arrHookPoints as $hook_point) { 96 if (isset($hook_point['callback'])) { 97 $hook_point_name = $hook_point['hook_point']; 98 $callback_name = $hook_point['callback']; 99 $objHelperPlugin->addAction($hook_point_name, array($this, $callback_name), $priority); 100 } 101 } 102 } 103 } 85 104 } 86 ?> -
branches/version-2_12-dev/data/class/plugin/SC_Plugin_Util.php
r21750 r21794 39 39 } 40 40 $arrRet = $objQuery->select($col,$table,$where); 41 42 // プラグインフックポイントを取得. 43 $max = count($arrRet); 44 for ($i = 0; $i < $max; $i++) { 45 $plugin_id = $arrRet[$i]['plugin_id']; 46 $arrHookPoint = SC_Plugin_Util::getPluginHookPoint($plugin_id); 47 $arrRet[$i]['plugin_hook_point'] = $arrHookPoint; 48 } 41 49 return $arrRet; 42 50 } … … 121 129 return $arrPluginDirectory; 122 130 } 131 132 /** 133 * プラグインIDをキーに, プラグインフックポイントを取得する. 134 * 135 * @param integer $plugin_id 136 * @return array フックポイントの一覧 137 */ 138 function getPluginHookPoint($plugin_id) { 139 $objQuery =& SC_Query_Ex::getSingletonInstance(); 140 $cols = '*'; 141 $from = 'dtb_plugin_hookpoint'; 142 $where = 'plugin_id = ?'; 143 return $objQuery->select($cols, $from, $where, array($plugin_id)); 144 } 123 145 }
Note: See TracChangeset
for help on using the changeset viewer.