<?php
/*
	Resale is forbidden!
	Copyright © Alexander Sunvas*
	http://eleanor-cms.ru
	a@eleanor-cms.ru
	*Pseudonym
*/
defined('CMS')||die;
global$Eleanor,$title;

$file=Eleanor::$root.'addons/config_yabackup.php';
$errors=array();
$saved=false;

if($_SERVER['REQUEST_METHOD']=='POST')
{
	$config=array(
		'user'=>isset($_POST['user']) ? (string)$_POST['user'] : '',
		'password'=>isset($_POST['password']) ? (string)$_POST['password'] : '',
		'id'=>isset($_POST['id']) ? (string)$_POST['id'] : '',
		'secret'=>isset($_POST['secret']) ? (string)$_POST['secret'] : '',

		'local'=>isset($_POST['local']) ? (string)$_POST['local'] : '',
		'server'=>isset($_POST['server']) ? trim((string)$_POST['server'],'/\\') : '',
		'cnt'=>isset($_POST['cnt']) ? abs((int)$_POST['cnt']) : 0,
		'files'=>isset($_POST['files']) ? (string)$_POST['files'] : '',
		'tables'=>isset($_POST['tables']) ? (string)$_POST['tables'] : '',
	);

	$values=array(
		'run_year'=>isset($_POST['run_year']) ? (string)$_POST['run_year'] : '',
		'run_month'=>isset($_POST['run_month']) ? (string)$_POST['run_month'] : '',
		'run_day'=>isset($_POST['run_day']) ? (string)$_POST['run_day'] : '',
		'run_hour'=>isset($_POST['run_hour']) ? (string)$_POST['run_hour'] : '',
		'run_minute'=>isset($_POST['run_minute']) ? (string)$_POST['run_minute'] : '',
		'run_second'=>isset($_POST['run_second']) ? (string)$_POST['run_second'] : '',

		'runnow'=>isset($_POST['runnow']),
	);

	if(!is_writable(is_file($file) ? $file : dirname($file)))
		$errors['UNWRITEABLE']='Невозможно сохранить конфигурационный файл';

	include Eleanor::$root.'core/others/yabackup/YaAuth.php';
	include Eleanor::$root.'core/others/yabackup/YaDisk.php';

	$Auth=new YaAuth($config);

	try
	{
		$token=$Auth->GetToken();
	}
	catch(EE$E)
	{
		$error=$E->getMessage();

		switch($error)
		{
			case'EMPTY_TOKEN':
				$errors['AUTH_ERROR']='Неправильные данные аутентификации.';
			break;
			default:
				$errors['AUTH_ERROR']=$error;
		}
	}

	$do=date_offset_get(date_create());
	$nextrun=isset($_POST['_runnow']) ? time() : Tasks::CalcNextRun(array(
		'year'=>$values['run_year'],
		'month'=>$values['run_month'],
		'day'=>$values['run_day'],
		'hour'=>$values['run_hour'],
		'minute'=>$values['run_minute'],
		'second'=>$values['run_second'],
	),$do);

	if($nextrun===false and !$runnow)
		$errors['NO_NEXT_RUN']='При таких параметрах запуска бэкап не создастся.';

	if($errors)
		$config+=$values;
	else
	{
		$id=false;
		$R=Eleanor::$Db->Query('SELECT `id` FROM `'.P.'tasks` WHERE `name`=\'yabackup\'');
		while($a=$R->fetch_assoc())
		{
			if($id)
				Eleanor::$Db->Delete(P.'tasks','`id`='.$id.' LIMIT 1');
			else
				$id=$a['id'];
		}

		$values+=array(
			'task'=>'special_yabackup.php',
			'title_l'=>serialize(array(''=>'Yandex Disk Backup')),
			'name'=>'yabackup',
			'ondone'=>'deactivate',
			'status'=>1,
			'do'=>$do,
			'!nextrun'=>$values['runnow'] ? 'NOW()' : 'FROM_UNIXTIME('.(int)$nextrun.')',
		);

		if($values['runnow'])
			$values+=array(
				'data'=>'',
				'free'=>1,
				'locked'=>0
			);

		unset($values['runnow']);

		if($id)
			Eleanor::$Db->Update(P.'tasks',$values,'`id`='.$id.' LIMIT 1');
		else
			Eleanor::$Db->Insert(P.'tasks',$values);

		file_put_contents($file,'<?php return '.var_export($config,true).';');
		Tasks::UpdateNextRun();

		$saved=true;
		$config+=$values;
	}
}
else
{
	$config=is_file($file) ? include$file : array();

	$R=Eleanor::$Db->Query('SELECT `run_year`, `run_month`, `run_day`, `run_hour`, `run_minute`, `run_second` FROM `'.P.'tasks` WHERE `name`=\'yabackup\' LIMIT 1');

	if($R->num_rows>0)
		$config+=$R->fetch_assoc();
}

$config+=array(
	'user'=>'',
	'password'=>'',
	'id'=>'',
	'secret'=>'',

	'local'=>'addons/backup/yabackup/',
	'server'=>'backups',
	'cnt'=>0,
	'files'=>'uploads, templates',
	'tables'=>'',

	'run_year'=>'*',
	'run_month'=>'*',
	'run_day'=>'*',
	'run_hour'=>0,
	'run_minute'=>0,
	'run_second'=>0,
	'runnow'=>false,
);

$title[]='Backup for Yandex Disk';

#Template
$lang=array(
	'runyear'=>'Годы',
	'runyear_'=>'Укажите годы, в которые необходимо запускать генерацию sitemap-а. Укажите * для запуска каждый год. Например: '.date('Y').','.date('Y',strtotime('+1year')),
	'runmonth'=>'Месяцы',
	'runmonth_'=>'Укажите месяцы, в которые необходимо запускать генерацию sitemap-а. Укажите * для запуска каждый месяц. Например: '.date('m').','.date('m',strtotime('+1month')),
	'runday'=>'Дни',
	'runday_'=>'Укажите дни месяца, в которые необходимо запускать генерацию sitemap-а. Укажите * для запуска каждый день. Например: '.date('d').','.date('d',strtotime('+7day')),
	'runhour'=>'Часы',
	'runhour_'=>'Укажите часы, в которые необходимо запускать генерацию sitemap-а. Укажите * для запуска каждый час. Например: '.date('H').','.date('H',strtotime('+2hour')),
	'runminute'=>'Минуты',
	'runminute_'=>'Укажите минуты, в которые необходимо запускать генерацию sitemap-а. Укажите * для запуска каждую минуту. Например: '.date('i').','.date('i',strtotime('+1min')),
	'runsecond'=>'Секунды',
	'runsecond_'=>'Укажите секунды, в которые необходимо запускать генерацию sitemap-а. Укажите * для запуска каждую секунду. Например: 14,12',
);

$ti=0;
$Lst=Eleanor::LoadListTemplate('table-form')->form()->begin()
	->head('Аутентификация')
	->item('Логин на Яндексе',Eleanor::Input('user',$config['user'],array('tabindex'=>++$ti)))
	->item('Пароль на Яндексе',Eleanor::Input('password',$config['password'],array('type'=>'password','tabindex'=>++$ti)))
	->item(array('ID приложения',Eleanor::Input('id',$config['id'],array('tabindex'=>++$ti)),'descr'=>'Получать ID и пароль нужно <a href="http://api.yandex.ru/oauth/doc/dg/tasks/register-client.xml" target="_blank">здесь</a>. Не забудьте поставить галочку "Доступ к Яндекс.диску для приложений"'))
	->item('Пароль приложения',Eleanor::Input('secret',$config['secret'],array('tabindex'=>++$ti)))

	->head('Настройка')
	->item(array('Локальная папка создания бэкапов',Eleanor::Input('local',$config['local'],array('tabindex'=>++$ti)),'descr'=>'В этом каталоге будут создаваться бэкапы до отправки их на сервера Яндекса'))
	->item('Папка на Яндекс.Диске для бэкапа',Eleanor::Input('server',$config['server'],array('tabindex'=>++$ti)))
	->item(array('Количество хранимых бэкапов',Eleanor::Input('cnt',$config['cnt'],array('tabindex'=>++$ti,'min'=>0,'type'=>'number')),'desct'=>'0 - не ограничено'))
	->item(array('Бэкап файлов',Eleanor::Input('files',$config['files'],array('tabindex'=>++$ti)),'descr'=>'Укажите каталоги (через запятую), которые необходимо бэкапить. Если не указывать ничего - будет забэкапен весь корень сайта.'))
	->item(array('Бэкап таблиц',Eleanor::Input('tables',$config['tables'],array('tabindex'=>++$ti)),'descr'=>'Укажите через запятую таблицы БД сайта, которые необходимо забэкапить Если не указывать ничего - будет забэкапена вся база сайта.'))

	->head('Расписание')
	->item(array($lang['runyear'],Eleanor::Input('run_year',$config['run_year']),'tip'=>$lang['runyear_']))
	->item(array($lang['runmonth'],Eleanor::Input('run_month',$config['run_month']),'tip'=>$lang['runmonth_']))
	->item(array($lang['runday'],Eleanor::Input('run_day',$config['run_day']),'tip'=>$lang['runday_']))
	->item(array($lang['runhour'],Eleanor::Input('run_hour',$config['run_hour']),'tip'=>$lang['runhour_']))
	->item(array($lang['runminute'],Eleanor::Input('run_minute',$config['run_minute']),'tip'=>$lang['runminute_']))
	->item(array($lang['runsecond'],Eleanor::Input('run_second',$config['run_second']),'tip'=>$lang['runsecond_']))
	->item('Запустить сейчас',Eleanor::Check('runnow',$config['runnow'],array('tabindex'=>++$ti)))

	->end()->submitline(Eleanor::Button('Сохранить'));

$s=Eleanor::$Template->Cover(($saved ? Eleanor::$Template->Message('Успешно сохранено','info',10) : '').$Lst->endform(),$errors);
#[E] Template

Start();
echo$s;