function __construct() { if (User::isAuth()) { MG::redirect('/'); } // Шаг первый. $form = 1; $fPass = new Models_Forgotpass(); // Ввторой шаг, производящий проверку введеного электронного адреса. if (URL::getQueryParametr('forgotpass')) { $email = URL::getQueryParametr('email'); if ($userInfo = USER::getUserInfoByEmail($email)) { //Если введенных адрес совпадает с зарегистрированным в системе, то $form = 0; $message = 'Инструкция по восстановлению пароля была отправлена на <strong>' . $email . '</strong>'; $hash = $fPass->getHash($email); //а) Случайный хэш заносится в БД. $fPass->sendHashToDB($email, $hash); $siteName = MG::getOption('sitename'); $emailMessage = MG::layoutManager('email_forgot', array('siteName' => $siteName, 'email' => $email, 'hash' => $hash, 'userId' => $userInfo->id, 'link' => SITE . '/forgotpass?sec=' . $hash . '&id=' . $userInfo->id)); $emailData = array('nameFrom' => $siteName, 'emailFrom' => MG::getSetting('noReplyEmail'), 'nameTo' => 'Пользователю сайта ' . $siteName, 'emailTo' => $email, 'subject' => 'Восстановление пароля на сайте ' . $siteName, 'body' => $emailMessage, 'html' => true); //б) На указанный электронный адрес отправляется письмо со сылкой на страницу восстановления пароля. $fPass->sendUrlToEmail($emailData); } else { $form = 0; $error = 'К сожалению, такой логин не найден<br> Если вы уверены, что данный логин существует, пожалуйста, свяжитесь с нами.'; } } // Шаг 3. Обработка перехода по ссылки. Принимается id пользователя и сгенерированный хэш. if ($_GET) { $userInfo = USER::getUserById(URL::getQueryParametr('id')); $hash = URL::getQueryParametr('sec'); // Если присланный хэш совпадает с хэшом из БД для соответствующего id. if ($userInfo->restore == $hash) { $form = 2; // Меняе в БД случайным образом хэш, делая невозможным повторный переход по ссылки. $fPass->sendHashToDB($userInfo->email, $fPass->getHash('0')); $_SESSION['id'] = URL::getQueryParametr('id'); } else { $form = 0; $error = 'Некорректная ссылка. Повторите заново запрос восстановления пароля.'; } } // Шаг 4. обрабатываем запрос на ввод нового пароля if (URL::getQueryParametr('chengePass')) { $form = 2; $person = new Models_Personal(); $msg = $person->changePass(URL::getQueryParametr('newPass'), $_SESSION['id'], true); if ('Пароль изменен' == $msg) { $form = 0; $message = $msg . '! ' . 'Вы можете войти в личный кабинет по адресу <a href="' . SITE . '/enter" >' . SITE . '/enter</a>'; $fPass->activateUser($_SESSION['id']); unset($_SESSION['id']); } else { $error = $msg; } } $this->data = array('error' => $error, 'message' => $message, 'form' => $form, 'meta_title' => 'Восстановление пароля', 'meta_keywords' => $model->currentCategory['meta_keywords'] ? $model->currentCategory['meta_keywords'] : "забыли пароль, восстановить пароль, восстановление пароля", 'meta_desc' => $model->currentCategory['meta_desc'] ? $model->currentCategory['meta_desc'] : "Если вы забыли пароль от личного кабинета, его модно восстановить с помощью формы восстановления паролей."); }
function __construct() { $this->fPass = new Models_Forgotpass(); $form = true; // Отображение формы. // // Оброботка действий пользователя при регистрации. if (isset($_POST['registration'])) { // Если данные введены верно. if (!$this->unValidForm()) { USER::add($this->userData); $message = '<span class="succes-reg">Вы успешно зарегистрировались! Для активации пользователя Вам необходимо перейти по ссылке высланной на Ваш электронный адрес <strong>' . $this->userData['email'] . '</strong></span>'; $form = false; // Рассылаем письма со ссылкой для подтверждения регистрации. $this->_sendActivationMail($this->userData['email']); } else { $error = $this->error; $form = true; } } // Обработка действий перехода по ссылки. if (URL::getQueryParametr('id')) { $userInfo = USER::getUserById(URL::getQueryParametr('id')); $hash = URL::getQueryParametr('sec'); // Если присланный хэш совпадает с хэшом из БД для соответствующего id. if ($userInfo->restore == $hash) { // Меняет в БД случейным образом хэш, делая невозможным повторный переход по ссылки. $this->fPass->sendHashToDB($userInfo->email, $this->fPass->getHash('0')); $message = 'Ваша учетная запись активирована. Теперь Вы можете <a href="' . SITE . '/enter">войти в личный кабинет</a> используя логин и пароль заданный при регистрации.'; $form = false; $this->fPass->activateUser(URL::getQueryParametr('id')); } else { $error = 'Некорректная ссылка. Повторите активацию!'; $form = false; } } // Обработка действий при запросе на повторную активацию. if ($_POST['reActivate']) { $email = URL::getQueryParametr('activateEmail'); if (USER::getUserInfoByEmail($email)) { $this->_sendActivationMail($email); $message = 'Для активации пользователя Вам необходимо перейти по ссылке высланной на Ваш электронный адрес ' . $this->userData['email']; $form = false; } else { $error = 'К сожалению, такой логин не найден. Если вы уверены, что данный логин существует, свяжитесь, пожалуйста, с нами.'; $form = false; } } $this->data = array('error' => $error, 'message' => $message, 'form' => $form, 'meta_title' => 'Регистрация', 'meta_keywords' => !empty($model->currentCategory['meta_keywords']) ? $model->currentCategory['meta_keywords'] : "регистрация, зарегистрироваться", 'meta_desc' => !empty($model->currentCategory['meta_desc']) ? $model->currentCategory['meta_desc'] : "Зарегистрируйтесь в системе, чтобы получить дополнительные возможности, такие как просмотр состояния заказа"); }
/** * Обновляет пользователя учетную запись пользователя. * @param $id - id пользователя. * @param $data - массив значений для вставки в БД [Поле => Значение]. * @param $authRewrite - false = перезапишет данные в сессии детущего пользователя, на полученные у $data. * @return void */ public static function update($id, $data, $authRewrite = false) { $userInfo = USER::getUserById($id); foreach ($data as $k => $v) { if ($k !== 'pass') { $v = htmlspecialchars_decode($v); $data[$k] = htmlspecialchars($v); } } //только если пытаемся разжаловать админа, проверяем, // не является ли он последним админом // Без админов никак незя! if ($userInfo->role == '1' && $data['role'] != '1') { $countAdmin = DB::query(' SELECT count(id) as "count" FROM `' . PREFIX . 'user` WHERE role = 1 '); if ($row = DB::fetchAssoc($countAdmin)) { if ($row['count'] == 1) { // остался один админ $data['role'] = 1; // не даем разжаловать админа, уж лучше плохой чем никакого :-) } } } DB::query(' UPDATE `' . PREFIX . 'user` SET ' . DB::buildPartQuery($data) . ' WHERE id = ' . DB::quote($id)); if (!$authRewrite) { foreach ($data as $k => $v) { self::$_instance->auth->{$k} = $v; } $_SESSION['user'] = self::$_instance->auth; } return true; }
/** * Получает параметры редактируемого пользователя. */ public function getUserData() { $this->messageError = $this->lang['ACT_GET_USER']; $response = USER::getUserById($_POST['id']); foreach ($response as $k => $v) { if ($k != 'pass') { $response->{$k} = htmlspecialchars_decode($v); } } $this->data = $response; return false; }
/** * Регистрация на сайте и в таблице uLogin * @param Array $u_user - данные о пользователе, полученные от uLogin * @param int $in_db - при значении 1 необходимо переписать данные в таблице uLogin * @return bool|int|Error */ function ulogin_registration_user($u_user, $in_db = 0) { if (!isset($u_user['email'])) { die("Через данную форму выполнить вход/регистрацию невозможно. </br>" . "Сообщиете администратору сайта о следующей ошибке: </br></br>" . "Необходимо указать <b>email</b> в возвращаемых полях <b>uLogin</b>"); } $u_user['network'] = isset($u_user['network']) ? $u_user['network'] : ''; $u_user['phone'] = isset($u_user['phone']) ? $u_user['phone'] : ''; // данные о пользователе есть в ulogin_table, но отсутствуют в Базе if ($in_db == 1) { DB::query("DELETE FROM " . PREFIX . "ulogin WHERE `identity` = " . DB::quote($u_user['identity'])); } $user_id = USER::getUserInfoByEmail($u_user['email']); $user_id = $user_id->id; // $check_m_user == true -> есть пользователь с таким email $check_m_user = $user_id > 0 ? true : false; $current_user = USER::isAuth() ? USER::getThis() : 0; // $isLoggedIn == true -> ползователь онлайн $isLoggedIn = isset($current_user->id) && $current_user->id > 0 ? true : false; if (!$check_m_user && !$isLoggedIn) { // отсутствует пользователь с таким email в базе -> регистрация $date = explode('.', $u_user['bdate']); $insert_user = array('pass' => md5(microtime(true)), 'email' => $u_user['email'], 'role' => 2, 'name' => $u_user['first_name'], 'sname' => $u_user['last_name'], 'address' => '', 'phone' => $u_user['phone'], 'birthday' => $date['2'] . '-' . $date['1'] . '-' . $date['0'], 'activity' => 1); $user_id = USER::add($insert_user); $user_id = DB::insertId(); $userData = USER::getUserById($user_id); $res = DB::query("INSERT INTO " . PREFIX . "ulogin (user_id, identity, network)\n\t\tVALUES (" . DB::quote($user_id) . "," . DB::quote($u_user['identity']) . "," . DB::quote($u_user['network']) . ")"); return $userData->id; } else { // существует пользователь с таким email или это текущий пользователь if (!isset($u_user["verified_email"]) || intval($u_user["verified_email"]) != 1) { die('<head></head><body><script src="//ulogin.ru/js/ulogin.js" type="text/javascript"></script><script type="text/javascript">uLogin.mergeAccounts("' . $_POST['token'] . '")</script>' . "Электронный адрес данного аккаунта совпадает с электронным адресом существующего пользователя. <br>Требуется подтверждение на владение указанным email.</br></br>" . "Подтверждение аккаунта" . "</body>"); } if (intval($u_user["verified_email"]) == 1) { $user_id = $isLoggedIn ? $current_user->id : $user_id; $other_u = DB::query("SELECT identity FROM " . PREFIX . "ulogin where `user_id` = " . DB::quote($user_id)); $other_u = DB::fetchAssoc($other_u); if ($other_u) { if (!$isLoggedIn && !isset($u_user['merge_account'])) { die('<head></head><body><script src="//ulogin.ru/js/ulogin.js" type="text/javascript"></script><script type="text/javascript">uLogin.mergeAccounts("' . $_POST['token'] . '","' . $other_u['identity'] . '")</script>' . "С данным аккаунтом уже связаны данные из другой социальной сети. <br>Требуется привязка новой учётной записи социальной сети к этому аккаунту.<br/>" . "Синхронизация аккаунтов" . "</body>"); } } DB::query("INSERT INTO " . PREFIX . "ulogin (user_id, identity, network)\n\t\t\tVALUES (" . DB::quote($user_id) . "," . DB::quote($u_user['identity']) . "," . DB::quote($u_user['network']) . ")"); return $user_id; } } return false; }
<?php session_start(); ?> <!DOCTYPE html> <?php include_once 'header.php'; require_once 'classes/userClass.php'; $userObj = new USER(); $userInfo = $userObj->getUserById($_SESSION['result']['id']); //echo ""; print_r($userInfo); exit; ?> <div class="panel panel-primary" style="width:35%;margin:0 auto; margin-top:2%"> <div class="panel-heading"><h3>User Profile</h3></div> <div class="panel-body" style="height:40%; text-align:center;" > <p class="bg-info" id="msg"></p> <form class="form-horizontal" role="form" id="signupForm" method="post" action="function.php?formType=signup"> <div class="form-group"> <label class="control-label col-sm-3" for="name">Name:</label> <div class="col-sm-9"> <?php echo $userInfo['result']['name']; ?> </div> </div> <div class="form-group"> <label class="control-label col-sm-3" for="username">Username:</label> <div class="col-sm-9"> <?php echo $userInfo['result']['username']; ?>