Changeset 21467 for branches/version-2_12-dev/data/class/pages/admin/system/LC_Page_Admin_System_Plugin.php
- Timestamp:
- 2012/02/09 18:25:09 (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
r21458 r21467 80 80 case 'install': 81 81 $file_key = "plugin_file"; 82 $plugin_file = $_FILES[$file_key]; 83 $this->arrErr = $this->checkUploadFile($plugin_file, $file_key); 82 $this->arrErr = $this->checkUploadFile($file_key); 84 83 if($this->isError($this->arrErr) === false){ 84 $plugin_file = $_FILES[$file_key]; 85 85 $plugin_file_name = $plugin_file['name']; 86 86 $plugin_code = $this->getPluginCode($plugin_file_name); … … 159 159 $this->arrErr = $objFormParam->checkError(); 160 160 if($this->isError($this->arrErr) === false){ 161 $ file_key = "update_plugin_file";162 $ update_plugin_file = $_FILES[$file_key];161 $plugin_code = $objFormParam->getValue('plugin_code'); // アップデート対象のプラグインコード 162 $this->arrErr = $this->checkUploadFile($plugin_code); 163 163 164 $this->arrErr = $this->checkUploadFile($update_plugin_file, $file_key);165 164 if($this->isError($this->arrErr) === false){ 165 $update_plugin_file = $_FILES[$plugin_code]; 166 166 $update_plugin_file_name = $update_plugin_file['name']; // アップデートファイルのファイル名. 167 167 $update_plugin_code = $this->getPluginCode($update_plugin_file_name); // アップデートファイルのプラグインコード. 168 $plugin_code = $objFormParam->getValue('plugin_code'); // アップデート対象のプラグインコード169 170 168 // インストールされているプラグインかを判定. 171 169 if($this->isInstalledPlugin($update_plugin_code) === true && $update_plugin_code === $plugin_code){ 172 170 // インストール処理. 173 $this->arrErr = $this->updatePlugin($plugin_code, $update_plugin_file_name, $ file_key, $objFormParam->getValue('plugin_id'));171 $this->arrErr = $this->updatePlugin($plugin_code, $update_plugin_file_name, $plugin_code, $objFormParam->getValue('plugin_id')); 174 172 if($this->isError($this->arrErr) === false) { 175 173 // テンプレート再生成. … … 178 176 } 179 177 } else { 180 $this->arrErr[$ file_key] = "※ プラグインファイルが不正です。<br/>";181 178 $this->arrErr[$plugin_code] = "※ プラグインファイルが不正です。<br/>"; 179 } 182 180 } 183 181 } 184 185 182 break; 186 183 // 優先度. … … 246 243 */ 247 244 function lfInitUploadFile(&$objUpFile, $key) { 248 $objUpFile->addFile("プラグインファイル", $key, array('tar', 'tar.gz'), FILE_SIZE, true, 0, 0, false);245 $objUpFile->addFile("プラグインファイル", $key, explode(",", PLUGIN_EXTENSION), FILE_SIZE, true, 0, 0, false); 249 246 } 250 247 … … 256 253 * @return array エラー情報を格納した連想配列. 257 254 */ 258 function checkUploadFile($file, $file_key) { 259 $arrErr = array(); 260 261 if ($file['size'] <= 0) { 262 $arrErr[$file_key] = '※ ファイルがアップロードされていません'; 263 } 264 return $arrErr; 255 function checkUploadFile($file_key) { 256 $objErr = new SC_CheckError_Ex(); 257 // 拡張子チェック 258 $objErr->doFunc(array('プラグインファイル', $file_key, explode(",", PLUGIN_EXTENSION)), array("FILE_EXT_CHECK")); 259 // ファイルサイズチェック 260 $objErr->doFunc(array('プラグインファイル', $file_key, FILE_SIZE), array("FILE_SIZE_CHECK")); 261 // ファイル名チェック 262 $objErr->doFunc(array('プラグインファイル', $file_key), array("FILE_NAME_CHECK")); 263 264 return $objErr->arrErr; 265 265 } 266 266 … … 308 308 309 309 /** 310 * プラグインコードを取得する. 311 * 312 * @param string $upload_file_name アップロードファイル名 313 * @return string プラグインコード. 314 */ 315 function getPluginCode($upload_file_name) { 316 $array_ext = explode(".", $upload_file_name); 317 return $array_ext[0]; 310 * ファイル名からプラグインコードを取得する. 311 * 312 * ファイル名を「.」で配列に分解. 313 * 配列内から拡張子として格納される可能性のある「tar」「gz」を除外すし、再度結合する. 314 * 315 * @param string $file_name ファイル名 316 * @return string $plugin_code プラグインコード. 317 */ 318 function getPluginCode($file_name) { 319 // 分解 320 $array_ext = explode(".", $file_name); 321 $array_file_name = array_diff($array_ext, array('tar','gz')); 322 // 結合 323 $plugin_code = implode( '.', $array_file_name ); 324 return $plugin_code; 318 325 } 319 326 … … 374 381 $arrErr = $this->requirePluginFile($plugin_class_file_path, "plugin_file"); 375 382 if ($this->isError($arrErr) === true) { 376 return $arrErr; 377 } 378 383 SC_Utils_Ex::deleteFile($plugin_dir); 384 return $arrErr; 385 } 386 387 // リフレクションオブジェクトを生成. 388 $objReflection = new ReflectionClass($plugin_code); 389 390 // プラグインクラスに必須となるパラメータが定義されているかチェック. 391 $arrErr = $this->checkPluginConstants($objReflection); 392 if ($this->isError($arrErr) === true) { 393 SC_Utils_Ex::deleteFile($plugin_dir); 394 return $arrErr; 395 } 396 379 397 // プラグイン情報をDB登録 380 if ($this->registerData($plugin_code) === false) { 398 if ($this->registerData($objReflection) === false) { 399 SC_Utils_Ex::deleteFile($plugin_dir); 381 400 $arrErr['plugin_file'] = "※ DB登録に失敗しました。<br/>"; 382 401 return $arrErr; 383 402 } 384 403 385 404 // プラグインhtmlディレクトリ作成 386 405 $plugin_html_dir = PLUGIN_HTML_REALDIR . $plugin_code; … … 390 409 $arrErr = $this->execPlugin($plugin['plugin_id'], $plugin_code, "install"); 391 410 411 return $arrErr; 412 } 413 414 /** 415 * プラグインクラス内の定数をチェックします. 416 * 417 * @param ReflectionClass $objReflection リフレクションオブジェクト 418 * @return array エラー情報を格納した連想配列. 419 */ 420 function checkPluginConstants(ReflectionClass $objReflection) { 421 $arrErr = array(); 422 423 if($objReflection->getConstant("PLUGIN_NAME") === false){ 424 $arrErr['plugin_file'] = "※ PLUGIN_NAMEが定義されていません。<br/>"; 425 return $arrErr; 426 } 427 if($objReflection->getConstant("PLUGIN_VERSION") === false){ 428 $arrErr['plugin_file'] = "※ PLUGIN_VERSIONが定義されていません。<br/>"; 429 return $arrErr; 430 } 431 if($objReflection->getConstant("COMPLIANT_VERSION") === false){ 432 $arrErr['plugin_file'] = "※ COMPLIANT_VERSIONが定義されていません。<br/>"; 433 return $arrErr; 434 } 435 if($objReflection->getConstant("AUTHOR") === false){ 436 $arrErr['plugin_file'] = "※ AUTHORが定義されていません。<br/>"; 437 return $arrErr; 438 } 439 if($objReflection->getConstant("DESCRIPTION") === false){ 440 $arrErr['plugin_file'] = "※ DESCRIPTIONが定義されていません。<br/>"; 441 return $arrErr; 442 } 443 444 $objErr = new SC_CheckError_Ex($objReflection->getConstants()); 445 $objErr->doFunc(array('PLUGIN_NAME', 'PLUGIN_NAME', STEXT_LEN), array("MAX_LENGTH_CHECK", )); 446 $objErr->doFunc(array('PLUGIN_VERSION', 'PLUGIN_VERSION', STEXT_LEN), array("MAX_LENGTH_CHECK")); 447 $objErr->doFunc(array('COMPLIANT_VERSION', 'COMPLIANT_VERSION', STEXT_LEN), array("MAX_LENGTH_CHECK")); 448 $objErr->doFunc(array('AUTHOR', 'AUTHOR', STEXT_LEN), array("MAX_LENGTH_CHECK")); 449 $objErr->doFunc(array('DESCRIPTION', 'DESCRIPTION', SLTEXT_LEN), array("MAX_LENGTH_CHECK")); 450 if($objReflection->getConstant("PLUGIN_SITE_URL") !== false){ 451 $objErr->doFunc(array('PLUGIN_SITE_URL', 'PLUGIN_SITE_URL', URL_LEN), array("MAX_LENGTH_CHECK","GRAPH_CHECK")); 452 } 453 if($objReflection->getConstant("AUTHOR_SITE_URL") !== false){ 454 $objErr->doFunc(array('AUTHOR_SITE_URL', 'AUTHOR_SITE_URL', URL_LEN), array("MAX_LENGTH_CHECK","GRAPH_CHECK")); 455 } 456 // エラー内容を出力用の配列にセットします. 457 if($this->isError($objErr->arrErr)){ 458 $arrErr['plugin_file'] = ""; 459 foreach ($objErr->arrErr as $error){ 460 $arrErr['plugin_file'] .= $error; 461 } 462 } 392 463 return $arrErr; 393 464 } … … 410 481 411 482 // ファイルをチェックし展開します. 412 $arrErr = $this->unpackPluginFile($plugin_file_name, $temp_plugin_dir, $plugin_code, $ file_key);483 $arrErr = $this->unpackPluginFile($plugin_file_name, $temp_plugin_dir, $plugin_code, $plugin_code); 413 484 if ($this->isError($arrErr) === true) { 414 485 return $arrErr; … … 558 629 * プラグイン情報をDB登録. 559 630 * 560 * @param string $plugin_code プラグインコード.561 * @return array エラー情報を格納した連想配列. 562 */ 563 function registerData( $plugin_code) {564 631 * @param ReflectionClass $objReflection リフレクションオブジェクト 632 * @return array エラー情報を格納した連想配列. 633 */ 634 function registerData(ReflectionClass $objReflection) { 635 565 636 // プラグイン情報をDB登録. 566 // TODO:エラーチェック.567 637 $objQuery =& SC_Query_Ex::getSingletonInstance(); 568 638 $objQuery->begin(); … … 570 640 $plugin_id = $objQuery->nextVal('dtb_plugin_plugin_id'); 571 641 $arr_sqlval_plugin['plugin_id'] = $plugin_id; 572 $arr_sqlval_plugin['plugin_name'] = $plugin_code::PLUGIN_NAME; 573 $arr_sqlval_plugin['plugin_code'] = $plugin_code; 574 $arr_sqlval_plugin['author'] = $plugin_code::AUTHOR; 575 $arr_sqlval_plugin['plugin_site_url'] = $plugin_code::PLUGIN_SITE_URL; 576 $arr_sqlval_plugin['plugin_version'] = $plugin_code::PLUGIN_VERSION; 577 $arr_sqlval_plugin['compliant_version'] = $plugin_code::COMPLIANT_VERSION; 578 $arr_sqlval_plugin['plugin_description'] = $plugin_code::DESCRIPTION; 642 $arr_sqlval_plugin['plugin_name'] = $objReflection->getConstant("PLUGIN_NAME"); 643 $arr_sqlval_plugin['plugin_code'] = $objReflection->getName(); 644 $arr_sqlval_plugin['author'] = $objReflection->getConstant("AUTHOR"); 645 // AUTHOR_SITE_URLが定義されているか判定. 646 $author_site_url = $objReflection->getConstant("AUTHOR_SITE_URL"); 647 if($author_site_url !== false) $arr_sqlval_plugin['author_site_url'] = $author_site_url; 648 // PLUGIN_SITE_URLが定義されているか判定. 649 $plugin_site_url = $objReflection->getConstant("PLUGIN_SITE_URL"); 650 if($plugin_site_url !== false) $arr_sqlval_plugin['plugin_site_url'] = $plugin_site_url; 651 $arr_sqlval_plugin['plugin_version'] = $objReflection->getConstant("PLUGIN_VERSION"); 652 $arr_sqlval_plugin['compliant_version'] = $objReflection->getConstant("COMPLIANT_VERSION"); 653 $arr_sqlval_plugin['plugin_description'] = $objReflection->getConstant("DESCRIPTION"); 579 654 $arr_sqlval_plugin['rank'] = 1 + $objQuery->max('rank', 'dtb_plugin'); 580 655 $arr_sqlval_plugin['enable'] = PLUGIN_ENABLE_FALSE; … … 583 658 584 659 // フックポイントを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 $arr_sqlval_plugin_hookpoint = array(); 589 $id = $objQuery->nextVal('dtb_plugin_hookpoint_id'); 590 $arr_sqlval_plugin_hookpoint['id'] = $id; 591 $arr_sqlval_plugin_hookpoint['plugin_id'] = $plugin_id; 592 $arr_sqlval_plugin_hookpoint['hook_point'] = $hook_point; 593 $arr_sqlval_plugin_hookpoint['update_date'] = 'CURRENT_TIMESTAMP'; 594 $objQuery->insert('dtb_plugin_hookpoint', $arr_sqlval_plugin_hookpoint); 660 $hook_point = $objReflection->getConstant("HOOK_POINTS"); 661 if($hook_point !== false){ 662 $array_hook_point = explode(",", $hook_point); 663 if(is_array($array_hook_point)){ 664 foreach ($array_hook_point as $hook_point) { 665 $arr_sqlval_plugin_hookpoint = array(); 666 $id = $objQuery->nextVal('dtb_plugin_hookpoint_id'); 667 $arr_sqlval_plugin_hookpoint['id'] = $id; 668 $arr_sqlval_plugin_hookpoint['plugin_id'] = $plugin_id; 669 $arr_sqlval_plugin_hookpoint['hook_point'] = $hook_point; 670 $arr_sqlval_plugin_hookpoint['update_date'] = 'CURRENT_TIMESTAMP'; 671 $objQuery->insert('dtb_plugin_hookpoint', $arr_sqlval_plugin_hookpoint); 672 } 595 673 } 596 674 }
Note: See TracChangeset
for help on using the changeset viewer.