Changeset 21455 for branches/version-2_12-dev/data
- Timestamp:
- 2012/02/08 13:55:06 (14 years ago)
- Location:
- branches/version-2_12-dev/data
- Files:
-
- 9 edited
-
Smarty/templates/admin/system/plugin.tpl (modified) (2 diffs)
-
class/helper/SC_Helper_Plugin.php (modified) (7 diffs)
-
class/pages/admin/LC_Page_Admin.php (modified) (2 diffs)
-
class/pages/admin/products/LC_Page_Admin_Products_Category.php (modified) (2 diffs)
-
class/pages/admin/system/LC_Page_Admin_System_Plugin.php (modified) (4 diffs)
-
class/pages/products/LC_Page_Products_List.php (modified) (2 diffs)
-
class/util/SC_Utils.php (modified) (1 diff)
-
mtb_constants_init.php (modified) (3 diffs)
-
require_base.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_12-dev/data/Smarty/templates/admin/system/plugin.tpl
r21343 r21455 22 22 */ 23 23 *}--> 24 <script type="text/javascript">//<![CDATA[ 25 $(function() { 26 27 $('input[id^=plugin_enable]').click(function(event) { 28 var data = {}; 29 30 // モード(有効 or 無効) 31 data.mode = event.target.name; 32 // プラグインID 33 data.plugin_id = event.target.value; 34 data['<!--{$smarty.const.TRANSACTION_ID_NAME}-->'] = '<!--{$transactionid}-->'; 35 $.ajax({ 36 type : 'POST', 37 url : location.pathname, 38 dataType : "json", 39 data: data, 40 cache : false, 41 error : remoteException, 42 success : function(data, dataType) { 43 alert(data.message); 44 location.href = location.pathname; 45 } 46 }); 47 }); 48 49 /** 50 * 通信エラー表示. 51 */ 52 function remoteException(XMLHttpRequest, textStatus, errorThrown) { 53 alert('通信中にエラーが発生しました。'); 54 } 55 56 $('.update_link').click(function(event) { 57 var plugin_id = event.target.name; 58 $('div[id="plugin_update_' + plugin_id + '"]').toggle("slow"); 59 }); 60 }); 61 62 63 function removeUpdateFile(select_id) { 64 $('input[name="update_plugin_file"]').attr("disabled", "disabled"); 65 $('input[id="' + select_id + '"]').removeAttr("disabled"); 66 } 67 //]]> 68 </script> 69 24 70 <!--<form name="form1" id="form1" method="post" action="?">--> 25 71 <form name="form1" method="post" action="?" enctype="multipart/form-data"> … … 38 84 <!--{assign var=key value="plugin_file"}--> 39 85 <span class="attention"><!--{$arrErr[$key]}--></span> 40 <input type="file" name="<!--{$key}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" class="box54" size="64" <!--{if $arrErr[$key]}-->style="background-color:<!--{$smarty.const.ERR_COLOR|h}-->"<!--{/if}-->> 86 <input type="file" name="<!--{$key}-->" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" class="box45" size="43" <!--{if $arrErr[$key]}-->style="background-color:<!--{$smarty.const.ERR_COLOR|h}-->"<!--{/if}--> > 87 <a class="btn-action" href="javascript:;" onclick="fnModeSubmit('install', '', '');return false;"><span class="btn-next">インストール</span></a> 41 88 </td> 42 89 </tr> 43 90 </table> 44 91 45 <div class="btn-area">46 <a class="btn-action" href="javascript:;" onclick="fnModeSubmit('upload', '', '');return false;"><span class="btn-next">この内容で登録する</span></a>47 </div>48 49 92 <!--▼プラグイン一覧ここから--> 50 93 <h2>プラグイン一覧</h2> 51 94 <!--{if count($plugins) > 0}--> 52 <span class="attention"><!--{$arrErr.plugin_error}--><!--{$arrErr.mode}--><!--{$arrErr.plugin_id}--><!--{$arrErr.plugin_code}--></span> 53 <table class="list" width="900"> 54 <col width="15%" /> 95 <span class="attention"><!--{$arrErr.plugin_error}--><!--{$arrErr.update_plugin_file}--></span> 96 <table class="system-plugin" width="900"> 55 97 <col width="10%" /> 56 <col width="25%" /> 57 <col width="28%" /> 58 <col width="7%" /> 59 <col width="5%" /> 60 <col width="5%" /> 61 <col width="5%" /> 98 <col width="80%" /> 99 <col width="10%" /> 62 100 <tr> 63 <th>プラグイン名</th> 64 <th>作者</th> 65 <th>サイトURL</th> 66 <th>説明</th> 67 <th>商品ステータス</th> 68 <th>操作</th> 69 <th>設定</th> 70 <th>移動</th> 101 <th colspan="2">機能説明</th> 102 <th>優先度<a class="btn-action" href="javascript:;" onclick="fnModeSubmit('priority','','');return false;"><span class="btn-next">反映</span></a></th> 71 103 </tr> 72 104 <!--{section name=data loop=$plugins}--> 73 <tr> 74 <td><!--{$plugins[data].plugin_name|default:$plugins[data].plugin_code|h}--><!--{if $plugins[data].plugin_version != ''}--><br /><!--{$plugins[data].plugin_version|h}--><!--{/if}--></td> 75 <td><!--{$plugins[data].author|default:'-'|h}--></td> 76 <td><!--{$plugins[data].plugin_site_url|default:'-'|h}--></td> 77 <td><!--{$plugins[data].plugin_description|default:'-'|h}--></td> 105 <tr <!--{if $plugins[data].enable == $smarty.const.PLUGIN_ENABLE_FALSE}--> style="background:#C9C9C9;" <!--{/if}-->> 106 <!--ロゴ--> 107 <td class="center plugin_img"> 108 <!--{if $plugins[data].plugin_site_url != '' }--> 109 <a href="?" onclick="win03('<!--{$plugins[data].plugin_site_url|h}-->','plugin_site_url','620','760'); return false;"><img src="<!--{$smarty.const.HTTP_URL}-->plugin/<!--{$plugins[data].plugin_code}-->/logo.png"/></a> 110 <!--{else}--> 111 <img src="<!--{$smarty.const.HTTP_URL}-->plugin/<!--{$plugins[data].plugin_code}-->/logo.png"/> 112 <!--{/if}--> 113 114 </td> 115 <!--機能説明--> 116 <td class="plugin_info"> 117 118 <!-- プラグイン名 --> 119 <!-- ▼plugin_site_urlが設定されている場合はリンクとして表示 --> 120 <span class="plugin_name"> 121 <!--{if $plugins[data].plugin_site_url != '' }--> 122 <a href="?" onclick="win03('<!--{$plugins[data].plugin_site_url|h}-->','plugin_site_url','620','760'); return false;"><!--{$plugins[data].plugin_name|default:$plugins[data].plugin_code|h}--></a> 123 <!--{else}--> 124 <!--{$plugins[data].plugin_name|default:$plugins[data].plugin_code|h}--> 125 <!--{/if}--> 126 </span> 127 <!-- プラグインバージョン --> 128 <!--{if $plugins[data].plugin_version != ''}--><!--{$plugins[data].plugin_version|h}--><!--{/if}--> 129 <!-- 作者 --> 130 <!--{if $plugins[data].author != ''}--> 131 <!-- ▼author_site_urlが設定されている場合はリンクとして表示 --> 132 <!--{if $plugins[data].author_site_url != '' }--> 133 (by <a href="?" onclick="win03('<!--{$plugins[data].author_site_url|h}-->','author_site_url','620','760'); return false;"><!--{$plugins[data].author|default:'-'|h}--></a>) 134 <!--{else}--> 135 (by <!--{$plugins[data].author|default:'-'|h}-->) 136 <!--{/if}--> 137 <!--{/if}--> 138 <br /> 139 140 <p class="description"><!--{$plugins[data].plugin_description|default:'-'|h}--></p> 141 <div> 142 <span class="ec_cube_version">対応EC-CUBEバージョン :<!--{$plugins[data].compliant_version|default:'-'|h}--></span><br/> 143 <!--{if $plugins[data].config_flg == true && $plugins[data].status != $smarty.const.PLUGIN_STATUS_UPLOADED}--> 144 <a href="?" onclick="win03('<!--{$smarty.const.HTTP_URL}-->plugin/<!--{$plugins[data].plugin_code}-->/config.php','plugin_setting','620','760'); return false;">プラグイン設定</a> | 145 <!--{else}--> 146 プラグイン設定 | 147 <!--{/if}--> 148 <!-- アップデート --> 149 <a class="update_link" href="#" name="<!--{$plugins[data].plugin_id}-->">アップデート</a> | 150 <!-- 削除 --> 151 <a href="javascript:;" name="uninstall" onclick="fnSetFormValue('plugin_id', '<!--{$plugins[data].plugin_id}-->'); fnModeSubmit('uninstall','plugin_code','<!--{$plugins[data].plugin_code}-->'); return false;">削除</a> | 152 <!-- 有効/無効 --> 153 <!--{if $plugins[data].enable == $smarty.const.PLUGIN_ENABLE_TRUE}--> 154 <input id="plugin_enable" type="checkbox" name="disable" value="<!--{$plugins[data].plugin_id}-->" id="login_memory" checked="checked">有効</input><br/> 155 <!--{else}--> 156 <input id="plugin_enable" type="checkbox" name="enable" value="<!--{$plugins[data].plugin_id}-->" id="login_memory" onclick="fnSetFormValue('plugin_id', '<!--{$plugins[data].plugin_id}-->'); return false;">有効にする</input><br/> 157 <!--{/if}--> 158 159 <!-- アップデートリンク押下時に表示する. --> 160 <div id="plugin_update_<!--{$plugins[data].plugin_id}-->" style="display: none"> 161 <input id="update_file_<!--{$plugins[data].plugin_id}-->" name="update_plugin_file" type="file" style="<!--{$arrErr[$key]|sfGetErrorColor}-->" class="box30" size="30" <!--{if $arrErr[$key]}-->style="background-color:<!--{$smarty.const.ERR_COLOR|h}-->"<!--{/if}--> /> 162 <a class="btn-action" href="javascript:;" onclick="removeUpdateFile('update_file_<!--{$plugins[data].plugin_id}-->'); fnSetFormValue('plugin_id', '<!--{$plugins[data].plugin_id}-->'); fnModeSubmit('update','plugin_code','<!--{$plugins[data].plugin_code}-->');return false;"><span class="btn-next">アップデート</span></a> 163 </div> 164 </div> 165 </td> 166 <!--優先順位--> 167 <!--{assign var=key value="rank"}--> 78 168 <td class="center"> 79 <!--{if $plugins[data].enable == $smarty.const.PLUGIN_ENABLE_TRUE}--> 80 有効 81 <!--{elseif $plugins[data].enable == $smarty.const.PLUGIN_ENABLE_FALSE}--> 82 無効 83 <!--{else}-->-<!--{/if}--> 84 </td> 85 <td class="center"> 86 <!--{if $plugins[data].status == $smarty.const.PLUGIN_STATUS_UPLOADED}--> 87 <a class="btn-normal" href="javascript:;" name="install" onclick="fnSetFormValue('plugin_id', '<!--{$plugins[data].plugin_id}-->'); fnModeSubmit('install','plugin_code','<!--{$plugins[data].plugin_code}-->'); return false;">install</a> 88 <!--{else}--> 89 <!--{if $plugins[data].enable == $smarty.const.PLUGIN_ENABLE_TRUE}--> 90 <a class="btn-normal" href="javascript:;" name="disable" onclick="fnSetFormValue('plugin_id', '<!--{$plugins[data].plugin_id}-->'); fnModeSubmit('disable','plugin_code','<!--{$plugins[data].plugin_code}-->'); return false;">disable</a><br /> 91 <!--{else}--> 92 <a class="btn-normal" href="javascript:;" name="enable" onclick="fnSetFormValue('plugin_id', '<!--{$plugins[data].plugin_id}-->'); fnModeSubmit('enable','plugin_code','<!--{$plugins[data].plugin_code}-->'); return false;">enable</a><br /> 93 <!--{/if}--> 94 <a class="btn-normal" href="javascript:;" name="uninstall" onclick="fnSetFormValue('plugin_id', '<!--{$plugins[data].plugin_id}-->'); fnModeSubmit('uninstall','plugin_code','<!--{$plugins[data].plugin_code}-->'); return false;">uninstall</a> 95 <!--{/if}--> 96 </td> 97 <td class="center"> 98 <!--{if $plugins[data].plugin_setting_path != ''}--> 99 <a href="?" onclick="win03('<!--{$plugins[data].plugin_setting_path}-->','plugin_setting','620','760'); return false;">設定</a> 100 <!--{else}--> 101 - 102 <!--{/if}--> 103 </td> 104 <td align="center"> 105 <!--{if $smarty.section.data.iteration != 1}--> 106 <a href="?" onclick="fnModeSubmit('up','plugin_id', '<!--{$plugins[data].plugin_id}-->'); return false;">上へ</a> 107 <!--{/if}--> 108 <!--{if $smarty.section.data.iteration != $smarty.section.data.last}--> 109 <a href="?" onclick="fnModeSubmit('down','plugin_id', '<!--{$plugins[data].plugin_id}-->'); return false;">下へ</a> 110 <!--{/if}--> 169 <input type="text" name="priority[<!--{$plugins[data].plugin_id}-->]" value="<!--{$plugins[data].rank|h}-->" size="1" class="rank" /><br/> 111 170 </td> 112 171 </tr> 172 <!--{if $plugins[data].conflict_message != ""}--> 173 <tr> 174 <td class="attention_fookpoint" colspan="3"> 175 <span class="attention"><!--{$plugins[data].conflict_message}--></span> 176 </td> 177 </tr> 178 <!--{/if}--> 179 113 180 <!--{/section}--> 114 181 </table> -
branches/version-2_12-dev/data/class/helper/SC_Helper_Plugin.php
r21450 r21455 54 54 foreach ($arrPluginDataList as $arrPluginData) { 55 55 // プラグイン本体ファイル名が取得したプラグインディレクトリ一覧にある事を確認 56 if (array_search($arrPluginData[' class_name'], $arrPluginDirectory) !== false) {56 if (array_search($arrPluginData['plugin_code'], $arrPluginDirectory) !== false ) { 57 57 // プラグイン本体ファイルをrequire. 58 require_once PLUGIN_UPLOAD_REALDIR . $arrPluginData['class_name'] . '/' . $arrPluginData['class_name'] . '.php'; 58 require_once(PLUGIN_UPLOAD_REALDIR . $arrPluginData['plugin_code'] . '/' . $arrPluginData['plugin_code'] . '.php'); 59 59 60 // プラグインのインスタンス生成. 60 $objPlugin = new $arrPluginData[' class_name']($arrPluginData);61 $objPlugin = new $arrPluginData['plugin_code']($arrPluginData); 61 62 // メンバ変数にプラグインのインスタンスを登録. 62 63 $this->arrPluginInstances[$arrPluginData['plugin_id']] = $objPlugin; … … 118 119 $col = '*'; 119 120 $table = 'dtb_plugin'; 120 $where = 'enable = 1 AND del_flg = 0';121 $where = 'enable = 1'; 121 122 // XXX 2.11.0 互換のため 122 123 $arrCols = $objQuery->listTableFields($table); … … 130 131 /** 131 132 * インストールされているプラグインを取得する。 133 * 134 * @return array $arrRet インストールされているプラグイン. 132 135 */ 133 136 function getAllPlugin(){ … … 135 138 $col = '*'; 136 139 $table = 'dtb_plugin'; 137 $where = 'del_flg = 0';138 140 // XXX 2.11.0 互換のため 139 141 $arrCols = $objQuery->listTableFields($table); 140 142 if (in_array('rank', $arrCols)) { 141 $objQuery->setOrder(' rank DESC');142 } 143 $arrRet = $objQuery->select($col,$table ,$where);143 $objQuery->setOrder('plugin_id ASC'); 144 } 145 $arrRet = $objQuery->select($col,$table); 144 146 return $arrRet; 147 } 148 149 /** 150 * プラグインIDをキーにプラグインを取得する。 151 * 152 * @param int $plugin_id プラグインID. 153 * @return array プラグインの基本情報. 154 */ 155 function getPluginByPluginId($plugin_id){ 156 $objQuery = new SC_Query_Ex(); 157 $col = '*'; 158 $table = 'dtb_plugin'; 159 $where = 'plugin_id = ?'; 160 // XXX 2.11.0 互換のため 161 $arrCols = $objQuery->listTableFields($table); 162 if (in_array('rank', $arrCols)) { 163 $objQuery->setOrder('rank ASC'); 164 } 165 $arrRet = $objQuery->select($col, $table, $where, array($plugin_id)); 166 return $arrRet[0]; 167 } 168 169 /** 170 * プラグインコードをキーにプラグインを取得する。 171 * 172 * @param string $plugin_code プラグインコード. 173 * @return array プラグインの基本情報. 174 */ 175 function getPluginByPluginCode($plugin_code){ 176 $objQuery = new SC_Query_Ex(); 177 $col = '*'; 178 $table = 'dtb_plugin'; 179 $where = 'plugin_code = ?'; 180 // XXX 2.11.0 互換のため 181 $arrCols = $objQuery->listTableFields($table); 182 if (in_array('rank', $arrCols)) { 183 $objQuery->setOrder('rank ASC'); 184 } 185 $arrRet = $objQuery->select($col, $table, $where, array($plugin_code)); 186 return $arrRet[0]; 145 187 } 146 188 … … 266 308 // キャッシュテンプレートを削除 267 309 if ($test_mode === false) { 268 $this->unlinkRecurse(PLUGIN_TMPL_CACHE_REALDIR, false);310 SC_Utils_Ex::deleteFile(PLUGIN_TMPL_CACHE_REALDIR, false); 269 311 } 270 312 $objTemplateTransformList = SC_Plugin_Template_Transform_List::getSingletonInstance(); … … 279 321 280 322 /** 281 * 指定されたパスの配下を再帰的に unlink282 *283 * @param string $path 削除対象のディレクトリまたはファイルのパス284 * @param boolean $del_myself $pathそのものを削除するか. true なら削除する.285 * @return void286 */287 function unlinkRecurse($path, $del_myself = true) {288 if (!file_exists($path)) {289 // TODO エラー処理; パスが存在しません290 } elseif (is_dir($path)) {291 // ディレクトリ292 $handle = opendir($path);293 if (!$handle) {294 // TODO エラー処理; ディレクトリが開けませんでした295 }296 297 while (($item = readdir($handle)) !== false) {298 if ($item === '.' || $item === '..') continue;299 $cur_path = $path . '/' . $item;300 if (is_dir($cur_path)) SC_Helper_Plugin::unlinkRecurse($cur_path);301 else @unlink($cur_path);302 }303 closedir($handle);304 305 // ディレクトリを削除306 if ($del_myself) @rmdir($path);307 } else {308 // ファイルが指定された309 @unlink($path);310 }311 }312 313 /**314 323 * テンプレートキャッシュファイルのフルパスを返す. 315 324 * … … 319 328 function getPluginTemplateCachePath($objPage) { 320 329 // main_template の差し替え 321 if (strpos($objPage->tpl_mainpage, SMARTY_TEMPLATES_REALDIR) === 0) {322 // フルパスで指定された323 $dir = '';324 $default_tpl_mainpage = str_replace(SMARTY_TEMPLATES_REALDIR, '', $objPage->tpl_mainpage);325 } else {330 if (strpos($objPage->tpl_mainpage, SMARTY_TEMPLATES_REALDIR) === 0) { 331 // フルパスで指定された 332 $dir = ''; 333 $default_tpl_mainpage = str_replace(SMARTY_TEMPLATES_REALDIR, '', $objPage->tpl_mainpage); 334 } else { 326 335 // フロントページ or 管理画面を判定 327 $dir = ($objPage instanceof LC_Page_Admin) ? 'admin/' : TEMPLATE_NAME . '/';328 $default_tpl_mainpage = $objPage->tpl_mainpage;329 }336 $dir = ($objPage instanceof LC_Page_Admin) ? 'admin/' : TEMPLATE_NAME . '/'; 337 $default_tpl_mainpage = $objPage->tpl_mainpage; 338 } 330 339 return PLUGIN_TMPL_CACHE_REALDIR . $dir . $default_tpl_mainpage; 331 340 } -
branches/version-2_12-dev/data/class/pages/admin/LC_Page_Admin.php
r21441 r21455 65 65 $this->objDisplay = new SC_Display_Ex(); 66 66 67 // スーパーフックポイントを実行. 68 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 69 $objPlugin->doAction('lc_page_preProcess', array($this)); 70 67 if($_SERVER['PHP_SELF'] !== "/admin/system/plugin.php") { 68 // スーパーフックポイントを実行. 69 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 70 $objPlugin->doAction('lc_page_preProcess', array($this)); 71 } 72 71 73 // トランザクショントークンの検証と生成 72 74 $this->doValidToken(true); … … 89 91 function sendResponse() { 90 92 91 // HeadNaviにpluginテンプレートを追加する. 92 $objTemplateTransformList = SC_Plugin_Template_Transform_List::getSingletonInstance(); 93 $objTemplateTransformList->setHeadNaviBlocs($this->arrPageLayout['HeadNavi']); 93 if($_SERVER['PHP_SELF'] !== "/admin/system/plugin.php") { 94 95 // プラグインによってトランスフォームされたテンプレートがあればセットする 96 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 97 $plugin_tmplpath = $objPlugin->getPluginTemplateCachePath($this); 98 if (file_exists($plugin_tmplpath)) $this->tpl_mainpage = $plugin_tmplpath; 94 99 95 // プラグインによってトランスフォームされたテンプレートがあればセットする96 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance();97 $plugin_tmplpath = $objPlugin->getPluginTemplateCachePath($this);98 if (file_exists($plugin_tmplpath)) $this->tpl_mainpage = $plugin_tmplpath;99 100 // スーパーフックポイントを実行.101 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance();102 $objPlugin->doAction('lc_page_process', array($this));103 100 // スーパーフックポイントを実行. 101 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 102 $objPlugin->doAction('lc_page_process', array($this)); 103 104 // HeadNaviにpluginテンプレートを追加する. 105 $objTemplateTransformList = SC_Plugin_Template_Transform_List::getSingletonInstance(); 106 $objTemplateTransformList->setHeadNaviBlocs($this->arrPageLayout['HeadNavi']); 107 } 108 104 109 $this->objDisplay->prepare($this, true); 105 110 $this->objDisplay->response->write(); -
branches/version-2_12-dev/data/class/pages/admin/products/LC_Page_Admin_Products_Category.php
r21441 r21455 78 78 $objFormParam->setParam($_POST); 79 79 $objFormParam->convParam(); 80 80 81 // フックポイントを実行. 82 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 83 $objPlugin->doAction('lc_page_admin_products_category_action_start', array($this)); 84 81 85 switch ($this->getMode()) { 82 86 // カテゴリ登録/編集実行 … … 183 187 $objDb->findTree($this->arrTree, $parent_category_id, $arrBread); 184 188 $this->tpl_bread_crumbs = SC_Utils_Ex::jsonEncode($arrBread); 189 190 // フックポイントを実行. 191 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 192 $objPlugin->doAction('lc_page_admin_products_category_action_end', array($this)); 185 193 } 186 194 -
branches/version-2_12-dev/data/class/pages/admin/system/LC_Page_Admin_System_Plugin.php
r21441 r21455 74 74 $objFormParam->setParam($_POST); 75 75 76 $mode = $this->getMode(); 76 $mode = $this->getMode(); 77 77 78 78 switch ($mode) { 79 case 'install': 80 case 'uninstall': 81 case 'enable': 82 case 'disable': 83 // エラーチェック 84 $this->arrErr = $objFormParam->checkError(); 85 86 if (count($this->arrErr) == 0) { 87 $plugin_id = $objFormParam->getValue('plugin_id'); 88 $plugin_code = $objFormParam->getValue('plugin_code'); 89 90 // プラグインファイルを読み込み、modeで指定されたメソッドを実行 91 $this->arrErr = $this->lfExecPlugin($plugin_id, $plugin_code, $mode); 92 } 93 break; 94 case 'upload': 95 // プラグイン情報を設定 96 $plugin_code = $this->lfGetPluginCode($_FILES['plugin_file']['name']); 97 $plugin_dir = $this->lfGetPluginDir($plugin_code); 98 99 // ファイルアップロード情報を設定 100 $objUpFile = new SC_UploadFile_Ex(TEMPLATE_TEMP_REALDIR, $plugin_dir); 101 $this->lfInitUploadFile($objUpFile); 102 103 // エラーチェック 104 $this->arrErr = $this->lfCheckErrorUploadFile($plugin_code, $plugin_dir); 105 106 if (count($this->arrErr) == 0) { 107 // 一時ディレクトリへアップロード 108 $this->arrErr['plugin_file'] = $objUpFile->makeTempFile('plugin_file', false); 109 110 if ($this->arrErr['plugin_file'] == "") { 111 // プラグイン保存ディレクトリへ解凍 112 $this->arrErr = $this->lfUploadPlugin($objUpFile, $plugin_dir, $plugin_code, $_FILES['plugin_file']['name']); 113 114 // 完了メッセージアラート設定 115 if (count($this->arrErr) == 0) { 116 $this->tpl_onload = "alert('プラグインをアップロードしました。');"; 79 // インストール 80 case 'install': 81 $file_key = "plugin_file"; 82 $plugin_file = $_FILES[$file_key]; 83 $this->arrErr = $this->checkUploadFile($plugin_file, $file_key); 84 if($this->isError($this->arrErr) === false){ 85 $plugin_file_name = $plugin_file['name']; 86 $plugin_code = $this->getPluginCode($plugin_file_name); 87 88 // 既に登録されていないか判定. 89 if($this->isInstalledPlugin($plugin_code) === false){ 90 // インストール処理. 91 $this->arrErr = $this->installPlugin($plugin_code, $plugin_file_name); 92 if($this->isError($this->arrErr) === false) { 93 // テンプレート再生成. 94 $this->remakeTemplate(); 95 $this->tpl_onload = "alert('プラグインをインストールしました。');"; 96 } 97 } else { 98 $this->arrErr[$file_key] = "※ 既にインストールされているプラグインです。<br/>"; 117 99 } 118 100 } 101 break; 102 // 削除 103 case 'uninstall': 104 // エラーチェック 105 $this->arrErr = $objFormParam->checkError(); 106 if($this->isError($this->arrErr) === false) { 107 $plugin_code = $objFormParam->getValue('plugin_code'); 108 $plugin_id = $objFormParam->getValue('plugin_id'); 109 110 $this->arrErr = $this->uninstallPlugin( $plugin_id, $plugin_code); 111 // 完了メッセージアラート設定. 112 if($this->isError($this->arrErr) === false) { 113 $plugin = SC_Helper_Plugin_Ex::getPluginByPluginId($plugin_id); 114 // テンプレート再生成. 115 $this->remakeTemplate(); 116 $this->tpl_onload = "alert('" . $plugin['plugin_name'] ."を削除しました。');"; 117 } 118 } 119 break; 120 // 有効化 121 case 'enable': 122 // エラーチェック 123 $arrErr = $objFormParam->checkError(); 124 if($this->isError($arrErr) === false) { 125 $plugin_id = $objFormParam->getValue('plugin_id'); 126 // プラグイン取得. 127 $plugin = SC_Helper_Plugin_Ex::getPluginByPluginId($plugin_id); 128 // ステータス更新 129 $arrErr = $this->enablePlugin($plugin_id, $plugin['plugin_code']); 130 if($this->isError($arrErr) === false) { 131 // テンプレート再生成. 132 $this->remakeTemplate(); 133 echo SC_Utils_Ex::jsonEncode(array('message' => $plugin['plugin_name'] . "を有効にしました。")); 134 } 135 } 136 exit; 137 break; 138 // 無効化 139 case 'disable': 140 // エラーチェック 141 $arrErr = $objFormParam->checkError(); 142 if($this->isError($arrErr) === false) { 143 $plugin_id = $objFormParam->getValue('plugin_id'); 144 // プラグイン取得. 145 $plugin = SC_Helper_Plugin_Ex::getPluginByPluginId($plugin_id); 146 // プラグインを無効にします 147 $arrErr = $this->disablePlugin($plugin_id, $plugin['plugin_code']); 148 if($this->isError($arrErr) === false) { 149 // テンプレート再生成. 150 $this->remakeTemplate(); 151 echo SC_Utils_Ex::jsonEncode(array('message' => $plugin['plugin_name'] . "を無効にしました。")); 152 } 153 } 154 exit; 155 break; 156 // アップデート. 157 case 'update': 158 // エラーチェック 159 $this->arrErr = $objFormParam->checkError(); 160 if($this->isError($this->arrErr) === false){ 161 $file_key = "update_plugin_file"; 162 $update_plugin_file = $_FILES[$file_key]; 163 164 $this->arrErr = $this->checkUploadFile($update_plugin_file, $file_key); 165 if($this->isError($this->arrErr) === false){ 166 $update_plugin_file_name = $update_plugin_file['name']; // アップデートファイルのファイル名. 167 $update_plugin_code = $this->getPluginCode($update_plugin_file_name); // アップデートファイルのプラグインコード. 168 $plugin_code = $objFormParam->getValue('plugin_code'); // アップデート対象のプラグインコード 169 170 // インストールされているプラグインかを判定. 171 if($this->isInstalledPlugin($update_plugin_code) === true && $update_plugin_code === $plugin_code){ 172 // インストール処理. 173 $this->arrErr = $this->updatePlugin($plugin_code, $update_plugin_file_name, $file_key, $objFormParam->getValue('plugin_id')); 174 if($this->isError($this->arrErr) === false) { 175 // テンプレート再生成. 176 $this->remakeTemplate(); 177 $this->tpl_onload = "alert('プラグインをアップデートしました。');"; 178 } 179 } else { 180 $this->arrErr[$file_key] = "※ プラグインファイルが不正です。<br/>"; 181 } 182 } 183 } 184 185 break; 186 // 優先度. 187 case 'priority': 188 // TODO 優先度の変更処理. 189 // // 優先度を取得 190 // $priority_array = $objFormParam->getValue('priority'); 191 // 192 // // 優先度の更新 193 // $objQuery =& SC_Query_Ex::getSingletonInstance(); 194 // foreach ($priority_array as $key => $value) { 195 // $sqlval['rank'] = $value; 196 // $objQuery->update("dtb_plugin", $sqlval, "plugin_id = ?", array($key)); 197 // } 198 // break; 199 default: 200 break; 201 } 202 203 // DBからプラグイン情報を取得 204 $plugins = SC_Helper_Plugin_Ex::getAllPlugin(); 205 206 foreach ($plugins as $key => $plugin) { 207 // 設定ファイルがあるかを判定. 208 $plugins[$key]['config_flg'] = $this->isContainsFile(PLUGIN_UPLOAD_REALDIR . $plugin['plugin_code'], "config.php"); 209 if($plugins[$key]['enable'] === PLUGIN_ENABLE_TRUE){ 210 // 競合するプラグインがあるかを判定. 211 $plugins[$key]['conflict_message']= $this->checkConflictPlugin($plugin['plugin_id']); 119 212 } 120 break; 121 case 'up': 122 $this->arrErr = $objFormParam->checkError(); 123 if (count($this->arrErr) == 0) { 124 $plugin_id = $objFormParam->getValue('plugin_id'); 125 SC_Helper_DB_Ex::sfRankUp("dtb_plugin", "plugin_id", $plugin_id); 126 SC_Response_Ex::reload(); 127 } 128 break; 129 case 'down': 130 $this->arrErr = $objFormParam->checkError(); 131 if (count($this->arrErr) == 0) { 132 $plugin_id = $objFormParam->getValue('plugin_id'); 133 SC_Helper_DB_Ex::sfRankDown("dtb_plugin", "plugin_id", $plugin_id); 134 SC_Response_Ex::reload(); 135 } 136 break; 137 138 default: 139 break; 140 } 141 142 // DBからプラグイン情報を取得 143 $this->plugins = SC_Helper_Plugin_Ex::getAllPlugin(); 213 } 214 $this->plugins = $plugins; 144 215 } 145 216 … … 164 235 $objFormParam->addParam('plugin_id', 'plugin_id', INT_LEN, '', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); 165 236 $objFormParam->addParam('plugin_code', 'plugin_code', MTEXT_LEN, '', array('ALPHA_CHECK', 'MAX_LENGTH_CHECK')); 166 } 167 168 /** 169 * アップロードファイルパラメーター初期化. 237 $objFormParam->addParam("優先順位", "priority", INT_LEN, 'n', array("NUM_CHECK", 'MAX_LENGTH_CHECK')); 238 } 239 240 /** 241 * ファイルパラメーター初期化. 170 242 * 171 243 * @param object $objUpFile SC_UploadFileのインスタンス. 244 * @param string $key 登録するキー. 172 245 * @return void 173 246 */ 174 function lfInitUploadFile(&$objUpFile) { 175 $objUpFile->addFile("プラグイン", 'plugin_file', array('tar', 'tar.gz'), TEMPLATE_SIZE, true, 0, 0, false); 176 } 177 178 /** 179 * アップロードファイルのエラーチェック. 180 * 181 * @param string $plugin_code 182 * @param string $plugin_dir 183 * @return array エラー情報を格納した連想配列. 184 * 185 */ 186 function lfCheckErrorUploadFile($plugin_code, $plugin_dir) { 187 $arrErr = array(); 188 189 // プラグイン重複チェック 190 $plugins = SC_Helper_Plugin_Ex::getAllPlugin(); 191 foreach ($plugins as $val) { 192 if ($val['plugin_code'] == $plugin_code) { 193 $arrErr['plugin_file'] = "※ 同名のプラグインがすでに登録されています。<br/>"; 194 } 195 } 196 197 return $arrErr; 198 } 199 200 /** 201 * プラグイン名(物理名)を取得する. 202 * (アップロードされたファイル名をプラグイン名(物理名)とする). 203 * 204 * @param string $upload_file_name 205 * @return string プラグイン名(物理名). 206 * 207 */ 208 function lfGetPluginCode($upload_file_name) { 247 function lfInitUploadFile(&$objUpFile, $key) { 248 $objUpFile->addFile("プラグインファイル", $key, array('tar', 'tar.gz'), FILE_SIZE, true, 0, 0, false); 249 } 250 251 /** 252 * ファイルが指定されている事をチェックします. 253 * 254 * @param string $file ファイル 255 * @param string $file_key ファイルキー 256 * @return array エラー情報を格納した連想配列. 257 */ 258 function checkUploadFile($file, $file_key) { 259 $arrErr = array(); 260 261 if ($file['size'] <= 0) { 262 $arrErr[$file_key] = '※ ファイルがアップロードされていません'; 263 } 264 return $arrErr; 265 } 266 267 /** 268 * 既にインストールされているプラグインかを判定します. 269 * 270 * @param string $plugin_code プラグインコード 271 * @return boolean インストール済の場合true インストールされていない場合false 272 */ 273 function isInstalledPlugin($plugin_code) { 274 $plugin = SC_Helper_Plugin_Ex::getPluginByPluginCode($plugin_code); 275 if(!empty($plugin)) { 276 return true; 277 } 278 return false; 279 } 280 281 /** 282 * アップロードされた圧縮ファイルが正常であるかを検証します. 283 * 284 * @param string $file_path チェックするファイルのパス 285 * @param string $plugin_code プラグインコード 286 * @return array エラー情報を格納した連想配列. 287 */ 288 function checkPluginFile($file_path, $plugin_code, $key_file) { 289 $arrErr = array(); 290 291 // Archive_Tarを生成します. 292 $tar_obj = new Archive_Tar($file_path); 293 294 // 圧縮ファイル名とディレクトリ名が同一であるかを判定します. 295 if($this->checkUploadFileName($tar_obj, $plugin_code) === false) { 296 $arrErr[$key_file] = "※ 圧縮ファイル名 or フォルダ名が不正です。圧縮ファイル名とフォルダ名が同一である事を確認して下さい。<br/>"; 297 return $arrErr; 298 } 299 300 // 必須となるクラスファイルが含まれているかを判定します. 301 $plugin_main_file = $plugin_code . "/" . $plugin_code . ".php"; 302 if($this->checkContainsFile($tar_obj, $plugin_main_file) === false) { 303 $arrErr[$key_file] = "※ ファイルに" . $plugin_code . ".phpが含まれていません。<br/>"; 304 return $arrErr; 305 } 306 return $arrErr; 307 } 308 309 /** 310 * プラグインコードを取得する. 311 * 312 * @param string $upload_file_name アップロードファイル名 313 * @return string プラグインコード. 314 */ 315 function getPluginCode($upload_file_name) { 209 316 $array_ext = explode(".", $upload_file_name); 210 317 return $array_ext[0]; … … 214 321 * プラグイン保存ディレクトリのパスを取得する. 215 322 * 216 * @param string $plugin_code 217 * @return string プラグイン保存ディレクトリ. 218 * 219 */ 220 function lfGetPluginDir($plugin_code) { 221 $plugin_dir = DATA_REALDIR . 'plugin/' . $plugin_code . '/'; 222 return $plugin_dir; 323 * @param string $plugin_code プラグインコード 324 * @return string $plugin_dir_path プラグイン保存ディレクトリのパス. 325 */ 326 function getPluginDir($plugin_code) { 327 $plugin_dir_path = PLUGIN_UPLOAD_REALDIR . $plugin_code . '/'; 328 return $plugin_dir_path; 329 } 330 331 /** 332 * プラグインHTMLディレクトリのパスを取得する. 333 * 334 * @param string $plugin_code プラグインコード 335 * @return string $plugin_dir_path プラグイン保存ディレクトリのパス. 336 */ 337 function getHtmlPluginDir($plugin_code) { 338 $plugin_dir_path = PLUGIN_HTML_REALDIR . $plugin_code . '/'; 339 return $plugin_dir_path; 223 340 } 224 341 … … 226 343 * プラグインファイルのパスを取得する. 227 344 * 228 * @param string $plugin_code 229 * @return string プラグインファイルパス.230 */ 231 function lfGetPluginFilePath($plugin_code) {232 $plugin_file_path = $this-> lfGetPluginDir($plugin_code) . $plugin_code . '.php';345 * @param string $plugin_code プラグインコード 346 * @return string $plugin_file_path クラスファイルのパス. 347 */ 348 function getPluginFilePath($plugin_code) { 349 $plugin_file_path = $this->getPluginDir($plugin_code) . $plugin_code . '.php'; 233 350 return $plugin_file_path; 234 351 } 235 /** 236 * プラグインをアップロードする. 237 * 238 * @param object $objUpFile 239 * @param string $plugin_dir 240 * @param string $plugin_code 241 * @param string $plugin_file_name 242 * @return array エラー情報を格納した連想配列. 243 * 244 */ 245 function lfUploadPlugin(&$objUpFile, $plugin_dir, $plugin_code, $plugin_file_name) { 246 $arrErr = array(); 247 248 // 必須チェック 249 $arrErr = $objUpFile->checkEXISTS('plugin_file'); 250 251 if (count($arrErr) == 0) { 252 // プラグイン保存ディレクトリ作成 253 if (file_exists($plugin_dir)) { 254 $arrErr['plugin_file'] = "※ 同名のディレクトリがすでに存在します。<br/>"; 352 353 /** 354 * プラグインをインストールします. 355 * 356 * @param string $plugin_code プラグインコード. 357 * @param string $plugin_file_name プラグインファイル名. 358 * @return array エラー情報を格納した連想配列. 359 */ 360 function installPlugin($plugin_code, $plugin_file_name) { 361 362 $arrErr = array(); 363 // 保存ディレクトリ. 364 $plugin_dir = $this->getPluginDir($plugin_code); 365 366 // ファイルをチェックし展開します. 367 $arrErr = $this->unpackPluginFile($plugin_file_name, $plugin_dir, $plugin_code, "plugin_file"); 368 if ($this->isError($arrErr) === true) { 369 return $arrErr; 370 } 371 372 // プラグインファイルを読み込み. 373 $plugin_class_file_path = $this->getPluginFilePath($plugin_code); 374 $arrErr = $this->requirePluginFile($plugin_class_file_path, "plugin_file"); 375 if ($this->isError($arrErr) === true) { 376 return $arrErr; 377 } 378 379 // プラグイン情報をDB登録 380 if ($this->registData($plugin_code) === false) { 381 $arrErr['plugin_file'] = "※ DB登録に失敗しました。<br/>"; 382 return $arrErr; 383 } 384 385 // プラグインhtmlディレクトリ作成 386 $plugin_html_dir = PLUGIN_HTML_REALDIR . $plugin_code; 387 $this->makeDir($plugin_html_dir); 388 389 $plugin = SC_Helper_Plugin_Ex::getPluginByPluginCode($plugin_code); 390 $arrErr = $this->execPlugin($plugin['plugin_id'], $plugin_code, "install"); 391 392 return $arrErr; 393 } 394 395 /** 396 * プラグインをアップデートします. 397 * 398 * @param string $plugin_code プラグインコード. 399 * @param string $plugin_file_name プラグインファイル名. 400 * @param string $file_key ファイルキー. 401 * @param string $plugin_id プラグインID. 402 * @return array エラー情報を格納した連想配列. 403 */ 404 function updatePlugin($plugin_code, $plugin_file_name, $file_key, $plugin_id) { 405 // アップロードしたファイルのエラーチェック. 406 $arrErr = array(); 407 408 // 展開先ディレクトリ. 409 $temp_plugin_dir = DOWNLOADS_TEMP_DIR . $plugin_code; 410 411 // ファイルをチェックし展開します. 412 $arrErr = $this->unpackPluginFile($plugin_file_name, $temp_plugin_dir, $plugin_code, $file_key); 413 if ($this->isError($arrErr) === true) { 414 return $arrErr; 415 } 416 417 // 展開されたディレクトリからプラグインクラスファイルを読み込みます. 418 $update_plugin_class_path = $temp_plugin_dir . "/" . $plugin_code . ".php"; 419 $arrErr = $this->requirePluginFile($update_plugin_class_path, $file_key); 420 if ($this->isError($arrErr) === true) { 421 return $arrErr; 422 } 423 // プラグインクラスファイルのUPDATE処理を実行. 424 $arrErr = $this->execPlugin($plugin_id, $plugin_code, "update"); 425 426 // 保存ディレクトリの削除. 427 SC_Utils_Ex::deleteFile($temp_plugin_dir); 428 429 return $arrErr; 430 } 431 432 /** 433 * ファイルをアップロードし、解凍先のディレクトリに解凍します. 434 * 435 * @param string $unpack_file_name ファイル名 436 * @param string $unpack_dir 解凍ディレクトリ 437 * @param string $plugin_code プラグインコード. 438 * @param string $file_key ファイルキー 439 * @return array エラー情報を格納した連想配列. 440 */ 441 function unpackPluginFile($unpack_file_name, $unpack_dir, $plugin_code, $file_key) { 442 $arrErr = array(); 443 // 解凍ディレクトリディレクトリを作成し、一時ディレクトリからファイルを移動 444 $objUpFile = new SC_UploadFile_Ex(PLUGIN_TEMP_REALDIR, $unpack_dir); 445 $this->lfInitUploadFile($objUpFile, $file_key); 446 $arrErr = $objUpFile->makeTempFile($file_key, false); 447 if ($this->isError($arrErr) === true) { 448 return $arrErr; 449 } 450 451 // 正常にアップロードされているかをチェック. 452 $arrErr = $objUpFile->checkEXISTS($file_key); 453 if ($this->isError($arrErr) === true) { 454 return $arrErr; 455 } 456 457 // 圧縮ファイルの中をチェック. 458 $plugin_file_path = PLUGIN_TEMP_REALDIR . $unpack_file_name; 459 $arrErr = $this->checkPluginFile($plugin_file_path, $plugin_code, $file_key); 460 if ($this->isError($arrErr) === true) { 461 return $arrErr; 462 } 463 464 // 展開用ディレクトリを作成し、一時ディレクトリから移動 465 $this->makeDir($unpack_dir); 466 $objUpFile->moveTempFile(); 467 468 // 解凍 469 $update_plugin_file_path = $unpack_dir . "/" . $unpack_file_name; 470 if (!SC_Helper_FileManager_Ex::unpackFile($update_plugin_file_path)) { 471 $arrErr['plugin_file'] = "※ 解凍に失敗しました。<br/>"; 472 return $arrErr; 473 } 474 return $arrErr; 475 } 476 477 /** 478 * プラグインをアンインストールします. 479 * 480 * @param int $plugin_id プラグインID. 481 * @param string $plugin_code プラグインコード. 482 * @return array エラー情報を格納した連想配列. 483 */ 484 function uninstallPlugin($plugin_id, $plugin_code) { 485 $arrErr = array(); 486 // プラグインファイルを読み込みます. 487 $plugin_class_path = $this->getPluginFilePath($plugin_code); 488 $arrErr = $this->requirePluginFile($plugin_class_path, 'plugin_error'); 489 if ($this->isError($arrErr) === true) { 490 return $arrErr; 491 } 492 493 // modeで指定されたメソッドを実行. 494 $arrErr = $this->execPlugin($plugin_id, $plugin_code, "uninstall"); 495 if ($this->isError($arrErr) === true) { 496 return $arrErr; 497 } 498 // プラグインの削除処理. 499 $arrErr = $this->deletePlugin($plugin_id, $plugin_code); 500 501 return $arrErr; 502 } 503 504 /** 505 * プラグインを有効にします. 506 * 507 * @param int $plugin_id プラグインID. 508 * @param string $plugin_code プラグインコード. 509 * @return array $arrErr エラー情報を格納した連想配列. 510 */ 511 function enablePlugin($plugin_id, $plugin_code) { 512 $arrErr = array(); 513 // クラスファイルを読み込み. 514 $plugin_class_path = $this->getPluginFilePath($plugin_code); 515 $arrErr = $this->requirePluginFile($plugin_class_path, 'plugin_error'); 516 if ($this->isError($arrErr) === true) { 517 return $arrErr; 518 } 519 // 無効化処理を実行します. 520 $arrErr = $this->execPlugin($plugin_id, $plugin_code, "enable"); 521 if ($this->isError($arrErr) === true) { 522 return $arrErr; 523 } 524 // プラグインを有効にします. 525 $this->updatePluginEnable($plugin_id, PLUGIN_ENABLE_TRUE); 526 527 return $arrErr; 528 } 529 530 /** 531 * プラグインを無効にします. 532 * 533 * @param int $plugin_id プラグインID. 534 * @param string $plugin_code プラグインコード. 535 * @return array エラー情報を格納した連想配列. 536 */ 537 function disablePlugin($plugin_id, $plugin_code) { 538 $arrErr = array(); 539 // クラスファイルを読み込み. 540 $plugin_class_path = $this->getPluginFilePath($plugin_code); 541 $arrErr = $this->requirePluginFile($plugin_class_path, 'plugin_error'); 542 if ($this->isError($arrErr) === true) { 543 return $arrErr; 544 } 545 546 // 無効化処理を実行します. 547 $arrErr = $this->execPlugin($plugin_id, $plugin_code, "disable"); 548 if ($this->isError($arrErr) === true) { 549 return $arrErr; 550 } 551 // プラグインを無効にします. 552 $this->updatePluginEnable($plugin_id, PLUGIN_ENABLE_FALSE); 553 554 return $arrErr; 555 } 556 557 /** 558 * プラグイン情報をDB登録. 559 * 560 * @param string $plugin_code プラグインコード. 561 * @return array エラー情報を格納した連想配列. 562 */ 563 function registData($plugin_code) { 564 565 // プラグイン情報をDB登録. 566 // TODO:エラーチェック. 567 $objQuery =& SC_Query_Ex::getSingletonInstance(); 568 $objQuery->begin(); 569 $sqlval_plugin = array(); 570 $plugin_id = $objQuery->nextVal('dtb_plugin_plugin_id'); 571 $sqlval_plugin['plugin_id'] = $plugin_id; 572 $sqlval_plugin['plugin_name'] = $plugin_code::PLUGIN_NAME; 573 $sqlval_plugin['plugin_code'] = $plugin_code; 574 $sqlval_plugin['author'] = $plugin_code::AUTHOR; 575 $sqlval_plugin['plugin_site_url'] = $plugin_code::PLUGIN_SITE_URL; 576 $sqlval_plugin['plugin_version'] = $plugin_code::PLUGIN_VERSION; 577 $sqlval_plugin['compliant_version'] = $plugin_code::COMPLIANT_VERSION; 578 $sqlval_plugin['plugin_description'] = $plugin_code::DESCRIPTION; 579 $sqlval_plugin['rank'] = 1 + $objQuery->max('rank', 'dtb_plugin'); 580 $sqlval_plugin['enable'] = PLUGIN_ENABLE_FALSE; 581 $sqlval_plugin['update_date'] = 'CURRENT_TIMESTAMP'; 582 $objQuery->insert('dtb_plugin', $sqlval_plugin); 583 584 // フックポイントをDB登録. 585 $array_hook_point = explode(",", $plugin_code::HOOK_POINTS); 586 if(is_array($array_hook_point)){ 587 foreach ($array_hook_point as $hook_point) { 588 $sqlval_plugin_hookpoint = array(); 589 $sqlval_plugin_hookpoint['plugin_id'] = $plugin_id; 590 $sqlval_plugin_hookpoint['hook_point'] = $hook_point; 591 $sqlval_plugin_hookpoint['update_date'] = 'CURRENT_TIMESTAMP'; 592 $objQuery->insert('dtb_plugin_hookpoint', $sqlval_plugin_hookpoint); 593 } 594 } 595 return $objQuery->commit(); 596 } 597 598 /** 599 * ファイルを読み込む. 600 * 601 * @param string $file_path クラスのpath 602 * @param string $key エラー情報のキー. 603 * @return array エラー情報を格納した連想配列. 604 */ 605 function requirePluginFile($file_path, $key) { 606 $arrErr = array(); 607 if(file_exists($file_path)) { 608 require_once $file_path; 609 } else { 610 $arrErr[$key] = "※ " . $file_path ."の読み込みに失敗しました。<br/>"; 611 } 612 return $arrErr; 613 } 614 615 /** 616 * インスタンスを生成し、指定のメソッドを実行する. 617 * 618 * @param integer $plugin_id プラグインID 619 * @param string $plugin_code プラグインコード 620 * @param string $exec_func 実行するメソッド名. 621 * @return array $arrErr エラー情報を格納した連想配列. 622 * 623 */ 624 function execPlugin($plugin_id, $plugin_code, $exec_func) { 625 $arrErr = array(); 626 // インスタンスの生成. 627 $objPlugin = new $plugin_code(); 628 if(method_exists($objPlugin, $exec_func) === true){ 629 $arrErr = $objPlugin->$exec_func($plugin_id); 255 630 } else { 256 mkdir($plugin_dir);631 $arrErr['plugin_error'] = "※ " . $plugin_code . ".php に" . $exec_func . "が見つかりません。<br/>"; 257 632 } 258 633 259 if (count($arrErr) == 0) { 260 // 一時ディレクトリからプラグイン保存ディレクトリへ移動 261 $objUpFile->moveTempFile(); 262 263 // プラグイン保存ディレクトリへ解凍 264 SC_Helper_FileManager_Ex::unpackFile($plugin_dir . $plugin_file_name); 265 266 // プラグイン情報をDB登録 267 $this->lfRegistData($plugin_dir, $plugin_code); 634 return $arrErr; 635 } 636 637 /** 638 * 管理者側 テンプレート再生成 639 * 640 * @return void 641 */ 642 function remakeTemplate() { 643 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 644 $objPlugin->remakeAllTemplates(); 645 } 646 647 /** 648 * plugin_idをキーにdtb_pluginのstatusを更新します. 649 * 650 * @param int $plugin_id プラグインID 651 * @param int $enable_flg 有効フラグ 652 * @return integer 更新件数 653 */ 654 function updatePluginEnable($plugin_id, $enable_flg) { 655 $objQuery =& SC_Query_Ex::getSingletonInstance(); 656 // UPDATEする値を作成する。 657 $sqlval['enable'] = $enable_flg; 658 $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; 659 $where = "plugin_id = ?"; 660 // UPDATEの実行 661 $ret = $objQuery->update("dtb_plugin", $sqlval, $where, array($plugin_id)); 662 return $ret; 663 } 664 665 /** 666 * plugin_idをキーにdtb_plugin, dtb_plugin_hookpointから物理削除します. 667 * 668 * @param int $plugin_id プラグインID. 669 * @param string $plugin_code プラグインコード. 670 * @return array $arrErr エラー情報を格納した連想配列. 671 */ 672 function deletePlugin($plugin_id, $plugin_code) { 673 $arrErr = array(); 674 675 $objQuery =& SC_Query_Ex::getSingletonInstance(); 676 $objQuery->begin(); 677 $where = "plugin_id = ?"; 678 $objQuery->delete("dtb_plugin", $where, array($plugin_id)); 679 $objQuery->delete("dtb_plugin_hookpoint", $where, array($plugin_id)); 680 681 if($objQuery->commit()){ 682 if(SC_Utils_Ex::deleteFile($this->getPluginDir($plugin_code)) === false){ 683 // TODO エラー処理 684 } 685 686 if(SC_Utils_Ex::deleteFile($this->getHtmlPluginDir($plugin_code)) === false){ 687 // TODO エラー処理 688 } 689 } 690 return $arrErr; 691 } 692 693 /** 694 * ファイルがあるかを判定します. 695 * 696 * @param string $plugin_dir 対象ディレクトリ. 697 * @param string $file_name ファイル名. 698 * @return boolean 699 */ 700 function isContainsFile($plugin_dir, $file_name) { 701 if (file_exists($plugin_dir) && is_dir($plugin_dir)) { 702 if($handle = opendir($plugin_dir)){ 703 while(($item = readdir($handle)) !== false) { 704 if ($item === $file_name) return true; 705 } 268 706 } 269 } 270 271 return $arrErr; 272 } 273 274 /** 275 * プラグイン情報をDB登録. 276 * 277 * @param string $plugin_dir 278 * @param string $plugin_code 279 * @return void 280 * 281 */ 282 function lfRegistData($plugin_dir, $plugin_code) { 283 $objQuery =& SC_Query_Ex::getSingletonInstance(); 284 $sqlval = array(); 285 286 $sqlval['plugin_id'] = $objQuery->nextVal('dtb_plugin_plugin_id'); 287 $sqlval['plugin_code'] = $plugin_code; 288 $sqlval['rank'] = 1 + $objQuery->max('rank', 'dtb_plugin'); 289 $sqlval['status'] = PLUGIN_STATUS_UPLOADED; 290 $sqlval['enable'] = PLUGIN_ENABLE_FALSE; 291 $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; 292 $objQuery->insert('dtb_plugin', $sqlval); 293 } 294 295 /** 296 * プラグインファイルを読み込む. 297 * 298 * @param string $plugin_code 299 * @return array エラー情報を格納した連想配列. 300 */ 301 function lfRequirePluginFile($plugin_code) { 302 $arrErr = array(); 303 $plugin_file_path = $this->lfGetPluginFilePath($plugin_code); 304 305 if (file_exists($plugin_file_path)) { 306 require_once $plugin_file_path; 307 } else { 308 $arrErr['plugin_error'] = "※ " . $plugin_code . ".phpが存在しないため実行できません。<br/>"; 309 } 310 311 return $arrErr; 312 } 313 314 /** 315 * プラグインファイルを読み込み、指定されたメソッドを実行する. 316 * 317 * @param integer $plugin_id 318 * @param string $plugin_code 319 * @param string $exec_mode プラグイン実行メソッド名. 320 * @return array エラー情報を格納した連想配列. 321 * 322 */ 323 function lfExecPlugin($plugin_id, $plugin_code, $exec_mode) { 324 $arrErr = array(); 325 326 // プラグインファイル読み込み 327 $arrErr = $this->lfRequirePluginFile($plugin_code); 328 329 if (count($arrErr) == 0) { 330 $plugin = new $plugin_code(); 331 $arrErr = $plugin->$exec_mode($plugin_id); 332 } 333 334 return $arrErr; 707 closedir($handle); 708 } 709 return false; 710 } 711 712 /** 713 * アーカイブ内に指定のファイルが存在するかを判定します. 714 * 715 * @param Archive_Tar $tar_obj 716 * @param string $file_path 判定するファイルパス 717 * @return boolean 718 */ 719 function checkContainsFile($tar_obj, $file_path) { 720 $arrayFile = $tar_obj->listContent(); 721 foreach ($arrayFile as $value) { 722 if($value["filename"] === $file_path) return true; 723 } 724 return false; 725 } 726 727 /** 728 * 圧縮ファイル名と中のディレクトリ名が同じであるかをチェックします.. 729 * 730 * @param Archive_Tar $tar_obj Archive_Tarクラスのオブジェクト 731 * @param string $dir_name ディレクトリ名. 732 * @return boolean 733 */ 734 function checkUploadFileName($tar_obj, $dir_name){ 735 $arrayFile = $tar_obj->listContent(); 736 // ディレクトリ名と圧縮ファイル名が同じかをチェック. 737 $pattern = ("/^". $dir_name ."\/(.*?)/"); 738 foreach ($arrayFile as $value) { 739 if(preg_match($pattern, $value["filename"])) return true; 740 } 741 return false;; 742 } 743 744 /** 745 * ディレクトリを作成します. 746 * 747 * @param string $dir_path 作成するディレクトリのパス 748 */ 749 function makeDir($dir_path){ 750 // ディレクトリ作成 751 if(!file_exists($dir_path)) { 752 mkdir($dir_path); 753 } 754 } 755 756 /** 757 * フックポイントで衝突する可能性のあるプラグインを判定.メッセージを返します. 758 * 759 * @param int $plugin_id プラグインID 760 * @return string $conflict_alert_message メッセージ 761 */ 762 function checkConflictPlugin($plugin_id){ 763 $objQuery =& SC_Query_Ex::getSingletonInstance(); 764 $table = "dtb_plugin_hookpoint"; 765 $where = "plugin_id = ?"; 766 $conflictHookPoints = $objQuery->select( "*", $table, $where, array($plugin_id)); 767 768 $conflict_alert_message = ""; 769 foreach ($conflictHookPoints as $conflictHookPoint) { 770 // 登録商品のチェック 771 $table = "dtb_plugin_hookpoint AS T1 LEFT JOIN dtb_plugin AS T2 ON T1.plugin_id = T2.plugin_id"; 772 $where = "T1.hook_point = ? AND NOT T1.plugin_id = ? AND T2.enable = " . PLUGIN_ENABLE_TRUE . " GROUP BY T1.plugin_id"; 773 $conflictPlugins = $objQuery->select( "T1.plugin_id, T2.plugin_name", $table, $where, array($conflictHookPoint['hook_point'], $conflictHookPoint['plugin_id'])); 774 775 foreach ($conflictPlugins as $conflictPlugin) { 776 $conflict_alert_message =+ "* " . $conflictPlugin['plugin_name'] . "と競合する可能性があります。<br/>"; 777 } 778 } 779 return $conflict_alert_message; 780 } 781 782 /** 783 * エラー情報が格納されているか判定します. 784 * 785 * @param array $arrErr エラー情報を格納した連想配列. 786 * @return boolean. 787 */ 788 function isError($arrErr) { 789 if(is_array($arrErr) && count($arrErr) > 0){ 790 return true; 791 } 792 return false; 335 793 } 336 794 } -
branches/version-2_12-dev/data/class/pages/products/LC_Page_Products_List.php
r21442 r21455 3 3 * This file is part of EC-CUBE 4 4 * 5 * Copyright(c) 2000-201 1LOCKON CO.,LTD. All Rights Reserved.5 * Copyright(c) 2000-2012 LOCKON CO.,LTD. All Rights Reserved. 6 6 * 7 7 * http://www.lockon.co.jp/ … … 206 206 break; 207 207 } 208 209 $objPlugin = SC_Helper_Plugin_Ex::getSingletonInstance(); 210 $objPlugin->doAction('lc_page_products_list_action_end',array($this)); 208 211 209 212 $this->tpl_rnd = SC_Utils_Ex::sfGetRandomString(3); -
branches/version-2_12-dev/data/class/util/SC_Utils.php
r21452 r21455 2135 2135 return true; 2136 2136 } 2137 2138 /** 2139 * 指定されたパスの配下を再帰的に削除. 2140 * 2141 * @param string $path 削除対象のディレクトリまたはファイルのパス 2142 * @param boolean $del_myself $pathそのものを削除するか. true なら削除する. 2143 * @return void 2144 */ 2145 function deleteFile($path, $del_myself = true) { 2146 $flg = false; 2147 // 対象が存在するかを検証. 2148 if (file_exists($path) === false) { 2149 GC_Utils_Ex::gfPrintLog($path . " が存在しません."); 2150 } elseif (is_dir($path)) { 2151 // ディレクトリが指定された場合 2152 $handle = opendir($path); 2153 if (!$handle) { 2154 GC_Utils_Ex::gfPrintLog($path . " が開けませんでした."); 2155 } 2156 while (($item = readdir($handle)) !== false) { 2157 if ($item === '.' || $item === '..') continue; 2158 $cur_path = $path . '/' . $item; 2159 if (is_dir($cur_path)) { 2160 // ディレクトリの場合、再帰処理 2161 $flg = SC_Utils_Ex::deleteFile($cur_path); 2162 } else { 2163 // ファイルの場合、unlink 2164 $flg = @unlink($cur_path); 2165 } 2166 } 2167 closedir($handle); 2168 // ディレクトリを削除 2169 GC_Utils_Ex::gfPrintLog($path . " を削除します."); 2170 if ($del_myself) { 2171 $flg = @rmdir($path); 2172 } 2173 } else { 2174 // ファイルが指定された場合. 2175 GC_Utils_Ex::gfPrintLog($path . " を削除します."); 2176 $flg = @unlink($path); 2177 } 2178 return $flg; 2179 } 2137 2180 } -
branches/version-2_12-dev/data/mtb_constants_init.php
r21454 r21455 20 20 /** テンプレートファイル一時保存先 */ 21 21 define('TEMPLATE_TEMP_REALDIR', HTML_REALDIR . "upload/temp_template/"); 22 /** プラグインファイル一時保存先 */ 23 define('PLUGIN_TEMP_REALDIR', HTML_REALDIR . "upload/temp_plugin/"); 22 24 /** ユーザー作成画面のデフォルトPHPファイル */ 23 25 define('USER_DEF_PHP_REALFILE', USER_REALDIR . "__default.php"); … … 26 28 /** ダウンロードモジュール保存ディレクトリ */ 27 29 define('MODULE_REALDIR', DATA_REALDIR . MODULE_DIR); 30 /** アップロード一時ディレクトリ */ 31 define('DOWNLOADS_TEMP_DIR', DATA_REALDIR . "downloads/tmp/"); 28 32 /** DBセッションの有効期限(秒) */ 29 33 define('MAX_LIFETIME', 7200); … … 429 433 /** プラグイン・ディレクトリパーミッション */ 430 434 define('PLUGIN_DIR_PERMISSION', 0777); 435 /** プラグイン 外部ファイルURL */ 436 define('PLUGIN_HTML_URL', USER_URL . PLUGIN_DIR); 431 437 /** 日数桁数 */ 432 438 define('DOWNLOAD_DAYS_LEN', 3); -
branches/version-2_12-dev/data/require_base.php
r21395 r21455 47 47 $sessionFactory = SC_SessionFactory::getInstance(); 48 48 $sessionFactory->initSession(); 49 50 // プラグインを読み込む 51 require_once DATA_REALDIR . 'require_plugin.php'; 49 52 50 53 /* … … 54 57 $objSession->adminAuthorization(); 55 58 56 // プラグインを読み込む57 require_once DATA_REALDIR . 'require_plugin.php';58 59 } 59 60 ?>
Note: See TracChangeset
for help on using the changeset viewer.
