Changeset 16862


Ignore:
Timestamp:
2007/12/02 21:05:29 (16 years ago)
Author:
adachi
Message:

バックアップ対応

Location:
branches/feature-module-update
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/feature-module-update/data/class/batch/SC_Batch_Update.php

    r16786 r16862  
    4444     * 除外するファイル名をカンマ区切りで羅列. 
    4545     */ 
    46     var $excludes = "distinfo.php,update.php"; 
     46    var $excludes = "distinfo.php"; 
    4747 
    4848    /** 
     
    5353     */ 
    5454    function execute($target = ".") { 
    55         $arrLog = array(); 
     55        $oldMask = umask(0); 
     56        $bkupDistInfoArray = array(); //バックアップファイル用のdistinfoファイル内容 
     57        $bkupPath = DATA_PATH . 'downloads/backup/update_' . time() . '/'; 
     58        $bkupPathFile = $bkupPath . 'files/'; 
     59        $this->mkdir_p($bkupPathFile . 'dummy'); 
     60 
     61        $arrLog = array( 
     62            'err' =>  array(), 
     63            'ok'  => array(), 
     64            'buckup_path' => $bkupPath 
     65        ); 
     66 
     67        if (!is_writable($bkupPath) || !is_writable($bkupPathFile)) { 
     68            $arrLog['err'][] = 'バックアップディレクトリの作成に失敗しました'; 
     69            return $arrLog; 
     70        } 
     71 
    5672        $includeArray = explode(',', $this->includes); 
    5773        $excludeArray = explode(',', $this->excludes); 
     
    7793                // 除外ファイルをスキップ 
    7894                if (in_array($fileName, $excludeArray)) { 
    79                     $arrLog[] = "excludes by " . $path . "\n"; 
     95                    $arrLog['ok'][] = "次のファイルは除外されました: " . $path; 
    8096                    continue; 
    8197                } 
     
    84100                $sha1 = sha1_file($path); 
    85101 
    86                 $arrLog[] = $sha1 . " => " . $path . "\n"; 
    87  
     102                //$arrLog[] = $sha1 . " => " . $path; 
    88103 
    89104                // 変換対象を順に処理 
     
    98113                            $out = $distinfo[$sha1]; 
    99114                        } else { 
    100                             $arrLog[] = "ハッシュ値が一致しないため, コピー先が取得できません."; 
    101                             die(); 
     115                            $arrLog['err'][] = "ハッシュ値が一致しないため, コピー先が取得できません: " . $path; 
     116                            break 2; 
     117                        } 
     118 
     119                        // パーミッションチェック 
     120                        /** 
     121                        if ($check_only) { 
     122                            if(!is_writable($out)) { 
     123                                $this->mkdir_p($out); 
     124                                if (!is_writable($out)) { 
     125                                    $arrLog['err'][] = "コピー先に書き込み権限がありません: " . $out; 
     126                                } 
     127                            } 
     128                            continue; 
     129                        }**/ 
     130 
     131                        // バックアップを作成 
     132                        if (file_exists($out)) { 
     133                            $bkupTo = $bkupPathFile . pathinfo($out, PATHINFO_BASENAME); 
     134                            $bkupDistInfoArray[sha1_file($out)] = $path; 
     135 
     136                            if (!@copy($out, $bkupTo)) { 
     137                                $arrLog['err'][] = "バックアップファイルの作成に失敗しました: " . $bkupTo; 
     138                                break 2; 
     139                            } 
     140                            $arrLog['ok'][] = "バックアップファイルの作成に成功しました: " . $bkupTo; 
    102141                        } 
    103142 
     
    109148                            $handle = @fopen($out, "w"); 
    110149                            if (!$handle) { 
    111                                 $arrLog[] = "Cannot open file (". $out . ")\n"; 
     150                                $arrLog['err'][] = "コピー先に書き込み権限がありません: " . $out; 
    112151                                continue; 
    113152                            } 
     
    116155                        // 取得した内容を書き込む 
    117156                        if (fwrite($handle, $contents) === false) { 
    118                             $arrLog[] = "Cannot write to file (" . $out . ")\n"; 
     157                            $arrLog['err'][] = "コピー先に書き込み権限がありません: " . $out; 
    119158                            continue; 
    120159                        } 
    121160 
    122                         $arrLog[] =  "copyed " . $out . "\n"; 
     161                        $arrLog['ok'][] =  "ファイルのコピーに成功しました: " . $out; 
    123162                        // ファイルを閉じる 
    124163                        fclose($handle); 
     
    127166            } 
    128167        } 
    129         $arrLog[] = "Finished Successful!\n"; 
     168        $src = $this->makeDistInfo($bkupDistInfoArray); 
     169        if (is_writable($bkupPath)) { 
     170            $handle = @fopen($bkupPath . 'distinfo.php', "w"); 
     171            @fwrite($handle, $src); 
     172            @fclose($handle); 
     173            $arrLog['ok'][] =  "バックアップ用ファイルの作成に成功しました: " . $bkupPath . 'distinfo.php'; 
     174        } else { 
     175            $arrLog['err'][] = "バックアップ用ファイルの作成に成功しました: " . $bkupPath . 'distinfo.php'; 
     176        } 
     177        umask($oldMask); 
    130178        return $arrLog; 
    131179    } 
     
    165213            $dir .= $n . '/'; 
    166214            if(!file_exists($dir)) { 
    167                 if (!@mkdir($dir)) return; 
     215                if (!@mkdir($dir)) break; 
    168216            } 
    169217        } 
    170 } 
     218    } 
     219 
     220    function makeDistInfo($bkupDistInfoArray) { 
     221        $src = "<?php\n" 
     222             . '$distifo = array(' . "\n"; 
     223 
     224        foreach ($bkupDistInfoArray as $key => $value) { 
     225            $src .= "'${key}' => '${value}',\n"; 
     226        } 
     227        $src .= ");\n?>"; 
     228    } 
    171229} 
    172230?> 
  • branches/feature-module-update/data/class/pages/upgrade/LC_Page_Upgrade_Download.php

    r16840 r16862  
    7474        $objLog->log('* post param check start'); 
    7575        if ($this->objForm->checkError()) { 
    76             // TODO 
    7776            $objJson->setError(OSTORE_E_C_INVALID_PARAM); 
    7877            $objJson->display(); 
     
    8382        if ($mode == 'auto_update' 
    8483        && $this->autoUpdateEnable($this->objForm->getValue('product_id')) !== true) { 
    85             // TODO 
    8684            $objJson->setError(OSTORE_E_C_AUTOUP_DISABLE); 
    8785            $objJson->display(); 
     
    155153 
    156154            $objLog->log("* open ${filename} start"); 
    157             if ($fp = fopen($dir . $filename, "w")) { 
    158                 fwrite($fp, $data); 
    159                 fclose($fp); 
     155            if ($fp = @fopen($dir . $filename, "w")) { 
     156                @fwrite($fp, $data); 
     157                @fclose($fp); 
    160158            } else { 
    161                 $objJson->setError(OSTORE_E_C_FILE_WRITE); 
     159                $objJson->setError(OSTORE_E_C_PERMISSION); 
    162160                $objJson->display(); 
    163                 $objLog->error(OSTORE_E_C_FILE_WRITE, $objReq); 
     161                $objLog->error(OSTORE_E_C_PERMISSION, $dir . $filename); 
    164162                return; 
    165163            } 
     
    169167            $objLog->log("* mkdir ${exract_dir} start"); 
    170168            if (!@mkdir($exract_dir)) { 
    171                 $objJson->setError(OSTORE_E_C_MKDIR); 
     169                $objJson->setError(OSTORE_E_C_PERMISSION); 
    172170                $objJson->display(); 
    173                 $objLog->error(OSTORE_E_C_MKDIR, $objReq); 
     171                $objLog->error(OSTORE_E_C_PERMISSION, $exract_dir); 
    174172                return; 
    175173            } 
     
    184182            $arrCopyLog = $objBatch->execute($exract_dir); 
    185183 
    186             // テーブルの更新 
     184            $objLog->log("* copy batch check start"); 
     185            if (count($arrCopyLog['err']) > 0) { 
     186                $objJson->setError(OSTORE_E_C_PERMISSION); 
     187                $objJson->display(); 
     188                $objLog->error(OSTORE_E_C_PERMISSION, $arrCopyLog); 
     189                $this->registerUpdateLog($arrCopyLog, $objRet->data); 
     190                return; 
     191            } 
     192 
     193            // dtb_module_update_logの更新 
     194            $objLog->log("* insert dtb_module_update start"); 
     195            $this->registerUpdateLog($arrCopyLog, $objRet->data); 
     196 
     197            // dtb_moduleの更新 
    187198            $objLog->log("* insert/update dtb_module start"); 
    188199            $this->updateMdlTable($objRet->data); 
     
    192203            $objReq = $this->notifyDownload($objReq->getResponseCookies()); 
    193204 
    194             $objLog->log('* dl commi result:' . serialize($objReq)); 
     205            $objLog->log('* dl commit result:' . serialize($objReq)); 
    195206 
    196207            $objJson->setSUCCESS(array(), 'インストール/アップデートに成功しました。'); 
     
    311322        return false; 
    312323    } 
     324 
     325    function registerUpdateLog($arrLog, $objRet) { 
     326        $arrInsert = array( 
     327            'module_id'   => $objRet->product_id, 
     328            'buckup_path' => $arrLog['buckup_path'], 
     329            'error_flg'   => count($arrLog['err']), 
     330            'error'       => implode("\n", $arrLog['err']), 
     331            'ok'          => implode("\n", $arrLog['ok']), 
     332            'update_date' => 'NOW()', 
     333            'create_date' => 'NOW()' 
     334        ); 
     335        $objQuery = new SC_Query; 
     336        $objQuery->insert('dtb_module_update_logs', $arrInsert); 
     337    } 
    313338} 
    314339?> 
  • branches/feature-module-update/data/mtb_constants_init.php

    r16851 r16862  
    669669/** オーナーズストア通信エラーコード */ 
    670670define('OSTORE_E_C_PERMISSION', '2009'); 
     671/** オーナーズストア通信エラーコード */ 
     672define('OSTORE_E_C_BATCH_ERR', '2010'); 
    671673?> 
  • branches/feature-module-update/html/install/sql/create_table_mysql.sql

    r16848 r16862  
     1create table dtb_module_update_logs( 
     2    module_id int auto_increment primary key NOT NULL, 
     3    buckup_path text, 
     4    error_flg smallint DEFAULT 0, 
     5    error text, 
     6    ok text, 
     7    create_date datetime NOT NULL, 
     8    update_date datetime NOT NULL 
     9); 
     10 
    111CREATE TABLE dtb_ownersstore_settings ( 
    212    public_key text 
  • branches/feature-module-update/html/install/sql/create_table_pgsql.sql

    r16848 r16862  
     1create table dtb_module_update_logs( 
     2    module_id serial, 
     3    buckup_path text, 
     4    error_flg int2 default 0, 
     5    error text, 
     6    ok text, 
     7    create_date timestamp NOT NULL DEFAULT now(), 
     8    update_date timestamp NOT NULL DEFAULT now() 
     9); 
     10 
    111CREATE TABLE dtb_ownersstore_settings ( 
    212    public_key text 
  • branches/feature-module-update/html/install/sql/drop_table.sql

    r16848 r16862  
    5151DROP TABLE dtb_table_comment; 
    5252DROP TABLE dtb_ownersstore_settings; 
     53DROP TABLE dtb_module_update_logs; 
    5354DROP TABLE mtb_work; 
    5455DROP TABLE mtb_wday; 
  • branches/feature-module-update/html/install/sql/insert_data.sql

    r16859 r16862  
    727727INSERT INTO mtb_ownersstore_err VALUES ('2003', '配信サーバへ接続できません。', 10); 
    728728INSERT INTO mtb_ownersstore_err VALUES ('2004', '配信サーバでエラーが発生しました。', 11); 
    729 INSERT INTO mtb_ownersstore_err VALUES ('2005', '認証キーが設定されていません。<br />・設定メニューで認証キーを設定してください。', 12); 
     729INSERT INTO mtb_ownersstore_err VALUES ('2005', '認証キーが設定されていません。<br />・「認証キー設定」で認証キーを設定してください。', 12); 
    730730INSERT INTO mtb_ownersstore_err VALUES ('2006', '不正なアクセスです。', 13); 
    731731INSERT INTO mtb_ownersstore_err VALUES ('2007', '不正なパラメータが送信されました。', 14); 
    732732INSERT INTO mtb_ownersstore_err VALUES ('2008', '自動アップデートが無効です', 15); 
    733 INSERT INTO mtb_ownersstore_err VALUES ('2009', 'ファイルの書き込みに失敗しました。<br />・書き込み権限が正しく設定されていません。', 16); 
     733INSERT INTO mtb_ownersstore_err VALUES ('2009', 'ファイルの書き込みに失敗しました。<br />・書き込み権限が正しく設定されていません。<br />・data/downloads/tmpディレクトリに書き込み権限があるかどうか確認してください', 16); 
     734INSERT INTO mtb_ownersstore_err VALUES ('2010', 'ファイルの書き込みに失敗しました。<br />・「ログ管理」で詳細を確認してください。', 17); 
    734735INSERT INTO mtb_ownersstore_ips VALUES (0, '210.188.195.143', 0); 
    735736INSERT INTO mtb_constants VALUES ('SAMPLE_ADDRESS1','"市区町村名(例:千代田区神田神保町)"',1,'フロント表示関連'); 
     
    10681069INSERT INTO mtb_constants VALUES ('OSTORE_E_C_AUTOUP_DISABLE', '"2008"', 520, 'オーナーズストア通信エラーコード'); 
    10691070INSERT INTO mtb_constants VALUES ('OSTORE_E_C_PERMISSION', '"2009"', 521, 'オーナーズストア通信エラーコード'); 
     1071INSERT INTO mtb_constants VALUES ('OSTORE_E_C_BATCH_ERR', '"2010"', 522, 'オーナーズストア通信エラーコード'); 
Note: See TracChangeset for help on using the changeset viewer.