/** * напоминание пароля через телефон и логин. * * @param $phone * @param $login * @param $rnd * @param $captchanum * * @return xajaxResponse */ function RemindByPhoneAndLogin($phone, $login, $rnd, $captchanum) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sms_gate_a1.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/sbr_meta.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; session_start(); $objResponse = new xajaxResponse(); $phone = trim($phone); $login = trim($login); // проверка капчи $captcha = new captcha($captchanum); if (!$captcha->checkNumber(trim($rnd))) { $captcha->setNumber(); $error = 'Вы ввели неверную комбинацию букв'; sendPhoneRemindError($objResponse, $error, $captchanum, 'captcha'); return $objResponse; } // проверка правильности введенного номера $i_phone = users::CheckSafetyPhone($phone); if ($phone && $i_phone['error_flag']) { $captcha->setNumber(); $error = 'Вы ввели телефон в недопустимом формате'; sendPhoneRemindError($objResponse, $error, $captchanum, 'phone'); return $objResponse; } // проверка наличия номера в базе if ($phone) { $safetyPhones = sbr_meta::findSafetyPhones($phone); if (!count($safetyPhones)) { $error = 'Этот номер телефона не связан ни с одним аккаунтом. Попробуйте восстановить доступ через логин или email'; $captcha->setNumber(); sendPhoneRemindError($objResponse, $error, $captchanum, 'phone'); return $objResponse; } foreach ($safetyPhones as $safetyPhone) { $checkUser = new users(); $checkUser->GetUser($safetyPhone['login']); if ($checkUser->is_banned) { $error = 'Аккаунт с указанным номером телефона заблокирован или удален.\\nСожалеем, но восстановить пароль к нему в данный момент нельзя.'; $captcha->setNumber(); sendPhoneRemindError($objResponse, $error, $captchanum, 'login'); return $objResponse; } } // если на один номер несколько аккаунтов и логин не указан if (count($safetyPhones) > 1 && !$login) { $captcha->setNumber(); $error = 'Вы не указали логин. Поле обязательно для заполнения, т.к. номер телефона привязан к нескольким аккаунтам'; sendPhoneRemindError($objResponse, $error, $captchanum, 'login'); return $objResponse; } // если номер не уникальный и указан логин if (count($safetyPhones) > 1 || $login) { foreach ($safetyPhones as $value) { if ($value['login'] == $login) { $safety = $value; break; } } if (!$safety) { $error = 'Этот логин и номер телефона не связаны. Попробуйте восстановить доступ через логин или email'; $captcha->setNumber(); sendPhoneRemindError($objResponse, $error, $captchanum, 'phone login'); return $objResponse; } } if (count($safetyPhones) === 1 && !$login) { $safety = $safetyPhones[0]; } } // если указан логин и не указан номер if ($login && !$phone) { // проверяем существует ли пользователь с таким логином $user = new users(); $user->GetUser($login); if (!$user->uid) { $error = 'Вы указали некорректный логин'; $captcha->setNumber(); sendPhoneRemindError($objResponse, $error, $captchanum, 'login'); return $objResponse; } if ($user->is_banned) { $error = 'Аккаунт с указанным логином заблокирован или удален.\\nСожалеем, но восстановить пароль к нему в данный момент нельзя.'; $captcha->setNumber(); sendPhoneRemindError($objResponse, $error, $captchanum, 'login'); return $objResponse; } $safety = sbr_meta::findSafetyPhoneByLogin($login); if (!$safety) { $error = 'Этот логин не связан ни с одним номером телефона. Попробуйте восстановить доступ через логин или email'; $captcha->setNumber(); sendPhoneRemindError($objResponse, $error, $captchanum, 'login'); return $objResponse; } $phone = $safety['phone']; } $passwd = users::ResetPasswordSMS($safety['uid'], $phone); $sms_gate = new sms_gate_a1($phone); $sms_gate->sendSMS($sms_gate->getTextMessage(sms_gate::TYPE_PASS, $passwd)); if ($sms_gate->getHTTPCode() != 200) { $error = 'Ошибка отправки СМС на указанный номер'; $captcha->setNumber(); sendPhoneRemindError($objResponse, $error, $captchanum); return $objResponse; } $html = '<span class="b-icon b-icon_sbr_gattent"></span>На указанный вами номер выслан новый пароль для входа в систему.'; if (SMS_GATE_DEBUG) { $html .= ' <strong style="color:red">(DEBUG TEST: ' . $passwd . ')</strong>'; } $objResponse->script("\n \$('remind_button_phone').removeClass('b-button_rectangle_color_disable');\n \$('remind_phone_msg').addClass('b-layout__txt_hide');\n var e = new Element('div', {html: '{$html}', class: 'b-layout__txt b-layout__txt_padtop_15'});\n \$('sms_remind').getElement('table').destroy();\n \$('sms_remind').getElement('h3').grab(e, 'after');"); return $objResponse; }
/** * Забыли пароль. Телефон. * * @param array $aParams массив входящих данных * @return array $aResult ответ */ protected function x____users_forgot_phone($aParams = array()) { $this->_validDevice($aParams); $sLogin = __paramValue('string', $aParams['username'], null, true); if (!empty($sLogin)) { require_once ABS_PATH . '/classes/sms_gate_a1.php'; require_once ABS_PATH . '/classes/sbr_meta.php'; require_once ABS_PATH . '/classes/users.php'; // проверяем существует ли пользователь с таким логином $oUser = new users(); $oUser->GetUser($sLogin); if ($oUser->uid) { $safety = sbr_meta::findSafetyPhoneByLogin($sLogin); if ($safety) { $passwd = users::ResetPasswordSMS($safety['uid'], $safety['phone']); $sms_gate = new sms_gate_a1($safety['phone']); $sms_gate->sendSMS($sms_gate->getTextMessage(sms_gate::TYPE_PASS, $passwd)); if ($sms_gate->getHTTPCode() != 200) { $this->error(EXTERNAL_ERR_SEND_SMS); } } else { $this->error(EXTERNAL_ERR_PHONE_NOT_FOUND); } } else { $this->error(EXTERNAL_ERR_USER_NOTFOUND); } } else { $this->error(EXTERNAL_ERR_EMPTY_USERNAME); } return array(); }