View file modules/lostpass.php

File size: 14.62Kb
<?
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']."\n\n";
		    		$adds ="From: SHCMS Engine <".$glob_core['from_email'].">\r\n" . 
            		$adds .= "Content-Type: text/plain; charset=\"utf-8\"\r\n";
					
                        //Если все правильно введено и текст отправлен на 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
?>