バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

管理機能

新規スレッドを追加する

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

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

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

そこで、WordPressのようにアップロードとインストールを分離できれば、
手作業による誤りもなくなりありがたいのです。
« 1 (2)
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン



統計情報

総メンバー数は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.