参考にやってみました。
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 以下について修正
・リロード後、プラグイン自身の有効化を行っていなかった。
・無効のプラグインをリロードすると、無条件に有効にしていた。