/**
 * Отдает 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 . ');');
}
예제 #2
0
/**
 * Проверка показывать ли индикацию Проектов в шапке
 */
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);
}
예제 #3
0
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;
}
예제 #4
0
 /**
  * Сообщение о блокировке комментария к предложению по проекту.
  * 
  * @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'] ? ' &laquo;' . $dialogue['project_name'] . '&raquo;' : '';
     $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);
 }
예제 #5
0
 /**
  * Комментарии к предложениям по проектам. Утверждение/удаление записи
  * 
  * @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;
 }
예제 #6
0
 /**
  * Добавление предложения к конкурсу.
  *
  * @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;
     }
 }
예제 #7
0
/**
 * Блокирование/разблокирование комментария к предложению по проекту
 * 
 * @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', '&nbsp;');
                $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;
}
예제 #8
0
            } 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() {
예제 #9
0
 /**
  * возвращает подсказку для кнопки "Проекты" для фрилансера
  * в виде массива ((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');
 }
예제 #10
0
     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);
예제 #11
0
 /**
  * Получение одного проекта
  * 
  * @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;
 }