Simpla 2: бекап базы

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;
			    }

Вот и все на сегодня.

Всем хорошего дня!

Отзывы

Ваш отзыв будет первым
Оставьте отзыв
На него будут приходить уведомление при ответе. На сайте не публикуется

Модули из этой тематики