/** * Отдает HTML для комментариев к предложениям по проектам * * @param object $objResponse xajaxResponse * @param string $rec_id идентификатор записи * @param string $rec_type тип записи * @param array $aParams массив дополнительных параметров * @return string */ function _admEditPrjDialogParseForm(&$objResponse, $rec_id = '', $rec_type = '', $aParams = array()) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects_offers_dialogue.php'; $msg = projects_offers_dialogue::getDialogueMessageById($rec_id); ob_start(); include_once $_SERVER['DOCUMENT_ROOT'] . '/user/adm_edit_tpl/projects_dialog.php'; $sHtml = ob_get_contents(); ob_end_clean(); // текст $sOnReady = "if(document.getElementById('adm_edit_msg')) document.getElementById('adm_edit_msg').value = (\$('adm_edit_msg_source')? \$('adm_edit_msg_source').value : null);"; $objResponse->assign('h4_adm_edit', 'innerHTML', 'Редактировать комментарий'); $objResponse->assign('div_adm_edit', 'innerHTML', $sHtml); $objResponse->script($sOnReady); $objResponse->script("\$('div_adm_reason').setStyle('display', '');"); $objResponse->script('adm_edit_content.edit();'); $objResponse->script('xajax_getAdmEditReasons(' . admin_log::ACT_ID_EDIT_PRJ_DIALOG . ');'); }
/** * Проверка показывать ли индикацию Проектов в шапке */ function getProjectIndication() { define('LAST_REFRESH_DISABLE', 1); session_start(); $aRes = array(); $nCountM = $nCountE = 0; if (isset($_SESSION['uid'])) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects_offers.php"; require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects_offers_dialogue.php"; if (is_emp()) { $nCountE = projects_offers::CheckNewEmpEvents($_SESSION['uid']); $nCountM = projects_offers_dialogue::CountMessagesForEmp($_SESSION['uid'], true, false); if ($nCountM != $_SESSION['lst_emp_new_messages']['cnt']) { $last_emp_new_messages_pid = projects_offers_dialogue::FindLastMessageProjectForEmp($_SESSION['uid']); } else { $last_emp_new_messages_pid = $_SESSION['lst_emp_new_messages']['pid']; } $_SESSION['lst_emp_new_messages']['cnt'] = $nCountM; } else { if (!($nCountE = projects_offers::CheckNewFrlEvents($_SESSION['uid'], false))) { $nCountM = projects_offers_dialogue::CountMessagesForFrl($_SESSION['uid'], true, false); } } if ($nCountM === NULL || $nCountE === NULL) { $aRes['success'] = false; } else { $aRes['success'] = true; $aRes['count'] = $nCountM + $nCountE; if ($nCountM > 0 && is_emp()) { $aRes['count_msg'] = $nCountM; $aRes['last_emp_new_message'] = $last_emp_new_messages_pid; } $aRes['time'] = PRJ_CHECK_DELAY; } } else { $aRes['success'] = false; } echo json_encode($aRes); }
function ReadOfferDialogue($po_id, $prj_id = 0, $fldr = '') { global $session; session_start(); $objResponse = new xajaxResponse(); $prj_offer = new projects_offers(); $po_id = intval($po_id); $prj_id = intval($prj_id); $user_id = get_uid(false); $pod = new projects_offers_dialogue(); if (hasPermissions('projects')) { $pod->markReadMod(array($po_id), $user_id); $objResponse->script('if($("new_msgs_' . $po_id . '").get("need_change")==1) { $("po_comments_' . $po_id . '").setStyle("background-color","#fff"); }'); } if (is_emp()) { $pod->markReadEmp(array($po_id), $user_id); $script = 'if($chk($("po_comments_' . $po_id . '"))) { ' . "if (\$('new_msgs_{$po_id}').get('need_change') == 1) {" . "\$('po_comments_{$po_id}').removeClass('po_comments_new_hide');" . "\$('po_comments_{$po_id}').addClass('po_comments'); } }"; $objResponse->script($script); switch ($fldr) { case 'o': list($po_offers_count, $msg_offers_count) = $prj_offer->CountPrjOffers($prj_id, 'offers'); if ($msg_offers_count > 0) { $objResponse->assign('op_count_offers_new_msgs', 'innerHTML', '<img src="/images/ico_envelop.gif" alt="" width="10" height="8" border="0"> ' . $msg_offers_count . ending($msg_offers_count, 'новое сообщение', 'новых сообщения', 'новых сообщений')); } else { // $objResponse->script($script); $objResponse->assign('op_count_offers_new_msgs', 'innerHTML', ''); } break; case 'i': list($po_executor_count, $msg_executor_count) = $prj_offer->CountPrjOffers($prj_id, 'executor'); if ($msg_executor_count > 0) { $objResponse->assign('op_count_executor_new_msgs', 'innerHTML', '<img src="/images/ico_envelop.gif" alt="" width="10" height="8" border="0"> ' . $msg_executor_count . ending($msg_executor_count, 'новое сообщение', 'новых сообщения', 'новых сообщений')); } else { // $objResponse->script($script); $objResponse->assign('op_count_executor_new_msgs', 'innerHTML', ''); } break; case 'c': list($po_candidate_count, $msg_candidate_count) = $prj_offer->CountPrjOffers($prj_id, 'candidate'); if ($msg_candidate_count > 0) { $objResponse->assign('op_count_candidate_new_msgs', 'innerHTML', '<img src="/images/ico_envelop.gif" alt="" width="10" height="8" border="0"> ' . $msg_candidate_count . ending($msg_candidate_count, 'новое сообщение', 'новых сообщения', 'новых сообщений')); } else { // $objResponse->script($script); $objResponse->assign('op_count_candidate_new_msgs', 'innerHTML', ''); } break; case 'r': list($po_refuse_count, $msg_refuse_count) = $prj_offer->CountPrjOffers($prj_id, 'refuse'); if ($msg_refuse_count > 0) { $objResponse->assign('op_count_refuse_new_msgs', 'innerHTML', '<img src="/images/ico_envelop.gif" alt="" width="10" height="8" border="0"> ' . $msg_refuse_count . ending($msg_refuse_count, 'новое сообщение', 'новых сообщения', 'новых сообщений')); } else { // $objResponse->script($script); $objResponse->assign('op_count_refuse_new_msgs', 'innerHTML', ''); } break; case 'fr': list($po_refuse_count, $msg_refuse_count) = $prj_offer->CountPrjOffers($prj_id, 'frl_refuse'); if ($msg_refuse_count > 0) { $objResponse->assign('op_count_frl_refuse_new_msgs', 'innerHTML', '<img src="/images/ico_envelop.gif" alt="" width="10" height="8" border="0"> ' . $msg_refuse_count . ending($msg_refuse_count, 'новое сообщение', 'новых сообщения', 'новых сообщений')); } else { $objResponse->assign('op_count_frl_refuse_new_msgs', 'innerHTML', ''); } break; } // Обновляем количество новых сообщений в заголовке. $cnt_emp_new_messages = projects_offers_dialogue::CountMessagesForEmp($_SESSION['uid'], true); if ($cnt_emp_new_messages > 0) { $last_emp_new_messages_pid = projects_offers_dialogue::FindLastMessageProjectForEmp($_SESSION['uid']); } else { $last_emp_new_messages_pid = false; } $ndm_html = ''; $sScript = "\$\$('.b-userbar__prjic').addClass('b-userbar__prjic_hide');\$\$('.b-userbar__icprj').removeClass('b-userbar__icprj_hide');"; if ($last_emp_new_messages_pid) { $ndm_html = '(<a class="b-userbar__toplink" href="/projects/?pid=' . $last_emp_new_messages_pid . '" title="Есть новые сообщения">' . $cnt_emp_new_messages . '</a>)'; $sScript = "\$\$('.b-userbar__prjic').removeClass('b-userbar__prjic_hide');\$\$('.b-userbar__icprj').addClass('b-userbar__icprj_hide');"; } $objResponse->assign('new_dialogue_messages', 'innerHTML', $ndm_html); $objResponse->script($sScript); } else { $pod->markReadFrl($po_id, $user_id); // обновляем мигающий значек проекта if (!projects_offers::CheckNewFrlEvents($user_id, false) && !projects_offers_dialogue::CountMessagesForFrl($user_id, true, false)) { $objResponse->script("\$('new_offers_messages').getElement('img').addClass('b-userbar__prjic_hide'); \n \$('new_offers_messages').getElement('i').removeClass('b-userbar__icprj_hide'); "); } if (hasPermissions('projects')) { $script = '$("po_comments_' . $po_id . '").setStyle("background-color","#fff"); if($chk($("po_comments_' . $po_id . '"))) { ' . "if (\$('new_msgs_{$po_id}').get('need_change') == 1) {" . "\$('new_msgs_{$po_id}').set('need_change', 0); dialogue_toggle({$po_id}); } }"; $objResponse->script($script); } } if (defined('NEO')) { $objResponse->script('Page.checkNotifications(true)'); } else { $objResponse->script('Notification()'); } return $objResponse; }
/** * Сообщение о блокировке комментария к предложению по проекту. * * @param int $dialogue_id ID сообщениея * @param string $reason причина * * @return @see messages::Add() */ public function SendBlockedDialogue($dialogue_id = 0, $reason = '') { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects_offers_dialogue.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; $dialogue = projects_offers_dialogue::getDialogueMessageById($dialogue_id); $f_user = new users(); $f_user->GetUserByUID($dialogue['user_id']); $sName = $dialogue['project_name'] ? ' «' . $dialogue['project_name'] . '»' : ''; $link = getAbsUrl(getFriendlyURL('project', $dialogue['project_id'])); $message = "\n{$f_user->uname} {$f_user->usurname}!\n\nМодераторы нашего ресурса нашли ваш комментарий к предложеню по проекту{$sName} некорректным:\n\nПричина: " . $reason . "\n\n{$link}\n\nМы призываем вас впредь не публиковать подобных комментариев, иначе модераторы лишат ваш аккаунт доступа к сайту.\n\nЭто сообщение было выслано автоматически, и ответ на него не будет рассматриваться.\n\nНадеемся на понимание, Команда Free-lance.ru."; self::Add(users::GetUid($err, 'admin'), $f_user->login, $message, '', 1); }
/** * Комментарии к предложениям по проектам. Утверждение/удаление записи * * @param string $stream_id идентификатор потока * @param int $user_id идентификатор модератора * @param int $from_id идентификатор пользователя * @param int $rec_id идентификатор записи * @param int $rec_type тип записи * @param int $action действие: 1 - утверждено, 2 - удалено * @param string $is_sent было ли отправлено уведомление * @param string $reason причина удаления */ function resolvePrjDialog($stream_id = '', $user_id = 0, $from_id = 0, $rec_id = 0, $rec_type = 0, $action = 1, $is_sent = '', $reason = '') { $bRet = false; $sQuery = 'UPDATE moderation SET moder_num = ?i, status = ?i WHERE rec_id = ?i AND rec_type = ?i AND stream_id = ? RETURNING rec_id'; $sRecId = $GLOBALS['DB']->val($sQuery, $this->nResolveCnt, $action, $rec_id, self::MODER_PRJ_DIALOG, $stream_id); if ($sRecId) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects_offers_dialogue.php"; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/admin_log.php'; $bRet = true; $dialogue = projects_offers_dialogue::getDialogueMessageById($rec_id); $sObjName = $dialogue['project_name']; $sObjLink = getFriendlyURL('project', $dialogue['project_id']); $aData = array('moderator_status' => $user_id); if ($action == 1) { if ($is_sent == 'f') { // отправка уведомления о новом сообщении require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pmail.php'; $pmail = new pmail(); $pmail->NewPrjMessageOnOffer($rec_id); $aData['is_sent'] = true; // устанавливаем флаг отправки } if ($dialogue['is_blocked'] == 't') { projects_offers_dialogue::UnBlocked($rec_id); // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_PROJ, admin_log::ACT_ID_PRJ_DIALOG_UNBLOCK, $from_id, $rec_id, $sObjName, $sObjLink, 0, '', 0, ''); } } elseif ($action == 2 && $dialogue['is_blocked'] != 't') { $sReason = 'Содержит запрещенную информацию'; $sBlockId = projects_offers_dialogue::Blocked($rec_id, $reason, 0, $_SESSION['uid'], true); // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_PROJ, admin_log::ACT_ID_PRJ_DIALOG_BLOCK, $from_id, $rec_id, $sObjName, $sObjLink, 0, '', 0, $sReason, $sBlockId); } $GLOBALS['DB']->update('projects_offers_dialogue', $aData, 'id = ?i', $rec_id); } return $bRet; }
/** * Добавление предложения к конкурсу. * * @param integer $user_id id фрилансера * @param integer $prj_id id конкурса * @param string $text текст предложения * @param array $work_pict работа * @param array $work_prev_pict превью работы * @param boolean $for_customer_only показывать только работодателю * * @return string текст ошибки в случае неуспеха */ public function AddOfferKon($user_id, $prj_id, $text, $work_pict, $work_prev_pict, $for_customer_only = false) { global $DB; $obj_portfolio = new portfolio(); $obj_dialogue = new projects_offers_dialogue(); $prj_id = intval($prj_id); $user_id = intval($user_id); $text = substr(change_q(trim($text), true, 90), 0, 3000); $for_customer_only = $for_customer_only ? 't' : 'f'; $attach = array(); foreach ($work_pict as $key => $value) { if ($value != '') { $attach[$key]['pict'] = substr(change_q(trim($value), false, 25), 0, 24); $attach[$key]['prev'] = substr(change_q(trim($work_prev_pict[$key]), false, 30), 0, 29); } } $sql = "SELECT COUNT(*) as num\n FROM projects_offers AS po\n WHERE (po.project_id = '{$prj_id}') AND (user_id = " . $user_id . ')'; $count = $DB->val($sql, $prj_id, $user_id); if ($count) { return 'Предложение уже существует'; } else { $sql = "INSERT INTO projects_offers (project_id, user_id, cost_from, cost_to, cost_type, time_from, time_to, time_type, pict1, pict2, pict3, prev_pict1, prev_pict2, prev_pict3, only_4_cust)\n VALUES (?i, ?i, 0, 0, 0, 0, 0, 0, '', '', '', '', '', '', ? );SELECT currval('projects_offers_id_seq');"; $po_id = $DB->val($sql, $prj_id, $user_id, $for_customer_only); $error = $DB->error; if ($po_id) { $error .= $obj_dialogue->AddDialogueMessage($po_id, $user_id, $text, true, false); $sql = ''; foreach ($attach as $value) { $sql .= 'INSERT INTO projects_offers_attach (offer_id, prev_pict, pict) ' . 'VALUES (?i, ?, ?);'; } if ($sql != '') { $DB->query($sql, $po_id, $value['prev'], $value['pict']); $error .= $DB->error; } } if (!$error) { $_SESSION['po_count'] = (int) $_SESSION['po_count'] + 1; } return $error; } }
/** * Блокирование/разблокирование комментария к предложению по проекту * * @param int $dialogue_id ID комментария * @param string $reason причина * @param int $reason_id ID причины, если она выбрана из списка (таблица admin_reasons, где act_id = 27) * @param string $reason_name Краткое описание причины действия (из селекта) для лога админских действий * @return object xajaxResponse */ function BlockedDialogue($dialogue_id, $reason, $reason_id = null, $reason_name = '') { session_start(); $objResponse = new xajaxResponse(); if (hasPermissions('users')) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects_offers_dialogue.php"; $dialogue_id = intval($dialogue_id); $dialogue = projects_offers_dialogue::getDialogueMessageById($dialogue_id); if ($dialogue) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; $objUser = new users(); $objUser->GetUserByUID($dialogue['user_id']); // лог админских действий $sObjName = $dialogue['project_name']; $sObjLink = getFriendlyURL('project', $dialogue['project_id']); $reason_id = $reason_id ? $reason_id : 0; $reason = str_replace('%USERNAME%', $objUser->uname . ' ' . $objUser->usurname, $reason); $reason = change_q($reason, FALSE, 0, TRUE); if ($dialogue['is_blocked'] == 't') { projects_offers_dialogue::UnBlocked($dialogue_id); // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_PROJ, admin_log::ACT_ID_PRJ_DIALOG_UNBLOCK, $dialogue['user_id'], $dialogue_id, $sObjName, $sObjLink, 0, '', $reason_id, $reason); $objResponse->assign("dialogue-block-{$dialogue_id}", 'innerHTML', ' '); $objResponse->assign("dialogue-block-{$dialogue_id}", 'style.display', 'none'); $objResponse->assign("dialogue-button-{$dialogue_id}", 'innerHTML', '<a class="admn" href="javascript:void(0);" onclick="banned.blockedDialogue(' . $dialogue_id . ')">Заблокировать</a>'); } else { $sBlockId = projects_offers_dialogue::Blocked($dialogue_id, $reason, $reason_id, $_SESSION['uid']); // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_PROJ, admin_log::ACT_ID_PRJ_DIALOG_BLOCK, $dialogue['user_id'], $dialogue_id, $sObjName, $sObjLink, 0, '', $reason_id, $reason, $sBlockId); $reason = reformat($reason, 24, 0, 0, 1, 24); $html = BlockedDialogueHTML($reason, $_SESSION['login'], "{$_SESSION['name']} {$_SESSION['surname']}"); $objResponse->assign("dialogue-block-{$dialogue_id}", 'innerHTML', $html); $objResponse->assign("dialogue-block-{$dialogue_id}", 'style.display', 'block'); $objResponse->assign("dialogue-button-{$dialogue_id}", 'innerHTML', '<a class="admn" href="javascript:void(0);" onclick="banned.unblockedDialogue(' . $dialogue_id . ')">Разблокировать</a>'); } } else { $objResponse->alert('Несуществующее предложение'); } } return $objResponse; }
} else { $cls->getUnread2Read($_POST['msg'], false); } break; } } if (trim($_GET['login']) != '') { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; $login = pg_escape_string(trim($_GET['login'])); $mod = intval($_GET['mod']); $user = new users(); $user->GetUser($login); switch ($mod) { case 1: require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects_offers_dialogue.php'; $cls = new projects_offers_dialogue(); if (!is_emp($user->role)) { $info = $cls->FindAllUnreadMessageFrl($user->uid); // Для Работодателей будет другая функция } else { $info = $cls->FindAllUnreadMessageEmp($user->uid); } break; } } ?> <style> </style> <script> function toggleCheckBox() {
/** * возвращает подсказку для кнопки "Проекты" для фрилансера * в виде массива ((int)count, (string)tip) * null - в случае ошибки */ public static function getProjectsTipFrl() { $uid = get_uid(0); if (!$uid) { return null; } $newEventsCount = $newMessCount = 0; // количество новых событий $newEventsCount = projects_offers::GetNewFrlEventsCount($uid, false); // сколько новых сообщений $newMessCount = projects_offers_dialogue::CountMessagesForFrl($uid, true, false); if ($newEventsCount === null || $newMessCount === null) { return array('count' => 0, 'tip' => 'Список проектов', 'link' => '/proj/?p=list'); } $newAnsCount = $newEventsCount + $newMessCount; if ((int) $newMessCount === 0 && (int) $newEventsCount === 1) { $tip = 'Новое событие к вашему ответу в проекте'; } elseif ((int) $newMessCount === 1 && (int) $newEventsCount === 0) { $tip = "Новое сообщение к вашему ответу в проекте"; } elseif ($newMessCount + $newEventsCount > 0) { $tip = ""; $tip .= $newMessCount > 0 ? $newMessCount . ending($newMessCount, " новое сообщение", " новых сообщения", " новых сообщений") : ""; $tip .= $newMessCount > 0 && $newEventsCount > 0 ? " и " : ""; $tip .= $newEventsCount > 0 ? $newEventsCount . ending($newEventsCount, " новое событие", " новых события", " новых событий") : ""; $tip .= $newEventsCount > 0 ? " к вашим ответам в проектах" : " на ваши ответы в проектах"; } return array('count' => $newAnsCount, 'tip' => $tip, 'link' => '/proj/?p=list'); }
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) { $content = '404.php'; include '../template2.php'; exit; } } if ($cid) { $is_edit = true; $pod = new projects_offers_dialogue(); $project_dialogue = $pod->GetDialogueForOffer($po_id); $edit_dialog = $project_dialogue[count($project_dialogue) - 1]; } if ($action == 'create') { if (!trim($_POST['po_text'])) { $error = 'Невозможно отправить пустое сообщение.'; } //Не позволяем производить действия с заблокированным проектом if (projects::CheckBlocked(intval($_POST['prj_id']))) { return; } elseif (intval($_SESSION['uid'])) { $po_id = intval($_POST['po_id']); $po_text = antispam(trim($_POST['po_text'])); $po_commentid = intval($_POST['po_commentid']); $user_id = get_uid(false);
/** * Получение одного проекта * * @param array $aParams массив входящих данных * @return array $aResult ответ */ protected function x____projects_get($aParams = array()) { $this->_validDevice($aParams); $sId = __paramValue('int', $aParams['id'], null, true); if (!empty($sId)) { require_once ABS_PATH . '/classes/projects.php'; $oPrj = new new_projects(); $aProject = $oPrj->GetPrjCust($sId); $aAttaches = $oPrj->getAllAttach($sId); if (!empty($aProject)) { if ($aProject['is_banned'] || $aProject['is_blocked']) { // работодатель или проест заблокированы $this->error(EXTERNAL_ERR_PROJECT_NOT_FOUND); } $aResult = array('item' => $this->_getProjectData($aProject)); $nUid = get_uid(false); $aSpecs = new_projects::getSpecs($sId); if (is_array($aSpecs) && $aSpecs) { $aResult['item']['category_id'] = $aSpecs[0]['category_id']; $aResult['item']['subcategory_id'] = $aSpecs[0]['subcategory_id']; } $aResult['item']['attaches'] = array(); if ($aAttaches) { foreach ($aAttaches as $attach) { $aResult['item']['attaches'][] = array("url" => WDCPREFIX . '/' . $attach['path'], "file" => $attach['name']); } } $aResult['item']['responses'] = array(); if ($aProject['kind'] == 7) { // конкурс require_once ABS_PATH . '/classes/contest.php'; $oContest = new contest($sId, $nUid, is_emp(), $aProject['user_id'] == $nUid, false, is_pro()); $oContest->GetOffers(); if (is_array($oContest->offers) && $oContest->offers) { foreach ($oContest->offers as $aOne) { $aResult['item']['responses'][] = $this->_getContestOfferData($aOne); } } } else { // проект require_once ABS_PATH . '/classes/projects_offers.php'; require_once ABS_PATH . '/classes/projects_offers_dialogue.php'; $oPrjOffers = new projects_offers(); $obj_dialogue = new projects_offers_dialogue(); $nOffersCnt = 0; if (is_emp()) { // залогинен работодатель $aOffers = $oPrjOffers->GetPrjOffers($nOffersCnt, $sId, 'ALL', 0, $nUid, $aProject['user_id'] == $nUid, 'date', $aProject['user_id'] == $nUid ? 'a' : 'nor'); } else { $aOffers = $oPrjOffers->GetPrjOffers($nOffersCnt, $sId, 'ALL', 0, $nUid, false, null, 'nor'); } // Диалоги по предложениям к данному проекту и все остальное if (is_array($aOffers) && $aOffers) { foreach ($aOffers as $key => $value) { $aOffers[$key]['exec_id'] = $aProject['exec_id']; $aOffers[$key]['emp_uid'] = $aProject['user_id']; $aOffers[$key]['dialogue'] = $obj_dialogue->GetDialogueForOffer($value['id']); $aResult['item']['responses'][] = $this->_getProjectOfferData($aOffers[$key]); } } $aResult['item']['responses_count'] = $nOffersCnt; $aResult['item']['is_responses_exists'] = $oPrjOffers->OfferExist($sId, $nUid) ? 1 : 2; // Наличие предложения данного юзера по данному проекту if ($aResult['item']['is_responses_exists'] == 1) { // Предложение данного пользователя по данному проекту $user_offer = $oPrjOffers->GetPrjOffer($sId, $nUid); $user_offer['exec_id'] = $aProject['exec_id']; $user_offer['emp_uid'] = $aProject['user_id']; // Диалог по предложению данного пользователя $user_offer['dialogue'] = $obj_dialogue->GetDialogueForOffer($user_offer['id']); $aResult['item']['responses'][] = $this->_getProjectOfferData($user_offer); } } } else { $this->error(EXTERNAL_ERR_PROJECT_NOT_FOUND); } } else { $this->error(EXTERNAL_ERR_EMPTY_PROJECT_ID); } return $aResult; }