Changeset 21455 for branches/version-2_12-dev/data/class/pages/admin/system/LC_Page_Admin_System_Plugin.php
- Timestamp:
- 2012/02/08 13:55:06 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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 }
Note: See TracChangeset
for help on using the changeset viewer.