Ignore:
Timestamp:
2013/07/20 16:21:44 (11 years ago)
Author:
adachi
Message:

#2308 開発合宿(2013/06)プラグイン改善分をマージ

Location:
branches/version-2_13-dev/data
Files:
5 edited
4 copied

Legend:

Unmodified
Added
Removed
  • branches/version-2_13-dev/data/Smarty/templates/admin/ownersstore/subnavi.tpl

    r22206 r22978  
    2626    <li id="navi-ownersstore-index" class="<!--{if $tpl_subno == 'index'}-->on<!--{/if}-->"> 
    2727        <a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->ownersstore/<!--{$smarty.const.DIR_INDEX_PATH}-->"><span>プラグイン管理</span></a></li> 
     28    <li id="navi-ownersstore-plugin-hookpoint-list" class="<!--{if $tpl_subno == 'plugin-hookpoint-list'}-->on<!--{/if}-->"> 
     29        <a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->ownersstore/plugin_hookpoint_list.php"><span>プラグインフックポイント管理</span></a></li> 
    2830    <li id="navi-ownersstore-module" class="<!--{if $tpl_subno == 'module'}-->on<!--{/if}-->"> 
    2931        <a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->ownersstore/module.php"><span>モジュール管理</span></a></li> 
  • branches/version-2_13-dev/data/class/pages/admin/ownersstore/LC_Page_Admin_OwnersStore.php

    r22926 r22978  
    201201            if ($plugins[$key]['enable'] === PLUGIN_ENABLE_TRUE) { 
    202202                // 競合するプラグインがあるかを判定. 
    203                 $plugins[$key]['conflict_message']= $this->checkConflictPlugin($plugin['plugin_id']); 
     203                //$plugins[$key]['conflict_message']= $this->checkConflictPlugin($plugin['plugin_id']); 
     204                $plugins[$key]['conflict_message'] = SC_Plugin_Util_Ex::checkConflictPlugin($plugin['plugin_id']); 
    204205            } 
    205206        } 
     
    340341    function installPlugin($archive_file_name, $key) 
    341342    { 
     343        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     344        $objQuery->begin(); 
     345         
    342346        // 一時展開ディレクトリにファイルがある場合は事前に削除. 
    343347        $arrFileHash = SC_Helper_FileManager_Ex::sfGetFileList(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR); 
     
    412416        $arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'install'); 
    413417        if ($this->isError($arrErr) === true) { 
     418            // エラー時, transactionがabortしてるのでロールバック 
     419            $objQuery->rollback(); 
    414420            $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $plugin['plugin_id'], $plugin_html_dir_path); 
    415421            return $arrErr; 
    416422        } 
    417423 
     424        $objQuery->commit(); 
     425         
    418426        // 不要なファイルの削除 
    419427        SC_Helper_FileManager_Ex::deleteFile(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, false); 
     
    755763        // プラグイン情報をDB登録. 
    756764        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    757         $objQuery->begin(); 
    758765        $arr_sqlval_plugin = array(); 
    759766        $plugin_id = $objQuery->nextVal('dtb_plugin_plugin_id'); 
     
    847854    function execPlugin($obj, $class_name, $exec_func) 
    848855    { 
     856        $objPluginInstaller = new SC_Plugin_Installer($exec_func, $obj); 
     857 
    849858        $arrErr = array(); 
    850859        if (method_exists($class_name, $exec_func) === true) { 
    851             $ret = call_user_func(array($class_name, $exec_func), $obj); 
     860            $ret = call_user_func_array( 
     861                    array($class_name, $exec_func), 
     862                    array($obj, $objPluginInstaller)); 
    852863            if (!(is_null($ret) || $ret === true)) { 
    853864                $arrErr[$obj['plugin_code']] = $ret; 
    854865            } 
     866            $arrInstallErr = $objPluginInstaller->execPlugin(); 
     867            if ($arrInstallErr) { 
     868                $arrErr['plugin_file'] = "プラグインのインストールにしっぱいしました.<br/>"; 
     869            } 
    855870        } else { 
    856             $arrErr['plugin_error'] = '※ ' . $class_name . '.php に' . $exec_func . 'が見つかりません。<br/>'; 
    857         } 
    858  
     871            $arrErr['plugin_file'] = '※ ' . $class_name . '.php に' . $exec_func . 'が見つかりません。<br/>'; 
     872        } 
     873         
    859874        return $arrErr; 
    860875    } 
  • branches/version-2_13-dev/data/class/pages/admin/system/LC_Page_Admin_System_Log.php

    r22926 r22978  
    188188            $this->arrLogList['DB'] = 'DBログファイル'; 
    189189        } 
     190        if (defined('PLUGIN_LOG_REALFILE') && strlen(PLUGIN_LOG_REALFILE) >= 1) { 
     191            $this->arrLogList['PLUGIN'] = 'プラグインログファイル'; 
     192        } 
    190193    } 
    191194} 
  • branches/version-2_13-dev/data/class/plugin/SC_Plugin_Base.php

    r22857 r22978  
    5353     * @return void 
    5454     */ 
    55     abstract function install($arrPlugin); 
     55    function install($arrPlugin, $objPluginInstaller = null) { 
     56         
     57    } 
    5658 
    5759    /** 
     
    6365     * @return void 
    6466     */ 
    65     abstract function uninstall($arrPlugin); 
     67    function uninstall($arrPlugin, $objPluginInstaller = null) { 
     68         
     69    } 
    6670 
    6771    /** 
     
    7377     * @return void 
    7478     */ 
    75     abstract function enable($arrPlugin); 
     79    function enable($arrPlugin, $objPluginInstaller = null) { 
     80         
     81    } 
    7682 
    7783    /** 
     
    8389     * @return void 
    8490     */ 
    85     abstract function disable($arrPlugin); 
     91    function disable($arrPlugin, $objPluginInstaller = null) { 
     92         
     93    } 
    8694 
    8795    /** 
  • branches/version-2_13-dev/data/class/plugin/SC_Plugin_Util.php

    r22856 r22978  
    144144     * 
    145145     * @param integer $plugin_id 
     146     * @param integer $use_type 1=有効のみ 2=無効のみ 3=全て 
    146147     * @return array フックポイントの一覧 
    147148     */ 
    148     function getPluginHookPoint($plugin_id) 
     149    function getPluginHookPoint($plugin_id, $use_type = 1) 
    149150    { 
    150151        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     
    152153        $from = 'dtb_plugin_hookpoint'; 
    153154        $where = 'plugin_id = ?'; 
    154  
     155        switch ($use_type) { 
     156            case 1: 
     157                $where .= ' AND use_flg = true'; 
     158            break; 
     159 
     160            case 2: 
     161                $where .= ' AND use_flg = false'; 
     162            break; 
     163 
     164            case 3: 
     165            default: 
     166            break; 
     167        } 
    155168        return $objQuery->select($cols, $from, $where, array($plugin_id)); 
     169    } 
     170 
     171    /** 
     172     *  プラグインフックポイントを取得する. 
     173     * 
     174     * @param integer $use_type 1=有効のみ 2=無効のみ 3=全て 
     175     * @return array フックポイントの一覧 
     176     */ 
     177    function getPluginHookPointList($use_type = 3) 
     178    { 
     179        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     180        $objQuery->setOrder('hook_point ASC, priority DESC'); 
     181        $cols = 'dtb_plugin_hookpoint.*, dtb_plugin.priority, dtb_plugin.plugin_name'; 
     182        $from = 'dtb_plugin_hookpoint LEFT JOIN dtb_plugin USING(plugin_id)'; 
     183        switch ($use_type) { 
     184            case 1: 
     185                $where = 'enable = 1 AND use_flg = true'; 
     186            break; 
     187 
     188            case 2: 
     189                $where = 'enable = 1 AND use_flg = false'; 
     190            break; 
     191 
     192            case 3: 
     193            default: 
     194                $where = ''; 
     195            break; 
     196        } 
     197        return $objQuery->select($cols, $from, $where); 
     198        //$arrList = array(); 
     199        //foreach ($arrRet AS $key=>$val) { 
     200        //    $arrList[$val['hook_point']][$val['plugin_id']] = $val; 
     201        //} 
     202        //return $arrList; 
    156203    } 
    157204 
     
    183230        return $arrErr; 
    184231    } 
     232 
     233    /** 
     234     * フックポイントのON/OFF変更 
     235     * 
     236     * @param intger $plugin_hookpoint_id  フックポイントID 
     237     * @return bolean $use_flg:ture=ON、false=OFF 
     238     */ 
     239    function setPluginHookPointChangeUse($plugin_hookpoint_id, $use_flg = false) { 
     240        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     241        $sqlval['use_flg'] = $use_flg; 
     242        $objQuery->update('dtb_plugin_hookpoint', $sqlval, 'plugin_hookpoint_id = ?', array($plugin_hookpoint_id)); 
     243    } 
     244 
     245    /** 
     246     * フックポイントで衝突する可能性のあるプラグインを判定.メッセージを返します. 
     247     * 
     248     * @param int $plugin_id プラグインID 
     249     * @return string $conflict_alert_message メッセージ 
     250     */ 
     251    function checkConflictPlugin($plugin_id = '') 
     252    { 
     253        // フックポイントを取得します. 
     254        $where = 'T1.hook_point = ? AND NOT T1.plugin_id = ? AND T2.enable = ?'; 
     255        if ($plugin_id > 0) { 
     256            $hookPoints = SC_Plugin_Util::getPluginHookPoint($plugin_id, ''); 
     257        } else { 
     258            $hookPoints = SC_Plugin_Util::getPluginHookPointList(1); 
     259            $where .= ' AND T1.use_flg = true'; 
     260        } 
     261 
     262        $conflict_alert_message = ''; 
     263        $arrConflictPluginName = array(); 
     264        $arrConflictHookPoint = array(); 
     265        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
     266        $objQuery->setGroupBy('T1.hook_point, T1.plugin_id, T2.plugin_name'); 
     267        $table = 'dtb_plugin_hookpoint AS T1 LEFT JOIN dtb_plugin AS T2 ON T1.plugin_id = T2.plugin_id'; 
     268        foreach ($hookPoints as $hookPoint) { 
     269            // 競合するプラグインを取得する, 
     270            $conflictPlugins = $objQuery->select('T1.hook_point, T1.plugin_id, T2.plugin_name', $table, $where, array($hookPoint['hook_point'], $hookPoint['plugin_id'], PLUGIN_ENABLE_TRUE)); 
     271 
     272            // プラグイン名重複を削除する為、専用の配列に格納し直す. 
     273            foreach ($conflictPlugins as $conflictPlugin) { 
     274                // プラグイン名が見つからなければ配列に格納 
     275                if (!in_array($conflictPlugin['plugin_name'], $arrConflictPluginName)) { 
     276                    $arrConflictPluginName[] = $conflictPlugin['plugin_name']; 
     277                } 
     278                // プラグイン名が見つからなければ配列に格納 
     279                if (!in_array($conflictPlugin['hook_point'], $arrConflictHookPoint)) { 
     280                    $arrConflictHookPoint[] = $conflictPlugin['hook_point']; 
     281                } 
     282            } 
     283        } 
     284 
     285        if ($plugin_id > 0) { 
     286            // メッセージをセットします. 
     287            foreach ($arrConflictPluginName as $conflictPluginName) { 
     288                $conflict_alert_message .= '* ' .  $conflictPluginName . 'と競合する可能性があります。<br/>'; 
     289            } 
     290            return $conflict_alert_message; 
     291        } else { 
     292            return $arrConflictHookPoint; 
     293        } 
     294    } 
     295 
    185296} 
Note: See TracChangeset for help on using the changeset viewer.