Пример #1
0
 /**
  * Основной метод регистрации пользователей
  * @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;
     }
 }
Пример #2
0
         }
     }
     // сообщества
     $comm = !empty($_POST['comm']) ? array_map('intvalPgSql', $_POST['comm']) : false;
     require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/commune.php";
     if (!empty($_POST['commune_topics'])) {
         $cm = new commune();
         $cm->clearSubscription($uid);
         $cm->setCommunesSubscription($comm, $uid, true);
     } else {
         $cm = new commune();
         $cm->clearSubscription($uid);
     }
     // сообщества
     $frl = new freelancer();
     $error .= $frl->UpdateSubscr($uid, $newmsgs, $vacan, $comments, $opin, $prcomments, $commune_subscr, $commune_top_subscr, __paramInit('bool', NULL, 'adm_subscr'), __paramInit('bool', NULL, 'contest'), __paramInit('bool', NULL, 'team'), 0, $articlescomments, $massending, 0, $daily_news, __paramInit('bool', NULL, 'vacan'), __paramInit('bool', NULL, 'payment'));
     if (!$error) {
         $membuff = new memBuff();
         $membuff->flushGroup('massending_calc');
         $info_msg = "Изменения внесены";
     }
     break;
 case "inform_change":
     foreach ($_POST as $key => $value) {
         if (!is_array($value)) {
             $_POST[$key] = stripslashes($value);
         }
     }
     $frl = new freelancer();
     if (($datey = trim($_POST['datey'])) && ($dated = trim($_POST['dated']))) {
         if (!is_numeric($datey) || !is_numeric($dated) || !checkdate(intval(trim($_POST['datem'])), intval($dated), intval($datey))) {