バージョン選択
フォーラム
メニュー
オンライン状況
|
|
58 人のユーザが現在オンラインです。 (51 人のユーザが フォーラム を参照しています。) |
|
|
機能要望 > 管理機能 > プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 |
|
管理機能
投稿者 |
スレッド |
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 居住地: 東京 投稿: 804 |
Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 ありがとうございます。 素晴らしいです。 これコアに必要ですね。チケット切っておきます。 ---------------- EC-CUBEカスタマイズ相談してください。 緊急のEC-CUBEの障害対応 EC-CUBEカスタマイズブログ
|
|
|
nanasess |
投稿日時: 2013/6/11 16:01
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2315 |
Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 プラグインの開発用に「リロード」も作ってみました。 https://gist.github.com/nanasess/5747139プラグインの開発中に、プラグイン本体のファイルを削除せずに uninstall/install ができます。 # プラグイン関連の関数群は使いにくいものが多いので、リファクタリングしたいですね。。。
|
|
|
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> |
<!--{* added *}-->
<!-- リロード -->
<a href="java script:;" name="reload" onclick="reload(<!--{$plugin.plugin_id}-->, '<!--{$plugin.plugin_code}-->'); return false;">リロード</a> |
<!--{* added *}-->
<!-- 削除 -->
<a href="java script:;" name="uninstall" onclick="uninstall(<!--{$plugin.plugin_id}-->, '<!--{$plugin.plugin_code}-->'); return false;">削除</a> |
追記 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 居住地: 投稿: 157 |
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 *}-->
|
|
|
|
統計情報
総メンバー数は93,331名です
総投稿数は111,015件です
|