<?php
include_once '../sys/inc/start.php';
dpanel::check_access();
$doc = new document(6);
$doc -> title = 'Резервные копии';

if (!$dcms -> license)$doc -> err('Доступ к резервным копиям доступен только в PRO версии');


if (!empty($_POST['create']) && !empty($_POST['name']))
{
$name = text::input_text($_POST['name']);
$backup = new backup();

$query['backup_save']=array('name' => $name, 'zip' => file_get_contents($backup -> create()));
unset($backup);

$query['backup_list']='';
$data = $dcms -> license -> getDataMultiple($query);
$saved=(bool)$data['backup_save'];


if ($saved)
{
$backups=(array)$data['backup_list'];
$cache -> set('remote.backups.'.$_SERVER['HTTP_HOST'],$backups,600);
$doc -> msg('Резервная копия успешно сохранена');
}
else $doc -> err('Возникла ошибка при создании резервной копии');


}

if (!empty($_POST['refresh']) || false ===($backups = $cache -> get('remote.backups.'.$_SERVER['HTTP_HOST'])))
{
$query = array();
$query['backup_list']='';
$data = $dcms -> license -> getDataMultiple($query);
$backups=(array)$data['backup_list'];
$doc -> msg('Список бэкапов обновлен');
$cache -> set('remote.backups.'.$_SERVER['HTTP_HOST'],$backups,600); // кэшируем список на 10 минут
}

if (!empty($_GET['delete']))
{
$doc->ret('Список резервных копий','?'.passgen());
$doc->ret('Админка','./');
$id_delete = (int)$_GET['delete'];
$backup_delete = 0;
foreach ($backups as $key=>$value) {
	if ($value['id']==$id_delete){$backup_delete=$value;break;}
}

if (!$backup_delete)
{
$doc->err('Ошибка выбора резервной копии');
exit;
}

$doc -> title = 'Удаление "'.$backup_delete['name'].'"';

if (!empty($_POST['delete']))
{
if (!isset($_SESSION['captcha']) || !isset($_POST['chislo']) || $_SESSION['captcha']!=$_POST['chislo']){
$doc->err('Проверочное число введено неверно');
}
else
{

$query = array();
$query['backup_delete']=$backup_delete['id'];
$query['backup_list']='';
$data = $dcms -> license -> getDataMultiple($query);
$backup_deleted=(bool)$data['backup_delete'];

if ($backup_deleted)
{
$backups=(array)$data['backup_list'];
$cache -> set('remote.backups.'.$_SERVER['HTTP_HOST'],$backups,600); // кэшируем список на 10 минут
$doc->msg('Резервная копия успешно удалена');
header('Refresh: 1; url=?'.passgen().'&'.SID);
exit;
}
else
$doc->err('Ошибка при удалении резервной копии');
}
}
$smarty = new design();
$smarty->assign('method','post');
$smarty->assign('action','?delete='.$backup_delete['id'].'&amp;'.passgen());
$elements=array();
$elements[]=array('type'=>'captcha', 'br'=>1);
$elements[]=array('type'=>'text', 'value'=>'Резервная копия будет удалена без возможности восстановления', 'br'=>1);
$elements[]=array('type'=>'submit', 'br'=>0, 'info'=>array('name' =>'delete', 'value'=>'Удалить'));
$smarty->assign('el',$elements);
$smarty->display('input.form.tpl');


exit;
}


if (!empty($_GET['restore']))
{
$doc->ret('Список резервных копий','?'.passgen());
$doc->ret('Админка','./');
$id_restore = (int)$_GET['restore'];
$backup_restore = 0;
foreach ($backups as $key=>$value) {
	if ($value['id']==$id_restore){$backup_restore=$value;break;}
}

if (!$backup_restore)
{
$doc->err('Ошибка выбора резервной копии');
exit;
}

$doc -> title = 'Восстановление из "'.$backup_restore['name'].'"';


if (!empty($_POST['restore']))
{
if (!isset($_SESSION['captcha']) || !isset($_POST['chislo']) || $_SESSION['captcha']!=$_POST['chislo']){
$doc->err('Проверочное число введено неверно');
}
else
{



$query = array();
$query['backup_get']=$backup_restore['id'];
$data = $dcms -> license -> getDataMultiple($query);
$backup_get=(array)$data['backup_get'];

if (!$backup_get)$doc->err('Нет удалось получить архив');
else
{
$backup_obj = new backup();


if ($backup_obj -> restore($backup_get) )
$doc -> msg('Данные успешно восстановлены');
else $doc -> err('Не удалось восстановить архив');
}

}
}



$smarty = new design();
$smarty->assign('method','post');
$smarty->assign('action','?restore='.$backup_restore['id'].'&amp;'.passgen());
$elements=array();
$elements[]=array('type'=>'captcha', 'br'=>1);
$elements[]=array('type'=>'submit', 'br'=>0, 'info'=>array('name' =>'restore', 'value'=>'Восстановить'));
$smarty->assign('el',$elements);
$smarty->display('input.form.tpl');


exit;
}





$smarty = new design();
$smarty->assign('method','post');
$smarty->assign('action','?'.passgen());
$elements=array();
$elements[]=array('type'=>'submit', 'br'=>0, 'info'=>array('name' =>'refresh', 'value'=>'Обновить')); // кнопка
$smarty->assign('el',$elements);
$smarty->display('input.form.tpl');




$posts = array();
$pages = new pages;
$pages->posts = count($backups);
$pages->this_page();

$start = $pages->my_start();
$end = $pages->end();


for($i=$start;$i<$end && $i<$pages->posts;$i++)
{
$title = for_value($backups[$i]['name']).' ('.size_data($backups[$i]['size']).')';
$post = vremja($backups[$i]['time']).' '.($backups[$i]['auto']?'(авто)':'(вручную)');

$act = array();

$act[] = array('extract','?restore='.$backups[$i]['id']);
$act[] = array('delete','?delete='.$backups[$i]['id']);

$posts[]=array('title'=>$title,'post' => $post,'act' => $act);
}

if (!$backups)$posts[]=array('icon'=>array('size'=>'small','src'=>'/sys/images/icons/empty.png'),'title'=>'Список резервных копий пуст');

$show = new design();
$show->assign('post',$posts);
$show->display('design.listing.tpl');



$smarty = new design();
$smarty->assign('method','post');
$smarty->assign('action','?'.passgen());
$elements=array();
$elements[]=array('type'=>'input_text', 'title'=>'Название', 'br'=>1, 'info'=>array('name'=>'name', 'value'=>'Моя резервная копия'));

$elements[]=array('type'=>'text', 'value'=>'* Данные сохранятся на сервере DCMS и будут доступны только для этого домена', 'br'=>1);
if ($dcms -> license -> backup_max_size)$elements[]=array('type'=>'text', 'value'=>'* Размер каждой резервной копии ограничен: '.size_data($dcms -> license -> backup_max_size), 'br'=>1);
if ($dcms -> license -> backup_count)
{
$elements[]=array('type'=>'text', 'value'=>'* Максимальное кол-во резервных копий: '.$dcms -> license -> backup_count, 'br'=>1);
if ($dcms -> license -> backup_count >= count($backups))
$elements[]=array('type'=>'text', 'value'=>'* Будет удалена самая ранняя копия (копии, созданные автоматически, удаляются в первую очередь)', 'br'=>1);
}
$elements[]=array('type'=>'submit', 'br'=>1, 'info'=>array('name' =>'create', 'value'=>'Создать резервную копию базы и настроек')); // кнопка
$smarty->assign('el',$elements);
$smarty->display('input.form.tpl');



$doc->ret('Админка','./');
?>
