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-2010 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_PATH . "pages/LC_Page.php");
require_once(DATA_PATH. "module/Tar.php");
* @author LOCKON CO.,LTD.
* @version $Id: LC_Page_Admin_System_Bkup.php 18735 2010-06-22 08:53:31Z nanasess $
$this->tpl_subnavi = 'system/subnavi.tpl';
$this->tpl_subno = 'bkup';
$this->tpl_subtitle = 'バックアップ管理';
$this->bkup_dir = DATA_PATH . "downloads/backup/";
SC_Utils_Ex::sfIsSuccess($objSess);
if (!isset ($_POST['mode'])) $_POST['mode'] = "";
if (count($arrErr) <= 0) {
if (count($arrErr) <= 0) {
if ($_POST['mode'] == 'restore_config') {
$this->mode = "restore_config";
$del_file = $this->bkup_dir. $_POST['list_name'] . ".tar.gz";
$delsql = "DELETE FROM dtb_bkup WHERE bkup_name = ?";
$objQuery->query($delsql, array($_POST['list_name']));
$filename = $_POST['list_name'] . ".tar.gz";
$dl_file = $this->bkup_dir. $_POST['list_name'] . ".tar.gz";
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 : "";
$this->arrForm = isset ($arrForm) ? $arrForm : "";
$this->arrBkupList = $arrBkupList;
$objView->assignobj($this); //変数をテンプレートにアサインする
$objView->display(MAIN_FRAME); //テンプレートの出力
* K : 「半角(ハンカク)片仮名」を「全角片仮名」に変換
* C : 「全角ひら仮名」を「全角かた仮名」に変換
* V : 濁点付きの文字を一文字に変換。"K","H"と共に使用します
* n : 「全角」数字を「半角(ハンカク)」に変換
$arrConvList['bkup_name'] = "a";
$arrConvList['bkup_memo'] = "KVa";
foreach ($arrConvList as $key => $val) {
if(isset ($array[$key])) {
$array[$key] = mb_convert_kana($array[$key] ,$val);
$objErr->doFunc(array("バックアップ名", "bkup_name", STEXT_LEN), array("EXIST_CHECK","MAX_LENGTH_CHECK","NO_SPTAB","ALNUM_CHECK"));
$objErr->doFunc(array("バックアップメモ", "bkup_memo", MTEXT_LEN), array("MAX_LENGTH_CHECK"));
$ret = $this->lfGetBkupData("WHERE bkup_name = ?", array($array['bkup_name']));
$objErr->arrErr['bkup_name'] = "バックアップ名が重複しています。別名を入力してください。";
$bkup_dir = $this->bkup_dir;
$bkup_dir = $bkup_dir . $bkup_name . "/";
foreach($arrTableList as $key => $val){
if (!($val == "dtb_bkup" || $val == "mtb_zip")) {
if ($val == "dtb_pagelayout"){
$arrData = $objQuery->getAll("SELECT * FROM $val ORDER BY page_id");
$arrData = $objQuery->getAll("SELECT * FROM $val");
if (count($arrData) > 0) {
$arrKyes = SC_Utils_Ex::sfGetCommaList(array_keys($arrData[0]), false);
foreach($arrData as $data_key => $data_val){
$csv_data .= $val . "\r\n";
$csv_data .= $arrKyes . "\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");
$err = fwrite($fp, $csv_data);
$fp = fopen($csv_autoinc_file,"w");
$err = fwrite($fp, $csv_autoinc);
$image_dir = $bkup_dir . "save_image/";
if (!is_dir(dirname($image_dir))) $err = mkdir(dirname($image_dir));
$copy_mess = SC_Utils_Ex::sfCopyDir("../../upload/save_image/",$image_dir, $copy_mess);
$templates_dir = $bkup_dir . "templates/";
if (!is_dir(dirname($templates_dir))) $err = mkdir(dirname($templates_dir));
$copy_mess = SC_Utils_Ex::sfCopyDir("../../user_data/templates/",$templates_dir, $copy_mess);
$inc_dir = $bkup_dir . "include/";
if (!is_dir(dirname($inc_dir))) $err = mkdir(dirname($inc_dir));
$copy_mess = SC_Utils_Ex::sfCopyDir("../../user_data/include/",$inc_dir, $copy_mess);
$css_dir = $bkup_dir . "css/";
if (!is_dir(dirname($css_dir))) $err = mkdir(dirname($css_dir));
$copy_mess = SC_Utils_Ex::sfCopyDir("../../user_data/css/",$css_dir, $copy_mess);
$tar = new Archive_Tar($this->bkup_dir . $bkup_name. ".tar.gz", 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();
/* 配列の要素をCSVフォーマットで出力する。*/
foreach($array as $key => $val) {
$val = mb_convert_encoding($val, CHAR_CODE, CHAR_CODE);
$line .= "\"". $val. "\",";
$sql = "SELECT tablename FROM pg_tables WHERE tableowner = ? ORDER BY tablename ; ";
$arrRet = $objQuery->getAll($sql, array(DB_USER));
$arrRet = SC_Utils_Ex::sfSwapArray($arrRet);
$arrRet = $arrRet['tablename'];
}else if(DB_TYPE == "mysql"){
$arrRet = $objQuery->getAll($sql);
$arrRet = SC_Utils_Ex::sfSwapArray($arrRet);
$arrRet = $arrRet[$arrKey[0]];
$arrColList = $this->lfGetColumnList($table_name);
}else if(DB_TYPE == "mysql"){
foreach($arrColList['col_def'] as $key => $val){
if (substr($val,0,9) == $match) {
$col = $arrColList['col_name'][$key];
$ret .= "$table_name,$col,$autoVal\n";
a.attname, t.typname, a.attnotnull, d.adsrc as defval, a.atttypmod, a.attnum as fldnum, e.description
pg_attribute a left join pg_attrdef d on (a.attrelid=d.adrelid and a.attnum=d.adnum)
left join pg_description e on (a.attrelid=e.objoid and a.attnum=e.objsubid)
WHERE (c.relname=?) AND (c.oid=a.attrelid) AND (a.atttypid=t.oid) AND a.attnum > 0
$arrColList = $objQuery->getAll($sql, array($table_name));
$arrColList = SC_Utils_Ex::sfSwapArray($arrColList);
$arrRet['col_def'] = $arrColList['defval'];
$arrRet['col_name'] = $arrColList['attname'];
}else if(DB_TYPE == "mysql"){
$sql = "SHOW COLUMNS FROM $table_name";
$arrColList = $objQuery->getAll($sql);
$arrColList = SC_Utils_Ex::sfSwapArray($arrColList);
$arrRet['col_def'] = $arrColList['Extra'];
$arrRet['col_name'] = $arrColList['Field'];
$ret = $objQuery->nextval($table_name, $colname) - 1;
}else if(DB_TYPE == "mysql"){
$sql = "SHOW TABLE STATUS LIKE ?";
$arrData = $objQuery->getAll($sql, array($table_name));
$ret = $arrData[0]['Auto_increment'];
$sql = "INSERT INTO dtb_bkup (bkup_name,bkup_memo,create_date) values (?,?,now())";
$objQuery->query($sql, array($data['bkup_name'],$data['bkup_memo']));
$sql = "SELECT bkup_name, bkup_memo, create_date FROM dtb_bkup ";
if ($where != "") $sql .= $where;
$ret = $objQuery->getAll($sql,$data);
$bkup_dir = $this->bkup_dir . $bkup_name . "/";
$tar = new Archive_Tar($bkup_name . ".tar.gz", TRUE);
$err = $tar->extract("./");
if ($err) $err = $this->lfExeInsertSQL($objQuery, $bkup_dir . "bkup_data.csv");
if ($err) $this->lfSetAutoInc($objQuery, $bkup_dir . "autoinc_data.csv");
$image_dir = $bkup_dir . "save_image/";
$copy_mess = SC_Utils_Ex::sfCopyDir($image_dir, "../../upload/save_image/", $copy_mess, true);
$tmp_dir = $bkup_dir . "templates/";
$copy_mess = SC_Utils_Ex::sfCopyDir($tmp_dir, "../../user_data/templates/", $copy_mess, true);
$inc_dir = $bkup_dir . "include/";
$copy_mess = SC_Utils_Ex::sfCopyDir($inc_dir, "../../user_data/include/", $copy_mess, true);
$css_dir = $bkup_dir . "css/";
$copy_mess = SC_Utils_Ex::sfCopyDir($css_dir, "../../user_data/css/", $copy_mess, true);
SC_Utils_Ex::sfDelFile($bkup_dir);
// リストア成功ならコミット失敗ならロールバック
$this->restore_msg = "リストア終了しました。";
$this->restore_err = true;
$this->restore_msg = "リストアに失敗しました。";
$this->restore_name = $bkup_name;
$this->restore_err = false;
if (count($data) <= 1 and $data[0] == "") {
// テーブルフラグがたっていない場合にはテーブル名セット
$base_sql = "INSERT INTO $data[0] ";
if($data[0] == "dtb_pagelayout"){
// カラムフラグがたっていない場合にはカラムセット
if ($mode != "restore_config"){
$base_sql .= " ( $data[0] ";
for($i = 1; $i < count($data); $i++ ){
$base_sql .= "," . $data[$i];
$sql = $base_sql . "VALUES ( ? ";
for($i = 1; $i < count($data); $i++ ){
$err = $objQuery->query($sql, $data);
if ($err->message != ""){
SC_Utils_Ex::sfErrorHeader(">> " . $objQuery->getlastquery(false));
// dtb_pagelayoutの場合には最初のデータはpage_id = 0にする
$sql = "UPDATE dtb_pagelayout SET page_id = '0'";
$arrCsvData = file($csv);
foreach($arrCsvData as $key => $val){
if ($arrData[2] == 0) $arrData[2] = 1;
$objQuery->setval($arrData[0], $arrData[1], $arrData[2]);
foreach($arrTableList as $key => $val){
if ($val != "dtb_bkup") {
$trun_sql = "DELETE FROM $val;";
$ret = $objQuery->query($trun_sql);
if(!in_array("dtb_bkup", $arrTableList)){
$objQuery->query($cre_sql);
Documentation generated on Fri, 24 Feb 2012 13:59:09 +0900 by Seasoft
|