- Timestamp:
- 2007/07/20 15:58:59 (17 years ago)
- Location:
- branches/feature-module-update
- Files:
-
- 1 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/feature-module-update
-
Property
svn:ignore
set to
.cache
.settings
.projectOptions
-
Property
svn:ignore
set to
-
branches/feature-module-update/html/admin/system/module.php
r12157 r15078 8 8 require_once(DATA_PATH . "module/Request.php"); 9 9 10 // ¥Ú¡¼¥¸´ÉÍý¥¯¥é¥¹10 //ページ管理クラス 11 11 class LC_Page { 12 // ¥³¥ó¥¹¥È¥é¥¯¥¿12 //コンストラクタ 13 13 function LC_Page() { 14 // ¥á¥¤¥ó¥Æ¥ó¥×¥ì¡¼¥È¤Î»ØÄê14 //メインテンプレートの指定 15 15 $this->tpl_mainpage = 'system/module.tpl'; 16 16 $this->tpl_subnavi = 'system/subnavi.tpl'; 17 17 $this->tpl_mainno = 'system'; 18 18 $this->tpl_subno = 'module'; 19 $this->tpl_subtitle = ' ¥â¥¸¥å¡¼¥ë´ÉÍý';19 $this->tpl_subtitle = 'モジュール管理'; 20 20 } 21 21 } … … 24 24 $objQuery = new SC_Query(); 25 25 26 // ¥»¥Ã¥·¥ç¥ó¥¯¥é¥¹26 // セッションクラス 27 27 $objSess = new SC_Session(); 28 // ǧ¾Ú²ÄÈݤÎȽÄê28 // 認証可否の判定 29 29 sfIsSuccess($objSess); 30 30 31 31 switch($_POST['mode']) { 32 // ¥¢¥Ã¥×¥Ç¡¼¥È¾ðÊó¥Õ¥¡¥¤¥ë¤ò¼èÆÀ32 // アップデート情報ファイルを取得 33 33 case 'edit': 34 // ¹¹¿·¾ðÊó¤òºÇ¿·¤Ë¤¹¤ë34 // 更新情報を最新にする 35 35 lfLoadUpdateList(); 36 36 break; 37 // ¥¤¥ó¥¹¥È¡¼¥ë37 // インストール 38 38 case 'install': 39 // ¹¹¿·¾ðÊó¤òºÇ¿·¤Ë¤¹¤ë39 // 更新情報を最新にする 40 40 lfLoadUpdateList(); 41 // ¥â¥¸¥å¡¼¥ë·´¤Î¥¤¥ó¥¹¥È¡¼¥ë41 // モジュール郡のインストール 42 42 lfInstallModule(); 43 43 break; 44 // ¥¢¥ó¥¤¥ó¥¹¥È¡¼¥ë44 // アンインストール 45 45 case 'uninstall': 46 // ¹¹¿·¾ðÊó¤òºÇ¿·¤Ë¤¹¤ë46 // 更新情報を最新にする 47 47 lfLoadUpdateList(); 48 // ¥â¥¸¥å¡¼¥ë·´¤Î¥¤¥ó¥¹¥È¡¼¥ë48 // モジュール郡のインストール 49 49 lfUninstallModule(); 50 50 break; … … 57 57 58 58 $objPage->arrUpdate = $arrUpdate; 59 $objView->assignobj($objPage); // ÊÑ¿ô¤ò¥Æ¥ó¥×¥ì¡¼¥È¤Ë¥¢¥µ¥¤¥ó¤¹¤ë60 $objView->display(MAIN_FRAME); // ¥Æ¥ó¥×¥ì¡¼¥È¤Î½ÐÎÏ59 $objView->assignobj($objPage); //変数をテンプレートにアサインする 60 $objView->display(MAIN_FRAME); //テンプレートの出力 61 61 //------------------------------------------------------------------------------------------------------- 62 // ¹¹¿·¥Õ¥¡¥¤¥ë¤Î¼èÆÀ62 // 更新ファイルの取得 63 63 function lfCopyUpdateFile($file) { 64 64 global $objPage; … … 66 66 $src_path = sfRmDupSlash(UPDATE_HTTP . $file . ".txt"); 67 67 $dst_path = sfRmDupSlash(MODULE_PATH . $file); 68 $flg_ok = true; // ½èÍý¤ÎÀ®¸ùȽÄê68 $flg_ok = true; // 処理の成功判定 69 69 70 70 $src_fp = @fopen($src_path, "rb"); 71 71 72 72 if(!$src_fp) { 73 sfErrorHeader(">> " . $src_path . " ¤Î¼èÆÀ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");73 sfErrorHeader(">> " . $src_path . "の取得に失敗しました。"); 74 74 $flg_ok = false; 75 75 } else { 76 // ¥Õ¥¡¥¤¥ë¤ò¤¹¤Ù¤ÆÆɤ߹þ¤à76 // ファイルをすべて読み込む 77 77 $contents = ''; 78 78 while (!feof($src_fp)) { … … 81 81 fclose($src_fp); 82 82 83 // ¥Ç¥£¥ì¥¯¥È¥êºîÀ®¤ò»î¤ß¤ë83 // ディレクトリ作成を試みる 84 84 lfMakeDirectory($dst_path); 85 // ¥Õ¥¡¥¤¥ë½ñ¹þ¤ß85 // ファイル書込み 86 86 $dst_fp = @fopen($dst_path, "wb"); 87 87 if(!$dst_fp) { 88 sfErrorHeader(">> " . $dst_path . " ¤ò¥ª¡¼¥×¥ó¤Ç¤¤Þ¤»¤ó¡£");88 sfErrorHeader(">> " . $dst_path . "をオープンできません。"); 89 89 $flg_ok = false; 90 90 } else { … … 95 95 96 96 if($flg_ok) { 97 $objPage->update_mess.= ">> " . $dst_path . " ¡§¥³¥Ô¡¼À®¸ù<br>";98 } else { 99 $objPage->update_mess.= ">> " . $dst_path . " ¡§¥³¥Ô¡¼¼ºÇÔ<br>";97 $objPage->update_mess.= ">> " . $dst_path . ":コピー成功<br>"; 98 } else { 99 $objPage->update_mess.= ">> " . $dst_path . ":コピー失敗<br>"; 100 100 } 101 101 … … 103 103 } 104 104 105 // ¤¹¤Ù¤Æ¤Î¥Ñ¥¹¤Î¥Ç¥£¥ì¥¯¥È¥ê¤òºîÀ®¤¹¤ë105 // すべてのパスのディレクトリを作成する 106 106 function lfMakeDirectory($path) { 107 107 $pos = 0; 108 $cnt = 0; // ̵¸Â¥ë¡¼¥×Âкö109 $len = strlen($path); // ̵¸Â¥ë¡¼¥×Âкö108 $cnt = 0; // 無限ループ対策 109 $len = strlen($path); // 無限ループ対策 110 110 111 111 while($cnt <= $len) { 112 112 $pos = strpos($path, "/", $pos); 113 // ¤³¤³¤Ç¤ÎȽÄê¤Ï¡¢Åù¹æ3¤Ä¤ò»ÈÍÑ113 // ここでの判定は、等号3つを使用 114 114 if($pos === false) { 115 // ¥¹¥é¥Ã¥·¥å¤¬¸«¤Ä¤«¤é¤Ê¤¤¾ì¹ç¤Ï¥ë¡¼¥×¤«¤éÈ´¤±¤ë115 // スラッシュが見つからない場合はループから抜ける 116 116 break; 117 117 } 118 $pos++; // ʸ»úȯ¸«°ÌÃÖ¤ò°ìʸ»ú¿Ê¤á¤ë118 $pos++; // 文字発見位置を一文字進める 119 119 $dir = substr($path, 0, $pos); 120 120 121 // ¤¹¤Ç¤Ë¸ºß¤¹¤ë¤«¤É¤¦¤«Ä´¤Ù¤ë121 // すでに存在するかどうか調べる 122 122 if(!file_exists($dir)) { 123 123 mkdir($dir); 124 124 } 125 $cnt++; // ̵¸Â¥ë¡¼¥×Âкö126 } 127 } 128 129 // ¹¹¿·¾ðÊó¤òºÇ¿·¤Ë¤¹¤ë125 $cnt++; // 無限ループ対策 126 } 127 } 128 129 // 更新情報を最新にする 130 130 function lfLoadUpdateList() { 131 131 $objQuery = new SC_Query(); … … 136 136 137 137 if(!$fp) { 138 sfErrorHeader(">> " . $path . " ¤Î¼èÆÀ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£");138 sfErrorHeader(">> " . $path . "の取得に失敗しました。"); 139 139 } else { 140 140 … … 142 142 $arrCSV = fgetcsv($fp, UPDATE_CSV_LINE_MAX); 143 143 144 // ¥¨¥¹¥±¡¼¥×½èÍý¤ÎÃÖ´¹144 // エスケープ処理の置換 145 145 foreach($arrCSV as $key => $val){ 146 146 $arrCSV[$key] = str_replace('\"', '"', $val); … … 151 151 } 152 152 153 // ¥«¥é¥à¿ô¤¬Àµ¾ï¤Ç¤¢¤Ã¤¿¾ì¹ç¤Î¤ß153 // カラム数が正常であった場合のみ 154 154 if(count($arrCSV) == MODULE_CSV_COL_MAX) { 155 // insert ¤¹¤ëmodule_id¤òÇÛÎó¤Ë³ÊǼ155 // insertするmodule_idを配列に格納 156 156 $arrInsID[] = $arrCSV[0]; 157 157 158 // ¼èÆÀ¤·¤¿¥¢¥Ã¥×¥Ç¡¼¥È¾ðÊó¤òDB¤Ë½ñ¤¹þ¤à158 // 取得したアップデート情報をDBに書き込む 159 159 $sqlval['module_id'] = $arrCSV[0]; 160 160 $sqlval['module_name'] = $arrCSV[1]; … … 171 171 $sqlval['module_x'] = $arrCSV[14]; 172 172 $sqlval['module_y'] = $arrCSV[15]; 173 // ¥â¥¸¥å¡¼¥ë¤¬Âбþ¤·¤Æ¤¤¤ëËÜÂΤΥС¼¥¸¥ç¥ó173 // モジュールが対応している本体のバージョン 174 174 $sqlval['eccube_version'] = $arrCSV[13]; 175 // ´û¸¥ì¥³¡¼¥É¤Î¥Á¥§¥Ã¥¯175 // 既存レコードのチェック 176 176 $cnt = $objQuery->count("dtb_module", "module_id = ?", array($sqlval['module_id'])); 177 177 if($cnt > 0) { 178 // ¤¹¤Ç¤Ë¼èÆÀ¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¹¹¿·¤¹¤ë¡£178 // すでに取得されている場合は更新する。 179 179 $objQuery->update("dtb_module", $sqlval, "module_id = ?", array($sqlval['module_id'])); 180 180 } else { 181 // ¿·µ¬¥ì¥³¡¼¥É¤ÎÄɲÃ181 // 新規レコードの追加 182 182 $sqlval['create_date'] = "now()"; 183 183 $objQuery->insert("dtb_module", $sqlval); 184 184 } 185 185 } else { 186 sfErrorHeader(">> ¥«¥é¥à¿ô¤¬°ìÃפ·¤Þ¤»¤ó¡£¡§".count($arrCSV));187 } 188 } 189 190 // ÉÔÍפʥǡ¼¥¿¤òºï½ü186 sfErrorHeader(">> カラム数が一致しません。:".count($arrCSV)); 187 } 188 } 189 190 // 不要なデータを削除 191 191 if(count($arrInsID) > 0){ 192 192 $del_sql = "DELETE FROM dtb_module WHERE module_id NOT IN (?"; … … 204 204 } 205 205 206 // ¥¤¥ó¥¹¥È¡¼¥ë½èÍý206 // インストール処理 207 207 function lfInstallModule() { 208 208 global $objPage; … … 210 210 $objQuery = new SC_Query(); 211 211 $arrRet = $objQuery->select("module_id, extern_php, other_files, install_sql, latest_version", "dtb_module", "module_id = ?", array($_POST['module_id'])); 212 $flg_ok = true; // ½èÍý¤ÎÀ®¸ùȽÄê212 $flg_ok = true; // 処理の成功判定 213 213 214 214 if(count($arrRet) > 0) { … … 219 219 $arrFiles[] = $arrRet[0]['extern_php']; 220 220 foreach($arrFiles as $val) { 221 // ¹¹¿·¥Õ¥¡¥¤¥ë¤Î¼èÆÀ221 // 更新ファイルの取得 222 222 $ret=lfCopyUpdateFile($val); 223 223 if(!$ret) { … … 226 226 } 227 227 } else { 228 sfErrorHeader(">> Âоݤε¡Ç½¤Ï¡¢ÇÛÉÛ¤ò½ªÎ»¤·¤Æ¤ª¤ê¤Þ¤¹¡£");228 sfErrorHeader(">> 対象の機能は、配布を終了しております。"); 229 229 $flg_ok = false; 230 230 } 231 231 232 // ɬÍפÊSQLʸ¤Î¼Â¹Ô232 // 必要なSQL文の実行 233 233 if($arrRet[0]['install_sql'] != "") { 234 // SQL ʸ¼Â¹Ô¡¢¥Ñ¥é¡¼¥á¡¼¥¿¤Ê¤·¡¢¥¨¥é¡¼Ìµ»ë234 // SQL文実行、パラーメータなし、エラー無視 235 235 $arrInstallSql = split(";",$arrRet[0]['install_sql']); 236 236 foreach($arrInstallSql as $key => $val){ … … 240 240 } 241 241 if(DB::isError($ret)) { 242 // ¥¨¥é¡¼Ê¸¤ò¼èÆÀ¤¹¤ë242 // エラー文を取得する 243 243 ereg("\[(.*)\]", $ret->userinfo, $arrKey); 244 $objPage->update_mess.=">> ¥Æ¡¼¥Ö¥ë¹½À®¤ÎÊѹ¹¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£<br>";244 $objPage->update_mess.=">> テーブル構成の変更に失敗しました。<br>"; 245 245 $objPage->update_mess.= $arrKey[0] . "<br>"; 246 246 $flg_ok = false; 247 247 } else { 248 $objPage->update_mess.=">> ¥Æ¡¼¥Ö¥ë¹½À®¤ÎÊѹ¹¤ò¹Ô¤¤¤Þ¤·¤¿¡£<br>";248 $objPage->update_mess.=">> テーブル構成の変更を行いました。<br>"; 249 249 } 250 250 } … … 258 258 } 259 259 260 // ¥¢¥ó¥¤¥ó¥¹¥È¡¼¥ë½èÍý260 // アンインストール処理 261 261 function lfUninstallModule() { 262 262 global $objPage; … … 264 264 $objQuery = new SC_Query(); 265 265 $arrRet = $objQuery->select("module_id, extern_php, other_files, install_sql, uninstall_sql, latest_version", "dtb_module", "module_id = ?", array($_POST['module_id'])); 266 $flg_ok = true; // ½èÍý¤ÎÀ®¸ùȽÄê266 $flg_ok = true; // 処理の成功判定 267 267 268 268 if(count($arrRet) > 0) { 269 269 270 // ¥â¥¸¥å¡¼¥ë¤òºï½ü¤¹¤ë270 // モジュールを削除する 271 271 $objQuery->query("UPDATE dtb_payment SET del_flg = 1 WHERE module_id = ?", array($arrRet[0]['module_id'])); 272 272 … … 279 279 foreach($arrFiles as $val) { 280 280 $path = MODULE_PATH . $val; 281 // ¥Õ¥¡¥¤¥ë¤òºï½ü¤¹¤ë281 // ファイルを削除する 282 282 if(file_exists($path) && unlink($path)) { 283 $objPage->update_mess.= ">> " . $path . " ¡§ºï½üÀ®¸ù<br>";283 $objPage->update_mess.= ">> " . $path . ":削除成功<br>"; 284 284 } else { 285 $objPage->update_mess.= ">> " . $path . " ¡§ºï½ü¼ºÇÔ<br>";286 } 287 } 288 289 // ɬÍפÊSQLʸ¤Î¼Â¹Ô285 $objPage->update_mess.= ">> " . $path . ":削除失敗<br>"; 286 } 287 } 288 289 // 必要なSQL文の実行 290 290 if($arrRet[0]['uninstall_sql'] != "") { 291 // SQL ʸ¼Â¹Ô¡¢¥Ñ¥é¡¼¥á¡¼¥¿¤Ê¤·¡¢¥¨¥é¡¼Ìµ»ë291 // SQL文実行、パラーメータなし、エラー無視 292 292 $ret = $objQuery->query($arrRet[0]['uninstall_sql'],"",true); 293 293 if(DB::isError($ret)) { 294 // ¥¨¥é¡¼Ê¸¤ò¼èÆÀ¤¹¤ë294 // エラー文を取得する 295 295 ereg("\[(.*)\]", $ret->userinfo, $arrKey); 296 $objPage->update_mess.=">> ¥Æ¡¼¥Ö¥ë¹½À®¤ÎÊѹ¹¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£<br>";296 $objPage->update_mess.=">> テーブル構成の変更に失敗しました。<br>"; 297 297 $objPage->update_mess.= $arrKey[0] . "<br>"; 298 298 $flg_ok = false; 299 299 } else { 300 $objPage->update_mess.=">> ¥Æ¡¼¥Ö¥ë¹½À®¤ÎÊѹ¹¤ò¹Ô¤¤¤Þ¤·¤¿¡£<br>";301 } 302 } 303 } else { 304 sfErrorHeader(">> Âоݤε¡Ç½¤Ï¡¢ÇÛÉÛ¤ò½ªÎ»¤·¤Æ¤ª¤ê¤Þ¤¹¡£");300 $objPage->update_mess.=">> テーブル構成の変更を行いました。<br>"; 301 } 302 } 303 } else { 304 sfErrorHeader(">> 対象の機能は、配布を終了しております。"); 305 305 } 306 306 307 307 if($flg_ok) { 308 // ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤òºï½ü¤¹¤ë¡£308 // バージョン情報を削除する。 309 309 $sqlval['now_version'] = ""; 310 310 $sqlval['update_date'] = "now()";
Note: See TracChangeset
for help on using the changeset viewer.