Ignore:
Timestamp:
2012/04/27 12:17:09 (12 years ago)
Author:
adachi
Message:

#1782 plugin_infoフォーマット対応, フックポイントの自動登録対応

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  
    347347        // リフレクションオブジェクトを生成. 
    348348        $objReflection = new ReflectionClass('plugin_info'); 
     349        $arrPluginInfo = $this->getPluginInfo($objReflection); 
    349350        // プラグインクラスに必須となるパラメータが正常に定義されているかチェックします. 
    350351        $arrErr = $this->checkPluginConstants($objReflection, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR); 
     
    355356 
    356357        // プラグインコード 
    357         $plugin_code = $objReflection->getConstant('PLUGIN_CODE'); 
     358        $plugin_code = $arrPluginInfo['PLUGIN_CODE']; 
    358359        // プラグイン名 
    359         $plugin_name = $objReflection->getConstant('PLUGIN_NAME'); 
     360        $plugin_name = $arrPluginInfo['PLUGIN_NAME']; 
    360361 
    361362        // 既にインストールされていないかを判定. 
     
    367368 
    368369        // プラグイン情報をDB登録 
    369         if ($this->registerData($objReflection) === false) { 
     370        if ($this->registerData($arrPluginInfo) === false) { 
    370371            $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR); 
    371372            $arrErr['plugin_file'] = '※ DB登録に失敗しました。<br/>'; 
     
    425426 
    426427    /** 
     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    /** 
    427465     * プラグインクラス内の定数をチェックします. 
    428466     * 
     
    432470    function checkPluginConstants(ReflectionClass $objReflection, $unpack_dir) { 
    433471        $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'])) { 
    436476            $arrErr['plugin_file'] = '※ PLUGIN_CODEが定義されていません。<br/>'; 
    437477            return $arrErr; 
    438478        } 
    439         $plugin_name = $objReflection->getConstant('PLUGIN_NAME'); 
    440         if ($plugin_name === false) { 
     479        if (!isset($arrPluginInfo['PLUGIN_NAME'])) { 
    441480            $arrErr['plugin_file'] = '※ PLUGIN_NAMEが定義されていません。<br/>'; 
    442481            return $arrErr; 
    443482        } 
    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'])) { 
    450493            $arrErr['plugin_file'] = '※ PLUGIN_VERSIONが定義されていません。<br/>'; 
    451494            return $arrErr; 
    452495        } 
    453         if ($objReflection->getConstant('COMPLIANT_VERSION') === false) { 
     496        if (!isset($arrPluginInfo['COMPLIANT_VERSION'])) { 
    454497            $arrErr['plugin_file'] = '※ COMPLIANT_VERSIONが定義されていません。<br/>'; 
    455498            return $arrErr; 
    456499        } 
    457         if ($objReflection->getConstant('AUTHOR') === false) { 
     500        if (!isset($arrPluginInfo['AUTHOR'])) { 
    458501            $arrErr['plugin_file'] = '※ AUTHORが定義されていません。<br/>'; 
    459502            return $arrErr; 
    460503        } 
    461         if ($objReflection->getConstant('DESCRIPTION') === false) { 
     504        if (!isset($arrPluginInfo['DESCRIPTION'])) { 
    462505            $arrErr['plugin_file'] = '※ DESCRIPTIONが定義されていません。<br/>'; 
    463506            return $arrErr; 
    464507        } 
    465         $objErr = new SC_CheckError_Ex($objReflection->getConstants()); 
     508        $objErr = new SC_CheckError_Ex($arrPluginInfo); 
    466509        $objErr->doFunc(array('PLUGIN_CODE', 'PLUGIN_CODE', STEXT_LEN), array('MAX_LENGTH_CHECK','GRAPH_CHECK')); 
    467510        $objErr->doFunc(array('PLUGIN_NAME', 'PLUGIN_NAME', STEXT_LEN), array('MAX_LENGTH_CHECK')); 
     
    471514        $objErr->doFunc(array('AUTHOR', 'AUTHOR', STEXT_LEN), array('MAX_LENGTH_CHECK')); 
    472515        $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'])) { 
    474517            $objErr->doFunc(array('PLUGIN_SITE_URL', 'PLUGIN_SITE_URL', URL_LEN), array('MAX_LENGTH_CHECK','GRAPH_CHECK')); 
    475518        } 
    476         if ($objReflection->getConstant('AUTHOR_SITE_URL') !== false) { 
     519        if (isset($arrPluginInfo['AUTHOR_SITE_URL'])) { 
    477520            $objErr->doFunc(array('AUTHOR_SITE_URL', 'AUTHOR_SITE_URL', URL_LEN), array('MAX_LENGTH_CHECK','GRAPH_CHECK')); 
    478521        } 
     
    509552        } 
    510553        // プラグインクラスファイルのUPDATE処理を実行. 
    511         $arrErr = $this->execPlugin($objPluginUpdate, 'plugin_update', 'update'); 
     554        $arrErr = $this->execPlugin($target_plugin, 'plugin_update', 'update'); 
    512555 
    513556        // 保存ディレクトリの削除. 
     
    647690     * プラグイン情報をDB登録. 
    648691     * 
    649      * @param ReflectionClass $objReflection リフレクションオブジェクト 
     692     * @param array $arrPluginInfo プラグイン情報を格納した連想配列. 
    650693     * @return array エラー情報を格納した連想配列. 
    651694     */ 
    652     function registerData(ReflectionClass $objReflection) { 
     695    function registerData($arrPluginInfo) { 
    653696 
    654697        // プラグイン情報をDB登録. 
     
    658701        $plugin_id = $objQuery->nextVal('dtb_plugin_plugin_id'); 
    659702        $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']; 
    664707        // 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'] = $author_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']; 
    668711        } 
    669712        // 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) { 
    672715            $arr_sqlval_plugin['plugin_site_url'] = $plugin_site_url; 
    673716        } 
    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']; 
    677720        $arr_sqlval_plugin['priority'] = 0; 
    678721        $arr_sqlval_plugin['enable'] = PLUGIN_ENABLE_FALSE; 
     
    681724 
    682725        // フックポイントを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) { 
    688734                    $arr_sqlval_plugin_hookpoint = array(); 
    689735                    $id = $objQuery->nextVal('dtb_plugin_hookpoint_plugin_hookpoint_id'); 
    690736                    $arr_sqlval_plugin_hookpoint['plugin_hookpoint_id'] = $id; 
    691737                    $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; 
    693752                    $arr_sqlval_plugin_hookpoint['update_date'] = 'CURRENT_TIMESTAMP'; 
    694753                    $objQuery->insert('dtb_plugin_hookpoint', $arr_sqlval_plugin_hookpoint); 
  • branches/version-2_12-dev/data/class/plugin/SC_Plugin_Base.php

    r21785 r21794  
    33 * This file is part of EC-CUBE 
    44 * 
    5  * Copyright(c) 2000-2011 LOCKON CO.,LTD. All Rights Reserved. 
     5 * Copyright(c) 2000-2012 LOCKON CO.,LTD. All Rights Reserved. 
    66 * 
    77 * http://www.lockon.co.jp/ 
     
    3333abstract class SC_Plugin_Base { 
    3434 
    35     var $arrSelfInfo; 
     35    protected $arrSelfInfo; 
    3636 
    3737    /** 
     
    8383     */ 
    8484    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    } 
    85104} 
    86 ?> 
  • branches/version-2_12-dev/data/class/plugin/SC_Plugin_Util.php

    r21750 r21794  
    3939        } 
    4040        $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        } 
    4149        return $arrRet; 
    4250    } 
     
    121129        return $arrPluginDirectory; 
    122130    } 
     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    } 
    123145} 
Note: See TracChangeset for help on using the changeset viewer.