/** * Предложение на создание нового промо сообщества. * * @param array $frm Данные введенные пользователем * * @return object xajaxResponse */ function NewPromoCommune($frm) { global $session; session_start(); $objResponse = new xajaxResponse(); $errors = array(); require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/captcha.php'; $captcha = new captcha(); $rnd = $frm['rndnum']; if (!$captcha->checkNumber(trim($rnd))) { $errors[] = 'captcha'; } if (trim($frm['name']) == '') { $errors[] = 'name'; } if (trim($frm['msg']) == '') { $errors[] = 'msg'; } $objResponse->script('$("popup_promo_commune").getElements("div[id^=popup_promo_commune_err]").setStyle("display", "none");'); if (count($errors)) { foreach ($errors as $error) { $objResponse->script('$("popup_promo_commune_err_' . $error . '").setStyle("display", "block");'); } } else { $objResponse->script('$("btn_promo_new").setStyle("display", "none");'); $objResponse->script('$("btn_promo_ok").setStyle("display", "block");'); $objResponse->script('$("popup_promo_commune").setStyle("display", "none");'); $objResponse->script('$("claim-name").set("value","");'); $objResponse->script('$("claim-idea").set("value","");'); $objResponse->script('$("claim-cap").set("value","");'); $sm = new smail(); $sm->NewPromoCommune($frm['name'], $frm['msg']); } $objResponse->script('$("captcha").set("src","/image.php?r="+Math.random());'); $objResponse->assign('claim-cap', 'value', ''); return $objResponse; }
public function registration($type_wizard = step_wizard_registration::TYPE_WIZARD_EMP) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/captcha.php"; $action = __paramInit('string', null, 'action'); if ($this->status == step_wizard::STATUS_CONFIRM) { if ($_SESSION['email'] == 0) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/users.php"; $user = new users(); $email = $user->GetField(wizard::getUserIDReg(), $error, "email"); $_SESSION['email'] = $email; } if ($action == registration::ACTION_SEND_MAIL) { $send = registration::actionSendMail(false); if ($send) { header("Location: /wizard/registration/"); exit; } } } $type_user = $type_wizard; if ($action == 'registration' && $this->status == 0) { $error = array(); if (!$_SESSION["regform_captcha_entered"]) { session_start(); $captchanum = __paramInit('string', null, 'captchanum'); $num = __paramInit('string', null, 'rndnum'); $_SESSION['w_reg_captcha_num'] = $captchanum; $captcha = new captcha($captchanum); if (!$captcha->checkNumber($num)) { $error['captcha'] = 'Неверный код. Попробуйте еще раз'; unset($_SESSION['w_reg_captcha_num']); } } if ($type_wizard == step_wizard_registration::TYPE_WIZARD_EMP) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/employer.php"; } else { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/freelancer.php"; } $login = trim(__paramInit('string', null, 'login')); $email = trim(__paramInit('string', null, 'email')); $agree = trim(__paramInit('string', null, 'agree')); $phone = trim(__paramInit('string', null, 'phone')); $smscode = trim(__paramInit('string', null, 'smscode')); // пароль берем напрямую из $_POST, а то __paramInit режет спецсимволы (пароль хешируется - SQL инъекция невозможна) $passwd = $_POST['password']; if (!$agree) { $error['agree'] = 'Прочтите и согласитесь с правилами'; } if ($passwd == '') { $error['pwd'] = 'Введите пароль'; } if (!preg_match("/^[a-zA-Z0-9]+[-a-zA-Z0-9_]{2,}\$/", $login)) { $error['login'] = '******'; } if (in_array(strtolower($login), $GLOBALS['disallowUserLogins'])) { $error['login'] = '******'; } if (!is_email($email)) { $error['email'] = 'Поле заполнено некорректно'; } if ($smscode != $_SESSION["smsCode"]) { $error['smscode'] = 'Код не совпал'; } if ($phone != $_SESSION["reg_phone"]) { $error['phone'] = 'Вы вводили другой номер при запросе кода'; } $phone = preg_replace("#^\\+#", "", $_SESSION["reg_phone"]); if (empty($error['login'])) { $sql = "SELECT uid FROM users WHERE lower(login) = ?"; if ($this->_db->val($sql, strtolower($login))) { $error['login'] = '******'; } } if (empty($error['email']) && empty($error['captcha'])) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/temp_email.php"; if (temp_email::isTempEmail($email)) { $error['email'] = 'К сожалению, регистрация аккаунта на указанный адрес электронной почты невозможна. Пожалуйста, для регистрации воспользуйтесь почтовым адресом другого домена'; } else { $sql = "SELECT uid FROM users WHERE lower(email) = ?"; if ($this->_db->val($sql, strtolower($email))) { $error['email'] = 'Указанная вами электронная почта уже зарегистрирована. Авторизуйтесь на сайте или укажите другую электронную почту.'; } } } if (count($error) == 0) { if ($type_wizard == step_wizard_registration::TYPE_WIZARD_EMP) { $newuser = new employer(); } else { $newuser = new freelancer(); } $newuser->checked_name = false; if ($type_wizard == step_wizard_registration::TYPE_WIZARD_EMP) { $newuser->role = 1; } else { $newuser->role = 0; } $newuser->login = substr($login, 0, 15); $newuser->email = substr($email, 0, 64); $newuser->passwd = substr($passwd, 0, 24); $id = $newuser->Create($rerror, $error); if ($id && !$error) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/activate_code.php"; $this->parent->saveActionWizard($this, step_wizard::STATUS_CONFIRM); $this->parent->bindUserIDReg($id); unset($_SESSION['ref_uri']); require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php'; $smail = new smail(); $bSuspect = users::isSuspiciousUser($id, $newuser->login, '', $newuser->uname, '', $newuser->usurname, ''); $sPasswd = $bSuspect ? $newuser->passwd : ''; // чтобы из админки можно было выслать $smail->NewUser $code = activate_code::Create($id, $newuser->login, $sPasswd, $error); if (!$bSuspect) { $_SESSION['suspect'] = false; // юзер не подозрительный - сразу отпавляем юзеру письмо с кодом активации $smail->NewUser($newuser->login, false, $code, $this->getWizardUserID(), $newuser->role ? 'emp' : 'frl'); } else { $_SESSION['suspect'] = true; // отправляем уведомление админу о том, что зарегистрировался подозрительный юзер // если админ его одобрит - то письмо с кодом активации уйдет из админки $smail->adminNewSuspectUser($newuser->login, $newuser->uname, $newuser->usurname); } //Записываем подтвержденный номер телефона в финансы require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/sms_gate.php"; $phone = '+' . preg_replace("#^\\+#", "", $_SESSION["reg_phone"]); unset($_SESSION["regform_captcha_entered"]); sms_gate::saveSmsInfo($phone, $_SESSION["reg_sms_isnn"], $_SESSION["smsCode"], $_SESION["reg_sms_date_send"], $id); // стираем куку, чтобы показался блок "Вы успешно зарегистрировались" setcookie('master_auth', "", time() - 3600, '/'); // Серый список IP ---------------------- require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/gray_ip.php'; $aGrayList = gray_ip::getGrayListByRegIp(getRemoteIP()); if ($aGrayList) { // есть записи в списке первичных IP gray_ip::addSecondaryIp($id, $newuser->login, $newuser->role, $aGrayList); } //--------------------------------------- $_SESSION['email'] = $newuser->email; header("Location: /wizard/registration/"); exit; } } } elseif ($action == 'authorization') { $auth_error = $this->authorization($auth_login); } include $_SERVER['DOCUMENT_ROOT'] . "/wizard/registration/steps/tpl.step.reg.php"; }
/** * Основной метод регистрации пользователей * @param bool $is_preset Флаг, показывающий наличие подготовленных данных * @return type */ public function actionRegistration($is_preset = false) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/sbr_meta.php"; if (!$is_preset) { $this->setFieldInfo('role', __paramInit('int', null, 'role')); $this->setFieldInfo('login', trim(__paramInit('string', null, 'login'))); $this->setFieldInfo('email', trim(__paramInit('string', null, 'email'))); $this->setFieldInfo('subscr_news', trim(__paramInit('bool', null, 'subscribe'))); //$this->setFieldInfo('smscode', trim(__paramInit('string', null, 'smscode'))); //$this->setFieldInfo('phone', $_SESSION["reg_phone"]); // пароль берем напрямую из $_POST, а то __paramInit режет спецсимволы (пароль хешируется - SQL инъекция невозможна) $this->setFieldInfo('password', stripslashes($_POST['password'])); $this->checkedFields(); session_start(); $this->setFieldInfo('captchanum', __paramInit('string', null, 'captchanum')); $num = __paramInit('string', null, 'rndnum'); if (!$_SESSION["regform_captcha_entered"]) { $_SESSION['reg_captcha_num'] = $this->captchanum; $captcha = new captcha($this->captchanum); if (!$captcha->checkNumber($num)) { $this->error['captcha'] = 'Неверный код. Попробуйте еще раз'; $this->is_validate = false; unset($_SESSION['reg_captcha_num']); } } } //if ( (is_release() || $_SESSION["reg_phone"] != 71111112222) && sbr_meta::findSafetyPhone($_SESSION["reg_phone"], __paramInit('string', null, 'role') == 2 ? 'emp' : 'frl') ) { // $this->error['phone'] = 'Пользователь с таким номером уже зарегистрирован'; // $this->is_validate = false; // unset($_SESSION['reg_captcha_num']); //} if ($this->is_validate) { //unset($_SESSION['smsIsRequested']); if ($this->role == self::ROLE_FREELANCER) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/freelancer.php"; $newuser = new freelancer(); $newuser->role = 0; } else { if ($this->role == self::ROLE_EMPLOYER) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/employer.php"; $newuser = new employer(); $newuser->role = 1; } } $newuser->login = substr($this->login, 0, 15); $newuser->email = substr($this->email, 0, 64); $newuser->passwd = substr($this->password, 0, 24); $newuser->subscr = '1111111' . (int) $this->subscr_news . '11111111'; $newuser->uid = $newuser->Create($rerror, $error); if ($newuser->uid && !$error) { $ok = $this->completedRegistration($newuser); if ($ok) { //require_once $_SERVER['DOCUMENT_ROOT']."/classes/sms_gate.php"; //$phone = '+' . preg_replace("#^\+#", "", $_SESSION["reg_phone"]); unset($_SESSION["regform_captcha_entered"]); unset($_SESSION["login_generated"]); $tu_ref_uri = @$_SESSION['tu_ref_uri']; //unset($_SESSION["reg_phone"]); //unset($_SESSION['send_sms_time']); //sms_gate::saveSmsInfo($phone, $_SESSION["reg_sms_isnn"], $_SESSION["smsCode"], $_SESION["reg_sms_date_send"], $newuser->uid); $_SESSION['email'] = $newuser->email; $_SESSION['rrole'] = $this->role; // Если пришли сюда регистрироватся то после нажатия кнопки регистрации удаляем куки регистрации иначе после активации нас перекинет на мастер $wizard = new wizard(); $wizard->clearCookiesById($newuser->role == 1 ? 1 : 2); // В зависимоти от того кого регистрируем // На всякий случай при новой регистрации удаляем переменную проверки self::resetCheckAccess(); $_user_action = isset($_REQUEST['user_action']) && $_REQUEST['user_action'] ? substr(htmlspecialchars($_REQUEST['user_action']), 0, 25) : ''; $_user_action = trim($_user_action); login($newuser->login, users::hashPasswd(trim(stripslashes($newuser->passwd))), 1, false); if (is_emp($newuser->role)) { $_SESSION['reg_role'] = 'Employer'; $ref_uri = isset($_SESSION['ref_uri'], $_SESSION['was_customer_wizard']) ? urldecode($_SESSION['ref_uri']) : null; unset($_SESSION['was_customer_wizard']); $redirect_to = $ref_uri ? $ref_uri : '/public/?step=1&kind=1'; //По умолчанию, при регистрации заказчика, перенаправляем его на публикацию проекта if (strpos($_user_action, 'project_to_')) { $login = str_replace('add_project_to_', '', $_user_action); $redirect_to = '/public/?step=1&kind=9&exec=' . $login; } $redirect = __paramInit('link', NULL, 'redirect'); if ($redirect && !$ref_uri) { $redirect_to = urldecode($redirect); } } else { $_SESSION['reg_role'] = 'Freelancer'; $redirect_to = $redirect_to = "/registration/profession.php" . (!empty($user_action) ? "?user_action={$user_action}" : ''); //Очищаем чтобы далее небыло редиректа //@todo: согласно https://beta.free-lance.ru/mantis/view.php?id=28862 $_user_action = ''; } switch ($_user_action) { case 'tu': if ($tu_ref_uri) { $redirect_to = HTTP_PFX . $_SERVER["HTTP_HOST"] . urldecode($tu_ref_uri); } break; case 'new_tu': if (!is_emp($newuser->role)) { $redirect_to = HTTP_PFX . $_SERVER["HTTP_HOST"] . '/users/' . $newuser->login . '/tu/new/'; } else { $redirect_to = HTTP_PFX . $_SERVER["HTTP_HOST"] . '/tu/'; } break; case 'promo_verification': $redirect_to = '/promo/verification/'; break; case 'buypro': if (is_emp($newuser->role)) { $redirect_to = '/payed-emp/'; } else { $redirect_to = '/payed/'; } break; case 'add_order': $url = __paramInit('link', NULL, 'redirect'); $redirect_to = HTTP_PFX . $_SERVER["HTTP_HOST"] . urldecode($url); break; } if (!is_emp($newuser->role)) { $_SESSION['activate_password'] = $newuser->passwd; $_SESSION['subscr_news'] = (int) $this->subscr_news; //Создаем новый экземпляр, т.к. нужно обновить только подписки //Отписываем от всего, кроме личных сообщений $freelancer = new freelancer(); $freelancer->UpdateSubscr($newuser->uid, 1, array(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false, 0); } //Обработать действия по событию успешной регистрации $this->afterSuccessRegistation($newuser); if ($is_preset) { return array('success' => true, 'user_id' => $newuser->uid, 'redirect' => $redirect_to); } else { header("Location: " . $redirect_to); exit; } } } } else { return $this->error; } }
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/attachedfiles.php"; $attachedfiles = new attachedfiles($attachedfiles_session); $attachedfiles_info = $attachedfiles->calcFiles(); if ((!$msg || trim($msg) == "") && !(sizeof($files) || $attachedfiles_info['count'])) { $error_flag = 1; $alert[2] = "Поле заполнено некорректно"; } elseif ($msg && strlen($msg) > messages::MAX_MSG_LENGTH) { $error_flag = 1; $alert[2] = "Вы ввели слишком большое сообщение. Текст сообщения не должен превышать 20 000 символов."; } if ($isNeedUseCaptcha) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/captcha.php"; $captchanum = $_POST['captchanum']; $captcha = new captcha($captchanum); $rnd = $_POST['rndnum']; if (!$captcha->checkNumber(trim($rnd))) { $error_flag = 1; $alert[4] = "Вы ввели неверную комбинацию символов"; } } // если запрошено обновление капчи в PDA $newCaptcha = $_POST['newcaptcha']; if ($newCaptcha) { $alert = array(); } if ($chat_with != $_SESSION['login'] && !$error_flag) { list($alert, $error) = messages::Add(get_uid(), $chat_with, $msg, $files, 0, false, $attachedfiles_session); if (!$error && isNulArray($alert)) { messages::updateSendLog(get_uid(false)); if ($draft_id) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/drafts.php";
/** * напоминание пароля через телефон и логин. * * @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; }
/* if(in_array($type, array('new_projects')) && $info["role"][0] != 0){ include ABS_PATH . '/404.php'; exit; } */ $alert = ''; //TODO: Избавиться от этого сообщения if (!$ukey) { $alert = 'Не удалось найти пользователя'; } if ($action == 'unsubscribe') { $num = __paramInit('string', null, 'rndnum'); $captchanum = __paramInit('string', null, 'captchanum'); $captcha = new captcha($captchanum); if (!$captcha->checkNumber($num)) { $alert = 'Введены неверные символы'; } if (!$alert) { $class = 'users'; $vacancy = 0; if ($info['role'][0] == 0) { $class = 'freelancer'; $vacancy = array(); } $user = new $class(); global $DB; if ($type == 'new_projects') { if ($info['role'][0] == 1) { //@todo: UpdateSubscr2 пока только для работодателей $info['subscr'][12] = 0;
$TML->assignCompanyInfoAndTheme(); $errors = array(); $page = array(); $department = (int) $_REQUEST["department_db_id"]; $canChangeName = Visitor::getInstance()->canVisitorChangeName(); $v = GetVisitorFromRequestAndSetCookie(); $visitorid = $v['id']; $captcha_num = $v['captcha']; $message = get_mandatory_param('message'); $has_errors = false; if (count($_POST) == 0 && count($_FILES) == 0) { //костыль. при отправке на сервер большого файла приходит пустой request и files, как по длругому определить, пока не придумал $has_errors = true; $errors[0] = 6; $errors[1] = iconv("UTF-8", "WINDOWS-1251//IGNORE", "Файл очень велик"); } elseif (!$captcha->checkNumber($captcha_num)) { $has_errors = true; $errors[0] = 5; $errors[1] = iconv("UTF-8", "WINDOWS-1251//IGNORE", "Неверно введен текст"); } elseif (empty($message) || $message == '') { $has_errors = true; $errors[0] = 4; $errors[1] = iconv("UTF-8", "WINDOWS-1251//IGNORE", "Заполните это поле"); } elseif (!$department) { $has_errors = true; $errors[0] = 7; $errors[1] = iconv("UTF-8", "WINDOWS-1251//IGNORE", "Неверно введен текст"); } $fileIndex = 1; if (!$has_errors) { $files = array();