Файл: modules/lostpass.php
Строк: 193
<?
define('SHCMS_ENGINE',true);
include_once('../engine/system/core.php');
engine::auth();
$templates->template(Lang::__('Восстановление пароля')); //Название
//Если авторизован пользователь то переадресация на главную
if($id_user == true) { //$id_user - id пользователя
header("Location: ../index.php"); //Переадресация
exit; //Закрыть дальнейщее действие
}
//Функция для работы с несколькими страницами
switch($do):
default:
//Если нажата кнопка submit то выполняем действие
if(isset($_POST['submit'])) {
//Если в $_POST найден логин то переобрабатываем в обычную $login
if(isset($_POST['login'])) {
$login = $_POST['login']; // из $_POST в обычную $
}
//Проверяем введен ли логин
if(empty($login)) {
echo engine::error('<b>Обнаружены следующие ошибки:</b><br/>Вы не ввели логин'); //Ошибка
echo engine::home(array(Lang::__('Назад'),'lostpass.php')); //Переадресация
exit; //Дальше не пропускать
}
//Получаем необходимые данные из users
$lostpass = $db->get_array($db->query("SELECT * FROM `users` WHERE `nick`='" . $db->safesql($login) ."'"));
//Проверяем существует ли введенный логин
if ($lostpass['nick'] == false) {
echo engine::error('Введенный логин: не существует!'); //Ошибка
//Если введенный ник найден в базе то
}elseif($lostpass['nick'] == true) {
echo '<div style="color:green;" class="mainname">Введенный Ник найден в базе!</div>'; //Выводит текст о том что найден ник введенный
$nick = $user->users($lostpass['id'],array('nick'),true); //Получаем ник по id
//Выводит необходимые данные на страницу
echo '<div class="subpost">
<b>Ник: </b><a href="'.PROFILE.'?id='.$lostpass['id'].'">'.$nick.'</a><br/>
<b>Последний визит: </b> '.date::make_date($lostpass['lastdate']).'<br/>
<b>Email:</b> '.engine::email_block($lostpass['email']).'
</div>';
//Подтверждение о том что вы являетесь создателем профиля
echo '<div class="mainname">Пройдите инструкцию ниже указанное!</div>';
//Текст с формой
echo '<div class="mainpost">';
//Форма
$form = new form('?do=my_profile&id='.$lostpass['id'].'');
$form->text('<div class="subpost">Подтвержению что создателем профиля <a href="'.PROFILE.'?id='.$lostpass['id'].'"><b>'.$nick.'</b></a> являюсь я!</div><div class="submit">');
$form->submit('Подтвержение','submit'); //Подтверждение
$form->text('или <a class="cancel" href="?do=cancel">Отмена</a>'); //При отмене
$form->text('</div>');
$form->display();
echo '</div>';
}
//Если не нажата кнопка submit
}else {
//Описание
echo '<div style="color:red;" class="mainname">Восстановление пароля</div>';
echo '<div class="mainpost">';
echo 'При помощи данной формы вы можете сбросить ваш текущий пароль. Введите ваш логин и e-mail адрес в соответствующие поля формы. Данные не чувствительны к регистру букв.
После отправки формы, вы получите письмо с просьбой о подтверждении запроса, а так же ссылкой на дальнейшие инструкции.';
echo '</div>';
//Восстановление пароля
echo '<div class="mainname">Восстановление пароля</div>';
echo '<div class="mainpost">';
//Форма
$form = new form('?');
$form->input(Lang::__('Введите ваш Логин'),'login','text');
$form->text('<div class="submit">');
$form->submit(Lang::__('Отправить'),'submit'); //Отправляем данные
$form->text('</div>');
$form->display();
echo'</div>';
}
echo '</div>';
break;
//Отправка данных на Email по выбору
case 'my_profile':
$id = (int) $_GET['id']; //Проверяем есть ли в $id номерованные числа
//Получаем данные из базы users
$profile = $db->get_array($db->query("SELECT * FROM `users` WHERE `id` = '".$id."'"));
//Передаем данные по методу Введения нового пароля вручную
if($glob_core['method_pass'] == 1) {
//Если существует Email
if($profile['email'] == true) {
//Если все правильно введено и текст отправлен на Email
$mail = new mail($glob_core['from_email']); //Email Сайта
$mail->setFromName($glob_core['name_site']); // Устанавливаем имя в обратном адресе
if($glob_core['html_email'] == 1) {
$email = $mail->send_html($profile['email'], "Восстановление пароля", "Чтобы восстановить ваш пароль перейдите по ссылке: <hr/>http://$_SERVER[HTTP_HOST]/modules/lostpass.php?do=change&id=" .$id. "&code=" . session_id() . "");
}elseif($glob_core['html_email'] == 2) {
$email = $mail->send($profile['email'], "Восстановление пароля", "Чтобы восстановить ваш пароль перейдите по ссылке: <hr/>http://$_SERVER[HTTP_HOST]/modules/lostpass.php?do=change&id=" .$id. "&code=" . session_id() . "");}
if($email){
//Обновляем данные и создаем сессию для ввода нового пароля к ограничению
$db->query("UPDATE `users` SET `lostpass_n` = '" . session_id() . "', `lostpass_t` = '".time()."' WHERE `id` = '" .$id."'");
//Подтверждение данных
echo '<div class="mainname">'.Lang::__('Подтверждение').'</div>';
//Текст о том что данные отправлены на почту
echo '<div class="subpost">'.Lang::__('Все данные были отправлены на ваш E-mail зайдите на вашу почту и закончите процесс.').'</div>';
echo engine::home(array(Lang::__('Назад'),'/modules/lostpass.php')); //Переадресация
}
else {
//Если же на почту ничего не отправили то выводит ошибку ниже
echo '<div class="mainname">'.Lang::__('Ошибка').'</div>';//Заголовок ошибки
echo '<div class="subpost">'.Lang::__('Возникла ошибка при восстановление пароля, пожалуйста повторите попытку!').'</div>'; //Описание
echo engine::home(array(Lang::__('Назад'),'/modules/lostpass.php')); //Переадресация
}
}
// 2 метов получения нового пароля по генерации автоматически
}elseif($glob_core['method_pass'] == 2) {
//Получаем один сгенерированный пароль
$generate = $db->get_array($db->query("SELECT * FROM `users` WHERE `id` = '".$id."'"));
//Если введена email
if($profile['email'] == true) {
//Обновляем базу и добавляем один генерированный пароль
$db->query("UPDATE `users` SET `generate` = '".engine::generate(6)."' WHERE `id` = '".$id."'");
//Заголовок
$subject = Lang::__('Восстановление пароля');
//Описание
$mail .= Lang::__("Вы успешно сменили пароль.")."
Ваш новый пароль: ".$generate['generate']."nn";
$adds ="From: SHCMS Engine <".$glob_core['from_email'].">rn" .
$adds .= "Content-Type: text/plain; charset="utf-8"rn";
//Если все правильно введено и текст отправлен на Email
if (mail($profile['email'], $subject, $mail, $adds)) {
//Если все правильно то обновляем пароль и удалем старый временно-сгенерированный пароль
$password = $db->query("UPDATE `users` SET `generate` = '',`lostpass_n` = '', `password` = '" . md5(md5($generate['generate'])) . "' WHERE `id` = '".$id."'");
//Уведомление
if($password == true) {
echo engine::success(Lang::__('Пароль успешно изменен'),Lang::__('Новый пароль отправлен вам на эл. ящик')); //Текст при успешно смене
echo engine::home(array(Lang::__('Назад'),'/modules/lostpass.php')); //Переадресация
exit;
}else {
echo engine::error(Lang::__('Ошибка при смене пароля')); //Если ошибки
echo engine::home(array(Lang::__('Назад'),'/modules/lostpass.php')); //Переадресация
}
}
else {
//Если не отправлены данные то выводит ошибку
echo '<div class="mainname">'.Lang::__('Ошибка').'</div>'; //Заголовок
echo '<div class="subpost">'.Lang::__('Возникла ошибка при восстановление пароля, пожалуйста повторите попытку!').'</div>'; //Текст
echo engine::home(array(Lang::__('Назад'),'/modules/lostpass.php')); //Переадресация
}
} //End
} //End
//Exit Страницу
break;
//Если вы выбрали метод смена пароля вручную то переадрисуюет по почте сюда
case 'change':
$id = (int) $_GET['id']; //Проверяем есть ли в $id номерованные числа
//Из _POST в обычную $
if(isset($_GET['code'])) {
$code = $_GET['code'];
}
//Текст при смене
echo '<div class="mainname">'.Lang::__('Смена пароля').'</div>';
echo '<div class="mainpost">';
//Получаем данные базы users
$new = $db->get_array($db->query("SELECT * FROM `users` WHERE `id` = '".$id."'"));
//Если предаствленная вами сессия окончена то выводит ошибку
if ($new['lostpass_t'] < (time()-3600)) {
echo engine::error(Lang::__('Время восстановления пароля исчерпано'));
$db->query("UPDATE `users` SET `lostpass_n` = '', `lostpass_t` = '' WHERE `id` = '".$id."'");
echo engine::home(array(Lang::__('Назад'),'/modules/lostpass.php')); //Переадресация
exit;
}
//Если сгенерированный код не получен
if($new['lostpass_n'] != $code) {
echo engine::error(Lang::__('Смена пароля невозможно'));
echo engine::home(array(Lang::__('Назад'),'/modules/lostpass.php')); //Переадресация
exit;
}
//Если нажата кнопка
if(isset($_POST['submit'])) {
//Из _POST в обычную $
if(isset($_POST['password1'])) {
$password1 = $_POST['password1'];
}
//Из _POST в обычную $
if(isset($_POST['password2'])) {
$password2 = $_POST['password2'];
}
//Если не совпадают пароли
if($password1 != $password2) {
echo engine::error(Lang::__('Введенные пароли не совпадают'));
echo engine::home(array(Lang::__('Назад'),'/modules/lostpass.php?do=change&id='.$id.'&code='.$code.'')); //Переадресация
exit;
}
//Если не введен пароль
if(empty($password1)) {
echo engine::error(Lang::__('Не введен пароль'));
echo engine::home(array(Lang::__('Назад'),'/modules/lostpass.php?do=change&id='.$id.'&code='.$code.'')); //Переадресация
exit;
}
//Если ввденные пароли превышают ограничение по введению то выведит ошибку
if(mb_strlen($password1) < 2 || mb_strlen($password1) > 30) {
echo engine::error(Lang::__('Недопустимая длина пароля')); //Текст
echo engine::home(array(Lang::__('Назад'),'/modules/lostpass.php?do=change&id='.$id.'&code='.$code.'')); //Переадресация
exit;
}
//Если все правильно то обновляем старный пароль и удалем сессию
$password = $db->query("UPDATE `users` SET `lostpass_n` = '', `password` = '" .engine::shgen($password1). "' WHERE `id` = '".$id."'");
//Если все правильно
if($password == true) {
echo engine::success(Lang::__('Пароль успешно изменен')); //Текст
echo engine::home(array(Lang::__('Назад'),'/modules/lostpass.php')); //Переадресация
exit;
}else {
//При ошибке
echo engine::error(Lang::__('Ошибка при смене пароля')); //Текст
echo engine::home(array(Lang::__('Назад'),'/modules/lostpass.php?do=change&id='.$id.'&code='.$code.'')); //Переадресация
}
}
//Форма обновления пароля
$form = new form('?do=change&id='.$id.'&code='.$code.'');
$form->input(Lang::__('Новый пароль:'),'password1','text');
$form->input(Lang::__('Подтверждение:'),'password2','text');
$form->submit(Lang::__('Отправить','submit'));
$form->display();
echo '</div>';
break; //exit
endswitch; //exit module lostpass
?>