Ejemplo n.º 1
0
 /**
  * Сохранение данных фильтра для последующего его создания или обновления.
  *
  * @param integer $user_id    id пользователя
  * @param array   $categories массив с категориями/профессиями
  * @param bool    ;only_my_offs       только мои предложения
  *
  * @return string
  */
 public function Save($user_id, $categories, $only_my_offs)
 {
     $uid = get_uid(false);
     list($cost_from, $cost_to) = projects_filters::preCosts($cost_from, $cost_to);
     $currency = intval($currency);
     $country = intval($country);
     $city = intval($city);
     $wo_cost = $wo_cost ? 't' : 'f';
     $my_specs = $my_specs ? 't' : 'f';
     if (!$force && $uid != $user_id) {
         $rerror += 1;
     }
     //if (!preg_match( "/^[-^!#$%&'*+\/=?`{|}~.\w]+@[-a-zA-Z0-9]+(\.[-a-zA-Z0-9]+)+$/", $email )) { $rerror += 2; }
     //if (!in_array($currency, array(0, 1, 2))) { $rerror += 4; }
     if (!$error && !$rerror) {
         global $DB;
         $sql = 'SELECT id FROM offers_filter WHERE user_id=? LIMIT 1';
         $filter_id = $DB->val($sql, $user_id);
         if (!$filter_id) {
             $error = $this->Add($user_id, $categories, $only_my_offs);
         } else {
             $error = $this->Update($filter_id, $categories, $only_my_offs);
         }
     }
 }
Ejemplo n.º 2
0
/**
 * Скрывает или отображает платные проекты.
 *
 * @see projects_filter::ShowClosedProjects()
 * @see projects_filter::initClosedProjects()
 *
 * @param string $id     id определенного или all для всех
 * @param string $type   скрыть (hide) или показать (unhide)
 * @param int $kind  тип текущей закладки главной страницы (см. new_projects::getProjects())
 * @param int $page  номер текущей страницы.
 * @param bool $filter  включен ли фильтр у юзера.
 *
 * @return object xajaxResponse
 */
function HideProject($id, $type, $kind, $page, $filter)
{
    session_start();
    $objResponse = new xajaxResponse();
    $all = $id == 'all';
    $id = (int) $id;
    $uid = $_SESSION['uid'];
    if ($type == 'hide') {
        if ($all) {
            if ($tops = new_projects::getTopProjects()) {
                foreach ($tops as $t) {
                    $_SESSION['ph'][$t['id']] = base64_encode($t['name']);
                    $objResponse->assign("project-item{$t['id']}", 'outerHTML', '');
                }
            }
            $nDH = $nH * count($_SESSION['ph']);
            unset($_SESSION['top_payed']);
        } else {
            $nDH = $nH;
            $_SESSION['ph'][$id] = base64_encode(projects::GetField($id, 'name'));
            $_SESSION['top_payed']--;
            $objResponse->assign("project-item{$id}", 'outerHTML', '');
        }
    } else {
        if ($all && $_SESSION['ph']) {
            $nDH = -1 * $nH * count($_SESSION['ph']);
            unset($_SESSION['ph']);
        } else {
            $nDH = -1 * $nH;
            unset($_SESSION['ph'][$id]);
            if (!$_SESSION['ph']) {
                unset($_SESSION['ph']);
            }
        }
        if ($filter) {
            $prj_filter = new projects_filters();
            $uf = $prj_filter->GetFilter($uid, $error);
        }
        $prj = new new_projects();
        $content = $prj->SearchDB((int) $kind, (int) $page, 0, $uf, true);
        $objResponse->assign("projects-list", "innerHTML", $content);
    }
    if ($_SESSION['ph']) {
        $ccph = array_keys($_SESSION['ph']);
    }
    setcookie("ph[{$uid}]", $ccph ? implode(',', $ccph) : '', time() + 60 * 60 * 24 * 30, '/');
    $content = projects_filters::ShowClosedProjects((int) $kind, (int) $page, (int) $filter);
    $objResponse->assign("flt-hide-content", "innerHTML", $content);
    $objResponse->assign("flt-hide-cnt", "innerHTML", sizeof($_SESSION['ph']) ? "(" . sizeof($_SESSION['ph']) . ")" : "");
    // компенсируем изменение высоты блока скрытых проектов
    $objResponse->script("height=\$('flt-hide-content').getStyle('height').toInt()+'px';\$('flt-hide-content').getParent().setStyle('height', height);\n    fbox=\$('flt-ph');fslider=new Fx.Slide(fbox.getElement('.flt-cnt'),{duration:400});\n    fbox.f_isShw=fbox.hasClass('flt-show');fbox.getElement('.flt-cnt').setStyle('display','block');\n    if(fbox.f_isShw){fslider.show();}else{fslider.hide();}");
    return $objResponse;
}
Ejemplo n.º 3
0
 /**
  * Сохранение данных фильтра для последующего его создания или обновления
  *
  * @param integer $filter_id          id пользователя
  * @param integer $cost_from          бюджет ОТ
  * @param integer $cost_to            бюджет ДО
  * @param integer $currency           id валюты поиска (0 - все)
  * @param boolean $wo_cost            поиск по проектам с неуказанным бюджетом
  * @param array $categories           массив с категориями/профессиями
  * @param integer $country            id страны
  * @param integer $city               id города
  * @param integer $keywords           поисковые слова
  * @param boolean $my_specs           использовать поиск только по специализациям пользователя
  * @param integer $page               id страницы фильтра
  * @param boolean $nogeo              обновлять или нет текущие город и страну в фильтре
  * 
  * @param string $konkursEndDaysFrom  конкурс заканчивается через столько дней - нижняя граница
  * @param string $konkursEndDaysTo    конкурс заканчивается через столько дней - верхняя граница
  * 
  * @param  bool $use_main_filter опционально. Для page равно 2 "API мобильного приложения". Если true использвать фильтр page равно 0 "Главная страница"
  * @return string
  */
 function Save($user_id, $cost_from, $cost_to, $currency, $wo_cost, $categories, $country, $city, $keywords, $my_specs, &$rerror, &$error, $force = 0, $page = 0, $nogeo = false, $only_sbr = false, $pro_only = false, $verify_only = false, $less_offers = false, $konkursEndDaysFrom = null, $konkursEndDaysTo = null, $use_main_filter = false, $priceby = 4, $urgent_only = false, $block_only = false, $hide_exec = false)
 {
     $uid = get_uid(false);
     list($cost_from, $cost_to) = projects_filters::preCosts($cost_from, $cost_to);
     $currency = intval($currency);
     $priceby = intval($priceby);
     $country = intval($country);
     $city = intval($city);
     $wo_cost = $wo_cost ? 't' : 'f';
     $my_specs = $my_specs ? 't' : 'f';
     $only_sbr = $only_sbr ? 't' : 'f';
     $pro_only = $pro_only ? 't' : 'f';
     $urgent_only = $urgent_only ? 't' : 'f';
     $block_only = $block_only ? 't' : 'f';
     $verify_only = $verify_only ? 't' : 'f';
     $less_offers = $less_offers ? 't' : 'f';
     $use_main_filter = $use_main_filter ? 't' : 'f';
     $konkursEndDaysFrom = $konkursEndDaysFrom || $konkursEndDaysFrom === '0' ? intval($konkursEndDaysFrom) >= 0 ? intval($konkursEndDaysFrom) : 0 : null;
     $konkursEndDaysTo = $konkursEndDaysTo || $konkursEndDaysTo === '0' ? intval($konkursEndDaysTo) >= 0 ? intval($konkursEndDaysTo) : 0 : null;
     // если первая дата больше второй, то меняем их местами
     if ($konkursEndDaysFrom !== null && $konkursEndDaysTo !== null && $konkursEndDaysFrom > $konkursEndDaysTo) {
         list($konkursEndDaysFrom, $konkursEndDaysTo) = array($konkursEndDaysTo, $konkursEndDaysFrom);
     }
     $hide_exec = $hide_exec ? 't' : 'f';
     if (!$force && $uid != $user_id) {
         $rerror += 1;
     }
     if (!$error && !$rerror) {
         if (get_uid(false)) {
             global $DB;
             $sql = "SELECT id FROM projects_filters WHERE user_id=? AND page=? LIMIT 1";
             $filter_id = $DB->val($sql, $user_id, $page);
             if (!$filter_id) {
                 $error = $this->Add($user_id, $cost_from, $cost_to, $currency, $wo_cost, $categories, $country, $city, $keywords, $my_specs, $page, $only_sbr, $pro_only, $verify_only, $less_offers, $konkursEndDaysFrom, $konkursEndDaysTo, $use_main_filter, $priceby, $urgent_only, $block_only, $hide_exec);
             } else {
                 $error = $this->Update($filter_id, $cost_from, $cost_to, $currency, $wo_cost, $categories, $country, $city, $keywords, $my_specs, $page, $nogeo, $only_sbr, $pro_only, $verify_only, $less_offers, $konkursEndDaysFrom, $konkursEndDaysTo, $use_main_filter, $priceby, $urgent_only, $block_only, $hide_exec);
             }
         } else {
             $f_data = array();
             $c_data = array();
             $f_data['filter'] = compact('cost_from', 'cost_to', 'currency', 'wo_cost', 'country', 'city', 'keywords', 'my_specs', 'page', 'only_sbr', 'pro_only', 'verify_only', 'less_offers', 'konkurs_end_days_from', 'konkurs_end_days_to', 'use_main_filter', 'priceby', 'urgent_only', 'block_only', 'hide_exec');
             if (is_array($categories[0]) && sizeof($categories[0])) {
                 foreach ($categories[0] as $category => $type) {
                     $category = intval($category);
                     $c_data[] = array('filter_id' => $filter_id, 'group_id' => $category, 'group_level' => false);
                 }
             }
             if (is_array($categories[1]) && sizeof($categories[1])) {
                 foreach ($categories[1] as $category => $type) {
                     $category = intval($category);
                     $c_data[] = array('filter_id' => $filter_id, 'group_id' => $category, 'group_level' => true);
                 }
             }
             if (count($c_data)) {
                 $f_data['f_projects_groups'] = $c_data;
             }
             $_SESSION['f_project_filter'] = $f_data;
             $_SESSION['f_project_filter']['filter']['active'] = 't';
             $_SESSION['f_project_filter']['filter']['tcats'] = $categories;
         }
     }
 }
Ejemplo n.º 4
0
 /**
  * Возвращает список проектов.
  * 
  * @param integer $num_prjs		возвращает кол-во проектов
  * @param integer|array $kind   тип проектов (-1=5=Все проекты; 2=Конкурсы; 4=В офис; 6=Только для про)
  *                              если массив, то: array(тип, tops_only), где
  *                              tops_only: true, если нужно получить только закрепленные проекты.
  * @param integer $page			страница проектов (кол-во проектов на странице PAGE_SIZE)
  * @param boolean $comments		возвращать ли комментарии к проектам (проекты без Кандидат-Исполнитель)				
  * @param array   $filter		массив с фильтром проектов				
  * @param integer $prj_id       ID проекта, если не NULL то берется тинформация только об одном проекте
  * @param integer $is_closed    Конкурс или проект закрыт или нет
  * @param integer $to_date      Брать проекты только до этой даты.
  * @param boolean $withouttop   возвращать ли проекты не учитывая их закрепление
  * @return array				массив с информацией о проектах
  */
 function getProjects(&$num_prjs, $kind = -1, $page = 1, $comments = false, $filter = NULL, $is_blocked = true, $is_ajax = false, $prj_id = NULL, $is_closed = false, $to_date = NULL, $withouttop = false)
 {
     global $DB;
     list($kind, $tops_only) = (array) $kind;
     $is_emp = is_emp();
     $is_moder = hasPermissions('projects');
     $uid = $_SESSION['uid'];
     if ($uid && !$_SESSION['ph'] && !$is_ajax) {
         projects_filters::initClosedProjects();
     }
     $phidd = $_SESSION['ph'];
     $filterSql = new_projects::createFilterSql($filter, $kind);
     $ret = NULL;
     $limit = $this->page_size;
     if ((int) $page < 1) {
         $page = 1;
     }
     $offset = $to_date ? 0 : ($page - 1) * $limit;
     $slimit = $limit + (int) (!!$filterSql);
     // для проверки, есть ли след. страница.
     $addit = '';
     if ($filterSql) {
         if ($tops_only) {
             $addit = "(p.edit_date IS NOT NULL AND p.edit_date > NOW() - interval '2 month') AND ";
         } else {
             $addit = "(p.post_date > NOW() - interval '2 month') AND ";
         }
     }
     $addit .= (get_uid(false) ? '' : 'COALESCE(p.hide, false) = false AND ') . 'p.closed = false AND p.user_id <> 0 AND p.kind <> 9';
     if ($is_closed) {
         $addit .= ' AND ( p.end_date > NOW() OR p.end_date IS NULL )';
     }
     if ($kind == 6) {
         $addit .= ' AND p.pro_only = true';
     } else {
         if ($kind == 2) {
             $addit .= " AND (p.kind = 2 OR p.kind = 7)";
         } else {
             if ($kind != -1 && $kind != 5) {
                 $addit .= " AND p.kind = '{$kind}'";
             }
         }
     }
     if ($phidd && is_array($phidd)) {
         $hidden_projects = array();
         foreach ($phidd as $pkey => $pvalue) {
             $hidden_projects[] = $pkey;
         }
         $addit .= ' AND p.id NOT IN (' . implode(',', $hidden_projects) . ')';
     }
     if ($comments) {
         $comm = ' LEFT JOIN blogs_themes_old bt ON bt.id_gr = p.id AND bt.base = ' . ($kind == 2 ? 5 : 3);
         $sel = ', bt.thread_id, bt.messages_cnt - 1 as comm_count';
         if ($uid) {
             $comm .= " LEFT JOIN projects_watch pw ON pw.user_id = {$uid} AND pw.prj_id = p.id ";
             $sel .= ', pw.status AS prj_status';
         }
     }
     //выборка предложения по проекту пользователя
     if ($uid && !$is_emp) {
         $sel_offer = ", po.id as offer_id, po.refused, po.selected";
         $join_offer = " LEFT JOIN projects_offers po ON po.project_id = p.id AND po.user_id = '{$uid}' ";
     }
     // исключаем заблокированные проекты
     $sel_blocked = ", pb.reason as blocked_reason, pb.blocked_time, pb.project_id::boolean as is_blocked";
     $join_blocked = "LEFT JOIN projects_blocked pb ON p.id = pb.project_id ";
     if ($is_moder) {
         $sel_blocked .= ", admins.login as admin_login, admins.uname as admin_uname, admins.usurname as admin_usurname";
         $join_blocked .= "LEFT JOIN users as admins ON pb.admin = admins.uid ";
     } else {
         $join_c_blocked = $join_blocked;
         $wb = "(" . ($is_emp ? "p.user_id = {$uid} OR " : "") . " pb.project_id IS NULL) ";
         $where_blocked = "WHERE {$wb}";
         if ($filterSql) {
             $where_blocked = "";
         }
         $where_c_blocked = "AND {$wb}";
         if (!$is_blocked) {
             $join_is_blocked = $join_blocked;
             $where_is_blocked = "WHERE {$wb}";
             $where_is_c_blocked = "AND {$wb}";
         }
     }
     $offset = intvalPgSql((string) $offset);
     // условие, при котором проект в данный момент закреплен наверху ленты.
     $top_cond = ' ( (top_from IS NOT NULL AND now() BETWEEN top_from AND top_to) OR strong_top = 1 ) ';
     $top_payed_col = 'top_from';
     if (!$tops_only) {
         // Закрепленные получаем отдельным запросом.
         if ($withouttop) {
             $top_cond = "NOT(1=0)";
             $top_payed_col = "'epoch'";
             $order = 'p.post_date DESC';
             $tops = array();
             $tops_cnt = 0;
         } else {
             $top_cond = "NOT({$top_cond})";
             $top_payed_col = "'epoch'";
             $order = 'p.strong_top DESC, p.post_date DESC';
             $tops = $to_date ? array() : $this->getProjects($x, array($kind, true), 1, $comments, $filter, $is_blocked, $is_ajax, $prj_id);
             $tops_cnt = count($tops);
         }
         if ($offset >= $tops_cnt) {
             // Случай, когда топы не попадают на заданную страницу, но надо сдвинуть оффсет для
             // получения обычных проектов.
             $x_offset = $offset - ($tops_cnt > $slimit ? $slimit : $tops_cnt);
             $x_limit = $slimit;
             $tops = array();
         } else {
             // когда топ-проектов больше чем помещается на одну страницу
             // по-любому все топы должны быть на первой странице, обычных проектов уже не будет
             if ($page === 1) {
                 if ($tops_cnt > $limit) {
                     $limit = $tops_cnt;
                     $x_limit = 0;
                     // обычных проектов уже не надо
                 } else {
                     $x_limit = $slimit - $tops_cnt;
                 }
             } else {
                 $x_limit = $slimit - (($tops_cnt > $offset ? $offset : $tops_cnt) - $offset);
             }
             $x_offset = 0;
             //$tops = array_splice($tops, $offset, $slimit); // не зыбываем оставлять один проверочный в конце.
             if ($x_limit < 0) {
                 // Т.е. на странице вместились только топы.
                 $x_limit = 0;
             }
             if ($page !== 1) {
                 $tops = array();
             }
         }
         $limit_str = "LIMIT {$x_limit} OFFSET {$x_offset}";
         if ($to_date) {
             $where_date = $DB->parse(' AND p.post_date < ? ', $to_date);
         }
     } else {
         $order = 'p.strong_top DESC, sort_date ASC, p.post_date ASC';
         //$order = 'p.strong_top DESC, p.top_from DESC, p.post_date ASC';
         //$order = 'p.post_date DESC';
     }
     if ($prj_id) {
         $prjid_sql = " AND p.id = " . intval($prj_id);
         $limit_str = '';
     }
     // Показываем для всех, кроме модераторов и владельцев, только проект со статусом "Опубликован" (projects.state = 0)
     /*
     if (!$is_moder) {
         //$addit .= ' AND (p.state = 0 OR p.user_id = '.intval($uid).')';
         $addit .= " AND NOT(p.payed = 0 AND p.kind = ".self::KIND_VACANCY." AND p.state = ".self::STATE_MOVED_TO_VACANCY.")";
     }
     */
     $sql = "\n         SELECT p.*, {$top_payed_col} as top_payed, f.fname as logo_name, f.path as logo_path, NULL as category_name, city.city_name, country.country_name, e.login,\n                e.uid, e.uname, e.usurname, e.warn, e.role, e.is_pro, e.is_team, e.email, e.is_banned, e.self_deleted, e.is_verify, e.photo, e.reg_date, e.modified_time, e.photo_modified_time, fl.is_banned  as exec_is_banned \n                {$sel_offer} {$sel} {$sel_blocked}\n           FROM (\n             -- этот запрос оптимизирован под индекс 'ix projects/main'.\n             SELECT p.*,\n                -- особая сортировка: железные проекты по возрастанию даты публикации, остальные закрепленные по убыванию даты закрепления\n                CASE WHEN p.strong_top = 1 THEN (p.post_date - NOW()) ELSE (NOW() - p.top_from) END as sort_date\n             FROM projects p {$join_is_blocked}\n              WHERE {$addit} {$where_is_c_blocked} {$where_date} {$filterSql} AND {$top_cond} {$prjid_sql}\n              ORDER BY {$order} {$limit_str}\n           ) as p\n         INNER JOIN\n           employer e\n             ON e.uid = p.user_id\n         LEFT JOIN\n           freelancer fl\n             ON fl.uid = p.exec_id\n         LEFT JOIN\n           file_projects f\n             ON f.id = p.logo_id\n         LEFT JOIN \n           city \n             ON city.id = p.city\n         LEFT JOIN \n           country\n             ON country.id = p.country\n         {$join_blocked}\n         {$join_offer}\n         {$comm}\n         {$where_blocked}\n         ORDER BY {$order}";
     $ret = $DB->rows($sql);
     if (($ret || $tops) && !$tops_only) {
         if ($tops) {
             $ret = array_merge($tops, $ret ? $ret : array());
         }
         $blocked_cnt = 0;
         $scnt = count($ret);
         if ($scnt > $limit) {
             array_pop($ret);
             // убиваем проверочный проект (см. $slimit).
         }
         if (!$is_moder) {
             foreach ($ret as $k => $v) {
                 if ($v['is_blocked'] && !($is_emp && $v['user_id'] == $uid) || $v['is_banned'] == 1) {
                     unset($ret[$k]);
                     $blocked_cnt++;
                 }
             }
         }
         if ($num_prjs != 'nenado') {
             if (!$filterSql) {
                 $num_prjs = (int) new_projects::getProjectsCount($kind, $page, $is_emp ? $uid : null, $is_moder);
             } else {
                 $cnt = $scnt;
                 //+ $blocked_cnt;
                 $num_prjs = $offset + $cnt;
                 // + (int)($cnt > $limit) * $limit; // 0012679
             }
         }
     }
     setlocale(LC_ALL, 'en_US.UTF-8');
     return $ret;
 }
Ejemplo n.º 5
0
 /**
  * Возвращает ленту проектов.
  * 
  * @param int   $kind      тип проектов (-1=5=Все проекты; 2=Конкурсы; 4=В офис; 6=Только для про)
  * @param array $filter    массив с фильтром проектов (тот же, что для projects::getProjects(), но разделы в таком виде: [[1,2,3], [44,55,66]], где по индексу 0 -- разделы, по 1 -- подразделы)
  * @param int   $page_size кол-во проектов на странице.
  *
  * @return array
  */
 protected function x____getProjects($args)
 {
     list($kind, $filter, $page_size) = $args;
     require_once ABS_PATH . '/classes/projects.php';
     require_once ABS_PATH . '/classes/projects_filter.php';
     require_once ABS_PATH . '/classes/professions.php';
     $result = null;
     $projects = new new_projects();
     $kind = $kind ? (int) $kind : $this->_mCfg['default_kind'];
     $page_size = (int) $page_size;
     $limit = $page_size > $this->_mCfg['max_page_size'] ? $this->_mCfg['max_page_size'] : ($page_size < $this->_mCfg['min_page_size'] ? $this->_mCfg['page_size'] : $page_size);
     if ($filter) {
         $filter['active'] = $this->ex2pg(EXTERNAL_TRUE, EXTERNAL_DT_BOOL);
         $filter['wo_cost'] = $this->ex2pg($filter['wo_cost'], EXTERNAL_DT_BOOL);
         $filter['only_sbr'] = $this->ex2pg($filter['prefer_sbr'], EXTERNAL_DT_BOOL);
         if ($filter['my_specs']) {
             $filter['my_specs'] = $this->ex2pg($filter['my_specs'], EXTERNAL_DT_BOOL);
             $filter['user_specs'] = professions::GetProfessionsByUser($this->_sess->_uid, false, true);
         }
         if (isset($filter['categories']) && is_array($filter['categories'])) {
             $filter['categories'] = intarrPgSql($filter['categories']);
             $cats = $filter['categories'];
             $filter['categories'] = array();
             foreach ($cats as $i => $arr) {
                 if ($i > 1) {
                     break;
                 }
                 if (is_array($arr) && !isNulArray($arr)) {
                     if ($i == 1) {
                         $arr = professions::GetMirroredProfs(implode(',', $arr));
                     }
                     $filter['categories'][$i] = array_fill_keys($arr, $i);
                 }
             }
         }
         list($filter['cost_from'], $filter['cost_to']) = projects_filters::preCosts($filter['cost_from'], $filter['cost_to']);
     }
     if ($prjs = $projects->getLastProjects($kind, $filter, $limit, true)) {
         foreach ($prjs as $key => $p) {
             $row = $this->pg2exRow($this->_mCfg['fields'], $p);
             if ($row['logo']) {
                 $row['logo'] = WDCPREFIX . '/' . $row['logo'];
             }
             if ($attach = $projects->getAllAttach($p['id'])) {
                 $row['attach'] = array();
                 foreach ($attach as $a) {
                     $att = $this->pg2exRow($this->_mCfg['attach-fields'], $a);
                     $att['link'] = WDCPREFIX . '/' . $a['path'] . $a['name'];
                     $row['attach'][] = $att;
                 }
             }
             $result[$key] = $row;
         }
     }
     return $result;
 }
Ejemplo n.º 6
0
/**
 * Залогинивает юзера. Возвращает UID юзера. Выставляет куки "автологина".
 * ВНИМАНИЕ! возвращает UID юзера, если находит его. Либо возвращает
 * 	0 - не найден
 *  -1 - аккаунт забанен
 *  -2 - аккаунт неактивирован
 *  -3 - IP не входит в список IP разрешенных пользователем
 *  -4 - требуется 2ой этап авторизации
 * 
 * @param string $login				логин юзера
 * @param string $pwd				пароль
 * @param integer $autologin		флаг "автологина"
 * @return integer					UID юзера
 */
function login($login, $pwd, $autologin = 0, $annoy_check = true)
{
    require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/annoy.php";
    $annoy = new annoy();
    $user = new users();
    if ($annoy_check) {
        if (intval($_SESSION['login_wait_time']) > time()) {
            $redirect_checkpass = true;
        } else {
            // Проверить сколько раз воодился пароль
            if (isset($_SESSION['login_wait_time'])) {
                $annoy->Clear(getRemoteIP());
            }
            $login_count = $annoy->Check(getRemoteIP());
            if ($login_count >= $GLOBALS['max_login_tries']) {
                $_SESSION['login_wait_time'] = time() + $GLOBALS['login_wait_time'] * 60;
                $redirect_checkpass = true;
            }
        }
        if ($redirect_checkpass == true) {
            header("Location: /checkpass.php");
            exit;
        }
    }
    //Получаем логин и проверяем счетчик
    $_uid = $user->getUidByLoginEmailPhone($login);
    if ($_uid > 0 && !$annoy->allowRepeatPass($_uid)) {
        header("Location: /banned.php");
        exit;
    }
    //@todo: нет проверок наличия ключей
    $t_filter_prj = $_SESSION['f_project_filter'];
    $t_filter_frl = $_SESSION['f_freelancers_filter'];
    $t_ref_uri2 = $_SESSION['ref_uri2'];
    $adCatalog = $_SESSION['toppayed_catalog'];
    $adMain = $_SESSION['toppayed_main'];
    $adHead = $_SESSION['toppayed_head'];
    $adText = $_SESSION['toppayed_text'];
    $masssending = $_SESSION['masssending'];
    $newPrjName = $_SESSION['new_project_name'];
    $newPrjCost = $_SESSION['new_project_cost'];
    //Сохраняем значение типа 2хэпапной авторизации перед очисткой сессии
    $_2fa_provider = isset($_SESSION['2fa_provider']) ? $_SESSION['2fa_provider'] : null;
    $_2fa_redirect = isset($_SESSION['2fa_redirect']) ? $_SESSION['2fa_redirect'] : null;
    //Переносим хеши ссылок на уже зафиксированные местки для юзера при выходе/входе
    $_ga_stat_url_hash = isset($_SESSION['ga_stat_url_hash']) ? $_SESSION['ga_stat_url_hash'] : null;
    //Последняя посещенная страница
    $_ref_uri = isset($_SESSION['ref_uri']) ? $_SESSION['ref_uri'] : null;
    $_pda = isset($_SESSION['pda']) ? $_SESSION['pda'] : null;
    $_customer_wizard = isset($_SESSION['customer_wizard']) ? $_SESSION['customer_wizard'] : null;
    session_unset();
    if ($_customer_wizard) {
        $_SESSION['customer_wizard'] = $_customer_wizard;
    }
    if ($_pda) {
        $_SESSION['pda'] = $_pda;
    }
    if ($_ref_uri) {
        $_SESSION['ref_uri'] = $_ref_uri;
    }
    //Воссанавливаем значение хешей ссылок
    if ($_ga_stat_url_hash) {
        $_SESSION['ga_stat_url_hash'] = $_ga_stat_url_hash;
    }
    //Востанавливаем значение 2хэпапной авторизации после очистки сессии
    if ($_2fa_provider !== null) {
        $_SESSION['2fa_provider'] = $_2fa_provider;
    }
    if ($_2fa_redirect !== null) {
        $_SESSION['2fa_redirect'] = $_2fa_redirect;
    }
    //Выключаем проверку 2ого этапа авторизации
    //если это вход из куки или еще откуда (но неявно от пользователя)
    //где мы уже уверены что 2этапа пройдены ранее юзером
    $is_2fa_off = $annoy_check === false;
    //Авторизация
    $id = $user->Auth($login, $pwd, $_SESSION, $is_2fa_off);
    //Считаем и блокируем по количеству неудачных авторизаций
    if (!$id && $_uid > 0) {
        $annoy->wrongRepeatPass($_uid);
    }
    //Успешная авторизация
    if ($id > 0) {
        $annoy->clearRepeatPass($id);
        require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/payed.php";
        $pro_last = payed::ProLast($_SESSION['login']);
        //Покупал ли пользователь ПРО 1 мес и более или тестовый
        if (!is_emp()) {
            $_SESSION['is_was_pro'] = $pro_last ? true : payed::isWasPro($_SESSION['uid']);
        }
        $_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/memBuff.php";
        $memBuff = new memBuff();
        $memBuff->delete("msgsCnt{$id}");
        //Получение спецализаций фрилансера
        if (!is_emp()) {
            require_once ABS_PATH . "/classes/freelancer.php";
            $specData = freelancer::getAllSpecAndGroup($id, is_pro());
            $_SESSION['specs'] = $specData['specs'];
            //Список специализаций
            $_SESSION['groups'] = $specData['groups'];
            //Список групп
            //@todo: пока не используется
            //$_SESSION['specs_tree'] = $specData['specs_tree']; //Ввиде древа группа > специализации
        }
        require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/drafts.php";
        $iDraftsCount = drafts::getCount($id);
        $_SESSION['drafts_count'] = $iDraftsCount;
        if ($autologin == 1) {
            setcookie('id', $id, time() + 60 * 60 * 24 * 30, '/', $GLOBALS['domain4cookie'], COOKIE_SECURE, true);
            setcookie('name', $login, time() + 60 * 60 * 24 * 30, '/', $GLOBALS['domain4cookie'], COOKIE_SECURE);
            setcookie('pwd', users::cookieHashPasswd($id), time() + 60 * 60 * 24 * 30, '/', $GLOBALS['domain4cookie'], COOKIE_SECURE, true);
        }
        $_SESSION['f_project_filter'] = $t_filter_prj;
        $_SESSION['f_freelancers_filter'] = $t_filter_frl;
        $_SESSION['ref_uri2'] = $t_ref_uri2;
        $_SESSION['toppayed_catalog'] = $adCatalog;
        $_SESSION['toppayed_main'] = $adMain;
        $_SESSION['toppayed_head'] = $adHead;
        $_SESSION['toppayed_text'] = $adText;
        if ($masssending) {
            $_SESSION['masssending'] = $masssending;
        }
        $_SESSION['new_project_name'] = $newPrjName;
        $_SESSION['new_project_cost'] = $newPrjCost;
        if ($t_filter_prj) {
            require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects_filter.php";
            $prj_filter = new projects_filters();
            $prj_filter->SaveFromAnon();
        }
        if ($t_filter_frl) {
            require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/freelancers_filter.php";
            $frl_filter = new freelancers_filters();
            $frl_filter->SaveFromAnon();
        }
        //var_dump($_SESSION['customer_wizard']);
        //var_dump($_SESSION['customer_wizard_filled']);
        //exit;
        //Если заказчик пытается опубликовать проект через мастер то публикуем после авторизации
        if (is_emp() && isset($_SESSION['customer_wizard']['filled'])) {
            require_once ABS_PATH . '/guest/models/GuestActivationModel.php';
            $_SESSION['ref_uri'] = GuestActivationModel::model()->published($id, $_SESSION['email']);
        }
    }
    // случайное число, используемое в get/post запросах для защиты.
    if (!$_SESSION['rand']) {
        $_SESSION['rand'] = csrf_token();
    }
    return $id;
}
Ejemplo n.º 7
0
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/freelancer.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/professions.php';
// страницу могут смотреть только зарегистрированые фрилансеры
$uid = get_uid(false);
if (!$uid || is_emp()) {
    include $_SERVER['DOCUMENT_ROOT'] . '/403.php';
    exit;
}
$profession_id = __paramInit('int', null, 'profession', null);
if ($profession_id !== null) {
    $redirect_to = '/projects/';
    if ($profession_id > 0) {
        require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects_filter.php';
        //Создаем фильтр для проектов
        $f_category[1][$profession_id] = 1;
        $prj_filter = new projects_filters();
        $prj_filter->Save($uid, '', '', 2, true, $f_category, '', '', '', false, $rerror, $error, 0, 0, false, false, false, false, false, false, false, false, 4, false, false);
        setcookie('new_pf0', 1, time() + 60 * 60 * 24 * 30, '/');
        //Сохраняем как основную специализацию
        $or_spec = professions::GetProfessionOrigin($profession_id);
        $frl = new freelancer();
        $frl->spec = $profession_id;
        $frl->spec_orig = $or_spec;
        professions::setLastModifiedSpec($uid, $profession_id);
        $frl->Update($uid, $error);
        $_SESSION['specs'] = $frl->GetAllSpecs($uid);
    }
    //Если есть редирект то он приоритетней
    if ($_SESSION['ref_uri']) {
        $redirect_to = urldecode($_SESSION['ref_uri']);
    }
Ejemplo n.º 8
0
get_uid(false);
if ($_SESSION['p_ref']) {
    unset($_SESSION['p_ref']);
}
$prfs = new professions();
$profs = $prfs->GetAllProfessions("", 0, 1);
$uid = get_uid(!$action);
$page = intval($_GET['page']);
if ($page < 1) {
    $page = 1;
    $bPageDefault = true;
}
// фильтр, этот фильтр не подключаем в ПДА
if (!$PDA) {
    if ($kind != 8) {
        $prj_filter = new projects_filters();
        $filter = $prj_filter->GetFilter($uid, $error, $filter_page);
        GaJsHelper::getInstance()->setProjectsFilterCategory($filter['categories']);
        adriver::getInstance()->setProjectsFilterCategory($filter['categories']);
        $filter['state'] = 0;
        $filter_apply = $filter['active'] == "t";
        // проекты
        $prj = new new_projects();
        $prj_content = $prj->SearchDB($kind, $page, $filter || is_emp() || hasPermissions('projects') ? 0 : 1, $filter, false, true);
        //echo $prj_content;die;
        $prj_pos = strpos($prj_content, '<!--data_found-->');
    } else {
        $filter_page = $kind * 10;
        $filter_params = array('kind' => isset($_GET['kind']) ? intval($_GET['kind']) : intval($_POST['kind']));
        // Развернутость / свернутость фильтра.
        if (isset($_COOKIE['new_pf' . $filter_page])) {
Ejemplo n.º 9
0
 /**
  * Получение списока проектов
  * 
  * @param  array $aParams массив входящих данных
  * @return array $aResult ответ
  */
 protected function x____projects_list($aParams = array())
 {
     $this->_validDevice($aParams);
     require_once ABS_PATH . '/classes/projects_filter.php';
     require_once ABS_PATH . '/classes/projects.php';
     $nUid = get_uid(false);
     $nPage = self::$_aPlatform[$this->_sPlatform]['filter_page'];
     // какой фильтр получать
     $prj_filter = new projects_filters();
     $filter = $prj_filter->GetFilter($nUid, $error, $nPage);
     if (is_array($filter) && $filter && $filter['active'] == 't' && $filter['use_main_filter'] == 't') {
         $filter = $prj_filter->GetFilter($nUid, $error, 0);
     }
     $nKind = intvalPgSql($aParams['kind']);
     $nKind = !empty($nKind) ? $nKind : $this->_mCfg['default_kind'];
     $nPage = intvalPgSql($aParams['page']);
     $nPage = !empty($nPage) ? $nPage : 1;
     $oPrj = new new_projects();
     $oPrj->page_size = $this->_mCfg['items_per_page'];
     if (is_emp()) {
         $aProjects = $oPrj->GetCurPrjs($nUid, '', true, false, $nKind);
         $nPrgCnt = count($aProjects);
     } else {
         $aProjects = $oPrj->getProjects($nPrgCnt, $nKind, $nPage, true, $filter, true, false, NULL, false, NULL, true);
     }
     $aResult = array('projects_list' => array());
     if (is_array($aProjects) && $aProjects) {
         $aItems = array();
         $aIds = array();
         $nCnt = 0;
         foreach ($aProjects as $aOne) {
             $aResult['projects_list'][$nCnt] = $this->_getProjectData($aOne);
             $aItems[$aOne['id']] =& $aResult['projects_list'][$nCnt];
             $aIds[] = $aOne['id'];
             $nCnt++;
         }
         $aSpecs = new_projects::getSpecs($aIds);
         if (is_array($aSpecs) && $aSpecs) {
             foreach ($aSpecs as $aOne) {
                 $aItems[$aOne['project_id']]['category_id'] = $aOne['category_id'];
                 $aItems[$aOne['project_id']]['subcategory_id'] = $aOne['subcategory_id'];
             }
         }
         $aResult['projects_total'] = intval($nPrgCnt);
     }
     return $aResult;
 }
Ejemplo n.º 10
0
<div class="flt-out <?php 
    echo $filter2_show ? "flt-show" : "flt-hide";
    ?>
" id="flt-ph" page="10">
    <b class="b1"></b>
    <b class="b2"></b>
     <div class="flt-bar">
          <a href="javascript: void(0);" class="flt-tgl-lnk"><?php 
    echo $filter2_show ? "Свернуть" : "Развернуть";
    ?>
</a>
          <h3>Скрытые платные проекты <span id="flt-hide-cnt"><?php 
    echo sizeof($_SESSION['ph']) && $_SESSION['uid'] ? " (" . sizeof($_SESSION['ph']) . ")" : "";
    ?>
</span></h3>
     </div>
     <div class="flt-cnt" id="flt-hide-content" <?php 
    echo $filter2_show ? "style='display:block;'" : "";
    ?>
>
      <?php 
    echo projects_filters::ShowClosedProjects($kind, $page, (int) ($filter['active'] == 't'));
    ?>
     </div>
    <b class="b2"></b>
    <b class="b1"></b>
</div>

<?php 
}