バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
sumida
投稿日時: 2013/6/8 18:48
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。
現状、プラグイン管理では、「インストール」の指示で、
・圧縮ファイルをアップロード
・圧縮ファイルの解凍
・dtb_pluginへの登録
・プラグインのインストール
になるかと思います。

当方で借りているサーバーは、
かつて:SSHが利用できた。
いま:SSHが許可されない。また、PHPによる圧縮ファイルの解凍ができない。

つまり、プラグイン管理機能でのインストールができないのです。
そのため、解凍したプラグインをアップロードし、
ファイルに記述されているインストール内容を手作業で実施しています。

そこで、WordPressのようにアップロードとインストールを分離できれば、
手作業による誤りもなくなりありがたいのです。
sumida
投稿日時: 2013/6/9 17:14
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。
必要なものなので、

プラグインアップロード先:
data/downloads/plugin
(たとえば、MaintenanceMode_20120531.tar.gzなら、
data/downloads/plugin/MaintenanceMode以下に解凍したファイルをアップロード)

修正:
1. 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 'installD':
                // エラーチェック
                $this->arrErr = $objFormParam->checkError();
                if ($this->isError($this->arrErr) === false) {
                    // インストール処理.
                    $plugin_dir_name = $objFormParam->getValue('plugin_file2');
                    $this->arrErr = $this->installPluginD($plugin_dir_name, 'plugin_file2');
                    if ($this->isError($this->arrErr) === false) {
                        // コンパイルファイルのクリア処理
                        SC_Utils_Ex::clearCompliedTemplate();
                        $this->tpl_onload = "alert('プラグインをインストールしました。');";
                    }
                }
                // テンプレート(smarty)へ引き継ぐ
                $this->plugin_file2 = $plugin_dir_name;
                break;
// 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 === 'installD') {
            $objFormParam->addParam('ディレクトリ名', 'plugin_file2', 255, '', array('EXIST_CHECK', 'FILE_NAME_CHECK_BY_NOUPLOAD', 'MAX_LENGTH_CHECK'));
        }
// added
    }

以下の関数を追加

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

        // pluginディレクトリの存在チェック
        $arrParams = array($key => PLUGIN_UPLOAD_REALDIR . $directory_name);
        $objErr = new SC_CheckError_Ex($arrParams);
        $objErr->doFunc(array('プラグイン(ディレクトリ)', $key), array('DIR_CHECK'));
        if ($this->isError($objErr->arrErr) === true) {
            return $objErr->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->rollBack2($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->rollBack2($plugin['plugin_id'], $plugin_html_dir_path);
            return $arrErr;
        }
    }

    function rollBack2($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


2. data/Smarty/templates/admin/ownerstore/plugin.tpl

    /**
     * インストール
     */
    function install() {
        if (window.confirm('プラグインをインストールしても宜しいでしょうか?')){
            fnModeSubmit('install','','');
        }
    }
// added
    function installD() {
        if (window.confirm('プラグインをインストールしても宜しいでしょうか?')){
            fnModeSubmit('installD', '', '');
        }
    }
// added


    <h2>プラグイン登録</h2>
    <table class="form">
        <tr>
            <th>プラグイン<span class="attention"> *</span></th>
            <td>
                <!--{assign var=key value="plugin_file"}-->
                <span class="attention"><!--{$arrErr[$key]}--></span>
                <input type="file" name="<!--{ $key }-->" class="box45" size="43"  style="<!--{$arrErr[$key]|sfGetErrorColor}--> <!--{if $arrErr[$key]}--> background-color:<!--{$smarty.const.ERR_COLOR|h}--><!--{/if}-->">
                <a class="btn-action" href="java script:;" onclick="install(); return false;"><span class="btn-next">インストール</span></a>
            </td>
        </tr>
<!--{* added *}-->
        <tr>
            <th>プラグイン(ディレクトリ)</th>
            <td>
                <!--{assign var=key value="plugin_file2"}-->
                <span class="attention"><!--{$arrErr[$key]}--></span>
                data/downloads/plugin/<input type="text" name="<!--{ $key }-->" class="box25" value="<!--{$plugin_file2}-->" size="25" maxlength="255"  style="<!--{$arrErr[$key]|sfGetErrorColor}--> <!--{if $arrErr[$key]}--> background-color:<!--{$smarty.const.ERR_COLOR|h}--><!--{/if}-->">
                <a class="btn-action" href="java script:;" onclick="installD(); return false;"><span class="btn-next">インストールだけ</span></a>
            </td>
        </tr>
<!--{* added *}-->
    </table>


ただし、関数 checkPluginConstants 内でエラーがあった場合、エラーの書き込み先が「plugin_file」固定になっているので、圧縮ファイルの選択部分に表示されます。

6/11 ソースを一部変更しました。
6/11 再度修正しました。(未指定の判定を入れていませんでした。)
   もしかして、initParamに「'EXIST_CHECK'」を追加すれば良かったりして。
   (チェックされないようです。)
6/12 initParamに「'EXIST_CHECK'」を追加し、チェックをかけようとしたところ、
   $modeが、規則「半角英数」「9文字以内」もついでにひっかかてしまいました。
   そこで、ソースを最新に入れ替えました。
sumida
投稿日時: 2013/6/11 13:36
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。
追記:

関数 checkPluginConstants については、
・既存の installPlugin 内の checkPluginConstants 呼び出し
・前述の installPlugin2 内の checkPluginConstants 呼び出し
・関数 checkPluginConstants 自身
の第3引数に $key を追加する。

また、関数 checkPluginConstants 内の
「$arrErr['plugin_file']」を「$arrErr[$key]」
にすべて変更する。
tao_s
投稿日時: 2013/6/11 15:25
対応状況: −−−
仙人
登録日: 2008/8/20
居住地: 東京
投稿: 792
Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。
ありがとうございます。
素晴らしいです。

これコアに必要ですね。チケット切っておきます。


----------------
EC-CUBEカスタマイズ相談してください。
緊急のEC-CUBEの障害対応
EC-CUBEカスタマイズブログ

nanasess
投稿日時: 2013/6/11 16:01
対応状況: −−−
登録日: 2006/9/9
居住地: 大阪
投稿: 2107
Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。
プラグインの開発用に「リロード」も作ってみました。

https://gist.github.com/nanasess/5747139

プラグインの開発中に、プラグイン本体のファイルを削除せずに uninstall/install ができます。

# プラグイン関連の関数群は使いにくいものが多いので、リファクタリングしたいですね。。。


----------------
大河内健太郎(Kentaro Ohkouchi)
EC-CUBE公式エバンジェリスト
スキルニル株式会社

EC-CUBE1系2系長期サポートホスティングサービス CUBE Lab
https://cubelab.info/

sumida
投稿日時: 2013/6/12 10:19
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。
プラグイン用ディレクトリのチェックを

                $this->arrErr = $objFormParam->checkError();

でさせようとしたところ、

$modeにいれた「install2」が、実は、エラー(半角英字でない)になってしまっていたので、
ソースを更新しました。
sumida
投稿日時: 2013/6/12 17:58
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。
リロードがシステムエラーになります。
function reload($plugin) {
に、$keyが定義されていません。

$arrErr = $this->requirePluginFile(PLUGIN_UPLOAD_REALDIR . $plugin['plugin_code'] . '/plugin_info.php', $key);


$arrErr = $this->requirePluginFile($plugin_class_file_path, $key);

$keyは、エラーメッセージの対象を指定するので、今回の場合、どこにしたらいいのだろう?
sumida
投稿日時: 2013/6/12 18:41
対応状況: −−−
仙人
登録日: 2013/2/10
居住地: 広島県呉市ときどき瀬戸内海
投稿: 641
Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。
参考にやってみました。

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


// added
            // リロード
            case 'reload':
                // エラーチェック
                $this->arrErr = $objFormParam->checkError();
                if ($this->isError($this->arrErr) === false) {
                    $plugin_id = $objFormParam->getValue('plugin_id');
                    $plugin = SC_Plugin_Util_Ex::getPluginByPluginId($plugin_id);
                    $this->arrErr = $this->reload($plugin, $plugin['plugin_name']);
                    if ($this->isError($this->arrErr) === false) {
                        // コンパイルファイルのクリア処理
                        SC_Utils_Ex::clearCompliedTemplate();
                        $this->tpl_onload = "alert('" . $plugin['plugin_name'] ."をリロードしました。');";
                    }
                }
                if ($this->isError($this->arrErr) === true) {
                    $this->tpl_onload = "alert('" . $this->arrErr[$plugin['plugin_name']] . "');";
                }
                break;
// added
            default:
                break;
        }


以下の関数reloadには、不具合があります。
修正版を、以降の投稿に掲載しています。(次ページあたりにあります。)

// added
    /**
     * pluginをキーにリロードします.
     *
     * @param array $plugin プラグイン情報
     * @param string $key キー.
     * @return array エラー情報を格納した連想配列.
     */
    function reload($plugin, $key) {
        $arrErr = $this->requirePluginFile(PLUGIN_UPLOAD_REALDIR . $plugin['plugin_code'] . '/plugin_info.php', $key);
        if ($this->isError($arrErr) === true) {
            return $arrErr;
        }
        // プラグインが有効な場合に無効化処理を実行
        $plugin_enable = false;
        if ($plugin['enable'] == PLUGIN_ENABLE_TRUE){
            $plugin_enable = true;
            // 無効化処理を実行します.
            $arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'disable');
            if ($this->isError($arrErr) === true) {
                return $arrErr;
            }
            // プラグインを無効にします.
            $this->updatePluginEnable($plugin['plugin_id'], PLUGIN_ENABLE_FALSE);
        }

        // アンインストール処理を実行します.
        $arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'uninstall');
        if ($this->isError($arrErr) === true) {
            return $arrErr;
        }
        SC_Plugin_Util_Ex::deletePluginByPluginId($plugin['plugin_id']);

        // リフレクションオブジェクトを生成.
        $objReflection = new ReflectionClass('plugin_info');
        $arrPluginInfo = $this->getPluginInfo($objReflection);

        // プラグイン情報を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) {
            return $arrErr;
        }
        $arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'install');
        if ($this->isError($arrErr) === true) {
            return $arrErr;
        }
        // プラグインが有効だったか
        if ($plugin_enable === true) {
            // 有効化処理を実行します.
            $arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'enable');
            if ($this->isError($arrErr) === true) {
                return $arrErr;
            }
            // プラグインを有効にします.
            $this->updatePluginEnable($plugin['plugin_id'], PLUGIN_ENABLE_TRUE);
        }
        return $arrErr;
    }
// added


data/Smarty/templates/admin/ownerstore/plugin.tpl


// added
    /**
     * リロード
     */
    function reload(plugin_id, plugin_code) {
        if (window.confirm('プラグインをリロードしても宜しいでしょうか?')){
            fnSetFormValue('plugin_id', plugin_id);
            fnModeSubmit('reload','plugin_code', plugin_code);
        }
    }
// added

//]]></script>



                             <!-- アップデート -->
                                <a class="update_link" href="java script:;" name="<!--{$plugin.plugin_id}-->">アップデート</a>&nbsp;|&nbsp;
<!--{* added *}-->
                            <!-- リロード -->
                                <a  href="java script:;" name="reload" onclick="reload(<!--{$plugin.plugin_id}-->, '<!--{$plugin.plugin_code}-->'); return false;">リロード</a>&nbsp;|&nbsp;
<!--{* added *}-->
                            <!-- 削除 -->
                                <a  href="java script:;" name="uninstall" onclick="uninstall(<!--{$plugin.plugin_id}-->, '<!--{$plugin.plugin_code}-->'); return false;">削除</a>&nbsp;|&nbsp;

追記
6/14 以下について修正
・リロード後、プラグイン自身の有効化を行っていなかった。
・無効のプラグインをリロードすると、無条件に有効にしていた。
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のシステムエラーが発生していたためこの下の投稿はいったんカットさせていただいております。
eccube_admin
投稿日時: 2013/6/14 13:04
対応状況: −−−
管理人
登録日: 2006/9/6
居住地:
投稿: 146
Re: 違うパターンもやってもました。(前回分と共存できます。)
※運営チーム編集※
元の投稿 http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=12779&forum=7&post_id=58907
カット分を再掲載させていただいております。
$arrErr['plugin_file']の記述を$arrErr[$key]に変更

data/Smarty/templates/admin/ownerstore/plugin.tpl


    /**
     * インストール
     */
    function install() {
        if (window.confirm('プラグインをインストールしても宜しいでしょうか?')){
            fnModeSubmit('install','','');
        }
    }
// added
    function installL(dir_name) {
        if (window.confirm('プラグインをインストールしても宜しいでしょうか?')){
            fnModeSubmit('installL', 'dir_name', dir_name);
        }
    }
// added



<input type="hidden" name="mode" value="" />
<input type="hidden" name="plugin_id" value="" />
<input type="hidden" name="plugin_code" value="" />
<input type="hidden" name="priority" value="" />
<!--{*  added *}-->
<input type="hidden" name="dir_name" value="" />
<!--{* added *}-->


    <h2>プラグイン登録</h2>
    <table class="form">
        <tr>
            <th>プラグイン<span class="attention"> *</span></th>
            <td>
                <!--{assign var=key value="plugin_file"}-->
                <span class="attention"><!--{$arrErr[$key]}--></span>
                <input type="file" name="<!--{ $key }-->" class="box45" size="43"  style="<!--{$arrErr[$key]|sfGetErrorColor}--> <!--{if $arrErr[$key]}--> background-color:<!--{$smarty.const.ERR_COLOR|h}--><!--{/if}-->">
                <a class="btn-action" href="java script:;" onclick="install(); return false;"><span class="btn-next">インストール</span></a>
            </td>
        </tr>
    </table>
<!--{* added *}-->
    <!--▼ディレクトリ一覧ここから-->
    <h2>インストールしていないプラグイン一覧</h2>

    <!--{if count($dirLists) > 0}-->
        <span class="attention"><!--{$arrErr.dir_plugin_error}--></span>
        <table class="system-plugin">
            <col width="10%" />
            <col width="77" />
            <col width="13%" />
            <tr>
                <th colspan="3">プラグイン(ディレクトリ)名</th>
            </tr>
            <!--{section name=i start=0 loop=$dirLists|@count}-->
                <!--{assign var=dirList value=$dirLists[i]}-->
                <tr <!--{if $dirList.installed == false}--> style="background:#C9C9C9;" <!--{/if}-->>
                    <td class="center plugin_img">
                    </td>
                    <td class="plugin_info">
                        <span class="plugin_name">
                            <sapn><!--{$dirList.dir_name|h}--></sapn>
                        </span>
                    </td>
                    <td class="center">
                        <!--{if $dirList.installed == true}-->
                            <a class="btn-action" href="java script:;" onclick="installL('<!--{$dirList.dir_name}-->'); return false;"><span class="btn-next">インストール</span></a>
                        <!--{else}-->
                            インストール済み
                        <!--{/if}-->
                    </td>
                </tr>
            <!--{/section}-->
        </table>
    <!--{else}-->
        <span>インストールしていないプラグインはありません。</span>
    <!--{/if}-->
<!--{* added *}-->
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は66,746名です
総投稿数は98,437件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
468
2651
4
nanasess
2107
5
umebius
1758
6
yuh
1612
7
red
1424
8
h_tanaka
1049
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.