Changeset 20431


Ignore:
Timestamp:
2011/02/28 03:40:47 (10 years ago)
Author:
homan
Message:

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

Location:
branches/version-2_5-dev/data
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/Smarty/templates/admin/system/bkup.tpl

    r20407 r20431  
    5353    </table> 
    5454 
    55     <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> 
     55    <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> 
     56 
    5657 
    5758    <h2>バックアップ一覧</h2> 
     59 
     60 
     61    <!--{if $arrErr.list_name}--> 
     62    <span class="attention"><!--{$arrErr.list_name}--></span><br /> 
     63    <!--{/if}--> 
    5864    <!--{* 一覧が存在する場合のみ表示する *}--> 
    5965    <!--{if count($arrBkupList) > 0}--> 
  • branches/version-2_5-dev/data/class/pages/admin/system/LC_Page_Admin_System_Bkup.php

    r20428 r20431  
    7070     */ 
    7171    function action() { 
    72         $objQuery =& SC_Query::getSingletonInstance(); 
    73  
    7472 
    7573        $objFormParam = new SC_FormParam; 
     
    7876        $this->initParam($objFormParam, $_POST); 
    7977 
    80         $arrErr  = array(); 
     78        $arrErrTmp  = array(); 
    8179        $arrForm = array(); 
    8280 
     
    8785 
    8886            // データ型エラーチェック 
    89             $arrErr[1] = $objFormParam->checkError(); 
     87            $arrErrTmp[1] = $objFormParam->checkError(); 
    9088 
    9189            // データ型に問題がない場合 
    92             if(SC_Utils_Ex::isBlank($arrErr[1])) { 
     90            if(SC_Utils_Ex::isBlank($arrErrTmp[1])) { 
    9391                // データ型以外のエラーチェック 
    94                 $arrErr[2] = $this->lfCheckError($objFormParam->getHashArray()); 
     92                $arrErrTmp[2] = $this->lfCheckError($objFormParam->getHashArray(), $this->getMode()); 
    9593            } 
    9694 
    9795            // エラーがなければバックアップ処理を行う 
    98             if (SC_Utils_Ex::isBlank($arrErr[1]) && SC_Utils_Ex::isBlank($arrErr[2])) { 
     96            if (SC_Utils_Ex::isBlank($arrErrTmp[1]) && SC_Utils_Ex::isBlank($arrErrTmp[2])) { 
    9997             
    10098                $arrData = $objFormParam->getHashArray(); 
    10199             
    102100                // バックアップファイル作成 
    103                 $arrErr[3] = $this->lfCreateBkupData($arrData['bkup_name'], $this->bkup_dir); 
     101                $arrErrTmp[3] = $this->lfCreateBkupData($arrData['bkup_name'], $this->bkup_dir); 
    104102 
    105103                // DBにデータ更新 
    106                 if (SC_Utils_Ex::isBlank($arrErr[3])) { 
     104                if (SC_Utils_Ex::isBlank($arrErrTmp[3])) { 
    107105                    $this->lfUpdBkupData($arrData); 
    108106                }else{ 
    109107                    $arrForm = $arrData; 
     108                    $arrErr = $arrErrTmp[3]; 
    110109                } 
    111110 
    112111                $this->tpl_onload = "alert('バックアップ完了しました');"; 
    113             }else{ 
     112            } else { 
    114113                $arrForm = $objFormParam->getHashArray(); 
    115             } 
    116  
     114                $arrErr = array_merge((array)$arrErrTmp[1],(array)$arrErrTmp[2]); 
     115            } 
    117116            break; 
    118117 
     
    122121 
    123122        case 'restore': 
    124             $this->lfRestore($_POST['list_name'], $this->bkup_dir, $this->bkup_ext, $this->mode); 
     123            // データベースに存在するかどうかチェック 
     124            $arrErr = $this->lfCheckError($objFormParam->getHashArray(), $this->getMode()); 
     125 
     126            // エラーがなければリストア処理を行う 
     127            if (SC_Utils_Ex::isBlank($arrErr)) { 
     128                $arrData = $objFormParam->getHashArray(); 
     129                $this->lfRestore($arrData['list_name'], $this->bkup_dir, $this->bkup_ext, $this->mode); 
     130            } 
    125131            break; 
    126132 
    127133        // 削除 
    128134        case 'delete': 
    129             $del_file = $this->bkup_dir.$_POST['list_name'] . $this->bkup_ext; 
    130             // ファイルの削除 
    131             if(is_file($del_file)){ 
    132                 $ret = unlink($del_file); 
    133             } 
    134  
    135             // DBから削除 
    136             $delsql = "DELETE FROM dtb_bkup WHERE bkup_name = ?"; 
    137             $objQuery->query($delsql, array($_POST['list_name'])); 
     135 
     136            // データベースに存在するかどうかチェック 
     137            $arrErr = $this->lfCheckError($objFormParam->getHashArray(), $this->getMode()); 
     138 
     139            // エラーがなければリストア処理を行う 
     140            if (SC_Utils_Ex::isBlank($arrErr)) { 
     141 
     142                $arrData = $objFormParam->getHashArray(); 
     143 
     144                // DBとファイルを削除 
     145                $this->lfDeleteBackUp($arrData, $this->bkup_dir, $this->bkup_ext); 
     146            } 
    138147 
    139148            break; 
     
    141150            // ダウンロード 
    142151        case 'download' : 
    143             $filename = $_POST['list_name'] . $this->bkup_ext; 
    144             $dl_file = $this->bkup_dir.$_POST['list_name'] . $this->bkup_ext; 
    145  
    146             // ダウンロード開始 
    147             Header("Content-disposition: attachment; filename=${filename}"); 
    148             Header("Content-type: application/octet-stream; name=${filename}"); 
    149             header("Content-Length: " .filesize($dl_file)); 
    150             readfile ($dl_file); 
    151             exit(); 
    152             break; 
     152 
     153            // データベースに存在するかどうかチェック 
     154            $arrErr = $this->lfCheckError($objFormParam->getHashArray(), $this->getMode()); 
     155 
     156            // エラーがなければダウンロード処理を行う 
     157            if (SC_Utils_Ex::isBlank($arrErr)) { 
     158 
     159                $arrData = $objFormParam->getHashArray(); 
     160 
     161                $filename = $arrData['list_name'] . $this->bkup_ext; 
     162                $dl_file = $this->bkup_dir.$arrData['list_name'] . $this->bkup_ext; 
     163 
     164                // ダウンロード開始 
     165                Header("Content-disposition: attachment; filename=${filename}"); 
     166                Header("Content-type: application/octet-stream; name=${filename}"); 
     167                header("Content-Length: " .filesize($dl_file)); 
     168                readfile ($dl_file); 
     169                exit(); 
     170                break; 
     171            } 
    153172 
    154173        default: 
    155174            break; 
    156175        } 
     176 
     177        // 不要になった変数を解放 
     178        unset($arrErrTmp); 
    157179 
    158180        // バックアップリストを取得する 
     
    185207        $objFormParam->addParam('バックアップ名', 'bkup_name', STEXT_LEN, 'a', array('EXIST_CHECK', 'MAX_LENGTH_CHECK', 'NO_SPTAB', 'ALNUM_CHECK')); 
    186208        $objFormParam->addParam('バックアップメモ', 'bkup_memo', MTEXT_LEN, 'KVa', array('MAX_LENGTH_CHECK')); 
     209        $objFormParam->addParam('バックアップ名(リスト)', 'list_name', STEXT_LEN, 'a', array('MAX_LENGTH_CHECK', 'NO_SPTAB', 'ALNUM_CHECK')); 
    187210        $objFormParam->setParam($arrParams); 
    188211        $objFormParam->convParam(); 
     
    193216     * データ型以外のエラーチェック. 
    194217     * 
    195      * @param array $arrForm 
     218     * @param array  $arrForm 
     219     * @param string $mode 
    196220     * @return $arrErr 
    197221     */ 
    198     function lfCheckError(&$arrForm){ 
    199  
    200         // 重複チェック 
    201         $ret = $this->lfGetBkupData("WHERE bkup_name = ?", array($arrForm['bkup_name'])); 
    202         if (count($ret) > 0) { 
     222    function lfCheckError(&$arrForm, $mode){ 
     223 
     224        $arrVal = array(); 
     225 
     226        switch($mode) { 
     227        case 'bkup': 
     228            $arrVal[] = $arrFrom['bkup_name']; 
     229            break; 
     230 
     231        case 'restore_config': 
     232        case 'restore': 
     233        case 'download': 
     234        case 'delete': 
     235            $arrVal[] = $arrForm['list_name']; 
     236            break; 
     237 
     238        default: 
     239            break; 
     240 
     241        } 
     242 
     243        // 重複・存在チェック 
     244        $ret = $this->lfGetBkupData("WHERE bkup_name = ?", $arrVal); 
     245        if (count($ret) > 0 && $mode == 'bkup') { 
    203246            $arrErr['bkup_name'] = "バックアップ名が重複しています。別名を入力してください。"; 
     247        } elseif (count($ret) <= 0 && $mode != 'bkup') { 
     248            $arrErr['list_name'] = "選択されたデータがみつかりませんでした。既に削除されている可能性があります。"; 
    204249        } 
    205250 
     
    359404        $objQuery =& SC_Query::getSingletonInstance(); 
    360405 
    361         $sql = "INSERT INTO dtb_bkup (bkup_name,bkup_memo,create_date) values (?,?,now())"; 
    362         $objQuery->query($sql, array($data['bkup_name'],$data['bkup_memo'])); 
     406        $arrVal = array(); 
     407        $arrVal['bkup_name'] = $data['bkup_name']; 
     408        $arrVal['bkup_memo'] = $data['bkup_memo']; 
     409        $arrVal['create_date'] = "now()"; 
     410         
     411        $objQuery->insert('dtb_bkup', $arrVal); 
    363412    } 
    364413 
     
    391440        $success = true; 
    392441 
    393         $bkup_dir = $bkup_dir . $bkup_name . "/"; 
     442        //$bkup_dir = $bkup_dir . $bkup_name . "/"; 
    394443 
    395444        //バックアップフォルダに移動する 
     
    401450        //指定されたフォルダ内に解凍する 
    402451        $success = $tar->extract("./"); 
     452 
     453        //バックアップフォルダに移動する 
     454        chdir($bkup_dir . $bkup_name . "/"); 
    403455 
    404456        // 無事解凍できれば、リストアを行う 
     
    429481            } 
    430482        } 
     483 
    431484    } 
    432485 
     
    441494    function lfExeInsertSQL(&$objQuery, $csv, $mode){ 
    442495 
    443         $sql = ""; 
    444         $base_sql = ""; 
    445496        $tbl_flg = false; 
    446497        $col_flg = false; 
    447498        $ret = true; 
    448499        $pagelayout_flg = false; 
     500        $table_name = ""; 
     501        $arrVal = array(); 
     502        $arrCol = array(); 
    449503 
    450504        // csvファイルからデータの取得 
     
    455509            //空白行のときはテーブル変更 
    456510            if (count($data) <= 1 and $data[0] == "") { 
    457                 $base_sql = ""; 
    458511                $tbl_flg = false; 
    459512                $col_flg = false; 
     513                $table_name = ""; 
     514                $arrVal = array(); 
     515                $arrCol = array(); 
     516 
    460517                continue; 
    461518            } 
     
    463520            // テーブルフラグがたっていない場合にはテーブル名セット 
    464521            if (!$tbl_flg) { 
    465                 $base_sql = "INSERT INTO $data[0] "; 
     522                $table_name = $data[0]; 
    466523                $tbl_flg = true; 
    467524 
    468                 if($data[0] == "dtb_pagelayout"){ 
     525                if($table_name == "dtb_pagelayout"){ 
    469526                    $pagelayout_flg = true; 
    470527                } 
     
    476533            if (!$col_flg) { 
    477534                if ($mode != "restore_config"){ 
    478                     $base_sql .= " ( $data[0] "; 
    479                     for($i = 1; $i < count($data); $i++){ 
    480                         $base_sql .= "," . $data[$i]; 
     535                    for($i = 0; $i <= count($data); $i++){ 
     536                        $arrCol[$i] = $data[$i]; 
    481537                    } 
    482                     $base_sql .= " ) "; 
    483538                } 
    484539                $col_flg = true; 
     
    486541            } 
    487542 
    488             // インサートする値をセット 
    489             $sql = $base_sql . "VALUES ( ? "; 
    490             for($i = 1; $i < count($data); $i++){ 
    491                 $sql .= ", ?"; 
    492             } 
    493             $sql .= " );"; 
    494             $data = str_replace("\\\"", "\"", $data); 
    495             $err = $objQuery->query($sql, $data); 
     543            for($i = 0; $i <= count($data); $i++) { 
     544                $arrVal[$arrCol[$i]] = $data[$i]; 
     545            } 
     546 
     547            $err = $objQuery->insert($table_name, $arrVal); 
     548 
    496549 
    497550            // エラーがあれば終了 
     
    543596        return true; 
    544597    } 
     598 
     599    // 選択したバックアップをDBから削除 
     600    function lfDeleteBackUp(&$arrForm, $bkup_dir, $bkup_ext) { 
     601 
     602        $objQuery =& SC_Query::getSingletonInstance(); 
     603 
     604        $del_file = $bkup_dir.$arrForm['list_name'] . $bkup_ext; 
     605        // ファイルの削除 
     606        if(is_file($del_file)){ 
     607            $ret = unlink($del_file); 
     608        } 
     609 
     610        $delsql = "DELETE FROM dtb_bkup WHERE bkup_name = ?"; 
     611        $objQuery->delete("dtb_bkup", "bkup_name = ?", array($arrForm['list_name'])); 
     612 
     613    } 
     614 
    545615} 
    546616?> 
Note: See TracChangeset for help on using the changeset viewer.