Пример #1
0
        $prof_link = htmlspecialchars($_GET['prof']);
        $prof_id = professions::GetProfId($_GET['prof']);
        $prof_group_parent_id = professions::GetProfGroupParentId($_GET['prof']);
        if (!$prof_id) {
            $prof_group_id = professions::GetProfGroupId($_GET['prof']);
        }
    }
    if (!$prof_id && !$prof_group_id) {
        $prof_link = '';
        $_GET['region_filter_city'] = $_GET['region_filter_country'];
        $_GET['region_filter_country'] = $_GET['prof'];
    }
} else {
    if (isset($_POST['prof'])) {
        if (preg_match("/^[0-9]+\$/", $_GET['prof'])) {
            $prof_id = intvalPgSql(trim($_POST['prof']));
        } else {
            $prof_link = $_POST['prof'];
            $prof_id = professions::GetProfId($_POST['prof']);
        }
    }
}
//------------------------------------------------------------------------------
if (isset($_GET['profession_db_id']) && !($prof_id > 0 && $prof_id == $_GET['profession_db_id'] || $prof_group_id > 0 && $prof_group_id == $_GET['profession_db_id'])) {
    $link = null;
    if ($_GET['profession_db_id'] > 0) {
        if ($_GET['profession_column_id'] > 0) {
            $link = professions::GetProfLink($_GET['profession_db_id']);
        } else {
            $link = professions::GetGroupLink($_GET['profession_db_id']);
        }
Пример #2
0
<?php

$rpath = '../';
$header = '../header.php';
$footer = '../footer.html';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects_offers.php';
session_start();
$uid = get_uid();
$pid = intvalPgSql((int) trim($_GET['pid']));
$wid = intvalPgSql((int) trim($_GET['wid']));
$name = trim($_GET['user']);
$user_obj = new users();
$user_obj->GetUser($name);
$uid = $user_obj->GetUid($error, $name);
$proj = array();
$proj = (array) $user_obj;
// Проект.
$obj_project = new projects();
$project = $obj_project->GetPrjCust($pid);
if (!$project || !$user_obj->uid) {
    $fpath = '../';
    include '../404.php';
    exit;
} else {
    // Предложения по данному проекту.
    $obj_offer = new projects_offers();
    $offer = $obj_offer->GetPrjOffer($pid, $user_obj->uid);
    $width = $height = 0;
    if (!$offer) {
Пример #3
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;
 }
Пример #4
0
 /**
  * Получает диалог в личных сообщениях между двумя пользователями для модераторов
  * Сюда не входят сообщения которые не когда не будут проверенны модераторами.
  *
  * @param int    $to_id         id пользователя-получателя
  * @param string $from_login    логин пользователя-отправителя
  * @param int    $num_msgs_from вывод, начиная с какого-то сообщения
  * @param int    $msg_offset    количество получаемых сообщений (($msg_offset-1) * $GLOBALS['msgspp'])
  *
  * @return mixed массив диалога в случае успеха или текст ошибки
  */
 public function GetMessagesForModers($to_id, $from_login, $offset = 1, $limit = null)
 {
     require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php';
     $limit = $limit ? $limit : $GLOBALS['msgspp'];
     $offset = (($offset < 1 ? 1 : $offset) - 1) * $limit;
     $user = new users();
     $user->login = $from_login;
     $from_id = $user->GetUid($error);
     $num_msgs_from = 0;
     if ($from_id) {
         $DB = new DB();
         $offset = intvalPgSql((string) $offset);
         $rows = $DB->rows('SELECT m.*, array_length(m.files, 1) AS fcount FROM messages_dialog(?i, ?i) m WHERE moderator_status IS NOT NULL LIMIT ?i OFFSET ?i', $to_id, $from_id, $limit, $offset);
         self::getMessagesAttaches($rows);
         return $rows;
     }
 }
Пример #5
0
 /**
  * Новая СБР
  * Проверяет пользовательский запрос на создание/редактирование СБР. Инициализирует данные в соответствии с переданными значениями.
  * 
  * @param array $request данные запроса (гет, пост).
  * @param array $files   массив $_FILES с вложениями к каждому этапу.
  * @param sbr   $old     старый экземпляр сделки. Передается при редактировании.
  *
  * @return bool нет ошибок?
  */
 public function _new_initFromRequest($request, $files = null, $old = null)
 {
     $is_now_draft = $this->data['is_draft'];
     $this->data['is_draft'] = $request['draft'] ? 't' : 'f';
     if (!isset($request['frl_db_id'])) {
         $request['frl_db_id'] = '';
     }
     $request['frl_db_id'] = intval($request['frl_db_id']);
     if (isset($request['tuid'], $request['tuhash'])) {
         if ($request['tuhash'] === $this->tserviceHash($request['tuid'])) {
             $service = $this->checkTService($request['tuid'], $request['frl_db_id']);
             if ($service) {
                 $this->data['tservice_id'] = $service['id'];
                 $this->data['tservice_hash'] = $this->tserviceHash($service['id']);
             }
         }
     } elseif ($request['project_id']) {
         $this->checkProject($request['project_id']);
     }
     // если сделка создается из конкурса, то исполнителем может быть только победитель конкурса
     if ($request['project_id'] && isset($request['frl_db_id']) && $this->project['kind'] == 7 && $this->project['exec_id'] != $request['frl_db_id']) {
         $request['frl_db_id'] = $this->project['exec_id'];
         $this->error['frl'] = 'Исполнителем этой сделки может быть только победитель конкурса';
     }
     if (!isset($request['scheme_type'])) {
         $request['scheme_type'] = '';
     }
     if ($old) {
         if (!$request['cost_sys']) {
             $request['cost_sys'] = $old->cost_sys;
         }
         if (!$request['scheme_type']) {
             $request['scheme_type'] = $old->scheme_type;
         }
     }
     foreach ($request as $field => $value) {
         if (is_scalar($value)) {
             $value = trim(stripslashes($value));
         }
         switch ($field) {
             case 'stages':
                 foreach ($value as $pos => $stage) {
                     $nowStage = $this->getStageByIdForData($stage['id']);
                     $value[$pos]['descr'] = htmlspecialchars($stage['descr']);
                     if (($request['scheme_type'] == sbr::SCHEME_PDRD || $request['scheme_type'] == sbr::SCHEME_PDRD2) && $stage['cost'] < sbr_stages::MIN_COST_RUR_PDRD) {
                         $this->error['cost'][$nowStage->data['num']] = 'Поле заполненно некоректно';
                     }
                     if ($request['scheme_type'] == sbr::SCHEME_LC && $is_now_draft != 't' && $stage['cost'] < sbr_stages::MIN_COST_RUR && $stage['cost'] != $nowStage->data['cost']) {
                         $this->error['cost'][$nowStage->data['num']] = 'Поле заполненно некоректно';
                     }
                     if ($request['scheme_type'] == sbr::SCHEME_LC && $is_now_draft == 't' && $stage['cost'] < sbr_stages::MIN_COST_RUR) {
                         $this->error['cost'][$nowStage->data['num']] = 'Поле заполненно некоректно';
                     }
                     if ($this->data['reserved_id'] && (int) $stage['work_time_add'] == 0) {
                         $value[$pos]['work_time'] = $nowStage->data['work_time'];
                         $request[$field][$pos]['work_time'] = $nowStage->data['work_time'];
                     } elseif ($this->data['reserved_id'] && (int) $stage['work_time_add'] > 0) {
                         $start_time = $nowStage->data['start_time'] ? $nowStage->data['start_time'] : $nowStage->data['first_time'];
                         $endDate = strtotime($start_time . ' + ' . $nowStage->data['int_work_time'] . 'days');
                         $nextDate = $endDate < time() ? strtotime("+{$stage['work_time_add']} days") : strtotime(date('d.m.Y H:i', $endDate) . "+{$stage['work_time_add']} days");
                         $workTime = ceil(($nextDate - strtotime($start_time)) / 86400);
                         $value[$pos]['work_time'] = $workTime;
                         $request[$field][$pos]['work_time'] = $workTime;
                     }
                 }
                 break;
             case 'name':
                 if (is_empty_html($value)) {
                     $this->error[$field] = 'Пожалуйста, заполните это поле';
                 }
                 $value = substr($value, 0, self::NAME_LENGTH);
                 break;
             case 'frl_db_id':
                 if (!$this->isDraft()) {
                     if (!$value || $value == 'логин') {
                         $this->error['frl_db_id'] = 'Необходимо добавить исполнителя';
                     }
                 }
                 if (!$this->error['frl_db_id'] && $value != '') {
                     $frl = new freelancer();
                     $frl->GetUserByUID($value);
                     if ($frl->is_banned == 1) {
                         $this->error['frl_db_id'] = 'Данный пользователь заблокирован';
                         $this->error['frl_ban'] = 'Данный пользователь заблокирован';
                     }
                     $this->data['frl_id'] = $frl->uid;
                 }
                 break;
                 // специальность
             // специальность
             case 'profession0_db_id':
                 if (!$value) {
                     $this->error['profession0_db_id'] = 'Необходимо выбрать специальность';
                 }
                 break;
             case 'cost_sys':
                 $reqvs = $this->getUserReqvs();
                 if (!in_array($value, array(exrates::YM, exrates::WMR, exrates::BANK))) {
                     $this->error['cost_sys_err'] = 'Недопустимая валюта резервирования';
                     $value = exrates::BANK;
                 }
                 if (($value == exrates::YM || $value == exrates::WMR) && $reqvs['form_type'] == sbr::FT_JURI) {
                     $this->error['cost_sys_err'] = 'Резервирование через Яндекс.Деньги или WebMoney доступно только физическим лицам';
                 }
                 break;
             case 'project_id':
                 $value = $this->project['id'];
                 break;
             case 'id':
                 $value = intvalPgSql($value);
                 break;
             case 'scheme_type':
                 $value = intvalPgSql($value);
                 if ($value && (!self::$scheme_types[$value] || $value == self::SCHEME_OLD && (!$old || $old->scheme_type != self::SCHEME_OLD))) {
                     $this->error['scheme_type_err'] = 'Неверный тип договора';
                 }
                 break;
             case 'version':
                 $value = (int) $value > 32767 ? 32767 : (int) $value;
                 break;
             case 'frl_refuse_reason':
                 $value = substr($value, 0, self::SBR_REASONS_LENGTH);
                 break;
             default:
                 break;
         }
         $this->data[$field] = $value;
     }
     $this->data['professions'] = array();
     if ($_POST['profession0']) {
         $this->data['professions'][] = array('category_id' => __paramInit('int', null, 'profession0_column_id', 0), 'subcategory_id' => __paramInit('int', null, 'profession0_db_id', 0), 'prof_name' => __paramInit('string', null, 'profession0', 0));
     }
     if ($_POST['profession1']) {
         $this->data['professions'][] = array('category_id' => __paramInit('int', null, 'profession1_column_id', 0), 'subcategory_id' => __paramInit('int', null, 'profession1_db_id', 0), 'prof_name' => __paramInit('string', null, 'profession1', 0));
     }
     if ($_POST['profession2']) {
         $this->data['professions'][] = array('category_id' => __paramInit('int', null, 'profession2_column_id', 0), 'subcategory_id' => __paramInit('int', null, 'profession2_db_id', 0), 'prof_name' => __paramInit('string', null, 'profession2', 0));
     }
     if ($request['stages']) {
         foreach ($request['stages'] as $num => $stage) {
             if (isset($stage['attaches']) && is_array($stage['attaches'])) {
                 foreach ($stage['attaches'] as $anum => $att_id) {
                     if (!isset($files[$att_id])) {
                         continue;
                     }
                     //                    $attached[$att_id]['id'] = md5($attached[$att_id]['id']);
                     if ($files[$att_id]['status'] == 1) {
                         $request['stages'][$num]['attached'][$anum] = $files[$att_id];
                     }
                 }
             }
         }
         if ($GLOBALS['action'] === 'editstage') {
             foreach ($files as $key => $file) {
                 if ($file['status'] == 4) {
                     $this->stages[0]->data['_new_del_attach'][] = $file;
                 }
             }
         }
         $this->_new_initStagesFromRequest($request['stages'], $files, $request['action'] == 'create' ? 0 : ($request['action'] == 'edit' ? 1 : 2));
         $this->getUserReqvs();
         $this->getFrlReqvs();
         if ($this->user_reqvs['rez_type'] == sbr::RT_UABYKZ || $this->frl_reqvs['rez_type'] == sbr::RT_UABYKZ) {
             $cost = 0;
             foreach ($this->stages as $s) {
                 $cost += $s->cost;
             }
             $cost_rur = $cost * $this->cost2rur();
             if ($cost_rur > $this->maxNorezCost()) {
                 foreach ($this->stages as $p => $s) {
                     $this->error['cost'][$pos] = 'Поле заполненно некоректно';
                 }
                 $this->error['cost_sys_err_tbl'] = 'Превышена максимальная сумма сделки &mdash; ' . sbr::MAX_COST_USD . ' USD (или ' . sbr_meta::view_cost($this->maxNoRezCost(), exrates::BANK) . ')';
             }
         }
     }
     //        var_dump($this->error);
     //        die();
     return !$this->error;
 }
Пример #6
0
 }
 if ($i > 0 && $question === '') {
     $error_flag = 1;
     $alert[5] = 'Введите текст вопроса';
 } else {
     if ($i > blogs::MAX_POLL_ANSWERS) {
         $error_flag = 1;
         $alert[5] = 'Вы можете указать максимум ' . blogs::MAX_POLL_ANSWERS . ' ответов';
     } else {
         if ($i < 2 && $question !== '') {
             $error_flag = 1;
             $alert[5] = 'Нужно указать минимум 2 варианта ответа в голосовании';
         }
     }
 }
 if (!($gr = intvalPgSql($gr)) && !($ord == 'my' || $PDA)) {
     include ABS_PATH . '/404.php';
     exit;
 }
 if (is_empty_html($msg)) {
     $msg = '';
 }
 if ($_POST['close_comments']) {
     $close_comments = 't';
 } else {
     $close_comments = 'f';
 }
 if ($_POST['is_private']) {
     $is_private = 't';
 } else {
     $is_private = 'f';
Пример #7
0
 /**
  * Устанавливает/изменяет валюту выплаты за завершенный этап.
  * Вычисляет все налоги/комиссии, плюс в случае арбитража -- все необходимые коэффициэнты.
  *
  * @param integer $credit_sys   код валюты (см. класс exrates).
  * @param boolean $any_sys   разрешает любые валюты для выплаты (для админов).
  * @return boolean    успешно?
  */
 function setPayoutSys($credit_sys, $any_sys = false, $role = null)
 {
     setlocale(LC_ALL, 'en_US.UTF-8');
     $credit_sys = intvalPgSql($credit_sys);
     if (!$any_sys && !$this->checkPayoutSys($credit_sys)) {
         return false;
     }
     if (($cost = $this->getPayoutSum($role, $credit_sys, NULL, $credit_sys)) <= 0) {
         return false;
     }
     $is_arbitrage = 'false';
     if ($this->arbitrage['id']) {
         if (isset($this->arbitrage['resolved']) && !$this->arbitrage['resolved']) {
             return false;
         }
         $is_arbitrage = 'true';
     }
     $user_id = $this->sbr->uid;
     if ($role) {
         $user_id = $role == sbr::FRL ? $this->sbr->data['frl_id'] : $this->sbr->data['emp_id'];
     }
     $credit_sum = round($cost, 2);
     $sql = "\n          UPDATE sbr_stages_payouts\n             SET credit_sys = {$credit_sys}, credit_sum = {$credit_sum}, is_arbitrage = {$is_arbitrage}\n           WHERE stage_id = {$this->id}\n             AND user_id = {$user_id}\n             AND completed IS NULL\n        ";
     if ($res = pg_query(self::connect(false), $sql)) {
         if (!pg_affected_rows($res)) {
             $state = $this->sbr->data['scheme_type'] == sbr::SCHEME_LC ? NULL : '';
             $sql = "INSERT INTO sbr_stages_payouts(stage_id, user_id, credit_sys, credit_sum, is_arbitrage, state) VALUES ({$this->id}, {$user_id}, {$credit_sys}, {$credit_sum}, {$is_arbitrage}, '{$state}');";
             $res = pg_query(self::connect(false), $sql);
         }
     }
     return !!$res;
 }
Пример #8
0
if ((int) $cat < 1) {
    $cat = 0;
}
// возможно лучше доработать функцию __paramInit
if ((int) $page < 1) {
    $page = extractInteger($_REQUEST['page'], 1);
}
$action = __paramInit('string', 'action', 'action');
$top_id = __paramInit('string', 'post', 'top_id');
$message_id = NULL;
list($t, $c) = split('[.]', $top_id);
if ($t) {
    $top_id = intvalPgSql($t);
}
if ($c) {
    $comment_id = intvalPgSql($c);
}
if ($_GET['post'] && $_GET['site'] == 'Topic' && !$_GET['newurl'] && $_SERVER['REQUEST_METHOD'] != 'POST') {
    $query_string = preg_replace('/post=' . preg_quote($_GET['post']) . '/', '', $_SERVER['QUERY_STRING']);
    $query_string = preg_replace('/site=Topic/', '', $query_string);
    //$query_string = preg_replace("/^&{1,}/", "", $query_string);
    $query_array = explode('&', $query_string);
    $query_string = '';
    $first_param = true;
    foreach ($query_array as $key => $value) {
        if ($value) {
            if ($first_param === true) {
                // перед первым параметром не ставим &
                $first_param = false;
            } else {
                $query_string .= '&';
Пример #9
0
 /**
  * Проверка пользовательского запроса перед созданием или редактированием документа.
  * Заполнение переменной ошибок и $this->post_doc (тот же запрос, без лишних слешей), а также загружает файл документа на сервер.
  * 
  * @param array $request   данные запроса (гет, пост).
  * @param array $files   массив $_FILES
  */
 function _docInitFromRequest($request, $files)
 {
     $this->post_doc = array();
     foreach ($request as $field => $value) {
         if (is_scalar($value)) {
             $value = stripslashes($value);
         }
         switch ($field) {
             case 'status':
             case 'access_role':
             case 'owner_role':
             case 'id':
             case 'type':
                 $value = intvalPgSql($value);
                 break;
         }
         $this->post_doc[$field] = $value;
     }
     if ($files != null) {
         $this->post_doc['file_id'] = null;
     }
     if (!$this->isAdmin() && !$this->isAdminFinance()) {
         if (!isset($this->post_doc['status'])) {
             $this->post_doc['status'] = self::DOCS_STATUS_SENT;
         }
         if (!isset($this->post_doc['access_role'])) {
             $this->post_doc['access_role'] = $this->isEmp() ? self::DOCS_ACCESS_EMP : self::DOCS_ACCESS_FRL;
         }
     }
     if (!$this->post_doc['name']) {
         $cnum = $this->getContractNum();
         $dn = sbr::$docs_types[$this->post_doc['type']][0];
         switch ($this->post_doc['type']) {
             case sbr::DOCS_TYPE_STATEMENT:
                 $this->post_doc['name'] = "{$dn} № {$cnum}";
                 break;
             case sbr::DOCS_TYPE_TZ_PDRD:
                 $this->post_doc['name'] = "{$dn} № {$cnum}";
                 break;
             case sbr::DOCS_TYPE_ACT:
             case sbr::DOCS_TYPE_FACTURA:
             case sbr::DOCS_TYPE_REP:
             case sbr::DOCS_TYPE_COPY_ACT:
             case sbr::DOCS_TYPE_COPY_FACTURA:
             case sbr::DOCS_TYPE_AGENT_REP:
             case sbr::DOCS_TYPE_PSKB_ACT:
                 $this->post_doc['name'] = "{$dn} по договору № {$cnum}";
                 break;
             case sbr::DOCS_TYPE_COPY_CONTRACT:
             case sbr::DOCS_TYPE_OFFER:
                 if ($this->post_doc['subtype'] == 1) {
                     // ВНИМАНИЕ!!! в названии документа обязательно должно присутствовать слово с корнем "договор" (договор, договора, договору ...)
                     $this->post_doc['name'] = "{$dn} № {$cnum} на заключение Договора";
                 } else {
                     if ($this->post_doc['subtype'] == 2) {
                         $this->post_doc['name'] = "{$dn} № {$cnum} на заключение Соглашения";
                     } else {
                         $this->post_doc['name'] = "{$dn} № {$cnum}";
                     }
                 }
                 break;
             case sbr::DOCS_TYPE_ARB_REP:
             case sbr::DOCS_TYPE_COPY_AGREEMENT:
             case sbr::DOCS_TYPE_FM_APPL:
             case sbr::DOCS_TYPE_WM_APPL:
             case sbr::DOCS_TYPE_YM_APPL:
                 $this->post_doc['name'] = "{$dn}";
                 break;
             default:
                 $this->error['docs']['name'] = 'Пожалуйста, заполните это поле';
                 break;
         }
     }
     if (!$this->error && $files['attach']['size']) {
         $this->getUploadDir();
         $file = new CFile($files['attach']);
         if ($err = $this->uploadFile($file, self::DOCS_FILE_MAX_SIZE)) {
             $this->error['docs']['attach'] = $err;
         } else {
             $this->post_doc['file_id'] = $file->id;
         }
     }
 }
Пример #10
0
 /**
  * Возвращает список тем в разделе
  *
  * -------------------------------------------------------------------------------------
  * Внимание! Замечание к подзапросу на основные вкладки (новые, популярные, актуальные).
  *
  * Подзапрос настроен на работу индексов типа "ix blogs_themes/viewgroup*", поэтому любое
  * добавление условий или (тем более с привязкой дополнительных таблиц!) испортит его.
  * Суть заключается в том, что мы все условия копируем в таблицы blogs_themes из таблиц blogs_msgs и других,
  * для того, чтобы использовать индексы и не делать лишних джойнов, т.е. все проверки делаются в рамках 
  * единственной
  * таблицы. Поэтому мы быстро выбираем все необходимые N тем и только потом связываем их с остальными таблицами.
  * Чтобы добавить условие, нужно по аналогии, например, с deleted, is_blocked и т.п.), добавить клон 
  * необходимого
  * поля в blogs_themes и скорректировать индекс(ы) (протестировав предварительно).
  * -------------------------------------------------------------------------------------
  *
  *
  * @param integer $gr_num				идентификатор раздела
  * @param string  $gr_name				возвращает название раздела
  * @param integer $num_treads			возвращает кол-во тем в данном разделе
  * @param integer $page					номер страницы из списка тем, которую надо выводить [получает или возвращает, в зависимости от $having_message]
  * @param string  $error				возвращает сообщение об ошибке
  * @param integer $fid					UID текущего юзера
  * @param integer $mod					имеет ли текущий юзер права на просмотр данного раздела [1 - да, 0 - нет]
  * @param integer $having_message		УСТАРЕЛО. id сообщения, страницу с которым необходимо отобразить (0 - показать страницу $page)
  * @param integer $read_only			возвращает параметр - является ли данный раздел разделом "только для чтения"
  * @param string  $ord					параметр сортировки ("my", "relevant", "best", "new", "favs")
  * @param string  $sort_order           позволяет передать дополнительные условия сортировки
  * @return array						[[информация о сообщении]]
  */
 function GetGroup($gr_num, &$gr_name, &$num_treads, $page, &$error, $fid = 0, $mod = 1, $having_message = 0, &$read_only, $ord = "new", $is_ban = true, $sort_order = '')
 {
     global $DB;
     $cachedelay = 300;
     if (hasPermissions("blogs")) {
         $cachedelay = 0;
     }
     $memBuff = new memBuff();
     $fid = (int) $fid;
     $gr_num = (int) $gr_num;
     $num_treads = 0;
     $year = date('Y');
     $can_prevyear_ontops = date('n') <= 2;
     $limit = $GLOBALS['blogspp'];
     $group = $gr_num != 0 ? "id_gr = {$gr_num} " : "";
     $offset = $limit * ($page - 1);
     $offset = intvalPgSql((string) $offset);
     $limit_str = "LIMIT {$limit} OFFSET {$offset}";
     $order = "post_time DESC";
     $ids = array();
     $idx = array();
     $get_ontops = $ord == 'ontop';
     if (!$get_ontops) {
         if ($gr_num != 0) {
             $gr_name = $this->GetGroupName($gr_num, 0, $mod);
             if (!$gr_name) {
                 $error = "У вас недостаточно прав для просмотра этого форума";
                 return 0;
             }
         } else {
             $gr_name = "Все вместе";
         }
     }
     // смотрим баны
     if ($fid && $fid == $_SESSION['uid']) {
         $role = $_SESSION['role'];
     } else {
         if ($fid) {
             $users = new users();
             $role = $users->GetField($fid, $error, 'role');
         } else {
             $role = 0;
         }
     }
     $is_moder = hasPermissions('blogs', $fid);
     if ($is_moder) {
         $sel_blocked = ", moderators.login as moder_login, moderators.uname AS moder_name, moderators.usurname as moder_uname";
         $join_blocked = " LEFT JOIN users AS moderators ON blogs_blocked.admin = moderators.uid ";
     } else {
         $where_blocked = '(t.is_blocked = false) ';
         $where_private = ' AND (' . ($fid ? "t.fromuser_id = {$fid} OR " : '') . 't.is_private = false)';
         $where_deleted = ' AND (t.deleted IS NULL )';
         $where_deleted_my = ' AND t.deleted IS NULL AND m.deleted IS NULL';
         // контролим баны
         if (!$is_ban) {
             $where_is_blocked = $where_blocked;
         }
     }
     $_group = $group ? " {$group} AND " : '';
     switch ($ord) {
         case "my_all":
         case "my_posts":
         case "my_comments":
         case 'favs_list':
         case 'favs_std':
             if ($ord != 'favs_list' && $ord != 'favs_std') {
                 $sReplyTo = $ord != 'my_all' ? $ord == 'my_posts' ? ' AND m.reply_to IS NULL' : ' AND m.reply_to IS NOT NULL' : '';
                 $join_banned = $where_deleted ? 'INNER JOIN users mtu 
             	   ON mtu.uid = t.fromuser_id AND mtu.is_banned = 0::bit(1)' : '';
                 $where = 'WHERE';
                 $and = ' AND ';
                 /*if (!$where_blocked && !$_group && !$where_private && !$sReplyTo && !$where_deleted_my) {
                       $and = $where = '';
                   }*/
                 if (!$where_blocked) {
                     $and = '';
                 }
                 $sSelectQuery = "SELECT\n                        ontop, users.warn, msgs.id, messages_cnt as num, post_time, msgtext, yt_link, msgs.title, close_comments, is_private, users.uid,\n                        base as t, msgs.id_gr, users.uname, modified, modified_id, fromuser_id, users.usurname, users.login, users.email, users.photo, users.is_team,\n                        users.is_pro as payed, users.is_pro_test as payed_test, users.role, users.is_banned, users.ban_where, msgs.thread_id, users.reg_date, users.is_chuck,\n                        blogs_blocked.thread_id as is_blocked, blogs_blocked.reason, blogs_blocked.blocked_time,\n                        blogs_poll.thread_id::boolean as has_poll, blogs_poll.question as poll_question, blogs_poll.closed as poll_closed, blogs_poll.multiple as poll_multiple,\n\t\t\t\t\t\tvotes._cnt as poll_votes, reply_to, msgs.deleted, msgs.deluser_id, msgs.deleted_reason, fav_cnt, w.status, moderator_status, sbr_meta.completed_cnt\n                    FROM (\n                        SELECT m.*, t.messages_cnt, t.base, t.id_gr, t.close_comments , t.is_private, t.fav_cnt \n                        FROM blogs_themes as t\n                        INNER JOIN blogs_msgs as m ON t.thread_id = m.thread_id\n                        {$join_deleted}\n                        {$join_banned}\n                        {$where} {$where_blocked} {$and} ({$_group} m.fromuser_id = '{$fid}' {$where_private} {$sReplyTo}) {$where_deleted_my}\n                        ORDER BY {$order} {$limit_str}\n                    ) as msgs\n                    LEFT JOIN users ON fromuser_id=uid\n                    LEFT JOIN sbr_meta ON sbr_meta.user_id=uid\n                    LEFT JOIN blogs_blocked ON msgs.thread_id = blogs_blocked.thread_id\n                    LEFT JOIN blogs_poll ON blogs_poll.thread_id = msgs.thread_id\n\t\t\t\t\tLEFT JOIN (SELECT thread_id, COUNT(answer_id) AS _cnt FROM blogs_poll_votes WHERE user_id = '{$fid}' GROUP BY thread_id) AS votes ON votes.thread_id = msgs.thread_id\n                                        LEFT JOIN blogs_themes_watch w ON w.user_id = '{$fid}' AND w.theme_id = msgs.thread_id\n                    ORDER BY {$order}";
                 $sCountQuery = "\n                    SELECT COUNT(*) as num\n                    FROM blogs_msgs m \n                    LEFT JOIN blogs_themes t ON t.thread_id = m.thread_id\n                    {$join_deleted}\n                \t{$join_banned}\n                    {$where} {$where_blocked} {$and} ({$_group} m.fromuser_id = ?i {$where_private} {$sReplyTo}) {$where_deleted_my}";
             } else {
                 if ($sort_order == "priority") {
                     $order = " priority DESC";
                     // важности
                 } elseif ($sort_order == "abc") {
                     $order = " calc_title";
                     // алфавиту
                 } else {
                     $order = " add_time DESC NULLS LAST";
                     // дате
                 }
                 $where = 'WHERE';
                 $and = ' AND ';
                 /*if (!$where_blocked && !$_group && !$where_private  && !$where_deleted) {
                       $and = $where = '';
                   }*/
                 if (!$where_blocked) {
                     $and = '';
                 }
                 $sSelectQuery = "SELECT \n                        ontop, users.warn, msgs.id, messages_cnt as num, post_time, msgtext, yt_link, msgs.calc_title, close_comments, \n                        is_private, users.uid, base as t, msgs.id_gr, users.uname, modified, modified_id, users.is_team,\n                        fromuser_id, users.usurname, users.login, users.email, users.photo, users.is_pro as payed, reply_to, \n                        users.is_pro_test as payed_test, users.role, users.is_banned, users.ban_where, msgs.thread_id, users.reg_date, \n                        users.is_chuck, blogs_blocked.thread_id as is_blocked, blogs_blocked.reason, blogs_blocked.blocked_time, \n                        blogs_poll.thread_id::boolean as has_poll, blogs_poll.question as poll_question, blogs_poll.closed as poll_closed, blogs_poll.multiple as poll_multiple,\n                        votes._cnt as poll_votes, msgs.priority, msgs.add_time, msgs.deleted, msgs.deluser_id, msgs.deleted_reason, fav_cnt, w.status, moderator_status, sbr_meta.completed_cnt\n                    FROM ( \n                        SELECT m.*, COALESCE(NULLIF(f.title,''), m.title) as calc_title, t.messages_cnt, t.base, t.id_gr, t.close_comments , t.is_private, f.priority, f.add_time, t.fav_cnt  \n                        FROM blogs_fav f \n                        INNER JOIN blogs_themes as t ON f.thread_id = t.thread_id \n                        INNER JOIN blogs_msgs as m ON t.thread_id = m.thread_id \n                        {$where} {$where_blocked} {$and} ({$_group}  m.reply_to IS NULL AND f.user_id = '{$fid}' {$where_private}) {$where_deleted} \n                        ORDER BY {$order} " . ($ord == 'favs_std' ? $limit_str : '') . " \n                    ) as msgs \n                    LEFT JOIN users ON fromuser_id=uid \n                    LEFT JOIN blogs_blocked ON msgs.thread_id = blogs_blocked.thread_id \n                    LEFT JOIN blogs_poll ON blogs_poll.thread_id = msgs.thread_id\n                    LEFT JOIN sbr_meta ON sbr_meta.user_id=users.uid\n\t\t\t\t\tLEFT JOIN (SELECT thread_id, COUNT(answer_id) AS _cnt FROM blogs_poll_votes WHERE user_id = '{$fid}' GROUP BY thread_id) AS votes ON votes.thread_id = msgs.thread_id\n\t\t\t\t\tLEFT JOIN blogs_themes_watch w ON w.user_id = '{$fid}' AND w.theme_id = msgs.thread_id\n                    ORDER BY {$order}";
                 $sCountQuery = "\n                    SELECT COUNT(*) as num \n                    FROM blogs_fav f \n                    INNER JOIN blogs_themes as t ON f.thread_id = t.thread_id \n                    INNER JOIN blogs_msgs as m ON t.thread_id = m.thread_id \n                    {$where} {$where_blocked} {$and} ({$_group}  m.reply_to IS NULL AND f.user_id = ?i {$where_private}) {$where_deleted}";
             }
             $ret = $DB->rows($sSelectQuery);
             $error = $DB->error;
             if ($error) {
                 $error = parse_db_error($error);
             } else {
                 for ($i = 0, $max = count($ret); $i < $max; $i++) {
                     if ($ret[$i]['has_poll'] == 't') {
                         $ids[] = $ret[$i]['thread_id'];
                         $idx[$ret[$i]['thread_id']] =& $ret[$i];
                     }
                 }
                 $this->AddAttach($ret);
                 $num_treads = $DB->val($sCountQuery, $fid);
             }
             if ($ids) {
                 $res = $DB->rows("SELECT * FROM blogs_poll_answers WHERE thread_id IN (" . implode(',', $ids) . ") ORDER BY id");
                 if ($res) {
                     foreach ($res as $row) {
                         $idx[$row['thread_id']]['poll'][] = $row;
                     }
                 }
             }
             return $ret;
             break;
         case "new":
         case "relevant":
         case "best":
         case "ontop":
         default:
             $group = $group ? $group : "id_gr!=7 ";
             $_group = $group ? " AND {$group}" : '';
             if ($ord == 'relevant') {
                 $order = "last_activity DESC";
             } else {
                 if ($ord == 'best') {
                     $order = "messages_cnt DESC," . $order;
                 } else {
                     if (!$get_ontops) {
                         $y_start = $year;
                         $ycnt = 0;
                         $ylcnt = 0;
                         if (!$fid) {
                             for ($year, $ycnt = 0; $year >= 2008; $year--) {
                                 $ylcnt = blogs::getThemesCount($year, $gr_num);
                                 $ycnt += $ylcnt;
                                 if ($ycnt > $offset) {
                                     break;
                                 }
                             }
                         }
                         $ontops = $this->GetGroup($gr_num, $gr_name, $num_treads, 1, $error, $fid, $mod, 0, $read_only, 'ontop', $is_ban, $sort_order);
                         $ontops_cnt = $ontops ? count($ontops) : 0;
                         if ($offset >= $ontops_cnt) {
                             $offset -= $ontops_cnt;
                         }
                         $where_ontop_i = 'AND t.ontop = false';
                         if (!$group && !$where_is_blocked && !$where_private && !$where_deleted) {
                             $where_ontop_i = ' t.ontop = false';
                         }
                         if ($year >= 2008) {
                             $y_offset = $offset - ($ycnt - $ylcnt);
                             $y_offset = intvalPgSql((string) $y_offset);
                             $limit_str = "LIMIT {$limit} OFFSET {$y_offset}";
                         } else {
                             $sql = NULL;
                             // прыгаем на общий запрос.
                             break;
                         }
                     } else {
                         // берем только закрепленные.
                         $look_prev_year = $can_prevyear_ontops;
                         $where_ontop_i = 'AND t.ontop = true';
                         if (!$group && !$where_is_blocked && !$where_private && !$where_deleted) {
                             $where_ontop_i = ' t.ontop = true';
                         }
                     }
                 }
             }
             $where = 'WHERE';
             if (!$where_blocked && !$group && !$where_private && !$where_deleted && !$where_ontop_i) {
                 $where = '';
             }
             if (!$where_is_blocked) {
                 $_group = $group;
             }
             $sql = "\n                  SELECT ontop, users.warn, msgs.id, messages_cnt as num, last_activity, post_time, msgtext, yt_link, msgs.title, is_private, close_comments, users.uid,\n                         base as t, msgs.id_gr, users.uname, modified, modified_id, fromuser_id, users.usurname, users.login, users.email, users.photo, users.is_team,\n                         users.is_pro as payed, users.is_pro_test as payed_test, users.role, users.is_banned, users.ban_where, msgs.thread_id, users.reg_date, users.is_chuck,\n                         blogs_blocked.thread_id as is_blocked, blogs_blocked.reason, blogs_blocked.blocked_time, msgs.deleted_reason,\n\t\t\t\t\t\t blogs_poll.thread_id::boolean as has_poll, blogs_poll.question as poll_question, blogs_poll.closed as poll_closed, blogs_poll.multiple as poll_multiple,\n\t\t\t\t\t\t votes._cnt as poll_votes, msgs.deleted, msgs.deluser_id, fav_cnt, w.status, sbr_meta.completed_cnt, moderator_status {$sel_blocked}\n                    FROM (\n                       -- Внимание! Данный подзапрос заточен под индексы blogs_themes (см. замечание в описании функции).\n                       SELECT m.*, t.close_comments, t.is_private, t.messages_cnt, t.last_activity, t.base, t.id_gr, t.fav_cnt \n                        FROM (\n                          SELECT t.* FROM blogs_themes as t\n                          {$where} /*where_is_blocked*/{$where_is_blocked} /*group:*/{$_group} /*where_private*/{$where_private} /*where_deleted:*/{$where_deleted} /*where_ontop_i*/{$where_ontop_i}\n                          ORDER BY {$order} {$limit_str}\n                        ) as t\n                       INNER JOIN\n                         blogs_msgs" . (!$look_prev_year ? "_{$year}" : '') . " m\n                           ON t.thread_id = m.thread_id AND m.reply_to IS NULL\n                    ) as msgs\n\t\t\t\t\tLEFT JOIN users ON fromuser_id=users.uid\n\t\t\t\t\tLEFT JOIN sbr_meta ON sbr_meta.user_id=users.uid\n\t\t\t\t\tLEFT JOIN blogs_blocked ON msgs.thread_id = blogs_blocked.thread_id\n\t\t\t\t\tLEFT JOIN blogs_poll ON blogs_poll.thread_id = msgs.thread_id\n\t\t\t\t\tLEFT JOIN (SELECT thread_id, COUNT(answer_id) AS _cnt FROM blogs_poll_votes WHERE user_id = '{$fid}' GROUP BY thread_id) AS votes ON votes.thread_id = msgs.thread_id\n\t\t\t\t\tLEFT JOIN blogs_themes_watch" . (!$look_prev_year ? "_{$year}" : '') . " w ON w.user_id = '{$fid}' AND w.theme_id = msgs.thread_id\n                    {$join_blocked}\n                    ORDER BY {$order}\n\t\t\t\t";
             $ret = $DB->rows($sql);
             $error = $DB->error;
             if ($error || (!$ret || count($ret) < $limit) && !$get_ontops) {
                 $sql = '';
             }
             break;
     }
     if (!$sql) {
         $offset = intvalPgSql((string) $offset);
         $where = 'WHERE';
         if (!$where_blocked && !$group && !$where_private && !$where_deleted && !$where_ontop_i) {
             $where = '';
         }
         $sql = "\n              SELECT ontop, users.warn, msgs.id, messages_cnt as num, last_activity, post_time, msgtext, yt_link, msgs.title, is_private, close_comments, users.uid,\n                     base as t, msgs.id_gr, users.uname, modified, modified_id, fromuser_id, users.usurname, users.login, users.email, users.photo, users.is_team,\n                     users.is_pro as payed, users.is_pro_test as payed_test, users.role, users.is_banned, users.ban_where, msgs.thread_id, users.reg_date, users.is_chuck,\n                     blogs_blocked.thread_id as is_blocked, blogs_blocked.reason, blogs_blocked.blocked_time,\n\t\t\t\t\t blogs_poll.thread_id::boolean as has_poll, blogs_poll.question as poll_question, blogs_poll.closed as poll_closed, blogs_poll.multiple as poll_multiple,\n\t\t\t\t\t votes._cnt as poll_votes, msgs.deleted, msgs.deluser_id, msgs.deleted_reason, sbr_meta.completed_cnt, fav_cnt, w.status, moderator_status {$sel_blocked}\n                FROM (\n                  SELECT m.*, t.close_comments, t.is_private, t.messages_cnt, t.last_activity, t.base, t.id_gr, t.fav_cnt \n                   FROM (\n                     -- Внимание! Данный подзапрос заточен под индексы blogs_themes (см. замечание в описании функции).\n                     SELECT t.* FROM blogs_themes as t\n                     {$where} {$where_is_blocked} {$_group} {$where_private} {$where_deleted} {$where_ontop_i}\n                     ORDER BY {$order}\n                     LIMIT {$limit} OFFSET {$offset}\n                   ) as t\n                  INNER JOIN blogs_msgs as m ON t.thread_id = m.thread_id AND m.reply_to IS NULL\n                ) as msgs\n              LEFT JOIN users ON fromuser_id=uid\n              LEFT JOIN blogs_blocked ON msgs.thread_id = blogs_blocked.thread_id\n\t\t\t  LEFT JOIN blogs_poll ON blogs_poll.thread_id = msgs.thread_id\n\t\t\t  LEFT JOIN sbr_meta ON sbr_meta.user_id = users.uid\n\t  \t      LEFT JOIN (SELECT thread_id, COUNT(answer_id) AS _cnt FROM blogs_poll_votes WHERE user_id = '{$fid}' GROUP BY thread_id) AS votes ON votes.thread_id = msgs.thread_id\n              LEFT JOIN blogs_themes_watch w ON w.user_id = '{$fid}' AND w.theme_id = msgs.thread_id\n              {$join_blocked}\n               ORDER BY {$order}\n            ";
         $ret = $DB->rows($sql);
         $error = $DB->error;
         if ($error) {
             $error = parse_db_error($error);
         }
     }
     if (!$error && $ret && !$num_treads) {
         for ($i = 0, $max = count($ret); $i < $max; $i++) {
             if (!$is_moder && $ret[$i]['is_blocked'] && $fid && $ret[$i]['fromuser_id'] != $fid) {
                 unset($ret[$i]);
             }
             if ($ret[$i]['has_poll'] == 't') {
                 $ids[] = $ret[$i]['thread_id'];
                 $idx[$ret[$i]['thread_id']] =& $ret[$i];
             }
         }
         if ($ret) {
             $ret = array_values($ret);
         } else {
             $ret = array();
         }
         $this->AddAttach($ret);
         if (!$get_ontops) {
             // Из $where_private специально убрана проверка по $fid!
             // Иначе оно слишком затратно, т.к. не дает кэшировать этот запрос для всех юзеров сразу
             // при его довольно малой значимости.
             // То же с $where_is_blocked (убираем проверку fromuser_id).
             // Если в связи с этим будут выписаны баги в мантисе и т.п., нужно обсудить, прежде чем втыкать его обратно.
             if ($where_private) {
                 $where_private = ' AND t.is_private = false';
             }
             if ($where_is_blocked) {
                 $where_is_blocked = 't.is_blocked = false ';
             }
             $where_on_top = " AND t.ontop = false ";
             if (!$where_is_blocked && !$group && !$where_deleted && !$where_private) {
                 $where_on_top = " t.ontop = false ";
             }
             $where = 'WHERE';
             if (!$where_is_blocked && !$group && !$where_deleted && !$where_private && !$where_on_top) {
                 $where = '';
             }
             $sql = "SELECT COUNT(1) FROM blogs_themes t \n                    {$where} {$where_is_blocked} {$_group} {$where_deleted} {$where_private} {$where_on_top}";
             $num_treads = $DB->cache(1800)->val($sql);
         }
     }
     if ($ids) {
         $res = $DB->rows("SELECT * FROM blogs_poll_answers WHERE thread_id IN (" . implode(',', $ids) . ") ORDER BY id");
         if ($res) {
             foreach ($res as $row) {
                 $idx[$row['thread_id']]['poll'][] = $row;
             }
         }
     }
     if ($ontops) {
         if ($page == 1) {
             foreach ($ontops as $ot) {
                 array_unshift($ret, $ot);
             }
         }
         $c = count($ret);
         while ($c-- > $limit) {
             array_pop($ret);
         }
     }
     return $ret;
 }
Пример #11
0
     $stage = $sbr->initFromStage($stage_id);
     if ($action == 'arb_resolve' && $sbr->isAdmin()) {
         $resolve = __paramInit('bool', NULL, 'sendform');
         $cancel = __paramInit('bool', NULL, 'cancel');
         if ($resolve) {
             if (!($iagree = __paramInit('bool', NULL, 'iagree'))) {
                 $stage->error['arbitrage']['iagree'] = 'Необходимо подтверждение';
             } else {
                 if ($stage->arbResolve($_POST)) {
                     $frl_percent = $stage->request['frl_percent'] / 100;
                     $stage->getArbitrage(false, false);
                     // Раз вынесли решение берем арбитраж, для корректного расчета процентов
                     if ($frl_percent != 1 && $stage->sbr->scheme_type == sbr::SCHEME_LC) {
                         $pskb = new pskb($stage->sbr);
                         $lc = $pskb->getLC();
                         $credit_sys = intvalPgSql(pskb::$exrates_map[$lc['ps_emp']]);
                         $stage->setPayoutSys($credit_sys, true, sbr::EMP);
                     }
                     header_location_exit("/norisk2/?site=Stage&id={$stage->id}");
                 }
             }
         } elseif ($cancel) {
             if ($stage->arbCancel()) {
                 header_location_exit("/norisk2/?site=Stage&id={$stage->id}");
             }
         }
     }
     $arbitrsList = $stage->getArbitrs();
     break;
 case 'docs':
     $inner = $fpath . 'docs.php';
Пример #12
0
     $action = __paramInit('string', 'action', 'action');
     $folder = __paramInit('int', 'fld', 'fld', 0);
     if ($kind < 0 || $kind > 6) {
         $kind = 0;
     }
     $css_file = array('/css/block/b-free-share/b-free-share.css', '/css/block/b-note/b-note.css', '/css/block/b-button-multi/b-button-multi.css', '/css/block/b-prev/b-prev.css', 'projects.css', '/css/nav.css', '/css/projects3.css');
     $header = '../header.php';
     $footer = '../footer.html';
     $content = 'content_list.php';
     include '../template2.php';
     exit;
 case 'comment':
     if ($PDA) {
         $cid = intval($_GET['cid']);
         $user_id = get_uid(false);
         $prj_id = intvalPgSql((int) trim(str_replace('O', '0', $_GET['pid'])));
         $po_id = intval($_GET['id']);
         // Проект.
         $action = trim($_REQUEST['action']);
         $obj_project = new projects();
         $project = $obj_project->GetPrjCust($prj_id);
         $pod = new projects_offers_dialogue();
         if (is_emp()) {
             if ($project['user_id'] != get_uid(false)) {
                 $content = '404.php';
                 include '../template2.php';
                 exit;
             }
         } else {
             $po = new projects_offers();
             if (!$project || !$po->GetPrjOffer($prj_id, $user_id) || $cid && $pod->GetLastDialogueMessage($user_id, $po_id) != $cid) {
Пример #13
0
 /**
  * Получение списка пользователей
  * 
  * @param  array $aParams массив входящих данных
  * @return array $aResult ответ
  */
 protected function x____users_get($aParams = array())
 {
     $this->_validDevice($aParams);
     $nUid = get_uid(false);
     $nId = intvalPgSql($aParams['id']);
     $aResult = array('user' => array());
     if (!empty($nId)) {
         require_once ABS_PATH . '/classes/users.php';
         $oUser = new users();
         $oUser->GetUserByUID($nId);
         if ($oUser->uid) {
             if (empty($oUser->is_banned)) {
                 $aData = array();
                 $aClassVars = array_keys(get_class_vars('users'));
                 foreach ($aClassVars as $sVar) {
                     $aData[$sVar] = $oUser->{$sVar};
                 }
                 if (!is_emp($aData['role'])) {
                     require_once ABS_PATH . '/classes/freelancer.php';
                     $aTmp = freelancer::getFreelancerByLogin(array($aData['login']));
                     $aData['spec'] = $aTmp[0]['spec'];
                 }
                 $aResult['user'] = $this->_getUserData($aData, false, true);
             } else {
                 $this->error(EXTERNAL_ERR_USER_BANNED);
             }
         } else {
             $this->error(EXTERNAL_ERR_USER_NOTFOUND);
         }
     } else {
         $this->error(EXTERNAL_ERR_EMPTY_USER_ID);
     }
     return $aResult;
 }
Пример #14
0
 /**
  * Заполнение обязательных полей после регистрации через API мобильного приложения.
  * 
  * @param  array $aParams массив входящих данных
  * @return bool true - успех, false - провал
  */
 public function actionSaveInfoMobile($aParams = array())
 {
     $this->setFieldInfo('uname', __paramValue('string', iconv('utf-8', 'cp1251', $aParams['first_name'])));
     $this->setFieldInfo('usurname', __paramValue('string', iconv('utf-8', 'cp1251', $aParams['last_name'])));
     $this->setFieldInfo('birthday', __paramValue('string', $aParams['birthday']));
     $this->setFieldInfo('country', __paramValue('int', $aParams['country_id']));
     $this->setFieldInfo('city', __paramValue('int', $aParams['city_id']));
     $this->setFieldInfo('info_for_reg', array('birthday' => 0, 'sex' => 0, 'country' => 0, 'city' => 0));
     $gender = __paramValue('int', $aParams['gender']);
     $this->setFieldInfo('sex', $gender == 1 ? 't' : ($gender == 2 ? 'f' : NULL));
     $this->checkedFields();
     if (date('Y-m-d', strtotime($aParams['birthday'])) != $aParams['birthday']) {
         $this->error['birthday'] = 'Укажите некорректную дату дня рождения';
         $this->errno['birthday'] = 2;
     }
     if (empty($this->error)) {
         if (!is_emp()) {
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/freelancer.php';
             $user = new freelancer();
         } else {
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/employer.php';
             $user = new employer();
         }
         $user->info_for_reg = serialize($this->info_for_reg);
         $user->uname = $this->uname;
         $user->usurname = $this->usurname;
         $user->sex = $this->sex;
         $user->birthday = $this->birthday;
         $user->country = $this->country;
         $user->city = $this->city;
         if (!is_emp()) {
             $spec = intvalPgSql($aParams['prof_id']);
             if ($spec) {
                 require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/professions.php";
                 $or_spec = professions::GetProfessionOrigin($spec);
                 $spec_mod = professions::getLastModifiedSpec($_SESSION['uid']);
                 if (!is_pro() && $spec_mod['days'] > 0) {
                     $this->error['spec'] = 'Не прошло 30 дней с момента последней смены специализации';
                     $this->errno['spec'] = 2;
                 } else {
                     $user->spec = $spec;
                     $user->spec_orig = $or_spec;
                     professions::setLastModifiedSpec($_SESSION['uid'], $spec);
                 }
             } else {
                 $this->error['spec'] = 'Не указан параметр ID профессии';
                 $this->errno['spec'] = 1;
             }
         }
         if (empty($this->error)) {
             if ($sError = $user->Update($_SESSION['uid'], $res)) {
                 $this->error['save'] = $sError;
             } else {
                 if (!is_emp()) {
                     $_SESSION['specs'] = $user->GetAllSpecs($_SESSION['uid']);
                 }
             }
         }
         if (empty($this->error['save'])) {
             $_SESSION['check_user_access'] = true;
         }
     }
     return empty($this->error);
 }
Пример #15
0
/**
 * Корректная инициализация переданных параметров GET и POST переданных пользователем
 *
 * @param string  $type		Тип переданных данных (int, float, string, link, html, bool, money)
 * @param string  $get_name	Название данных в GET 
 * @param ustring $post_name	Название данных в POST 
 * @param mixed   $empty_val	Значение по умолчанию
 * @param integer $maxlen		Максимальная длинна данных
 * @param string $strip_tags		Для $type = 'html'. Если TRUE, то все теги и спецсимволы, сюда и будем пехать их
 * @param string $value  При обработке входящих данных в функции XAJAX необходима обработка чисто переменных
 *                            переводятся в сущности.
 *                            @see change_q_x()
 * @return mixed
 */
function __paramInit($type = 'int', $get_name = NULL, $post_name = NULL, $empty_val = NULL, $maxlen = NULL, $strip_tags = FALSE, $value = FALSE)
{
    //$value = FALSE;
    if ($get_name && isset($_GET[$get_name])) {
        if ($_GET[$get_name] !== '') {
            $value = $_GET[$get_name];
        }
    }
    if ($value === FALSE) {
        if ($post_name && isset($_POST[$post_name])) {
            if ($_POST[$post_name] !== '') {
                $value = $_POST[$post_name];
            }
        }
    }
    if ($value === FALSE) {
        return $empty_val;
    }
    if (intval($maxlen)) {
        $value = addslashes(substr(stripslashes($value), 0, intval($maxlen)));
    }
    switch ($type) {
        case 'striptrim':
            return stripslashes(trim($value));
        case 'page':
            $value = intvalPgSql($value);
            return $value <= 0 ? 1 : $value;
        case 'uinteger':
        case 'uint':
            return abs(intvalPgSql($value));
        case 'array_integer':
        case 'array_int':
            return array_map('intvalPgSql', $value);
        case 'integer':
        case 'int':
            return intvalPgSql($value);
        case 'String':
            //$value = stripslashes($value);
        //$value = stripslashes($value);
        case 'string':
            return change_q_x($value, TRUE);
        case 'string_no_slashes':
            return stripslashes(change_q_x($value, TRUE));
        case 'link':
            return change_q_x(strip_http($value), TRUE);
        case 'html':
            return $strip_tags ? change_q_x($value, FALSE, TRUE, "", false, false) : change_q_x($value, FALSE, TRUE, null, false, false);
        case 'htmltext':
            return change_q_x($value, TRUE, FALSE);
            // аналогичен 'htmltext', но оставляет теги ul, li, b, p, i
        // аналогичен 'htmltext', но оставляет теги ul, li, b, p, i
        case 'html_save_ul_li_b_p_i':
            return change_q_x($value, false, false, 'b|i|p|ul|li');
        case 'array':
            return $value;
        case 'bool':
            return !!$value;
        case 'float':
            setlocale(LC_ALL, 'en_US.UTF-8');
            return floatval($value);
        case 'money':
            setlocale(LC_ALL, 'en_US.UTF-8');
            return floatval(preg_replace('/\\s+/', '', str_replace(",", ".", $value)));
        case 'ckedit_nocut':
            $nocut = true;
        case 'ckeditor':
        case 'ckedit':
            //$value = stripslashes($value);
            $value = wysiwyg_video_replace($value, $wysiwyg_videos);
            if (hasPermissions('adm')) {
                $value = wysiwyg_image_replace($value, $wysiwyg_images);
            }
            $value = wysiwyg_code_replace($value, $wysiwyg_codes);
            $ph = md5(time()) . "_code";
            list($value, $url) = str_replace_mask('#((<a[^>]*>)(.*?)(<\\/a>))#mix', $value);
            foreach ($url as &$u) {
                $u = stripslashes($u);
                $u = cleanHref($u);
            }
            $value = preg_replace(array("~<cut\\s*?\\/>~mix", "~<\\/cut>~"), array("<cut>", ""), $value);
            // Заменяем каты
            if ($nocut) {
                // Удаляем каты
                $value = str_replace("<cut>", "", $value);
            }
            $value = str_replace(array("<br />", "<br/>", "<br>"), "___BR___", $value);
            // Заменяем переносы для сохранения следующая функция их сжирает
            // Обрабатываем отступы в теге <pre>
            $value = str_replace("\n", "__N__", $value);
            $value = preg_replace_callback('~<pre>(.*?)<\\/pre>~mix', 'rn2br', $value);
            $value = str_replace("__N__", "\n", $value);
            $value = strip_tags($value, '<a>,<strike>,<cut>,<pre>,<b>,<strong>,<em>,<u>,<i>,<p>,<ul>,<ol>,<li>,<s>,<h1>,<h2>,<h3>,<h4>,<h5>,<h6>');
            $value = change_q_x($value, FALSE, TRUE, 'strike|cut|pre|b|strong|em|u|i|p(\\s' . $ph . '_\\w*)?+|ul|ol|li|s|h[1-6]{1}', false, false);
            $value = str_replace("___BR___", "<br />", $value);
            // Возвращаем переносы
            $value = clearHTMLBeforeCutTags($value);
            $value = str_replace("<cut>", "<!-- -W-EDITOR-CUT- -->", $value);
            $value = hlcode($value);
            $tidy = new tidy();
            $value = $tidy->repairString($value, array('fix-backslash' => false, 'show-body-only' => true, 'bare' => true, 'clean' => false, 'drop-empty-paras' => false, 'preserve-entities' => true, 'wrap' => '0'), 'raw');
            $value = str_unreplace_mask($url, $value);
            $value = wysiwygLinkEncode($value);
            $value = wysiwygLinkDecode($value);
            $value = str_replace("<!-- -W-EDITOR-CUT- -->", "<cut>", $value);
            $value = str_replace("<p></p>", "<p>&nbsp;</p>", $value);
            $value = str_replace("\n", "", $value);
            /*
             * \h - горизонтальный пробельный символ. Для поддержки необходимо --PHP >= 5.2.4, PCRE >= 7.2 (на бете сейчас PCRE 6.6)
             */
            //$value = preg_replace("/[\p{Zs}]/", " ", $value);
            $value = wysiwyg_code_restore($value, $wysiwyg_codes);
            if (hasPermissions('adm')) {
                $value = wysiwyg_image_restore($value, $wysiwyg_images);
            }
            $value = wysiwyg_video_restore($value, $wysiwyg_videos);
            return $value;
            break;
        case 'wysiwyg':
        case 'wysiwyg_tidy':
        case 'wysiwyg_message':
            $value = wysiwyg_video_replace($value, $wysiwyg_videos);
            $value = wysiwyg_image_replace($value, $wysiwyg_images);
            $value = wysiwyg_code_replace($value, $wysiwyg_codes);
            $value = str_replace(array("\n", "\r"), "", $value);
            $value = preg_replace("[\r\n]", "", $value);
            $ph = md5(time()) . "_code";
            list($value, $url) = str_replace_mask('#((<a[^>]*>)(.*?)(<\\/a>))#mix', $value);
            foreach ($url as &$u) {
                $u = cleanHref($u);
            }
            //$value = preg_replace('/<p\sclass.*?code\s(\w*?).?"/si', "<p {$ph}_$1", $value);
            $value = change_q_x($value, FALSE, TRUE, 'a|strike|cut|b|strong|em|u|i|p(\\s' . $ph . '_\\w*)?+|ul|ol|li|s|h[1-6]{1}', false, false);
            $value = str_unreplace_mask($url, $value);
            $value = preg_replace("#<([^><]+?)([^a-z_\\-]on\\w*|xmlns)(\\s*=\\s*[^><]*)([><]*)#i", "<\\1\\4", $value);
            $value = preg_replace("/<br ?\\/?>/si", "\n", $value);
            $value = str_replace(array("<br />", "<br />", "&nbsp;"), array("\n", "\n", " "), $value);
            $value = clearHTMLBeforeCutTags($value);
            $value = wysiwygLinkEncode($value);
            $value = wysiwygLinkDecode($value);
            $value = preg_replace('/\\&amp;/', '&', $value);
            //$value = preg_replace('/<p\s[a-z0-9]{32}_code_(.*?)>/', '<p class="code $1">', $value);
            $value = preg_replace("/(li|ol|ul)>[\n]+/iU", "\$1>", $value);
            //$value = str_replace(array('  '), array('&nbsp;&nbsp;'), $value );
            $value = str_replace("<cut>", "<!-- -W-EDITOR-CUT- -->", $value);
            $value = str_replace("&lt;!-- -W-EDITOR-CUT- --&gt;", "<!-- -W-EDITOR-CUT- -->", $value);
            //        $value = preg_replace_callback("/<([^\s>]+)[^>](.*?)*>/si",
            //                create_function('$matches', 'return str_replace("&nbsp;", " ", $matches[0]);'),
            //            $value);
            if ($type == 'wysiwyg_message') {
                $value = preg_replace(array("/<p>/", "/<\\/p>/", "/\n+\\s*\$/"), array("", "\n\n", ""), $value);
                $value = str_replace("\n", "<br />", $value);
            } elseif ($type != 'wysiwyg_tidy') {
                $value = nl2br($value);
            }
            if ($type == 'wysiwyg_tidy') {
                //tidy
                $tidy = new tidy();
                $value = $tidy->repairString($value, array('fix-backslash' => false, 'show-body-only' => true, 'bare' => true, 'drop-empty-paras' => false, 'preserve-entities' => true, 'wrap' => '0'), 'raw');
                $value = str_replace("<p></p>", "<p>&nbsp;</p>", $value);
                $value = str_replace("\n", "", $value);
                $value = preg_replace("/\\p{Zs}/", " ", $value);
                //!tidy
            }
            $value = wysiwyg_code_restore($value, $wysiwyg_codes);
            $value = wysiwyg_image_restore($value, $wysiwyg_images);
            $value = wysiwyg_video_restore($value, $wysiwyg_videos);
            return $value;
    }
    return NULL;
}
/**
 * Сохранение проектов и конкурсов
 * 
 * @param object $objResponse xajaxResponse
 * @param string $rec_id идентификатор записи
 * @param string $rec_type тип записи
 * @param array $aForm массив данных
 * @param string $sDrawFunc имя функции для выполнения после сохранения
 */
function _admEditProjectsSaveForm(&$objResponse, $rec_id = '', $rec_type = '', $aForm = array(), $sDrawFunc = '')
{
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/professions.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/user_content.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/attachedfiles.php';
    $alert = array();
    $tmpPrj = new tmp_project($aForm['temp_key']);
    $prj = $tmpPrj->init(2);
    $kind = isset($aForm['kind']) ? intvalPgSql($aForm['kind']) : $prj['kind'];
    $sLink = change_q_x($aForm['link'], false, true, null, false, false);
    if (!empty($sLink)) {
        if (!preg_match('/http:\\/\\//', $sLink)) {
            $sLink = 'http://' . $sLink;
        }
    }
    $tmpPrj->setProjectField('kind', $kind);
    $tmpPrj->setProjectField('descr', antispam(change_q_x($aForm['descr'], FALSE, TRUE, "", false, false)));
    $tmpPrj->setProjectField('name', substr(antispam(change_q_x($aForm['name'], TRUE)), 0, 512));
    setlocale(LC_ALL, 'en_US.UTF-8');
    $tmpPrj->setProjectField('cost', isset($aForm['cost']) ? floatval($aForm['cost']) : 0);
    $tmpPrj->setProjectField('currency', isset($aForm['currency']) ? intvalPgSql($aForm['currency']) : 0);
    $tmpPrj->setProjectField('folder_id', isset($aForm['folder_id']) ? intvalPgSql($aForm['folder_id']) : 0);
    $tmpPrj->setProjectField('budget_type', isset($aForm['budget_type']) ? intvalPgSql($aForm['budget_type']) : 0);
    $tmpPrj->setProjectField('priceby', isset($aForm['priceby']) ? intvalPgSql($aForm['priceby']) : 0);
    $tmpPrj->setProjectField('agreement', isset($aForm['agreement']) ? intvalPgSql($aForm['agreement']) : 0);
    $tmpPrj->setProjectField('country', isset($aForm['country']) ? intvalPgSql($aForm['country']) : 0);
    $tmpPrj->setProjectField('city', isset($aForm['pf_city']) ? intvalPgSql($aForm['pf_city']) : 0);
    $tmpPrj->setProjectField('pro_only', isset($aForm['pro_only']) ? 't' : 'f');
    $tmpPrj->setProjectField('is_color', isset($aForm['is_color']) ? 't' : 'f');
    $tmpPrj->setProjectField('is_bold', isset($aForm['is_bold']) ? 't' : 'f');
    $tmpPrj->setProjectField('link', $sLink);
    if ($kind == 7) {
        $tmpPrj->setProjectField('end_date', change_q_x($aForm['end_date'], TRUE));
        $tmpPrj->setProjectField('win_date', change_q_x($aForm['win_date'], TRUE));
    }
    // разделы
    $c = $aForm['categories'];
    $sc = $aForm['subcategories'];
    if (empty($c) || sizeof($c) == 1 && $c[0] == 0) {
        $alert[3] = 'Не выбран раздел';
    } else {
        $cats = array();
        foreach ($c as $sKey => $value) {
            if ($value == 0) {
                continue;
            }
            $check[] = $value . "_" . $sc[$sKey];
        }
        $uniq = array_unique($check);
        foreach ($uniq as $val) {
            list($cat, $subcat) = explode('_', $val);
            $check_array[$cat][] = $subcat;
        }
        foreach ($check_array as $k => $val) {
            if (count($val) > 1 && array_search(0, $val) !== false) {
                $cats[] = array('category_id' => $k, 'subcategory_id' => 0);
                unset($check_array[$k]);
            } else {
                foreach ($val as $m => $v) {
                    $cats[] = array('category_id' => $k, 'subcategory_id' => $v);
                }
            }
        }
        $tmpPrj->setCategories($cats);
    }
    $prj = $tmpPrj->getProject();
    $descr_limit = 5000;
    if ($prj['cost'] < 0) {
        $alert[7] = 'Введите положительную сумму';
    }
    if ($prj['cost'] > 999999) {
        $alert[7] = 'Слишком большая сумма';
    }
    if ($prj['cost'] > 0 && ($prj['currency'] < 0 || $prj['currency'] > 3)) {
        $alert[7] = 'Валюта не определена';
    }
    if (is_empty_html($prj['name'])) {
        $alert[1] = 'Поле не заполнено';
    }
    if (is_empty_html($prj['descr'])) {
        $alert[2] = 'Поле не заполнено';
    }
    if (strlen_real($prj['descr']) > $descr_limit) {
        $alert[2] = "Исчерпан лимит символов ({$descr_limit})";
    }
    if ($prj['kind'] == 7) {
        if (!preg_match("/^([0-9]{1,2})\\-([0-9]{1,2})\\-([0-9]{4})\$/", $prj['end_date'], $o1) || !checkdate($o1[2], $o1[1], $o1[3])) {
            $alert[5] = 'Неправильная дата';
        }
        if (!preg_match("/^([0-9]{1,2})\\-([0-9]{1,2})\\-([0-9]{4})\$/", $prj['win_date'], $o2) || !checkdate($o2[2], $o2[1], $o2[3])) {
            $alert[6] = 'Неправильная дата';
        }
        if (!$alert[5] && mktime(0, 0, 0, $o1[2], $o1[1], $o1[3]) <= mktime(0, 0, 0)) {
            $alert[5] = 'Дата окончания конкурса не может находиться  в прошлом';
        }
        if (!$alert[6] && mktime(0, 0, 0, $o2[2], $o2[1], $o2[3]) <= mktime(0, 0, 0, $o1[2], $o1[1], $o1[3])) {
            $alert[6] = 'Дата определения победителя должна быть больше даты окончания конкурса';
        }
    }
    /*elseif ( $prj['kind'] == 4 && ($prj['country'] == 0 || $prj['city'] == 0) ) {
          $alert[4] = 'Укажите местонахождение';
      }*/
    if (isset($aForm['top_ok'])) {
        $nDays = intval($aForm['top_days']);
        if (ctype_digit($aForm['top_days']) && $nDays > 0) {
            $tmpPrj->setAddedTopDays($nDays);
        } else {
            $alert[8] = 'Укажите корректное количество дней нверху';
        }
    } else {
        $tmpPrj->setAddedTopDays(0);
    }
    if (!isset($alert[8]) && isset($aForm['logo_ok'])) {
        if (empty($aForm['logo_id'])) {
            $alert[8] = 'Необходимо выбрать файл';
        }
    }
    if (isset($aForm['del_logo'])) {
        $tmpPrj->delLogo();
    }
    if (!$alert) {
        require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/messages.php';
        $attachedfiles = new attachedfiles($aForm['attachedfiles_session']);
        $attachedfiles_files = $attachedfiles->getFiles(array(1, 3, 4));
        $tmpPrj->addAttachedFiles($attachedfiles_files);
        $attachedfiles->clear();
        $sError = $tmpPrj->saveProject($prj['user_id'], $prj);
        if (!$sError) {
            if ($prj['agreement'] == 1 || $prj['cost'] == 0) {
                projects::updateBudget($rec_id, 0, 0, 0, true);
            } else {
                projects::updateBudget($rec_id, $prj['cost'], $prj['currency'], $prj['priceby'], false);
            }
            $sReason = _parseReason($aForm['user_id'], $aForm['adm_edit_text']);
            messages::projectsModifiedNotification($rec_id, $rec_type, $aForm['user_login'], $aForm['user_uname'], $aForm['user_usurname'], $sReason);
            $content_id = user_content::MODER_PROJECTS;
            _admEditAfterAll($objResponse, $content_id, $rec_id, $rec_type, $sDrawFunc, $aForm);
        } else {
            $objResponse->alert($sError);
            $sParent = $sDrawFunc == 'stream0' || $sDrawFunc == 'stream1' || $sDrawFunc == 'stream2' ? 'parent.' : '';
            $objResponse->script("{$sParent}adm_edit_content.disabled = false; {$sParent}adm_edit_content.button();");
        }
    } else {
        _setErrors($objResponse, $alert, array(1 => 'name', 2 => 'descr', 3 => 'categories', 4 => 'country', 5 => 'end_date', 6 => 'win_date', 7 => 'cost', 8 => 'paid'), $sDrawFunc);
    }
}
Пример #17
0
     $action = __paramInit('string', 'action', 'action');
     $folder = __paramInit('int', 'fld', 'fld', 0);
     if ($kind < 0 || $kind > 6) {
         $kind = 0;
     }
     $css_file = array('/css/block/b-free-share/b-free-share.css', '/css/block/b-note/b-note.css', '/css/block/b-button-multi/b-button-multi.css', '/css/block/b-prev/b-prev.css', 'projects.css', '/css/nav.css', '/css/projects3.css');
     $header = "../header.php";
     $footer = "../footer.html";
     $content = "content_list.php";
     include "../template2.php";
     exit;
 case "comment":
     if ($PDA) {
         $cid = intval($_GET['cid']);
         $user_id = get_uid(false);
         $prj_id = intvalPgSql((int) trim(str_replace("O", "0", $_GET['pid'])));
         $po_id = intval($_GET['id']);
         // Проект.
         $action = trim($_REQUEST['action']);
         $obj_project = new projects();
         $project = $obj_project->GetPrjCust($prj_id);
         $pod = new projects_offers_dialogue();
         if (is_emp()) {
             if ($project['user_id'] != get_uid(false)) {
                 $content = "404.php";
                 include "../template2.php";
                 exit;
             }
         } else {
             $po = new projects_offers();
             if (!$project || !$po->GetPrjOffer($prj_id, $user_id) || $cid && $pod->GetLastDialogueMessage($user_id, $po_id) != $cid) {