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
 /**
  * Сохранение данных фильтра для последующего его создания или обновления
  *
  * @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.º 3
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;
 }