Source for file LC_Page_Admin_System_Bkup.php
Documentation is available at LC_Page_Admin_System_Bkup.php
* This file is part of EC-CUBE
* Copyright(c) 2000-2011 LOCKON CO.,LTD. All Rights Reserved.
* http://www.lockon.co.jp/
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
require_once CLASS_EX_REALDIR . 'page_extends/admin/LC_Page_Admin_Ex.php';
require_once CLASS_EX_REALDIR . 'helper_extends/SC_Helper_CSV_Ex.php';
require_once DATA_REALDIR. 'module/Tar.php';
* @author LOCKON CO.,LTD.
* @version $Id: LC_Page_Admin_System_Bkup.php 21185 2011-08-11 10:37:10Z shutta $
$this->tpl_mainpage = 'system/bkup.tpl';
$this->tpl_mainno = 'system';
$this->tpl_subno = 'bkup';
$this->tpl_maintitle = 'システム設定';
$this->tpl_subtitle = 'バックアップ管理';
$this->bkup_dir = DATA_REALDIR . "downloads/backup/";
$this->bkup_ext = '.tar.gz';
switch($this->getMode()) {
$arrErrTmp[1] = $objFormParam->checkError();
if(SC_Utils_Ex::isBlank($arrErrTmp[1])) {
$arrErrTmp[2] = $this->lfCheckError($objFormParam->getHashArray(), $this->getMode());
if (SC_Utils_Ex::isBlank($arrErrTmp[1]) && SC_Utils_Ex::isBlank($arrErrTmp[2])) {
$arrData = $objFormParam->getHashArray();
$arrErrTmp[3] = $this->lfCreateBkupData($arrData['bkup_name'], $this->bkup_dir);
if (SC_Utils_Ex::isBlank($arrErrTmp[3])) {
$this->tpl_onload = "alert('バックアップ完了しました');";
$arrForm = $objFormParam->getHashArray();
$arrErr = array_merge((array) $arrErrTmp[1],(array) $arrErrTmp[2]);
$this->mode = "restore_config";
$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);
$arrErr = $this->lfCheckError($objFormParam->getHashArray(), $this->getMode());
if (SC_Utils_Ex::isBlank($arrErr)) {
$arrData = $objFormParam->getHashArray();
$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}");
$arrBkupList = $this->lfGetBkupData("ORDER BY create_date DESC");
$this->arrErr = isset ($arrErr) ? $arrErr : array();
$this->arrForm = isset ($arrForm) ? $arrForm : array();
$this->arrBkupList = $arrBkupList;
* @param object $objFormParam
* @param array $arrParams $_POST値
function initParam(&$objFormParam, &$arrParams) {
$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();
$arrVal[] = $arrForm['bkup_name'];
$arrVal[] = $arrForm['list_name'];
if (count($ret) > 0 && $mode == 'bkup') {
$arrErr['bkup_name'] = "バックアップ名が重複しています。別名を入力してください。";
} elseif (count($ret) <= 0 && $mode != 'bkup') {
$arrErr['list_name'] = "選択されたデータがみつかりませんでした。既に削除されている可能性があります。";
* TODO $csv_data はデータを大きく保持しすぎに感じる。分割して書き込みたい。
* @param string $bkup_name
$objQuery = & SC_Query_Ex::getSingletonInstance();
$bkup_dir = $bkup_dir . $bkup_name . "/";
$arrTableList = $objQuery->listTables();
foreach ($arrTableList as $table) {
if (!($table == "dtb_bkup" || $table == "mtb_zip")) {
if ($table == "dtb_pagelayout"){
$arrData = $objQuery->getAll("SELECT * FROM $table ORDER BY page_id");
$arrData = $objQuery->getAll("SELECT * FROM $table");
if (count($arrData) > 0) {
$csv_data .= $table . "\r\n";
$csv_data .= SC_Helper_CSV_Ex::sfArrayToCsv(array_keys($arrData[0])) . "\r\n";
foreach ($arrData as $data_val) {
$csv_data .= SC_Helper_CSV_Ex::sfArrayToCsv($data_val) . "\r\n";
$csv_file = $bkup_dir . "bkup_data.csv";
$csv_autoinc_file = $bkup_dir . "autoinc_data.csv";
mb_internal_encoding(CHAR_CODE);
$fp = fopen($csv_file,'w');
$success = fwrite($fp, $csv_data);
$fp = fopen($csv_autoinc_file,'w');
$success = fwrite($fp, $csv_autoinc);
$tar = new Archive_Tar($this->bkup_dir . $bkup_name . $this->bkup_ext, TRUE);
$zip = $tar->create("./" . $bkup_name . "/");
if ($zip) SC_Utils_Ex::sfDelFile($bkup_dir);
$arrErr['bkup_name'] = "バックアップに失敗しました。";
SC_Utils_Ex::sfDelFile($bkup_dir);
return isset ($arrErr) ? $arrErr : array();
* シーケンス名,シーケンス値 の形式に出力する.
* @return string シーケンス一覧の文字列
$objQuery = & SC_Query_Ex::getSingletonInstance();
$arrSequences = $objQuery->listSequences();
foreach($arrSequences as $val){
$seq = $objQuery->currVal($val);
$ret .= is_null($seq) ? "0" : $seq;
$objQuery = & SC_Query_Ex::getSingletonInstance();
$arrVal['bkup_name'] = $data['bkup_name'];
$arrVal['bkup_memo'] = $data['bkup_memo'];
$arrVal['create_date'] = 'CURRENT_TIMESTAMP';
$objQuery->insert('dtb_bkup', $arrVal);
$objQuery = & SC_Query_Ex::getSingletonInstance();
$sql = "SELECT bkup_name, bkup_memo, create_date FROM dtb_bkup ";
$ret = $objQuery->getAll($sql,$data);
* @param string $bkup_name
* @param string $bkup_dir
* @param string $bkup_ext
function lfRestore($bkup_name, $bkup_dir, $bkup_ext, $mode){
$objQuery = & SC_Query_Ex::getSingletonInstance();
$tar = new Archive_Tar($bkup_dir . $bkup_name . $bkup_ext, TRUE);
$success = $tar->extract($bkup_dir);
if ($success) $success = $this->lfExeInsertSQL($objQuery, $bkup_dir . $bkup_name . "/bkup_data.csv", $mode);
if ($success) $this->lfSetAutoInc($objQuery, $bkup_dir . "autoinc_data.csv");
// リストア成功ならコミット失敗ならロールバック
$this->restore_msg = "リストア終了しました。";
$this->restore_err = true;
$this->restore_msg = "リストアに失敗しました。";
$this->restore_name = $bkup_name;
$this->restore_err = false;
* @param object $objQuery
SC_Utils_Ex::sfDispException($csv . ' のファイルオープンに失敗しました。');
if (count($data) <= 1 and $data[0] == "") {
// テーブルフラグがたっていない場合にはテーブル名セット
if($table_name == "dtb_pagelayout"){
// カラムフラグがたっていない場合にはカラムセット
if ($mode != "restore_config"){
for($i = 0; $i < count($data); $i++ ){
for($i = 0; $i < count($data); $i++ ) {
$arrVal[$arrCol[$i]] = $data[$i];
$err = $objQuery->insert($table_name, $arrVal);
if (PEAR::isError($err)){
SC_Utils_Ex::sfErrorHeader(">> " . $objQuery->getlastquery(false));
// dtb_pagelayoutの場合には最初のデータはpage_id = 0にする
$arrVal['page_id'] = '0';
$objQuery->update("dtb_pagelayout", $arrVal);
$arrCsvData = file($csv);
foreach($arrCsvData as $val){
$objQuery->setval($arrData[0], $arrData[1]);
$arrTableList = $objQuery->listTables();
foreach($arrTableList as $val){
if ($val != "dtb_bkup") {
$ret = $objQuery->delete($val);
if (PEAR::isError($ret)) return false;
$objQuery = & SC_Query_Ex::getSingletonInstance();
$del_file = $bkup_dir. $arrForm['list_name'] . $bkup_ext;
$delsql = "DELETE FROM dtb_bkup WHERE bkup_name = ?";
$objQuery->delete("dtb_bkup", "bkup_name = ?", array($arrForm['list_name']));
Documentation generated on Fri, 24 Feb 2012 14:01:47 +0900 by Seasoft
|