[Svn-src-all:1535] [version-2_5-dev 20431] #974 [管理画面]システム設定 バックアップのリファクタリング

homan admin @ mail.ec-cube.net
2011年 2月 28日 (月) 03:40:47 JST


Subversion committed to /home/svn/open 20431
http://svn.ec-cube.net/open_trac/changeset/20431
┌────────────────────────────┐
│更新者 :  homan                                        │
│更新日時:  2011-02-28 03:40:47 +0900 (月, 28  2月 2011)│
└────────────────────────────┘

Log:
--------------------------------------------------------
#974 [管理画面]システム設定 バックアップのリファクタリング

Changed:                      [U:修正,A:追加,D:削除]
--------------------------------------------------------
U   branches/version-2_5-dev/data/Smarty/templates/admin/system/bkup.tpl
U   branches/version-2_5-dev/data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php

変更: branches/version-2_5-dev/data/Smarty/templates/admin/system/bkup.tpl
===================================================================
--- branches/version-2_5-dev/data/Smarty/templates/admin/system/bkup.tpl	2011-02-27 16:10:55 UTC (rev 20430)
+++ branches/version-2_5-dev/data/Smarty/templates/admin/system/bkup.tpl	2011-02-27 18:40:47 UTC (rev 20431)
@@ -52,9 +52,15 @@
         </tr>
     </table>
 
-    <div class="btn"><a class="btn-normal" href="javascript:;" name="cre_bkup" onclick="document.body.style.cursor = 'wait'; form1.mode.value='bkup'; submit(); return false;"><span>バックアップデータを作成する</span></a></div>
+    <div class="btn"><a class="btn-normal" href="javascript:;" name="cre_bkup" onclick="document.body.style.cursor = 'wait'; form1.mode.value='bkup'; document.form1.submit(); return false;"><span>バックアップデータを作成する</span></a></div>
 
+
     <h2>バックアップ一覧</h2>
+
+
+    <!--{if $arrErr.list_name}-->
+    <span class="attention"><!--{$arrErr.list_name}--></span><br />
+    <!--{/if}-->
     <!--{* 一覧が存在する場合のみ表示する *}-->
     <!--{if count($arrBkupList) > 0}-->
     <table class="list">

変更: branches/version-2_5-dev/data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php
===================================================================
--- branches/version-2_5-dev/data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php	2011-02-27 16:10:55 UTC (rev 20430)
+++ branches/version-2_5-dev/data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php	2011-02-27 18:40:47 UTC (rev 20431)
@@ -69,15 +69,13 @@
      * @return void
      */
     function action() {
-        $objQuery =& SC_Query::getSingletonInstance();
 
-
         $objFormParam = new SC_FormParam;
 
         // パラメータの初期化
         $this->initParam($objFormParam, $_POST);
 
-        $arrErr  = array();
+        $arrErrTmp  = array();
         $arrForm = array();
 
         switch($this->getMode()) {
@@ -86,34 +84,35 @@
         case 'bkup':
 
             // データ型エラーチェック
-            $arrErr[1] = $objFormParam->checkError();
+            $arrErrTmp[1] = $objFormParam->checkError();
 
             // データ型に問題がない場合
-            if(SC_Utils_Ex::isBlank($arrErr[1])) {
+            if(SC_Utils_Ex::isBlank($arrErrTmp[1])) {
                 // データ型以外のエラーチェック
-                $arrErr[2] = $this->lfCheckError($objFormParam->getHashArray());
+                $arrErrTmp[2] = $this->lfCheckError($objFormParam->getHashArray(), $this->getMode());
             }
 
             // エラーがなければバックアップ処理を行う
-            if (SC_Utils_Ex::isBlank($arrErr[1]) && SC_Utils_Ex::isBlank($arrErr[2])) {
+            if (SC_Utils_Ex::isBlank($arrErrTmp[1]) && SC_Utils_Ex::isBlank($arrErrTmp[2])) {
             
                 $arrData = $objFormParam->getHashArray();
             
                 // バックアップファイル作成
-                $arrErr[3] = $this->lfCreateBkupData($arrData['bkup_name'], $this->bkup_dir);
+                $arrErrTmp[3] = $this->lfCreateBkupData($arrData['bkup_name'], $this->bkup_dir);
 
                 // DBにデータ更新
-                if (SC_Utils_Ex::isBlank($arrErr[3])) {
+                if (SC_Utils_Ex::isBlank($arrErrTmp[3])) {
                     $this->lfUpdBkupData($arrData);
                 }else{
                     $arrForm = $arrData;
+                    $arrErr = $arrErrTmp[3];
                 }
 
                 $this->tpl_onload = "alert('バックアップ完了しました');";
-            }else{
+            } else {
                 $arrForm = $objFormParam->getHashArray();
+                $arrErr = array_merge((array)$arrErrTmp[1],(array)$arrErrTmp[2]);
             }
-
             break;
 
         // リストア
@@ -121,40 +120,63 @@
         	$this->mode = "restore_config";
 
         case 'restore':
-            $this->lfRestore($_POST['list_name'], $this->bkup_dir, $this->bkup_ext, $this->mode);
+            // データベースに存在するかどうかチェック
+            $arrErr = $this->lfCheckError($objFormParam->getHashArray(), $this->getMode());
+
+            // エラーがなければリストア処理を行う
+            if (SC_Utils_Ex::isBlank($arrErr)) {
+                $arrData = $objFormParam->getHashArray();
+                $this->lfRestore($arrData['list_name'], $this->bkup_dir, $this->bkup_ext, $this->mode);
+            }
             break;
 
         // 削除
         case 'delete':
-            $del_file = $this->bkup_dir.$_POST['list_name'] . $this->bkup_ext;
-            // ファイルの削除
-            if(is_file($del_file)){
-                $ret = unlink($del_file);
+
+            // データベースに存在するかどうかチェック
+            $arrErr = $this->lfCheckError($objFormParam->getHashArray(), $this->getMode());
+
+            // エラーがなければリストア処理を行う
+            if (SC_Utils_Ex::isBlank($arrErr)) {
+
+                $arrData = $objFormParam->getHashArray();
+
+                // DBとファイルを削除
+                $this->lfDeleteBackUp($arrData, $this->bkup_dir, $this->bkup_ext);
             }
 
-            // DBから削除
-            $delsql = "DELETE FROM dtb_bkup WHERE bkup_name = ?";
-            $objQuery->query($delsql, array($_POST['list_name']));
-
             break;
 
             // ダウンロード
         case 'download' :
-            $filename = $_POST['list_name'] . $this->bkup_ext;
-            $dl_file = $this->bkup_dir.$_POST['list_name'] . $this->bkup_ext;
 
-            // ダウンロード開始
-            Header("Content-disposition: attachment; filename=${filename}");
-            Header("Content-type: application/octet-stream; name=${filename}");
-            header("Content-Length: " .filesize($dl_file));
-            readfile ($dl_file);
-            exit();
-            break;
+            // データベースに存在するかどうかチェック
+            $arrErr = $this->lfCheckError($objFormParam->getHashArray(), $this->getMode());
 
+            // エラーがなければダウンロード処理を行う
+            if (SC_Utils_Ex::isBlank($arrErr)) {
+
+                $arrData = $objFormParam->getHashArray();
+
+                $filename = $arrData['list_name'] . $this->bkup_ext;
+                $dl_file = $this->bkup_dir.$arrData['list_name'] . $this->bkup_ext;
+
+                // ダウンロード開始
+                Header("Content-disposition: attachment; filename=${filename}");
+                Header("Content-type: application/octet-stream; name=${filename}");
+                header("Content-Length: " .filesize($dl_file));
+                readfile ($dl_file);
+                exit();
+                break;
+            }
+
         default:
             break;
         }
 
+        // 不要になった変数を解放
+        unset($arrErrTmp);
+
         // バックアップリストを取得する
         $arrBkupList = $this->lfGetBkupData("ORDER BY create_date DESC");
         // テンプレートファイルに渡すデータをセット
@@ -184,6 +206,7 @@
 
         $objFormParam->addParam('バックアップ名', 'bkup_name', STEXT_LEN, 'a', array('EXIST_CHECK', 'MAX_LENGTH_CHECK', 'NO_SPTAB', 'ALNUM_CHECK'));
         $objFormParam->addParam('バックアップメモ', 'bkup_memo', MTEXT_LEN, 'KVa', array('MAX_LENGTH_CHECK'));
+        $objFormParam->addParam('バックアップ名(リスト)', 'list_name', STEXT_LEN, 'a', array('MAX_LENGTH_CHECK', 'NO_SPTAB', 'ALNUM_CHECK'));
         $objFormParam->setParam($arrParams);
         $objFormParam->convParam();
 
@@ -192,15 +215,37 @@
     /**
      * データ型以外のエラーチェック.
      *
-     * @param array $arrForm
+     * @param array  $arrForm
+     * @param string $mode
      * @return $arrErr
      */
-    function lfCheckError(&$arrForm){
+    function lfCheckError(&$arrForm, $mode){
 
-        // 重複チェック
-        $ret = $this->lfGetBkupData("WHERE bkup_name = ?", array($arrForm['bkup_name']));
-        if (count($ret) > 0) {
+        $arrVal = array();
+
+        switch($mode) {
+        case 'bkup':
+            $arrVal[] = $arrFrom['bkup_name'];
+            break;
+
+        case 'restore_config':
+        case 'restore':
+        case 'download':
+        case 'delete':
+            $arrVal[] = $arrForm['list_name'];
+            break;
+
+        default:
+            break;
+
+        }
+
+        // 重複・存在チェック
+        $ret = $this->lfGetBkupData("WHERE bkup_name = ?", $arrVal);
+        if (count($ret) > 0 && $mode == 'bkup') {
             $arrErr['bkup_name'] = "バックアップ名が重複しています。別名を入力してください。";
+        } elseif (count($ret) <= 0 && $mode != 'bkup') {
+            $arrErr['list_name'] = "選択されたデータがみつかりませんでした。既に削除されている可能性があります。";
         }
 
         return $arrErr;
@@ -358,8 +403,12 @@
     function lfUpdBkupData($data){
         $objQuery =& SC_Query::getSingletonInstance();
 
-        $sql = "INSERT INTO dtb_bkup (bkup_name,bkup_memo,create_date) values (?,?,now())";
-        $objQuery->query($sql, array($data['bkup_name'],$data['bkup_memo']));
+        $arrVal = array();
+        $arrVal['bkup_name'] = $data['bkup_name'];
+        $arrVal['bkup_memo'] = $data['bkup_memo'];
+        $arrVal['create_date'] = "now()";
+        
+        $objQuery->insert('dtb_bkup', $arrVal);
     }
 
     // バックアップテーブルからデータを取得する
@@ -390,7 +439,7 @@
         $csv_data = "";
         $success = true;
 
-        $bkup_dir = $bkup_dir . $bkup_name . "/";
+        //$bkup_dir = $bkup_dir . $bkup_name . "/";
 
         //バックアップフォルダに移動する
         chdir($bkup_dir);
@@ -401,6 +450,9 @@
         //指定されたフォルダ内に解凍する
         $success = $tar->extract("./");
 
+        //バックアップフォルダに移動する
+        chdir($bkup_dir . $bkup_name . "/");
+
         // 無事解凍できれば、リストアを行う
         if ($success) {
 
@@ -428,6 +480,7 @@
                 $this->restore_err = false;
             }
         }
+
     }
 
     /**
@@ -440,12 +493,13 @@
      */
     function lfExeInsertSQL(&$objQuery, $csv, $mode){
 
-        $sql = "";
-        $base_sql = "";
         $tbl_flg = false;
         $col_flg = false;
         $ret = true;
         $pagelayout_flg = false;
+        $table_name = "";
+        $arrVal = array();
+        $arrCol = array();
 
         // csvファイルからデータの取得
         $fp = fopen($csv, "r");
@@ -454,18 +508,21 @@
 
             //空白行のときはテーブル変更
             if (count($data) <= 1 and $data[0] == "") {
-                $base_sql = "";
                 $tbl_flg = false;
                 $col_flg = false;
+                $table_name = "";
+                $arrVal = array();
+                $arrCol = array();
+
                 continue;
             }
 
             // テーブルフラグがたっていない場合にはテーブル名セット
             if (!$tbl_flg) {
-                $base_sql = "INSERT INTO $data[0] ";
+                $table_name = $data[0];
                 $tbl_flg = true;
 
-                if($data[0] == "dtb_pagelayout"){
+                if($table_name == "dtb_pagelayout"){
                     $pagelayout_flg = true;
                 }
 
@@ -475,25 +532,21 @@
             // カラムフラグがたっていない場合にはカラムセット
             if (!$col_flg) {
                 if ($mode != "restore_config"){
-                    $base_sql .= " ( $data[0] ";
-                    for($i = 1; $i < count($data); $i++){
-                        $base_sql .= "," . $data[$i];
+                    for($i = 0; $i <= count($data); $i++){
+                        $arrCol[$i] = $data[$i];
                     }
-                    $base_sql .= " ) ";
                 }
                 $col_flg = true;
                 continue;
             }
 
-            // インサートする値をセット
-            $sql = $base_sql . "VALUES ( ? ";
-            for($i = 1; $i < count($data); $i++){
-                $sql .= ", ?";
+            for($i = 0; $i <= count($data); $i++) {
+                $arrVal[$arrCol[$i]] = $data[$i];
             }
-            $sql .= " );";
-            $data = str_replace("\\\"", "\"", $data);
-            $err = $objQuery->query($sql, $data);
 
+            $err = $objQuery->insert($table_name, $arrVal);
+
+
             // エラーがあれば終了
             if (PEAR::isError($err)){
                 SC_Utils_Ex::sfErrorHeader(">> " . $objQuery->getlastquery(false));
@@ -542,5 +595,22 @@
         }
         return true;
     }
+
+    // 選択したバックアップをDBから削除
+    function lfDeleteBackUp(&$arrForm, $bkup_dir, $bkup_ext) {
+
+        $objQuery =& SC_Query::getSingletonInstance();
+
+        $del_file = $bkup_dir.$arrForm['list_name'] . $bkup_ext;
+        // ファイルの削除
+        if(is_file($del_file)){
+            $ret = unlink($del_file);
+        }
+
+        $delsql = "DELETE FROM dtb_bkup WHERE bkup_name = ?";
+        $objQuery->delete("dtb_bkup", "bkup_name = ?", array($arrForm['list_name']));
+
+    }
+
 }
 ?>




Svn-src-all メーリングリストの案内