Ignore:
Timestamp:
2012/02/27 17:39:02 (12 years ago)
Author:
h_yoshimoto
Message:

#1603 #1632 プラグイン仕様変更に伴う修正

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  
    128128    function prefilter_transforme($source, &$smarty) { 
    129129        // フックポイントを実行. 
    130         $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 
     130        $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance($this->objPage->plugin_activate_flg); 
    131131        $objPlugin->doAction('prefilterTransforme', array(&$source, $this->objPage)); 
    132132        return $source; 
     
    141141    function outputfilter_transforme($source, &$smarty) { 
    142142        // フックポイントを実行. 
    143         $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 
     143        $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance($this->objPage->plugin_activate_flg); 
    144144        $objPlugin->doAction('outputfilterTransforme', array(&$source, $this->objPage)); 
    145145        return $source; 
  • branches/version-2_12-dev/data/class/helper/SC_Helper_Plugin.php

    r21552 r21555  
    4444     * @return void 
    4545     */ 
    46     function load() { 
     46    function load($plugin_activate_flg = true) { 
    4747 
    4848        if (!defined('CONFIG_REALFILE') || !file_exists(CONFIG_REALFILE)) return; // インストール前 
    4949        if (SC_Utils_Ex::sfIsInstallFunction()) return; // インストール中 
    50  
     50        if ($plugin_activate_flg === false) return; 
    5151        // 有効なプラグインを取得 
    5252        $arrPluginDataList = $this->getEnablePlugin(); 
     
    5858            if (array_search($arrPluginData['plugin_code'], $arrPluginDirectory) !== false) { 
    5959                // プラグイン本体ファイルを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'; 
    6161 
    6262                // プラグインのインスタンス生成. 
    63                 $objPlugin = new $arrPluginData['plugin_code']($arrPluginData); 
     63                $objPlugin = new $arrPluginData['class_name']($arrPluginData); 
    6464                // メンバ変数にプラグインのインスタンスを登録. 
    6565                $this->arrPluginInstances[$arrPluginData['plugin_id']] = $objPlugin; 
     
    7979     * @return object SC_Helper_Pluginオブジェクト 
    8080     */ 
    81     function getSingletonInstance() { 
     81    function getSingletonInstance($plugin_activate_flg = true) { 
    8282        if (!isset($GLOBALS['_SC_Helper_Plugin_instance']) || is_null($GLOBALS['_SC_Helper_Plugin_instance'])) { 
    8383            $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); 
    8585        } 
    8686        return $GLOBALS['_SC_Helper_Plugin_instance']; 
     
    156156     */ 
    157157    function getPluginByPluginId($plugin_id) { 
    158         $objQuery = new SC_Query_Ex(); 
     158        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    159159        $col = '*'; 
    160160        $table = 'dtb_plugin'; 
     
    171171     */ 
    172172    function getPluginByPluginCode($plugin_code) { 
    173         $objQuery = new SC_Query_Ex(); 
     173        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    174174        $col = '*'; 
    175175        $table = 'dtb_plugin'; 
     
    179179    } 
    180180 
     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     
    181195    /** 
    182196     * プラグインディレクトリの取得 
  • branches/version-2_12-dev/data/class/pages/LC_Page.php

    r21546 r21555  
    7272    /** 店舗基本情報 */ 
    7373    var $arrSiteInfo; 
     74     
     75    /** プラグインを実行フラグ */ 
     76    var $plugin_activate_flg = true; 
    7477 
    7578    // }}} 
     
    9497                                 $this->objDisplay->detectDevice()); 
    9598 
     99        // プラグインを実行するかを判定します. 
     100        // プラグイン管理ではプラグインが実行されません 
     101        if ($_SERVER['PHP_SELF'] !== ROOT_URLPATH . ADMIN_DIR . 'system/plugin.php') { 
     102            $this->plugin_activate_flg = false; 
     103        } 
     104         
    96105        // スーパーフックポイントを実行. 
    97         $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 
     106        $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance($this->plugin_activate_flg); 
    98107        $objPlugin->doAction('lc_page_preProcess', array($this)); 
    99108 
     
    121130 
    122131        // HeadNaviにpluginテンプレートを追加する. 
    123         $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 
     132        $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance($this->plugin_activate_flg); 
    124133        $objPlugin->setHeadNaviBlocs($this->arrPageLayout['HeadNavi']); 
    125134 
     
    169178    /** 
    170179     * テンプレート取得 
    171      * 
     180     *  
    172181     */ 
    173182    function getTemplate() { 
     
    177186    /** 
    178187     * テンプレート設定(ポップアップなどの場合) 
    179      * 
     188     *  
    180189     */ 
    181190    function setTemplate($template) { 
  • branches/version-2_12-dev/data/class/pages/admin/LC_Page_Admin.php

    r21546 r21555  
    3636    // }}} 
    3737    // {{{ functions 
    38  
     38     
    3939    /** 
    4040     * Page を初期化する. 
     
    6464        // ディスプレイクラス生成 
    6565        $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; 
    7071        } 
     72         
     73        // スーパーフックポイントを実行. 
     74        $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance($this->plugin_activate_flg); 
     75         
     76        $objPlugin->doAction('lc_page_preProcess', array($this)); 
    7177 
    7278        // トランザクショントークンの検証と生成 
     
    9096    function sendResponse() { 
    9197 
    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']); 
    93101 
    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)); 
    101104 
    102105        $this->objDisplay->prepare($this, true); 
  • branches/version-2_12-dev/data/class/pages/admin/system/LC_Page_Admin_System_Plugin.php

    r21552 r21555  
    7171        $mode = $this->getMode();    
    7272        // パラメーター情報の初期化 
    73         $this->lfInitParam($objFormParam, $mode); 
     73        $this->initParam($objFormParam, $mode); 
    7474        $objFormParam->setParam($_POST); 
    7575 
     
    8282                $this->arrErr = $this->checkUploadFile($file_key); 
    8383                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('プラグインをインストールしました。');"; 
    9992                    } 
    10093                } 
     
    10598                $this->arrErr = $objFormParam->checkError(); 
    10699                if ($this->isError($this->arrErr) === false) { 
    107                     $plugin_code = $objFormParam->getValue('plugin_code'); 
    108100                    $plugin_id = $objFormParam->getValue('plugin_id'); 
    109101                    $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); 
    113103                    if ($this->isError($this->arrErr) === false) { 
    114104                        // コンパイルファイルのクリア処理 
     
    126116                    // プラグイン取得. 
    127117                    $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);                     
    130119                    if ($this->isError($this->arrErr) === false) { 
    131120                        // コンパイルファイルのクリア処理 
     
    143132                    // プラグイン取得. 
    144133                    $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);                     
    147135                    if ($this->isError($this->arrErr) === false) { 
    148136                        // コンパイルファイルのクリア処理 
     
    157145                $this->arrErr = $objFormParam->checkError(); 
    158146                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                     
    162150                    if ($this->isError($this->arrErr) === false) { 
    163                         $update_plugin_file = $_FILES[$plugin_code]; 
     151                        $update_plugin_file = $_FILES[$target_plugin_code]; 
    164152                        $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('プラグインをアップデートしました。');"; 
    177160                        } 
    178161                    } 
     
    230213     * @return void 
    231214     */ 
    232     function lfInitParam(&$objFormParam, $mode) { 
     215    function initParam(&$objFormParam, $mode) { 
    233216        $objFormParam->addParam('mode', 'mode', INT_LEN, '', array('ALPHA_CHECK', 'MAX_LENGTH_CHECK')); 
    234217        $objFormParam->addParam('plugin_id', 'plugin_id', INT_LEN, '', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); 
     
    246229     * @return void 
    247230     */ 
    248     function lfInitUploadFile(&$objUpFile, $key) { 
     231    function initUploadFile(&$objUpFile, $key) { 
    249232        $objUpFile->addFile('プラグインファイル', $key, explode(',', PLUGIN_EXTENSION), FILE_SIZE, true, 0, 0, false); 
    250233    } 
     
    284267 
    285268    /** 
    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     /** 
    314269     * ファイル名からプラグインコードを取得する. 
    315270     *  
     
    366321     *  
    367322     * @param string $plugin_code プラグインコード. 
    368      * @param string $plugin_file_name プラグインファイル名. 
     323     * @param string $key キー. 
    369324     * @return array エラー情報を格納した連想配列. 
    370325     */ 
    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         
    391341        // リフレクションオブジェクトを生成. 
    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/>"; 
    398359            return $arrErr; 
    399360        } 
     
    401362        // プラグイン情報をDB登録 
    402363        if ($this->registerData($objReflection) === false) { 
    403             SC_Utils_Ex::deleteFile($plugin_dir); 
     364            $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR); 
    404365            $arrErr['plugin_file'] = '※ DB登録に失敗しました。<br/>'; 
    405366            return $arrErr; 
    406367        } 
    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        } 
    408384        // プラグインhtmlディレクトリ作成 
    409385        $plugin_html_dir = PLUGIN_HTML_REALDIR . $plugin_code; 
    410386        $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); 
    416414    } 
    417415 
     
    422420     * @return array エラー情報を格納した連想配列. 
    423421     */ 
    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) { 
    428431            $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/>'; 
    429437            return $arrErr; 
    430438        } 
     
    445453            return $arrErr; 
    446454        } 
    447  
    448455        $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')); 
    450459        $objErr->doFunc(array('PLUGIN_VERSION', 'PLUGIN_VERSION', STEXT_LEN), array('MAX_LENGTH_CHECK')); 
    451460        $objErr->doFunc(array('COMPLIANT_VERSION', 'COMPLIANT_VERSION', STEXT_LEN), array('MAX_LENGTH_CHECK')); 
     
    471480     * プラグインをアップデートします. 
    472481     *  
    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 アップロードファイル名. 
    477484     * @return array エラー情報を格納した連想配列. 
    478485     */ 
    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(); 
    485488 
    486489        // ファイルをチェックし展開します. 
    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         
    492514        // 展開されたディレクトリからプラグインクラスファイルを読み込みます. 
    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); 
    496519            return $arrErr; 
    497520        } 
    498521        // プラグインクラスファイルのUPDATE処理を実行. 
    499         $arrErr = $this->execPlugin($plugin_id, $plugin_code, 'update'); 
    500  
     522        $arrErr = $this->execPlugin($plugin_id, $class_name, 'update'); 
     523         
    501524        // 保存ディレクトリの削除. 
    502         SC_Utils_Ex::deleteFile($temp_plugin_dir); 
    503  
     525        SC_Utils_Ex::deleteFile(DOWNLOADS_TEMP_PLUGIN_UPDATE_DIR, false); 
     526         
    504527        return $arrErr; 
    505528    } 
     
    508531     * ファイルをアップロードし、解凍先のディレクトリに解凍します. 
    509532     *  
    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 解凍先ディレクトリ 
    513535     * @param string $file_key ファイルキー 
    514536     * @return array エラー情報を格納した連想配列. 
    515537     */ 
    516     function unpackPluginFile($unpack_file_name, $unpack_dir, $plugin_code, $file_key) { 
     538    function unpackPluginFile($unpack_file_name, $unpack_dir, $file_key) { 
    517539        $arrErr = array(); 
    518540        // 解凍ディレクトリディレクトリを作成し、一時ディレクトリからファイルを移動 
    519541        $objUpFile = new SC_UploadFile_Ex(PLUGIN_TEMP_REALDIR, $unpack_dir); 
    520         $this->lfInitUploadFile($objUpFile, $file_key); 
     542        $this->initUploadFile($objUpFile, $file_key); 
    521543        $arrErr = $objUpFile->makeTempFile($file_key, false); 
    522544        if ($this->isError($arrErr) === true) { 
    523545            return $arrErr; 
    524546        } 
    525  
     547         
    526548        // 正常にアップロードされているかをチェック. 
    527549        $arrErr = $objUpFile->checkEXISTS($file_key); 
     
    529551            return $arrErr; 
    530552        } 
    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); 
    541553        $objUpFile->moveTempFile(); 
    542  
    543554        // 解凍 
    544         $update_plugin_file_path = $unpack_dir . '/' . $unpack_file_name; 
     555        $update_plugin_file_path = $unpack_dir . $unpack_file_name; 
    545556        if (!SC_Helper_FileManager_Ex::unpackFile($update_plugin_file_path)) { 
    546557            $arrErr['plugin_file'] = '※ 解凍に失敗しました。<br/>'; 
     
    553564     * プラグインをアンインストールします. 
    554565     *  
    555      * @param int $plugin_id プラグインID. 
    556      * @param string $plugin_code プラグインコード. 
     566     * @param array $plugin プラグイン情報を確認した連想配列. 
    557567     * @return array エラー情報を格納した連想配列. 
    558568     */ 
    559     function uninstallPlugin($plugin_id, $plugin_code) { 
     569    function uninstallPlugin($plugin) { 
    560570        $arrErr = array(); 
    561571        // プラグインファイルを読み込みます. 
    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'); 
    570579        if ($this->isError($arrErr) === true) { 
    571580            return $arrErr; 
    572581        } 
    573582        // プラグインの削除処理. 
    574         $arrErr = $this->deletePlugin($plugin_id, $plugin_code); 
     583        $arrErr = $this->deletePlugin($plugin['plugin_id'], $plugin['plugin_code']); 
    575584 
    576585        return $arrErr; 
     
    580589     * プラグインを有効にします. 
    581590     *  
    582      * @param int $plugin_id プラグインID. 
    583      * @param string $plugin_code プラグインコード. 
     591     * @param array $plugin プラグイン情報を確認した連想配列. 
    584592     * @return array $arrErr エラー情報を格納した連想配列. 
    585593     */ 
    586     function enablePlugin($plugin_id, $plugin_code) { 
     594    function enablePlugin($plugin) { 
    587595        $arrErr = array(); 
    588596        // クラスファイルを読み込み. 
    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 
    594628        // 無効化処理を実行します. 
    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'); 
    623630        if ($this->isError($arrErr) === true) { 
    624631            return $arrErr; 
    625632        } 
    626633        // プラグインを無効にします. 
    627         $this->updatePluginEnable($plugin_id, PLUGIN_ENABLE_FALSE); 
     634        $this->updatePluginEnable($plugin['plugin_id'], PLUGIN_ENABLE_FALSE); 
    628635 
    629636        return $arrErr; 
     
    663670        $arr_sqlval_plugin['plugin_id'] = $plugin_id; 
    664671        $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'); 
    666674        $arr_sqlval_plugin['author'] = $objReflection->getConstant('AUTHOR'); 
    667675        // AUTHOR_SITE_URLが定義されているか判定. 
     
    703711     * @param string $file_path クラスのpath 
    704712     * @param string $key エラー情報のキー. 
    705      * @return array エラー情報を格納した連想配列. 
     713     * @return array $arrErr エラー情報を格納した連想配列. 
    706714     */ 
    707715    function requirePluginFile($file_path, $key) { 
     
    710718            require_once $file_path; 
    711719        } else { 
    712             $arrErr[$key] = '※ ' . $file_path .'の読み込みに失敗しました。<br/>'; 
     720            $arrErr[$key] = "※ " . $file_path ."の読み込みに失敗しました。<br/>"; 
    713721        } 
    714722        return $arrErr; 
     
    724732     * 
    725733     */ 
    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); 
    730738        } else { 
    731             $arrErr['plugin_error'] = '※ ' . $plugin_code . '.php に' . $exec_func . 'が見つかりません。<br/>'; 
    732         } 
    733  
     739            $arrErr['plugin_error'] = '※ ' . $class_name . '.php に' . $exec_func . 'が見つかりません。<br/>'; 
     740        } 
    734741        return $arrErr; 
    735742    } 
     
    817824 
    818825    /** 
    819      * 圧縮ファイル名と中のディレクトリ名が同じであるかをチェックします. 
    820      * 
    821      * @param Archive_Tar $tar_obj Archive_Tarクラスのオブジェクト 
    822      * @param string $dir_name ディレクトリ名. 
    823      * @return boolean 
    824      */ 
    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     /** 
    837826     * ディレクトリを作成します. 
    838827     * 
     
    879868     * @return boolean. 
    880869     */ 
    881     function isError($arrErr) { 
    882         if (is_array($arrErr) && count($arrErr) > 0) { 
     870    function isError($error) { 
     871        if (is_array($error) && count($error) > 0) { 
    883872            return true; 
    884873        } 
  • branches/version-2_12-dev/data/class/util/SC_Utils.php

    r21552 r21555  
    21892189        SC_Utils_Ex::deleteFile(MOBILE_COMPILE_REALDIR, false); 
    21902190    } 
     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 
    21912216} 
  • branches/version-2_12-dev/data/mtb_constants_init.php

    r21547 r21555  
    389389/** アップロード一時ディレクトリ */ 
    390390define('DOWNLOADS_TEMP_DIR', DATA_REALDIR . "downloads/tmp/"); 
     391/** プラグイン一時展開用ディレクトリ(アップデート用) */ 
     392define('DOWNLOADS_TEMP_PLUGIN_UPDATE_DIR', DOWNLOADS_TEMP_DIR . "plugin_update/"); 
     393/** プラグイン一時展開用ディレクトリ(インストール用) */ 
     394define('DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR', DOWNLOADS_TEMP_DIR . "plugin_install/"); 
    391395/** プラグイン 外部ファイルURL */ 
    392396define('PLUGIN_HTML_URL', USER_URL . PLUGIN_DIR); 
  • branches/version-2_12-dev/html/install/sql/insert_data.sql

    r21547 r21555  
    12301230INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('PLUGIN_HTML_URL', 'USER_URL . PLUGIN_DIR', 610, 'プラグイン 外部ファイルURL'); 
    12311231INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('PLUGIN_EXTENSION', '"tar,tar.gz"', 611, 'プラグインファイル登録可能拡張子(カンマ区切り)'); 
     1232INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('DOWNLOADS_TEMP_PLUGIN_UPDATE_DIR', 'DOWNLOADS_TEMP_DIR . "plugin_update/"', 612, 'プラグイン一時展開用ディレクトリ(アップデート用)'); 
     1233INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR', 'DOWNLOADS_TEMP_DIR . "plugin_install/"', 613, 'プラグイン一時展開用ディレクトリ(インストール用)'); 
    12321234INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('DOWNLOAD_DAYS_LEN', '3', 700, '日数桁数'); 
    12331235INSERT 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.