Simpla 2: бекап базы
Открываем наш шаблон бекапов simpla/design/html/backup.tpl и вместо кнопки "Создать бекап" вставляем код
<a class="add" href="">Создать полный бекап</a> <a class="fast_add" href="">Создать бекап базы</a>
Далее в этом же коде добавим яваскрипт-обработчик кнопка. Перед кодом
// Создать бекап
добавим код
// Создать быстрый бекап $("a.fast_add").click(function() { $('form#hidden input[name="action"]').val('fast_create'); $('form#hidden').submit(); return false; });
С шаблоном пока все.
Теперь откроем сам скрипт simpla/BackupAdmin.php и вставим в него обработчик для создания "быстрого бекапа". Перед строкой
case 'restore':
добавим наш код
case 'fast_create': { $filename = $dir.'simpla_sql_'.date("Y_m_d_G_i_s").'.zip'; ##Дамп базы $this->db->dump($dir.'simpla.sql'); chmod($dir.'simpla.sql', 0777); ### Архивируем $zip = new PclZip($filename); $v_list = $zip->create(array($dir.'simpla.sql'), PCLZIP_OPT_REMOVE_PATH, $dir, PCLZIP_CB_PRE_ADD, "myCallBack"); if ($v_list == 0) { trigger_error('Не могу заархивировать '.$zip->errorInfo(true)); } $this->design->assign('message_success', 'created'); break; }
Ну и для краcоты кнопки пропишем ей стили в файле simpla/design/css/main.css - вместо кода
#header .add
поставим код
#header .add, #header .fast_add
И в конце этого набора стилей добавим правый отступ
margin-right: 10px;
Теперь сделаем процедуру восстановления нашего измененного бекапа - для этого в этом же файле заменим код
case 'restore': { $name = $this->request->post('name'); $archive = $dir.$name; $zip = new PclZip($archive); $this->clean_dir('files'); if (!$zip->extract(PCLZIP_OPT_PATH, '', PCLZIP_OPT_BY_PREG, "/^files\//", PCLZIP_CB_POST_EXTRACT, 'myPostExtractCallBack')) { trigger_error('Не могу разархивировать '.$zip->errorInfo(true)); } elseif (!$zip->extract(PCLZIP_OPT_PATH, $dir, PCLZIP_OPT_BY_NAME, 'simpla.sql')) { trigger_error('Не могу разархивировать '.$zip->errorInfo(true)); } elseif (!is_readable($dir.'simpla.sql')) { trigger_error('Не могу прочитать файл /temp/simpla.sql'); } else { $this->db->restore($dir.'simpla.sql'); unlink($dir.'simpla.sql'); $this->design->assign('message_success', 'restored'); } break; }
на
case 'restore': { $name = $this->request->post('name'); $archive = $dir.$name; $zip = new PclZip($archive); if (($list = $zip->listContent()) == 0) { trigger_error("Ошибка: ".$zip->errorInfo(true)); } else foreach($list as $f) if($f['filename'] == 'files/' && $f['folder'] == true) { $this->clean_dir('files'); if (!$zip->extract(PCLZIP_OPT_PATH, '', PCLZIP_OPT_BY_PREG, "/^files\//", PCLZIP_CB_POST_EXTRACT, 'myPostExtractCallBack')) { trigger_error('Не могу разархивировать '.$zip->errorInfo(true)); } break; } if (!$zip->extract(PCLZIP_OPT_PATH, $dir, PCLZIP_OPT_BY_NAME, 'simpla.sql')) { trigger_error('Не могу разархивировать '.$zip->errorInfo(true)); } elseif (!is_readable($dir.'simpla.sql')) { trigger_error('Не могу прочитать файл /temp/simpla.sql'); } else { $this->db->restore($dir.'simpla.sql'); unlink($dir.'simpla.sql'); $this->design->assign('message_success', 'restored'); } break; }
Вот и все на сегодня.
Всем хорошего дня!
Комментарии
Ваш отзыв будет первым