<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/notes.php'; $note = notes::GetNotes((int) $_SESSION['uid'], (int) $project['user_id'], $error); if ($note['n_text']) { $noteText = reformat($note['n_text'], 22, 0, 0, 1, 22); $noteBtn = 'Редактировать'; } else { $noteText = ''; $noteBtn = 'Добавить'; } ?> <div id="noteTextBlock" class="b-note b-note_inline-block b-fon b-fon_bg_ffeda9"> <div class="b-fon__b1"></div> <div class="b-fon__b2"></div> <div class="b-fon__body b-fon__body_pad_5_10"> <div class="b-note__txt"> <strong class="b-note__bold">Ваша заметка: </strong><span id="noteText"><?php echo $noteText; ?> </span> <a id="noteEditBtn" class="b-note__link b-note__link_bordbot_0f71c8" href="javascript:void(0)"><?php echo $noteBtn; ?> </a> </div> </div> <div class="b-fon__b2"></div> <div class="b-fon__b1"></div> </div> <div id="noteEditBlock" class="b-note b-fon b-fon_bg_ffeda9 b-fon_hide" style=" max-width: 600px;"> <div class="b-fon__b1"></div>
require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/notes.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/commune.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/rating.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/user_langs.php'; $recoms = new teams(); $additinfo = $user->GetAdditInfo($user->login, $error); $languages = users::GetUserLangs($user->uid); if ($rating && $rating instanceof rating && $rating->data['user_id'] == $user->uid) { $rating_total = rating::round($rating->data['total']); } else { $rating_total = rating::round($additinfo['rating']); } $info_for_reg = unserialize($user->info_for_reg); $reg_string = 'только для <A class="blue" href="/registration/">зарегистрированных</A>'; if ($_SESSION['uid']) { $note = notes::GetNotes($_SESSION['uid'], null, $error); if (count($note) > 0) { foreach ($note as $key => $value) { $notes[$value['to_id']] = $value; } } } $stop_words = new stop_words(hasPermissions('users')); ?> <!-- NEW --> <!-- NEW --> <script type="text/javascript"> window.addEvent('domready', function() { $$('.izbr-choose li a').addEvent('click', function(){
/** * Получение списка предложений по конкретному проекту. * * @param integer $count возвращает количество предложений * @param integer $prj_id id проекта * @param string $show_all признак отображения всех (true) или только открытых (false) предложений проекта * @param string $sort сортировка списка предложений * @param string $type выбор предложений одного типа ('o' - все, 'c' - выбранных в кандидаты, 'r' - отказанных, 'nor' - все кроме отказавшихся, 'i' - исполнитель) * * @return array список предложений */ public function GetPrjOffers(&$count, $prj_id, $limit, $offset = 0, $user_id = 0, $show_all = false, $sort = 'date', $type = 'a') { global $DB; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/teams.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/notes.php'; $user_id = intval($user_id); $limit = $limit == 'ALL' ? $limit : intval($limit); $offset = intval($offset); $limit_str = " LIMIT {$limit} OFFSET {$offset}"; $bPermissions = hasPermissions('projects'); // исключаем заблокированные предложения $sel_blocked = ', pb.reason as blocked_reason, pb.blocked_time, COALESCE(pb.src_id::boolean, false) as is_blocked'; $join_blocked = 'LEFT JOIN projects_offers_blocked pb ON po.id = pb.src_id '; if ($bPermissions) { $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 '; $where_blocked = ''; $and_blocked = ''; } else { $where_blocked = " (po.user_id = {$user_id} OR pb.src_id IS NULL) "; $and_blocked = ' AND ' . $where_blocked; } //@todo: Рекомендуется вынести completed_cnt в users_counters таблицу и с ней соединяться //тем более, что в ней уже есть кол-во по новой БС reserves_completed_cnt //нужно добавить поле по старой БС и пересчитать туда if ($type == 'i') { $sql = "SELECT\n po.*,\n fl.uid, fl.login, fl.uname, fl.usurname, fl.photo, fl.photosm, fl.spec, fl.is_pro, fl.is_team, fl.is_pro_test, fl.is_profi, uc.ops_frl_plus as ops_plus, uc.ops_frl_null as ops_null, uc.ops_frl_minus as ops_minus, fl.role, fl.warn, fl.is_banned, fl.ban_where, rating_get(fl.rating, fl.is_pro, fl.is_verify, fl.is_profi) as rating, fl.is_verify, fl.reg_date, fl.modified_time, fl.photo_modified_time,\n p.name AS spec_name,\n cr.country_name,\n ct.city_name, \n COALESCE(sbr_meta.completed_cnt, 0) + COALESCE(uc.reserves_completed_cnt, 0) AS completed_cnt, -- старые БС + новые БС\n uc.ops_emp_plus + uc.ops_frl_plus as ops_all_plus, uc.ops_emp_null + uc.ops_frl_null as ops_all_null, uc.ops_emp_minus + uc.ops_frl_minus as ops_all_minus,\n uc.ops_emp_plus, uc.ops_emp_null, uc.ops_emp_minus,\n uc.sbr_opi_plus, uc.sbr_opi_null, uc.sbr_opi_minus,\n uc.paid_advices_cnt + uc.sbr_opi_plus + uc.ops_emp_plus + uc.tu_orders_plus + uc.projects_fb_plus as opinions_plus,\n uc.sbr_opi_minus + uc.ops_emp_minus + uc.tu_orders_minus + uc.projects_fb_minus as opinions_minus\n {$sel_blocked} \n FROM (SELECT por.*, exec_id, pr.user_id as p_user_id FROM projects AS pr\n LEFT JOIN projects_offers as por ON por.project_id=pr.id AND (pr.exec_id =por.user_id)\n WHERE pr.id = '{$prj_id}' AND (por.user_id > 0)" . ($show_all ? '' : " AND (por.only_4_cust='f')") . ') AS po INNER JOIN freelancer as fl ON (po.exec_id=fl.uid' . ($bPermissions ? '' : ' AND fl.is_banned::integer = 0') . ")\n {$join_blocked} \n LEFT JOIN professions p ON p.id=fl.spec\n LEFT JOIN users_counters uc ON uc.user_id = fl.uid\n LEFT JOIN sbr_meta ON sbr_meta.user_id = fl.uid -- старые БС\n LEFT JOIN country cr ON cr.id=fl.country\n LEFT JOIN city ct ON ct.id=fl.city\n " . ($user_id == 0 ? "WHERE {$where_blocked}" : 'WHERE (fl.uid<>' . $user_id . ") {$and_blocked}"); $ret = $DB->rows($sql); $error = $DB->error; if ($error) { $error = parse_db_error($error); } else { if ($ret) { foreach ($ret as &$value) { // Выбираем вложения. if ($value['id']) { $sql = 'SELECT a.id, a.prev_pict as prev, a.pict ' . 'FROM projects_offers_attach AS a ' . 'WHERE a.offer_id= ?i '; $value['attach'] = $DB->rows($sql, $value['id']); } } } } } else { switch ($sort) { default: case 'date': $order = ' ORDER BY (fl.is_verify AND fl.is_pro) DESC, fl.is_pro DESC, fl.is_verify DESC, post_date DESC'; break; case 'rating': $order = ' ORDER BY rating DESC, fl.is_pro DESC, post_date DESC'; break; case 'opinions': $order = ' ORDER BY ssum DESC, fl.is_pro DESC, post_date DESC'; break; case 'time': $order = ' ORDER BY (((time_from = 0) OR (time_from IS NULL)) AND ((time_to = 0) OR (time_to IS NULL))) ASC, time_from_days ASC, time_to_days ASC, is_pro DESC, post_date DESC'; break; case 'cost': $order = ' ORDER BY (((cost_from = 0) OR (cost_from IS NULL)) AND ((cost_to = 0) OR (cost_to IS NULL))) ASC, usd_cost_from DESC, usd_cost_to DESC, is_pro DESC, post_date DESC'; break; } switch ($type) { default: case 'a': $filter = ''; break; case 'o': $filter = ' AND NOT po.selected AND NOT po.refused AND NOT po.frl_refused AND COALESCE(pr.exec_id,0)<>fl.uid'; break; case 'c': $filter = ' AND po.selected'; break; case 'r': $filter = ' AND po.refused'; break; case 'nor': $filter = ' AND NOT po.frl_refused'; break; case 'fr': $filter = ' AND po.frl_refused'; break; } require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/project_exrates.php'; $project_exRates = project_exrates::GetAll(); $sql = "SELECT\n CASE po.cost_type\n WHEN 0 THEN po.cost_from\n WHEN 1 THEN po.cost_from*{$project_exRates[32]}\n WHEN 2 THEN po.cost_from*{$project_exRates[42]}\n WHEN 3 THEN po.cost_from*{$project_exRates[12]}\n END as usd_cost_from,\n CASE po.cost_type\n WHEN 0 THEN po.cost_to\n WHEN 1 THEN po.cost_to*{$project_exRates[32]}\n WHEN 2 THEN po.cost_to*{$project_exRates[42]}\n WHEN 3 THEN po.cost_to*{$project_exRates[12]}\n END as usd_cost_to,\n\n CASE po.time_type\n WHEN 0 THEN po.time_from\n WHEN 1 THEN po.time_from * 30\n WHEN 2 THEN po.time_from * 356\n ELSE po.time_from\n END as time_from_days,\n CASE po.time_type\n WHEN 0 THEN po.time_to\n WHEN 1 THEN po.time_to * 30\n WHEN 2 THEN po.time_to * 356\n ELSE po.time_to\n END as time_to_days,\n po.*, pr.user_id AS p_user_id,\n fl.uid, fl.login, fl.uname, fl.usurname, fl.photo, fl.photosm, fl.spec, fl.is_profi, fl.is_pro, fl.is_team, fl.is_pro_test, \n uc.ops_frl_plus as ops_plus, \n uc.ops_frl_null as ops_null, \n uc.ops_frl_minus as ops_minus, \n fl.role, fl.warn, fl.is_banned, fl.ban_where, \n rating_get(fl.rating, fl.is_pro, fl.is_verify, fl.is_profi) as rating, \n zin(uc.ops_emp_plus) + zin(uc.sbr_opi_plus) - zin(uc.ops_emp_minus) - zin(uc.sbr_opi_minus) as ssum, \n fl.is_verify, fl.reg_date, fl.modified_time, fl.photo_modified_time,\n p.name AS spec_name,\n cr.country_name,\n COALESCE(sbr_meta.completed_cnt, 0) + COALESCE(uc.reserves_completed_cnt, 0) AS completed_cnt, -- старые БС + новые БС\n ct.city_name,\n uc.ops_emp_plus + uc.ops_frl_plus as ops_all_plus, uc.ops_emp_null + uc.ops_frl_null as ops_all_null, uc.ops_emp_minus + uc.ops_frl_minus as ops_all_minus,\n uc.ops_emp_plus, uc.ops_emp_null, uc.ops_emp_minus,\n uc.sbr_opi_plus, uc.sbr_opi_null, uc.sbr_opi_minus,\n uc.paid_advices_cnt + uc.sbr_opi_plus + uc.ops_emp_plus + uc.tu_orders_plus + uc.projects_fb_plus as opinions_plus,\n uc.sbr_opi_minus + uc.ops_emp_minus + uc.tu_orders_minus + uc.projects_fb_minus as opinions_minus\n {$sel_blocked} \n FROM projects_offers AS po\n LEFT JOIN projects pr ON pr.id=po.project_id\n INNER JOIN freelancer as fl ON po.user_id=fl.uid\n {$join_blocked} \n LEFT JOIN users_counters uc ON uc.user_id = fl.uid\n LEFT JOIN professions p ON p.id=fl.spec\n LEFT JOIN country cr ON cr.id=fl.country\n LEFT JOIN city ct ON ct.id=fl.city\n LEFT JOIN sbr_meta ON sbr_meta.user_id = fl.uid -- старые БС\n WHERE (po.project_id = ?i ) AND (po.user_id > 0) {$and_blocked}" . ($bPermissions ? '' : ' AND fl.is_banned::integer = 0') . ($show_all ? '' : " AND (po.only_4_cust='f')") . ($user_id == 0 ? '' : ' AND (fl.uid<>' . $user_id . ')') . $filter . $order . $limit_str; $ret = $DB->rows($sql, $prj_id); $error = $DB->error; if ($error) { $error = parse_db_error($error); } else { //$ret = pg_fetch_all($res); $sql = "SELECT COUNT(*) as num\n FROM projects_offers AS po\n LEFT JOIN projects as pr ON po.project_id=pr.id\n INNER JOIN freelancer as fl ON po.user_id=fl.uid\n {$join_blocked} \n LEFT JOIN professions p ON p.id=fl.spec\n LEFT JOIN country cr ON cr.id=fl.country\n LEFT JOIN city ct ON ct.id=fl.city\n WHERE (po.project_id = ?i ) AND (po.user_id > 0) {$and_blocked}" . ($bPermissions ? '' : ' AND fl.is_banned::integer = 0') . ($show_all ? '' : " AND (po.only_4_cust='f')") . ($user_id == 0 ? '' : ' AND (fl.uid<>' . $user_id . ')') . $filter; $count = $DB->val($sql, $prj_id); if ($count && $ret) { foreach ($ret as &$value) { // Выбираем вложения. if ($value['id']) { $sql = 'SELECT a.id, a.prev_pict as prev, a.pict ' . 'FROM projects_offers_attach AS a ' . 'WHERE a.offer_id= ?i'; $value['attach'] = $DB->rows($sql, $value['id']); } } } } } // временное решение для plproxy. очень не красиво, но пока не перенесется большая часть таблиц, // придется видимо оставить так if (!empty($ret)) { $teams = new teams(); $notes = new notes(); $t = $teams->teamsFavorites($ret[0]['p_user_id'], $error); $n = $notes->GetNotes($ret[0]['p_user_id'], 0, $error); for ($i = 0; $i < count($ret); ++$i) { // избранные $ret[$i]['in_team'] = 0; for ($j = 0; $j < count($t); ++$j) { if ($t[$j]['uid'] == $ret[$i]['uid']) { $ret[$i]['in_team'] = $ret[$i]['uid']; break; } } // заметки $ret[$i]['n_text'] = ''; for ($j = 0; $j < count($n); ++$j) { if ($n[$j]['to_id'] == $ret[$i]['uid']) { $ret[$i]['n_text'] = $n[$j]['n_text']; break; } } } } return $ret; }