バージョン選択

フォーラム

メニュー

オンライン状況

25 人のユーザが現在オンラインです。 (12 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 25
もっと...

サイト内検索

機能要望 > 管理機能 > プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。

管理機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
sumida
投稿日時: 2013/6/13 15:19
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
違うパターンもやってもました。(前回分と共存できます。)
前回の仕様を変更したものです。
共存しても動作します。
お好きなほうでどうぞ。
(1) 前回
   プラグインのディレクトリ名を時下入力
(2) 今回
   data/downloads/plugin下のディレクトリ一覧で指示

data/class/pages/admin/ownersstore/LC_Page_Admin_OwnersStore.php


        switch ($mode) {
            // インストール
            case 'install':
                $file_key = 'plugin_file';
                $this->arrErr = $this->checkUploadFile($file_key);
                if ($this->isError($this->arrErr) === false) {
                    $archive_file_name = $_FILES[$file_key]['name'];
                    // インストール処理.
                    $this->arrErr = $this->installPlugin($archive_file_name, 'plugin_file');
                    if ($this->isError($this->arrErr) === false) {
                        // コンパイルファイルのクリア処理
                        SC_Utils_Ex::clearCompliedTemplate();
                        $this->tpl_onload = "alert('プラグインをインストールしました。');";
                    }
                }
                break;
// added
            // インストール
            case 'installL':
                    // インストール処理.
                $plugin_dir_name = $objFormParam->getValue('dir_name');
                $this->arrErr = $this->installPluginL($plugin_dir_name, $plugin_dir_name);
                if ($this->isError($this->arrErr) === false) {
                    // コンパイルファイルのクリア処理
                    SC_Utils_Ex::clearCompliedTemplate();
                    $this->tpl_onload = "alert('プラグインをインストールしました。');";
                }
                if ($this->isError($this->arrErr) === true) {
                    $this->tpl_onload = "alert('" . $this->arrErr[$plugin_dir_name] . "');";
                }
                break;
// added



        // DBからプラグイン情報を取得
        $plugins = SC_Plugin_Util_Ex::getAllPlugin();

        foreach ($plugins as $key => $plugin) {
            // ロゴファイルへのパスを生成(ロゴが無い場合はNO_IMAGEを表示)
            if (file_exists(PLUGIN_HTML_REALDIR . $plugins[$key]['plugin_code'] . '/logo.png') === true){
                $plugins[$key]['logo'] = ROOT_URLPATH . 'plugin/' . $plugins[$key]['plugin_code'] . '/logo.png';
            } else {
                $plugins[$key]['logo'] = IMAGE_SAVE_URLPATH . 'noimage_plugin_list.png';
            }

            // 設定ファイルがあるかを判定.
            $plugins[$key]['config_flg'] = $this->isContainsFile(PLUGIN_UPLOAD_REALDIR . $plugin['plugin_code'], 'config.php');
            if ($plugins[$key]['enable'] === PLUGIN_ENABLE_TRUE) {
                // 競合するプラグインがあるかを判定.
                $plugins[$key]['conflict_message']= $this->checkConflictPlugin($plugin['plugin_id']);
            }
        }

        $this->plugins = $plugins;
// added
        // インストールしていないプラグイン一覧
        $arrList = SC_Helper_FileManager_Ex::sfGetFileList(rtrim(PLUGIN_UPLOAD_REALDIR, '/'));

        // true  : プラグインディレクトリ一覧
        // false : インストールしていないプラグインディレクトリ一覧
        $dirALL = true;

        $arrDirLists = array();
        $arrCount = 0;
        for ($i=0; $i<count($arrList); $i++) {
            // ディレクトリであるかを判定.
            if ($arrList[$i]['is_dir'] === true) {
                 $dirName = $arrList[$i]['file_name'];
                 // インストール済みのプラグインかを判定.
                 $foundDirName = FALSE;
                 for ($j=0; $j<count($plugins); $j++) {
                     if ($plugins[$j]['plugin_code'] === $dirName) {
                         $foundDirName = TRUE;
                         break;
                     }
                 }
                 if ($foundDirName) {
                     $arrDirLists[$arrCount]['dir_name'] = $dirName;
                     $arrDirLists[$arrCount]['installed'] = false;
                     $arrCount++;
                 } else {
                     if ($dirALL === true) {
                         $arrDirLists[$arrCount]['dir_name'] = $dirName;
                         $arrDirLists[$arrCount]['installed'] = true;
                     $arrCount++;
                     }
                }
            }
        }
        $this->dirLists = $arrDirLists;
// added
    }




    function initParam(&$objFormParam, $mode) {
        $objFormParam->addParam('mode', 'mode', INT_LEN, '', array('ALPHA_CHECK', 'MAX_LENGTH_CHECK'));
        $objFormParam->addParam('plugin_id', 'plugin_id', INT_LEN, '', array('NUM_CHECK', 'MAX_LENGTH_CHECK'));
        if ($mode === 'priority') {
            $objFormParam->addParam('優先度', 'priority', INT_LEN, '', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
        }
//  added
        if ($mode === 'installL') {
            $objFormParam->addParam('ディレクトリ名', 'dir_name');
        }
// added
    }


        // リフレクションオブジェクトを生成.
        $objReflection = new ReflectionClass('plugin_info');
        $arrPluginInfo = $this->getPluginInfo($objReflection);
        // プラグインクラスに必須となるパラメータが正常に定義されているかチェックします.
// changed
//        $arrErr = $this->checkPluginConstants($objReflection, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
// changed
        $arrErr = $this->checkPluginConstants($objReflection, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $key);
// changed
        if ($this->isError($arrErr) === true) {
            $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
            return $arrErr;
        }



// added
    function installPluginL($directory_name, $key) {
        $arrErr = array();
        // 必須拡張モジュールのチェック
        $arrErr = SC_Plugin_Util_Ex::checkExtension($key);
        if ($this->isError($arrErr) === true) {
            return $arrErr;
        }

        // plugin_infoを読み込み.
        $arrErr = $this->requirePluginFile(PLUGIN_UPLOAD_REALDIR . $directory_name . '/' . 'plugin_info.php', $key);
        if ($this->isError($arrErr) === true) {
            return $arrErr;
        }

        // リフレクションオブジェクトを生成.
        $objReflection = new ReflectionClass('plugin_info');
        $arrPluginInfo = $this->getPluginInfo($objReflection);
        // プラグインクラスに必須となるパラメータが正常に定義されているかチェックします.
        $arrErr = $this->checkPluginConstants($objReflection, PLUGIN_UPLOAD_REALDIR . $directory_name . '/', $key);
        if ($this->isError($arrErr) === true) {
            return $arrErr;
        }

        // 既にインストールされていないかを判定.
        if ($this->isInstalledPlugin($arrPluginInfo['PLUGIN_CODE']) === true) {
            $arrErr[$key] = '※ ' . $arrPluginInfo['PLUGIN_NAME'] . 'は既にインストールされています。<br/>';
            return $arrErr;
        }

        // プラグイン情報をDB登録
        if ($this->registerData($arrPluginInfo) === false) {
            $arrErr[$key] = '※ DB登録に失敗しました。<br/>';
            return $arrErr;
        }

        // プラグイン情報を取得
        $plugin = SC_Plugin_Util_Ex::getPluginByPluginCode($arrPluginInfo['PLUGIN_CODE']);

        // クラスファイルを読み込み.
        $plugin_class_file_path = $this->getPluginFilePath($plugin['plugin_code'], $plugin['class_name']);
        $arrErr = $this->requirePluginFile($plugin_class_file_path, $key);
        if ($this->isError($arrErr) === true) {
            $this->rollbackL($plugin['plugin_id']);
            return $arrErr;
        }

        // プラグインhtmlディレクトリ作成
        $plugin_html_dir_path = $this->getHtmlPluginDir($plugin['plugin_code']);
        $this->makeDir($plugin_html_dir_path);

        $arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'install');
        if ($this->isError($arrErr) === true) {
            $this->rollbackL($plugin['plugin_id'], $plugin_html_dir_path);
            return $arrErr;
        }
    }

    function rollbackL($plugin_id = '', $plugin_html_dir_path ='') {
        // DBからプラグイン情報を削除
        if (empty($plugin_id) === false) {
            SC_Plugin_Util_Ex::deletePluginByPluginId($plugin_id);
        }
        // htmlディレクトリを削除
        if (empty($plugin_html_dir_path) === false) {
            SC_Helper_FileManager_Ex::deleteFile($plugin_html_dir_path, true);
        }
    }
// added


function checkPluginConstantsは、引数を追加

    function checkPluginConstants(ReflectionClass $objReflection, $dir_path, $key) {


※運営チーム編集※
XOOPSのシステムエラーが発生していたためこの下の投稿はいったんカットさせていただいております。
フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
   プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 sumida 2013/6/8 18:48
     Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 sumida 2013/6/9 17:14
       Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 sumida 2013/6/11 13:36
         Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 tao_s 2013/6/11 15:25
           Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 nanasess 2013/6/11 16:01
             Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 sumida 2013/6/12 10:19
               Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 sumida 2013/6/12 17:58
                 Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 sumida 2013/6/12 18:41
                 » 違うパターンもやってもました。(前回分と共存できます。) sumida 2013/6/13 15:19
                     Re: 違うパターンもやってもました。(前回分と共存できます。) eccube_admin 2013/6/14 13:04
                       Re: 違うパターンもやってもました。(前回分と共存できます。) sumida 2013/6/14 15:00
                   リロードでアンインストールが実行できていない。 sumida 2013/7/4 14:43
                     Re: リロードでアンインストールが実行できていない。 sumida 2013/7/4 16:59

 



ログイン



統計情報

総メンバー数は75,051名です
総投稿数は104,353件です

投稿数ランキング

1
seasoft
7333
2
468
3217
3
AMUAMU
2712
4
nanasess
2202
5
umebius
2085
6
yuh
1664
7
red
1535
8
h_tanaka
1189
9
tsuji
942
10
fukap
907
11
shutta
835
12
tao_s
794
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437
Copyright© EC-CUBE CO.,LTD. All Rights Reserved.