<?
if ($level > 0) {
  header('Location: ?func=user.main');
  exit;
}

$email = null;
$whats = array('1' => 'Любимое животное', '2' => 'Имя школьной учительницы', '3' => 'Девичья фамилия матери', '4' => 'Любимый город', '5' => 'Любимое блюдо');

if (isset($_GET['code'])) {
  $key = $sql->esc($_GET['code']);
  
  if ($sql -> selectCount("SELECT COUNT(*) FROM `users` WHERE `token` = '$key'") == 1) {
  	$user_recovery = $sql -> fetch("SELECT * FROM `users` WHERE `token` = '$key' LIMIT 1");
    $codeget = md5(date("d:m:Y") . $user_recovery['email'] . $user_recovery['password'] . $user_recovery['login']);
    
    if ($codeget != $user_recovery['token']) {
      $sql -> update("UPDATE `users` SET `token` = '0' WHERE `id` = '$user_recovery[id]' LIMIT 1");
      $err[] = 'К сожалению данная ссылка устарела';
    }
    
    if (!isset($err)) {
      $_SESSION['token'] = $codeget;
    }
  } else {
    $err[] = 'Неверная ссылка для восстановления доступа';
  }
}

if (isset($_SESSION['token'])) {
  
  function generatePassword($length=10, $complex=3)
{

$min = "abcdefghijklmnopqrstuvwxyz";
$num = "0123456789";
$maj = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$symb = "!@#$%&*()_-=+?";
$chars = $min;
if ($complex >= 2) { $chars .= $num; }
if ($complex >= 3) { $chars .= $maj; }
if ($complex >= 4) { $chars .= $symb; }
$password = substr( str_shuffle( $chars ), 0, $length );
return $password;

/*
    $return = $chars = null;

    if(strstr($type, 'a-z'))
        $chars .= 'abcdefghijklmnopqrstuvwxyz';
    if(strstr($type, 'A-Z'))
        $chars .= 'ABCDEFGHIJKLMNOPRQSTUVWXYZ';
    if(strstr($type, '0-9'))
        $chars .= '0123456789';

    for($i = 0, $sl = strlen($chars) - 1; $i < $length; $i++)
        $return .= $chars[rand(0,$sl)];

    return $return;
*/
}		
$newpassword = generatePassword(10) ;
  
  /*
	$newpassword = $sql->esc($_POST['pass1']);
	
	if ($_POST['pass1'] && !preg_match("#^([A-z0-9])+$#ui", $_POST['pass1'])) {
		$err[] = 'Пароль должен содержать только английские буквы и цифры';
	}
	
	if ($_POST['pass1'] != $_POST['pass2']) {
		$err[] = 'Пароли не совпадают';
	}
	
	if (strlen2($_POST['pass1']) > 20) {
		$err[] = 'Пароль слишком длинный';
	} elseif (strlen2($_POST['pass1']) < 6) {
		$err[] = 'Пароль слишком короткий';
	} 
  */
  if ($sql -> selectCount("SELECT COUNT(*) FROM `users` WHERE `token` = '$_SESSION[token]'") == 1) {
  	$login = $sql -> fetch("SELECT * FROM `users` WHERE `token` = '$_SESSION[token]' LIMIT 1");
  } else {
    $err[] = 'Сессия для восстановления доступа устарела';
  }
  
	if (!isset($err) && isset($login['id'])) {
		$sql -> update("UPDATE `users` SET `password` = '" . md5($newpassword) . "', `token` = '0' WHERE `id` = '$login[id]' LIMIT 1");
    
		if (function_exists('mail')) {


		// в этом массиве то, что попадет в наш HTML шаблон письма
    $array = array('hello' => 'Здравствуйте ' . $login['login'], // {hello} . Приветствие  
	'message' => 'Вы успешно восстановили доступ от Вашего аккаунта на сайте 
	<b>http://' . $_SERVER['HTTP_HOST'] . '</b>.<br />
			Ваш логин: ' . $login['login'] . ' [ID ' . $login['id'] . ']<br />
			Ваш пароль: <b>'.$newpassword.'</b>
			', // обязательно текст письма, но само завизит от того что в шаблоне указано. у меня {message}
	'linkbutton' => 'http://' . $_SERVER['HTTP_HOST'] . '/?func=user.auth', // у меня в шаблоне кнопка, это ссылка в ней {linkbutton}
	'textbutton' => 'Авторизация' // а это название моей кнопки {textbutton}
    );

        $Subject = 'Доступ восстановлен';  // обязательно заголовок письма
        $addAdress = $login['email']; // сверх важно!! кому письмо
        $template = 'default'; // название шаблона и папки в которой он лежит. Если у вас свой шаблон, напишите название воего 


        // пробуем выслать наше письмо
        $OutMailer = Mailer($array, $Subject, $addAdress, $template);

        if ($OutMailer === false)
        {

        }
else  echo $OutMailer; // если есть ошибки, их покажет
}

	  $sql -> insert("INSERT INTO `users_log` (`ua`, `ip`, `time`, `type`, `id_user`) VALUES ('" . $sql->esc($ua) . "', '" . $sql->esc($iplong) . "', '$time', 'recovery', '$login[id]')");

		//$sql -> insert("INSERT INTO `users_log` (`ua`, `ip`, `time`, `type`, `id_user`) VALUES ('" . $sql->esc($ua) . "', '" . $sql->esc($ip) . "', '$time', 'recovery', '$login[id]')");
		$_SESSION['id_user'] = $login['id'];
		setcookie('id_user', $login['id'], time() + 60 * 60 * 24 * 365);
		setcookie('pass', cookie_encrypt($newpassword, $login['id']), time() + 60 * 60 * 24 * 365);
	}
}

if (isset($_POST['email']) && isset($_POST['captcha'])) {
  
  $email = $sql->esc($_POST['email']);
  
  $captcha = (int) $_POST['captcha'];
  if ($captcha != $_SESSION['captcha']) {
    $err[] = 'Неверный код с картинки';
  }
  
  if (!isset($err)) {
  	if ($sql -> selectCount("SELECT COUNT(*) FROM `users` WHERE `email` = '$email'") == 0) {
  		$err[] = 'Пользователя с таким Email не cуществует';
  	} else {
      $_SESSION['recovery_step'] = '2';
      $tmp_user =  $sql -> fetch("SELECT * FROM `users` WHERE `email` = '$email' LIMIT 1");
    }
  }
	
  if (isset($_POST['keyword'])) {
    $keyword = $sql->esc($_POST['keyword']);
  
    if (!isset($err)) {
    	if ($sql -> selectCount("SELECT COUNT(*) FROM `users` WHERE `email` = '$email' AND `keyword` = '$keyword'") == 0) {
    		$err[] = 'Неверное секретное слово';
    	} else {
        $_SESSION['recovery_step'] = '3';
        $tmp_user =  $sql -> fetch("SELECT * FROM `users` WHERE `email` = '$email' AND `keyword` = '$keyword' LIMIT 1");
        
    		if (function_exists('mail')) {
          $code = md5(date("d:m:Y") . $tmp_user['email'] . $tmp_user['password'] . $tmp_user['login']);
          $sql -> update("UPDATE `users` SET `token` = '$code' WHERE `id` = '$tmp_user[id]' LIMIT 1");
          
		    // в этом массиве то, что попадет в наш HTML шаблон письма
        $array = array('hello' => 'Здравствуйте Уважаемый, пользователь ' . $tmp_user['login'], // {hello} . Приветствие  
	'message' => 'Вы активировали восстановление пароля<br />
    Для установки нового пароля нажмите на кнопку ниже или скопируйте в буфер ссылку и вставьте ее в адресную строку Вашего браузера:<br /> 
    http://' . $_SERVER['HTTP_HOST'] . '/?func=recovery.password&code=' . $code . ' . <br />
    Эта ссылка действительна до конца дня, поторопитесь завершить процедуру восстановления.', 
	'linkbutton' => 'http://' . $_SERVER['HTTP_HOST'] . '/?func=recovery.password&code='.$code,
	'textbutton' => 'Восстановить пароль');

        $Subject = 'Восстановление пароля';  // обязательно заголовок письма
        $addAdress = $tmp_user['email']; // сверх важно!! кому письмо
        $template = 'default'; // название шаблона и папки в которой он лежит. Если у вас свой шаблон, напишите название воего 


        // пробуем выслать наше письмо
        $OutMailer = Mailer($array, $Subject, $addAdress, $template);

        if ($OutMailer === false)
        {

        }
else  echo $OutMailer; // если есть ошибки, их покажет
}

        session_destroy();
      }
    }
  }
}

if (!isset($_SESSION['recovery_step'])) {
  $_SESSION['recovery_step'] = 1;
}

$system['title'] = 'Восстановление доступа';
require SYS . 'header.php';

if (isset($login['id'])) {
  ?>
  <div class="alert alert-success">
    <center>
      <img src="<?= ICONS?>big_ok.png" /> <b>Доступ успешно восстановлен!</b><br />
      Вы успешно восстановили пароль от нашего аккаунта, теперь Вы можете пользоваться своим аккаунтом как и прежде!<br />
	  Новый Пароль был отправлен к Вам на почту.<br />
      <a href="?func=user.main&amp;log" class="btn">Перейти в кабинет</a>
    </center>
  </div>
  <?
} elseif (isset($_SESSION['token'])) {
?>
	<div class="nav2">
	 Сессия для восстановления доступа устарела
	 </div>
<?

 /*
 ?>
  <div class="nav2">
    <form class="form-horizontal" action="?func=recovery.password" method="POST">
    
      <div class="control-group">
        <label class="control-label" for="pass1">Новый пароль</label>
        <div class="controls">
          <input type="password" id="pass1" name="pass1" placeholder="Пароль..">
        </div>
      </div>
      
      <div class="control-group">
        <label class="control-label" for="pass2">Повторите пароль</label>
        <div class="controls">
          <input type="password" id="pass2" name="pass2" placeholder="Повторите пароль..">
        </div>
      </div>
      
      <div class="control-group">
        <div class="controls">
          <button type="submit" class="btn">Изменить</button>
        </div>
      </div>
    </form>
  </div>
 <?
 */
} elseif (isset($code)) {
  ?>
  <div class="alert alert-success">
    <center>
      <img src="<?= ICONS?>big_ok.png" /> <b>Успешное завершение операции!</b><br />
      Ссылка для восстановления пароля выслана вам на E-mail, который указан в вашем аккаунте.<br />
      Если письмо не пришло на основной адрес - проверьте свои другие адреса.<br />
      <a href="/?func=user.auth" class="btn">Перейти к авторизации</a>
    </center>
  </div>
  <?
} else {
?>
<div class="nav2">
  <form class="form-horizontal" action="?func=recovery.password" method="POST">
    <div class="control-group">
      <label class="control-label" for="email">Укажите свой Email</label>
      <div class="controls">
        <input type="text" id="email" name="email" placeholder="Email адрес.." value="<?= text($email)?>">
      </div>
    </div>
    
    <? if (isset($tmp_user['id']) && $_SESSION['recovery_step'] == 2) { ?>
    <div class="control-group">
      <label class="control-label" for="keyword"><b>Вопрос:</b></label>
      <div class="controls">
        <?= $whats[$tmp_user['what_word']]?>
      </div>
    </div>
    
    <div class="control-group">
      <label class="control-label" for="keyword">Ответ</label>
      <div class="controls">
        <input type="keyword" id="keyword" name="keyword" placeholder="Ответ на вопрос..">
      </div>
    </div>
    <? } ?>
    
    <div class="control-group">
      <label class="control-label" for="captcha">Код с картинки</label>
      <div class="controls">
       <img src="/_src/captcha.php?sid=<?= mt_rand(10000, 99999); ?>" id="captcha" class="captcha" /> <input type="text" id="captcha" class="captcha" name="captcha" placeholder="Введите код с картинки..">
      </div>
    </div>
    
    <div class="control-group">
      <div class="controls">
        <button type="submit" class="btn">Продолжить</button>
      </div>
    </div>
  </form>
</div>
<?  
} 
?>
<div class="foot">
&laquo; <a href="?func=user.auth">Авторизация</a>
</div>