View file pages/account.php

File size: 27.33Kb
<?php
#-----------------------------------------------------#
#          ********* ROTORCMS *********               #
#              Made by  :  VANTUZ                     #
#               E-mail  :  [email protected]         #
#                 Site  :  http://pizdec.ru           #
#             WAP-Site  :  http://visavi.net          #
#                  ICQ  :  36-44-66                   #
#  Вы не имеете право вносить изменения в код скрипта #
#        для его дальнейшего распространения          #
#-----------------------------------------------------#
require_once ('../includes/start.php');
require_once ('../includes/functions.php');
require_once ('../includes/header.php');
include_once ('../themes/header.php');

if (isset($_GET['act'])) {
	$act = check($_GET['act']);
} else {
	$act = 'index';
} 

show_title('setting.png', 'Мои данные');
$config['newtitle'] = 'Мои данные';

if (is_user()) {
	switch ($act):
	############################################################################################
	##                                    Изменение e-mail                                    ##
	############################################################################################
		case 'index':

			echo '<img src="../images/img/document.gif" alt="image" /> ';
			echo '<a href="user.php?'.SID.'">Моя анкета</a> / ';
			echo '<a href="profile.php?'.SID.'">Мой профиль</a> / ';
			echo '<b>Мои данные</b><hr />';

			echo '<b><big>Изменение E-mail</big></b><br />';
			echo '<div class="form">';
			echo '<form method="post" action="account.php?act=changemail&amp;uid='.$_SESSION['token'].'&amp;'.SID.'">';
			echo 'Е-mail:<br />';
			echo '<input name="meil" maxlength="50" value="'.$udata['users_email'].'" /><br />';
			echo 'Текущий пароль:<br />';
			echo '<input name="provpass" type="password" /><br />';
			echo '<input value="Изменить" type="submit" /></form></div><br />';

			############################################################################################
			##                                Изменение ника                                          ##
			############################################################################################
			echo '<b><big>Изменение ника</big></b><br />';

			if ($udata['users_point'] >= $config['editnickpoint']) {
				echo '<div class="form">';
				echo '<form method="post" action="account.php?act=editnick&amp;uid='.$_SESSION['token'].'&amp;'.SID.'">';
				echo 'Ваш ник:';

				if (!empty($udata['users_nickname'])) {
					echo ' (<a href="account.php?act=delnick&amp;uid='.$_SESSION['token'].'&amp;'.SID.'">Удалить</a>)';
				} 

				echo '<br />';
				echo '<input name="nickname" maxlength="20" value="'.$udata['users_nickname'].'" />';
				echo '<input value="Изменить" type="submit" /></form></div><br />';
			} else {
				show_error('Изменять ник могут пользователи у которых более '.points($config['editnickpoint']).'!');
			} 
			############################################################################################
			##                        Изменение персонального статуса                                 ##
			############################################################################################
			if (!empty($config['editstatus'])) {
				echo '<b><big>Изменение статуса</big></b><br />';

				if ($udata['users_point'] >= $config['editstatuspoint']) {
					echo '<div class="form">';
					echo '<form method="post" action="account.php?act=editstatus&amp;uid='.$_SESSION['token'].'&amp;'.SID.'">';
					echo 'Персональный статус:';

					if (!empty($udata['users_status'])) {
						echo ' (<a href="account.php?act=delstatus&amp;uid='.$_SESSION['token'].'&amp;'.SID.'">Удалить</a>)';
					} 

					echo '<br />';
					echo '<input name="status" maxlength="20" value="'.$udata['users_status'].'" />';
					echo '<input value="Изменить" type="submit" /></form>';

					if (!empty($config['editstatusmoney'])) {
						echo '<br />Стоимость: '.moneys($config['editstatusmoney']);
					} 

					echo '</div><br />';
				} else {
					show_error('Изменять статус могут пользователи у которых более '.points($config['editstatuspoint']).'!');
				} 
			} 
			############################################################################################
			##                                Восстановление пароля                                   ##
			############################################################################################
			echo '<b><big>Восстановление пароля</big></b><br />';
			echo '<div class="form">';
			echo '<form method="post" action="account.php?act=editsec&amp;uid='.$_SESSION['token'].'&amp;'.SID.'">';
			echo 'Секретный вопрос:';

			if (!empty($udata['users_secquest'])) {
				echo ' (<a href="account.php?act=delsec&amp;uid='.$_SESSION['token'].'&amp;'.SID.'">Удалить</a>)';
			} 

			echo '<br /><input name="secquest" maxlength="50" value="'.$udata['users_secquest'].'" /><br />';
			echo 'Ответ на вопрос:<br /><input name="secanswer" maxlength="30" /><br />';
			echo 'Текущий пароль:<br /><input name="provpass" maxlength="20" /><br />';
			echo '<input value="Изменить" type="submit" /></form></div><br />';
			############################################################################################
			##                                    Изменение пароля                                    ##
			############################################################################################
			echo '<b><big>Изменение пароля</big></b><br />';

			echo '<div class="form">';
			echo '<form method="post" action="account.php?act=editpass&amp;uid='.$_SESSION['token'].'&amp;'.SID.'">';
			echo 'Новый пароль:<br /><input name="newpass" maxlength="20" /><br />';
			echo 'Повторите пароль:<br /><input name="newpass2" maxlength="20" /><br />';
			echo 'Текущий пароль:<br /><input name="oldpass" maxlength="20" /><br />';
			echo '<input value="Изменить" type="submit" /></form></div><br />';
		break;

		############################################################################################
		##                                     Изменение e-mail                                   ##
		############################################################################################
		case 'changemail':
			
			$uid = check($_GET['uid']);
			$meil = strtolower(check($_POST['meil']));
			$provpass = check($_POST['provpass']);
			
			if ($uid == $_SESSION['token']) {
				if ($meil != $udata['users_email']) {
					if (md5(md5($provpass)) == $udata['users_pass']) {
						if (preg_match('#^([a-z0-9_\-\.])+\@([a-z0-9_\-\.])+(\.([a-z0-9])+)+$#', $meil)) {

							$regmail = DB::run() -> querySingle("SELECT `users_id` FROM `users` WHERE `users_email`=? LIMIT 1;", array($meil));
							if (empty($regmail) && ($log==$config['nickname'] || $meil!=$config['emails'])) {
								
								$blackmail = DB::run() -> querySingle("SELECT `black_id` FROM `blackmail` WHERE `black_mail`=? LIMIT 1;", array($meil));
								if (empty($blackmail)) {
									
									DB::run() -> query("DELETE FROM `changemail` WHERE `change_time`<?;", array(SITETIME));
							
									$changemail = DB::run() -> querySingle("SELECT `change_id` FROM `changemail` WHERE `change_user`=? LIMIT 1;", array($log)); 
									if (empty($changemail)) {
										
										$genkey = generate_password(rand(15,20));
																			
										addmail($udata['users_email'], "Изменение адреса электронной почты на сайте ".$config['title'], "Здравствуйте, ".nickname($log)." \nВами была произведена операция по изменению адреса электронной почты \n\nДля того, чтобы изменить e-mail, необходимо подтвердить новый адрес почты \nПерейдите по данной ссылке: \n\n".$config['home']."/pages/account.php?act=editmail&key=".$genkey." \n\nСсылка будет дейстительной в течении суток до ".date('j.m.y / H:i', SITETIME + 86400).", для изменения адреса необходимо быть авторизованным на сайте \nЕсли это сообщение попало к вам по ошибке или вы не собираетесь менять e-mail, то просто проигнорируйте данное письмо");
										
										DB::run() -> query("INSERT INTO `changemail` (`change_user`, `change_mail`, `change_key`, `change_time`) VALUES (?, ?, ?, ?);", array($log, $meil, $genkey, SITETIME + 86400));

										$_SESSION['note'] = 'На новый адрес почты отправлено письмо для подтверждения!';
										redirect("account.php?".SID);
										
									} else {
										show_error('Ошибка! Вы уже отправили код подтверждения на новый адрес почты!');
									} 
								} else {
									show_error('Ошибка! Указанный вами адрес e-mail занесен в черный список!');
								} 
							} else {
								show_error('Ошибка! Указанный вами адрес e-mail уже используется в системе!');
							} 
						} else {
							show_error('Неправильный адрес e-mail, необходим формат [email protected]!');
						} 
					} else {
						show_error('Ошибка! Пароль не совпадает с данными в профиле!');
					} 
				} else {
					show_error('Ошибка! Вы ввели ваш текущий адрес e-mail!');
				}  
			} else {
				show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
			} 

			echo '<img src="../images/img/back.gif" alt="image" /> <a href="account.php?'.SID.'">Вернуться</a><br />';
		break;
		
		############################################################################################
		##                                     Изменение e-mail                                   ##
		############################################################################################
		case 'editmail':

			$key = check(strval($_GET['key']));
			
			if (!empty($key)) {
				
				DB::run() -> query("DELETE FROM `changemail` WHERE `change_time`<?;", array(SITETIME));
				
				$armail = DB::run() -> queryFetch("SELECT * FROM `changemail` WHERE `change_key`=? AND `change_user`=? LIMIT 1;", array($key, $log));
				if (!empty($armail)) {
				
					if ($armail['change_mail'] != $udata['users_email']) {
				
						if (preg_match('#^([a-z0-9_\-\.])+\@([a-z0-9_\-\.])+(\.([a-z0-9])+)+$#', $armail['change_mail'])) {
							
							$regmail = DB::run() -> querySingle("SELECT `users_id` FROM `users` WHERE `users_email`=? LIMIT 1;", array($armail['change_mail']));
							if (empty($regmail) && ($log==$config['nickname'] || $armail['change_mail']!=$config['emails'])) {
								
								$blackmail = DB::run() -> querySingle("SELECT `black_id` FROM `blackmail` WHERE `black_mail`=? LIMIT 1;", array($armail['change_mail']));
								if (empty($blackmail)) {
											
									DB::run() -> query("UPDATE `users` SET `users_email`=? WHERE `users_login`=? LIMIT 1;", array($armail['change_mail'], $log));
									DB::run() -> query("DELETE FROM `changemail` WHERE `change_key`=? AND `change_user`=? LIMIT 1;", array($key, $log));
												
									$_SESSION['note'] = 'Адрес электронной почты успешно изменен!';
									redirect("account.php?".SID);

								} else {
									show_error('Ошибка! Указанный вами адрес e-mail занесен в черный список!');
								} 
							} else {
								show_error('Ошибка! Указанный вами адрес e-mail уже используется в системе!');
							} 
						} else {
							show_error('Неправильный адрес e-mail, необходим формат [email protected]!');
						} 			
					} else {
						show_error('Ошибка! Текущий адрес e-mail совпадает с новым адресом!');
					} 	
				} else {
					show_error('Ошибка! Данный код изменение электронной почты не найден в списке!');
				} 	
			} else {
				show_error('Ошибка! Вы не ввели код изменения электронной почты!');
			} 	

			echo '<img src="../images/img/back.gif" alt="image" /> <a href="account.php?'.SID.'">Вернуться</a><br />';
		break;

		############################################################################################
		##                                   Удаление статуса                                     ##
		############################################################################################
		case 'delstatus':

			$uid = check($_GET['uid']);

			if ($uid == $_SESSION['token']) {
				if (!empty($config['editstatus'])) {
					if (empty($udata['users_ban'])) {
						if ($udata['users_point'] >= $config['editstatuspoint']) {
							if (!empty($udata['users_nickname'])) {
								DB::run() -> query("UPDATE `users` SET `users_status`=? WHERE `users_login`=? LIMIT 1;", array('', $log));
								save_title();

								$_SESSION['note'] = 'Ваш статус успешно удален!';
								redirect("account.php?".SID);

							} else {
								show_error('Ошибка! У вас не установлен статус!');
							} 
						} else {
							show_error('Ошибка! У вас недостаточно актива для изменения статуса!');
						} 
					} else {
						show_error('Ошибка! Для изменения статуса у вас не должно быть нарушений!');
					} 
				} else {
					show_error('Ошибка! Изменение статуса запрещено администрацией сайта!');
				} 
			} else {
				show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
			} 

			echo '<img src="../images/img/back.gif" alt="image" /> <a href="account.php?'.SID.'">Вернуться</a><br />';
		break;

		############################################################################################
		##                                   Изменение статуса                                    ##
		############################################################################################
		case 'editstatus':
			$uid = check($_GET['uid']);
			$status = check(trim($_POST['status']));

			if ($uid == $_SESSION['token']) {
				if (!empty($config['editstatus'])) {
					if (empty($udata['users_ban'])) {
						if ($udata['users_point'] >= $config['editstatuspoint']) {
							if ($udata['users_money'] >= $config['editstatusmoney']) {
								if (utf_strlen($status) >= 3 && utf_strlen($status) <= 20) {
									if ($status != $udata['users_status']) {
										$checkstatus = DB::run() -> querySingle("SELECT `users_id` FROM `users` WHERE lower(`users_status`)=? LIMIT 1;", array(utf_lower($status)));
										if (empty($checkstatus)) {
											DB::run() -> query("UPDATE `users` SET `users_status`=?, users_money=users_money-? WHERE `users_login`=? LIMIT 1;", array($status, $config['editstatusmoney'], $log));
											save_title();

											$_SESSION['note'] = 'Ваш статус успешно изменен!';
											redirect("account.php?".SID);

										} else {
											show_error('Ошибка! Выбранный вами статус уже используется на сайте!');
										} 
									} else {
										show_error('Ошибка! У вас уже установлен выбранный вами статус!');
									} 
								} else {
									show_error('Ошибка! Слишком длинный или короткий статус! (от 3 до 20 символов)');
								} 
							} else {
								show_error('Ошибка! У вас недостаточно денег для изменения статуса!');
							} 
						} else {
							show_error('Ошибка! У вас недостаточно актива для изменения статуса!');
						} 
					} else {
						show_error('Ошибка! Для изменения статуса у вас не должно быть нарушений!');
					} 
				} else {
					show_error('Ошибка! Изменение статуса запрещено администрацией сайта!');
				} 
			} else {
				show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
			} 

			echo '<img src="../images/img/back.gif" alt="image" /> <a href="account.php?'.SID.'">Вернуться</a><br />';
		break;

		############################################################################################
		##                                     Удаление ника                                      ##
		############################################################################################
		case 'delnick':

			$uid = check($_GET['uid']);
			if ($uid == $_SESSION['token']) {
				if ($udata['users_point'] >= $config['editnickpoint']) {
					if (!empty($udata['users_nickname'])) {
						DB::run() -> query("UPDATE `users` SET `users_nickname`=?, `users_timenickname`=? WHERE `users_login`=? LIMIT 1;", array('', SITETIME + 86400, $log));
						save_nickname();

						$_SESSION['note'] = 'Ваш ник успешно удален!';
						redirect("account.php?".SID);

					} else {
						show_error('Ошибка! У вас не установлен ник!');
					} 
				} else {
					show_error('Ошибка! У вас недостаточно актива для изменения ника!');
				} 
			} else {
				show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
			} 

			echo '<img src="../images/img/back.gif" alt="image" /> <a href="account.php?'.SID.'">Вернуться</a><br />';
		break;

		############################################################################################
		##                                     Изменение ника                                     ##
		############################################################################################
		case 'editnick':

			$uid = check($_GET['uid']);
			$nickname = check(trim($_POST['nickname']));

			if ($uid == $_SESSION['token']) {
				if ($udata['users_point'] >= $config['editnickpoint']) {
					if ($udata['users_timenickname'] < SITETIME) {
						if (preg_match('|^[0-9a-zA-Zа-яА-ЯЁё_\.\-\s]+$|u', $nickname)) {
							if (utf_strlen($nickname) >= 3 && utf_strlen($nickname) <= 20) {
								if ($nickname != $udata['users_nickname']) {
									$reglogin = DB::run() -> querySingle("SELECT `users_id` FROM `users` WHERE lower(`users_login`)=? LIMIT 1;", array(utf_lower($nickname)));
									if (empty($reglogin)) {
										$regnick = DB::run() -> querySingle("SELECT `users_id` FROM `users` WHERE lower(`users_nickname`)=? LIMIT 1;", array(utf_lower($nickname)));
										if (empty($regnick)) {
											$blacklogin = DB::run() -> querySingle("SELECT `black_id` FROM `blacklogin` WHERE lower(`black_login`)=? LIMIT 1;", array(strtolower($nickname)));
											if (empty($blacklogin)) {
												DB::run() -> query("UPDATE `users` SET `users_nickname`=?, `users_timenickname`=? WHERE `users_login`=? LIMIT 1;", array($nickname, SITETIME + 86400, $log));

												save_nickname();

												$_SESSION['note'] = 'Ваш ник успешно изменен!';
												redirect("account.php?".SID);

											} else {
												show_error('Ошибка! Выбранный вами ник занесен в черный список!');
											} 
										} else {
											show_error('Ошибка! Выбранный вами ник уже занят!!');
										} 
									} else {
										show_error('Ошибка! Выбранный вами ник используется кем-то в качестве логина!');
									} 
								} else {
									show_error('Ошибка! Вы уже используете выбранный вами ник!');
								} 
							} else {
								show_error('Ошибка! Слишком длинный или короткий ник! (от 3 до 20 символов)');
							} 
						} else {
							show_error('Недопустимые символы, разрешены символы русского и латинского алфавита, а также цифры!');
						} 
					} else {
						show_error('Ошибка! Изменять ник можно не чаще чем 1 раз в сутки!');
					} 
				} else {
					show_error('Ошибка! У вас недостаточно актива для изменения ника!');
				} 
			} else {
				show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
			} 

			echo '<img src="../images/img/back.gif" alt="image" /> <a href="account.php?'.SID.'">Вернуться</a><br />';
		break;

		############################################################################################
		##                                   Удаление вопроса                                     ##
		############################################################################################
		case 'delsec':

			$uid = check($_GET['uid']);
			if ($uid == $_SESSION['token']) {
				if (!empty($udata['users_secquest'])) {
					DB::run() -> query("UPDATE `users` SET `users_secquest`=?, `users_secanswer`=? WHERE `users_login`=? LIMIT 1;", array('', '', $log));

					$_SESSION['note'] = 'Секретный вопрос и ответ успешно удалены!';
					redirect("account.php?".SID);

				} else {
					show_error('Ошибка! У вас не установлен секретный вопрос!');
				} 
			} else {
				show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
			} 

			echo '<img src="../images/img/back.gif" alt="image" /> <a href="account.php?'.SID.'">Вернуться</a><br />';
		break;

		############################################################################################
		##                                    Изменение вопроса                                   ##
		############################################################################################
		case 'editsec':

			$uid = check($_GET['uid']);
			$secquest = check($_POST['secquest']);
			$secanswer = check($_POST['secanswer']);
			$provpass = check($_POST['provpass']);

			if ($uid == $_SESSION['token']) {
				if (md5(md5($provpass)) == $udata['users_pass']) {
					if (utf_strlen($secquest) >= 3 && utf_strlen($secquest) <= 50) {
						if (utf_strlen($secanswer) >= 3 && utf_strlen($secanswer) <= 30) {
							DB::run() -> query("UPDATE `users` SET `users_secquest`=?, `users_secanswer`=? WHERE `users_login`=? LIMIT 1;", array($secquest, md5(md5($secanswer)), $log));

							$_SESSION['note'] = 'Секретный вопрос и ответ успешно изменены!';
							redirect("account.php?".SID);

						} else {
							show_error('Ошибка! Слишком длинный или короткий секретный ответ (от 3 до 30 символов)!');
						} 
					} else {
						show_error('Ошибка! Слишком длинный или короткий секретный вопрос (от 3 до 50 символов)!');
					} 
				} else {
					show_error('Ошибка! Текущий пароль не совпадает с данными в профиле!');
				} 
			} else {
				show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
			} 

			echo '<img src="../images/img/back.gif" alt="image" /> <a href="account.php?'.SID.'">Вернуться</a><br />';
		break;

		############################################################################################
		##                                     Изменение пароля                                   ##
		############################################################################################
		case 'editpass':

			$uid = check($_GET['uid']);
			$newpass = check($_POST['newpass']);
			$newpass2 = check($_POST['newpass2']);
			$oldpass = check($_POST['oldpass']);

			if ($uid == $_SESSION['token']) {
				if (preg_match('|^[a-z0-9\-]+$|i', $newpass)) {
					if (md5(md5($oldpass)) == $udata['users_pass']) {
						if ($log != $newpass) {
							if (!ctype_digit($newpass)) {
								if ($newpass == $newpass2) {
									if (strlen($newpass) >= 3 && strlen($newpass) <= 20) {
										DB::run() -> query("UPDATE `users` SET `users_pass`=? WHERE `users_login`=? LIMIT 1;", array(md5(md5($newpass)), $log));

										addmail($udata['users_email'], "Изменение пароля на сайте ".$config['title'], "Здравствуйте, ".nickname($log)." \nВами была произведена операция по изменению пароля \n\nВаш новый пароль: ".$newpass." \nСохраните его в надежном месте \n\nДанные инициализации: \nIP: ".$ip." \nБраузер: ".$brow." \nВремя: ".date('j.m.y / H:i', SITETIME));

										unset($_SESSION['log']);
										unset($_SESSION['par']);

										$_SESSION['note'] = 'Пароль успешно изменен!';
										redirect("login.php?".SID);

									} else {
										show_error('Ошибка! Слишком длинный или короткий новый пароль (От 3 до 20 символов)!');
									} 
								} else {
									show_error('Ошибка! Новые пароли не совпадают!');
								} 
							} else {
								show_error('Ошибка! Запрещен пароль состоящий только из цифр, используйте буквы!');
							} 
						} else {
							show_error('Ошибка! Пароль и логин должны отличаться друг от друга!');
						} 
					} else {
						show_error('Ошибка! Текущий пароль не совпадает с данными в профиле!');
					} 
				} else {
					show_error('Недопустимые символы в пароле, только знаки латинского алфавита, цифры и дефис!');
				} 
			} else {
				show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
			} 

			echo '<img src="../images/img/back.gif" alt="image" /> <a href="account.php?'.SID.'">Вернуться</a><br />';
		break;

	default:
		redirect("account.php?".SID);
	endswitch;

} else {
	show_login('Вы не авторизованы, чтобы изменять свои данные, необходимо');
} 

include_once ('../themes/footer.php');
?>