Example #1
0
?>
</td>
				<td></td>
			</tr>
			<?php 
if ($user->birthday && $user->birthday > '1910-01-01') {
    ?>
			<tr>
				<th>Дата рождения:</th>
				<td>
	
				<?php 
    echo dateFormat('d.m.y', $user->birthday);
    ?>
 (Возраст: <?php 
    echo ElapsedYears(strtotimeEx($user->birthday));
    ?>
)
	
				</td>
				<td></td>
			</tr>
		<?php 
}
?>
                        <?php 
if ($val = $user->sex) {
    ?>
			<tr>
				<th>Пол:</th>
				<td><?php 
Example #2
0
 /**
  * Аутентификация пользователя и заполнение его сессии необходимыми данными.
  *
  * @param string $login логин пользователя
  * @param string $pwd   пароль пользователя
  * @param array &params             данные пользователя
  * @param boolean $is_2fa_off принудительное откулючение 2х этапной проверки
  *
  * @return integer id сессии
  *
  * @global DB $DB
  */
 public function Auth($login, $pwd, &$params, $is_2fa_off = false)
 {
     //////////////////////////////////////////////////////////
     // Ахтунг! Изменение логики нужно отражать также в новом движке.
     // Например, при добавлении новый полей в сессию, добавьте их в Web_Front::login()
     //////////////////////////////////////////////////////////
     global $DB;
     $plogin = preg_replace('/[+ ()-]/', '', $login);
     $phoneType = preg_replace("/\\D/", '', $plogin);
     if ($phoneType == $plogin) {
         $plogin = '******' . $plogin;
         $sql = "SELECT user_id FROM sbr_reqv WHERE (_1_mob_phone = ? OR _2_mob_phone = ?) AND is_activate_mob = 't'";
         $uids = $DB->rows($sql, $plogin, $plogin);
         if ($uids) {
             foreach ($uids as $u) {
                 $sql_uids .= $u['user_id'] . ',';
             }
             $sql_uids = preg_replace('/,$/', '', $sql_uids);
         }
     }
     $sql = '
       SELECT 
         u.email, u.role, u.uname, u.usurname, u.uid, u.is_banned, u.ban_where, u.active, 
         a.sum, a.bonus_sum,
         u.login, u.anti_uid, u.is_pro_test, u.is_pro_new, u.is_chuck, 
         u.sex, u.settings, u.splash_show, u.is_verify,
         u.reg_date, ac.code, u.photo, u.is_profi,
         u.birthday
       FROM users AS u
       LEFT JOIN activate_code ac ON ac.user_id = u.uid  
       LEFT JOIN account AS a ON a.uid = u.uid
       WHERE ((lower(u.login) = ? OR lower(u.email) = ?) AND u.passwd = ?) ' . ($sql_uids ? "OR ( u.uid IN ({$sql_uids}) AND u.passwd = ?)" : '');
     $res = $DB->rows($sql, strtolower($login), mb_strtolower($login), $pwd, $pwd);
     if ($res) {
         $qres = $res;
         $uvisits = array();
         $n = 0;
         foreach ($qres as $k => $v) {
             $uvisits[$this->getLastVisit($v['uid']) . '-' . $n] = $k;
             ++$n;
         }
         asort($uvisits);
         $res = $qres[array_pop($uvisits)];
     }
     $error .= $DB->error;
     $first_login = $this->getLastVisit($res['uid']);
     $ip = getRemoteIP();
     /**
      * Дополнительная проверка логина. 
      * Нужна для исправления паролей, содержащих 
      * теги (или похожие на теги последовательности).
      * 
      * !!Убрать после следующей глобальной смены паролей.
      */
     if (!$res) {
         // попробуем убрать (0018079)
         //$res = $this->FixPassword($sql, $login);
     }
     /**
      * Определяем нужна ли 2хэтапная авторизация.
      */
     if (!$is_2fa_off && count($res) && $first_login) {
         //не первый вход
         //если на 2ом этапе ввели другой аккаунт то направить
         //обратно на 2ой этап и сообщить обэтом
         if (isset($params['2fa_provider']['uid']) && $params['2fa_provider']['uid'] != $res['uid']) {
             $is_login = $params['2fa_provider']['type'] == 0;
             session::setFlashMessage($is_login ? self::TXT_AUTH_2FA_LOG_FAIL : self::TXT_AUTH_2FA_SOC_FAIL, '/auth/second/');
             return self::AUTH_STATUS_2FA;
         }
         $is_opauth = defined('IS_OPAUTH');
         if (!isset($params['2fa_provider']) || $params['2fa_provider']['type'] > 0 != $is_opauth) {
             //несовпадают типы авторизаций на 2ом этапе
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/opauth/OpauthModel.php';
             $opauthModel = new OpauthModel();
             $is_2fa = $opauthModel->getMultilevel($res['uid']);
             if (isset($is_2fa['type'])) {
                 //$is_2fa - авторизация через выбранную соцсеть
                 //0 - нужна обычная авторизация так как вход был выполнен через соцсеть
                 $params['2fa_provider'] = array('type' => !$is_opauth ? $is_2fa['type'] : 0, 'uid' => $res['uid'], 'login' => $res['login']);
                 //Сбрасываем авторизацию
                 $res = array();
                 //переходим ко 2ой стадии
                 return self::AUTH_STATUS_2FA;
             }
         }
     }
     //Более нам параметр этапов авторизации не нужен
     unset($params['2fa_provider']);
     /**
      * Успешная авторизация.
      */
     if (count($res)) {
         list($email, $trole, $tname, $tsurname, $tid, $is_banned, $ban_where, $active, $sum, $bonus_sum, $log, $anti_uid, $is_pro_test, $is_pro_new, $is_chuck, $sex, $settings, $splash_show, $is_verify, $reg_date, $activate_code, $photo, $is_profi, $birthday) = array_values($res);
         if ($activate_code != '' && $active == 't') {
             $this->checkRegDate($tid, $reg_date);
         }
         if ($is_banned) {
             return -1;
         }
         //if ($active=='f') return -2; //##0027983
         if (!$this->CheckUserAllowIP($ip, $tid)) {
             return -3;
         }
         $params['birthday'] = $birthday ? strtotime($birthday) : null;
         $params['age'] = $params['birthday'] ? intval(ElapsedYears($params['birthday'])) : null;
         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/permissions.php';
         $params['permissions'] = permissions::getUserPermissions($tid);
         $params['email'] = $email;
         $params['role'] = $trole;
         $params['name'] = $tname;
         $params['surname'] = $tsurname;
         $params['uid'] = $tid;
         $params['user_ip'] = $ip;
         $params['ac_sum'] = zin($sum);
         $params['bn_sum'] = zin($bonus_sum);
         $params['login'] = $log;
         $params['is_pro_new'] = $is_pro_new;
         $params['pro_test'] = $is_pro_test;
         $params['is_chuck'] = $is_chuck;
         $params['is_verify'] = $is_verify;
         $params['sex'] = $sex;
         $params['reg_date'] = $reg_date;
         $params['photo'] = $photo;
         if (!is_emp($trole)) {
             $params['is_profi'] = $is_profi === 't';
         }
         if ($anti_uid) {
             $anti_class = is_emp($trole) ? 'freelancer' : 'employer';
             require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/{$anti_class}.php";
             $anti = new $anti_class();
             $anti->GetUserByUID($anti_uid);
             $params['anti_uid'] = $anti->uid;
             $params['anti_login'] = $anti->login;
             $params['anti_surname'] = $anti->usurname;
             $params['anti_name'] = $anti->uname;
         }
         if (!is_emp($params['role'])) {
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects_offers.php';
             if ($po_summary = projects_offers::GetFrlOffersSummary($params['uid'])) {
                 $params['po_count'] = $po_summary['total'];
             }
         }
         $sql = 'UPDATE users SET last_time = now(), last_ip = ?, is_active = true WHERE uid = ?i';
         $res = $DB->query($sql, $ip, $tid);
         $this->SaveLoginIPLog($tid, $ip);
         $this->increaseLoginsCnt($tid);
         // количество операций
         $sQuery = 'SELECT COUNT(ao.id) FROM account_operations ao 
             INNER JOIN account a ON a.id = ao.billing_id WHERE a.uid = ?i AND (ao.ammount <> 0 OR ao.trs_sum <> 0)';
         $params['account_operations'] = $DB->val($sQuery, $tid);
         $params['question_button_hide'] = $settings[1];
         // Показывать/скрывать кнопку "У вас есть вопрос?"
         $params['promo_block_hide'] = $settings[2];
         // показывать Блок "Быстрый доступ к основным функциям сайта"
         $params['direct_external_links'] = $settings[3];
         // Не показывать страницу "Переход по внешней ссылке" a.php
         $params['sbr_slash_show'] = $settings[4] && $first_login < strtotime('2012-08-08');
         // Показывать/скрыть СБР промо-слеш
         $params['splash_show'] = $splash_show;
         $params['chat'] = $settings[5];
         $params['chat_sound'] = $settings[6];
         // #0017182 > Вопрос можем ли мы вытащить эту настройку из кук пользователей и сохранить ее в базу?
         if (empty($settings[3]) && $_COOKIE['direct_external_links'] == 1) {
             $this->setDirectExternalLinks($tid, 1);
             if ($anti_uid) {
                 $this->setDirectExternalLinks($anti_uid, 1);
             }
             setcookie('direct_external_links', '', time() - 60 * 60 * 24 * 365, '/');
             setcookie('no_a_php', '1', time() + 60 * 60 * 24 * 365 * 2, '/');
         }
         //генерация куки для userecho
         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/userecho.php';
         setcookie('ue_sso_token', UserEcho::get_sso_token(USERECHO_API_KEY, USERECHO_PROJECT_KEY, array()), 0, '/', preg_replace('/^https?\\:\\/\\/(?:www\\.)?/', '.', 'fl.ru'));
         // Первый заход, регистрация через мастер, мастер не закончен
         if ($first_login == 0) {
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wizard/wizard.php';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wizard/wizard_registration.php';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wizard/step_employer.php';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/wizard/step_freelancer.php';
             if (is_emp($params['role'])) {
                 $wiz_user = wizard::isUserWizard($tid, step_employer::STEP_REGISTRATION_CONFIRM, wizard_registration::REG_EMP_ID);
             } else {
                 $wiz_user = wizard::isUserWizard($tid, step_freelancer::STEP_REGISTRATION_CONFIRM, wizard_registration::REG_FRL_ID);
             }
             if ($wiz_user['id'] > 0) {
                 $role = is_emp($params['role']) ? wizard_registration::REG_EMP_ID : wizard_registration::REG_FRL_ID;
                 header('Location: /registration/activated.php?role=' . $role);
                 //header("Location: /wizard/registration/?role={$role}");
                 exit;
             } elseif (!is_emp($params['role'])) {
                 require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/payed.php';
                 $pro_last = payed::ProLast($_SESSION['login']);
                 $_SESSION['pro_last'] = $pro_last['is_freezed'] ? false : $pro_last['cnt'];
                 if ($_SESSION['pro_last'] && $_SESSION['is_pro_new'] != 't') {
                     payed::checkNewPro($id);
                 }
                 if ($pro_last['freeze_to']) {
                     $_SESSION['freeze_from'] = $pro_last['freeze_from'];
                     $_SESSION['freeze_to'] = $pro_last['freeze_to'];
                     $_SESSION['is_freezed'] = $pro_last['is_freezed'];
                     $_SESSION['payed_to'] = $pro_last['cnt'];
                 }
                 if ($_SESSION['anti_login']) {
                     $pro_last = payed::ProLast($_SESSION['anti_login']);
                     $_SESSION['anti_pro_last'] = $pro_last['freeze_to'] ? false : $pro_last['cnt'];
                 }
                 //отправляем письмо с инфой, как работать на сайте
                 /*
                 require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/smail.php");
                 $mail = new smail();
                 
                 if (is_emp()) {                
                     $mail->employerQuickStartGuide(get_uid(false));
                 } else {
                    $mail->freelancerQuickStartGuide(get_uid(false));
                 }
                 */
                 return $tid;
                 if (!defined('IN_API')) {
                     // для API мобильного приложения не нужно
                     header("Location: /users/{$login}/");
                     exit;
                 }
             }
         }
         //-----------------------------------
     } else {
         $tid = 0;
         require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/annoy.php';
         $annoy = new annoy();
         $annoy->Add($ip);
     }
     return $tid;
 }
Example #3
0
<?php

require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/teams.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/stat_collector.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/country.php";
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stop_words.php';
$team = new teams();
$stop_words = new stop_words(hasPermissions('projects'));
stat_collector::setStamp();
foreach ($f_offers as $i => $offer) {
    unset($user_ago);
    if ($offer['birthday'] !== NULL && $offer['birthday'] > "1910-01-01") {
        $user_ago = ElapsedYears(strtotime($offer['birthday']));
    }
    $info_for_reg = @unserialize($offer['info_for_reg']);
    $offer['sf'] = abs($offer['se']) + abs($offer['sg']) + abs($offer['sl']);
    $offer['ef'] = abs($offer['e_plus']) + abs($offer['e_null']) + abs($offer['e_minus']);
    if (get_uid(false)) {
        $offer['is_fav'] = $team->teamsIsInFavorites($_SESSION['uid'], $offer['uid']);
    }
    $sTitle = htmlspecialchars($offer['title']);
    $sTitle = $offer['moderator_status'] === '0' && $offer['is_pro'] != 't' ? $stop_words->replace($sTitle) : $sTitle;
    $sTitle = reformat($sTitle, 35, 0, 1);
    $sDescr = htmlspecialchars($offer['descr']);
    $sDescr = $offer['moderator_status'] === '0' && $offer['is_pro'] != 't' ? $stop_words->replace($sDescr) : $sDescr;
    $sDescr = reformat($sDescr, 50);
    ?>
<a name="o_<?php 
    echo $offer['id'];
    ?>
Example #4
0
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/sbr.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/opinions.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/payed.php";
global $session;
$sbr_info = sbr_meta::getUserInfo($user->uid);
//@todo: упростил но это вообще здесь не нужно впринципе см getHeaderData
$from = is_emp($user->role) ? 'emp' : 'frl';
$op_data = opinions::getHeaderData($from, $user, $user->uid);
if (!$rating || !$rating instanceof rating || $rating->data['user_id'] != $user->uid) {
    $rating = new rating($user->uid, $user->is_pro, $user->is_verify, $user->is_profi, 1);
}
$r_data = $rating->data;
//$samerank = rating::CountByRank($r_data['rank']);
$banblog = $user->GetBan($user->uid, 1);
if ($user->birthday && $user->birthday > "1910-01-01") {
    $user_ago = ElapsedYears(strtotime($user->birthday));
}
$info_for_reg = @unserialize($user->info_for_reg);
$team = new teams();
// срок окончания ПРО - только для админов
if (hasPermissions('users') && $user->is_pro === 't') {
    $proLast = payed::ProLast($user->login);
    $proDate = date('d-m-Y в h:i', strtotime($proLast['cnt']));
}
$access_favorite = $_SESSION['login'] && $user->login != $_SESSION['login'];
$access_contacts = ($user->isCurrent() || is_view_contacts($user->uid) || hasPermissions('users')) && is_contacts_not_empty($user);
$show_contacts_col = $access_favorite || $access_contacts;
$is_allow_messages = true;
if ($uid > 0 && !is_emp() && is_emp($user->role)) {
    require_once ABS_PATH . "/classes/messages.php";
    $is_allow_messages = messages::isAllowed($user->uid, $uid);
Example #5
0
 /**
  * Возвращает часть ответа с информацией о пользователе
  * 
  * @param  array $aData информация о пользователе из базы
  * @param  bool $bShowEmail включить пользователя Email в ответ
  * @param  bool $bExtended получить расширенную информацию (аналог профиля на сайте)
  * @return array
  */
 private function _getUserData($aData = array(), $bShowEmail = false, $bExtended = false)
 {
     $this->_oSession->view_online_status($aData['login'], false);
     $u = new users();
     if (!is_emp($aData['role'])) {
         require_once ABS_PATH . '/classes/professions.php';
         $prof_id = $aData['spec'] ? $aData['spec'] : 0;
         $prof_group_id = $aData['spec'] ? professions::GetProfField($aData['spec'], 'prof_group') : 0;
     } else {
         $prof_id = 0;
         $prof_group_id = 0;
     }
     $aReturn = array('id' => $aData['uid'], 'status' => $aData['self_deleted'] == 't' ? 2 : 1, 'username' => $aData['login'] ? iconv('cp1251', 'utf-8', $aData['login']) : '', 'firstname' => $aData['uname'] ? iconv('cp1251', 'utf-8', $aData['uname']) : '', 'lastname' => $aData['usurname'] ? iconv('cp1251', 'utf-8', $aData['usurname']) : '', 'role' => is_emp($aData['role']) ? 2 : 1, 'pro' => $aData['is_pro'] == 't' ? 1 : 0, 'verified' => $aData['is_verify'] == 't' ? 1 : 0, 'online' => $this->_oSession->is_active ? 1 : 0, 'spec' => $aData['spec'] ? $aData['spec'] : 0, 'avatar' => array('url' => $aData['photo'] ? WDCPREFIX . '/users/' . $aData['login'] . '/foto/' : '', 'file' => $aData['photo'] ? substr($aData['photo'], 2) . '?' . strtotime($aData['photo_modified_time']) : ''), 'gender' => $aData['sex'] == 't' ? 1 : ($aData['sex'] == 'f' ? 2 : 0), 'country_id' => intval($aData['country']), 'city_id' => intval($aData['city']), 'age' => ElapsedYears(strtotime($u->GetField($aData['uid'], $e, 'birthday'))), 'birthday' => $u->GetField($aData['uid'], $e, 'birthday'), 'prof_id' => $prof_id, 'prof_group_id' => $prof_group_id, 'create_time' => strtotime($aData['reg_date']), 'update_time' => $aData['modified_time'] ? strtotime($aData['modified_time']) : 0);
     if ($bShowEmail) {
         $aReturn['email'] = $aData['email'] ? iconv('cp1251', 'utf-8', $aData['email']) : '';
     }
     if ($bExtended) {
         require_once ABS_PATH . '/classes/rating.php';
         require_once ABS_PATH . '/classes/teams.php';
         $rating = new rating($aData['uid'], $aData['is_pro'], $aData['is_verify'], @$aData['is_profi'], 1);
         $team = new teams();
         $aReturn['rating'] = rating::round($rating->data['total']);
         $aReturn['favorite'] = $team->teamsIsInFavorites($_SESSION['uid'], $aData['uid']);
         $aReturn['contacts'] = is_view_contacts(get_uid(false)) ? $this->_getUserContactsData($aData) : array();
         $aReturn['reviews'] = $this->_getUserOpinionsData($aData);
     }
     return $aReturn;
 }