/**
 * Сохранение комментария к предложениям по проектам
 * 
 * @param object $objResponse xajaxResponse
 * @param string $rec_id идентификатор записи
 * @param string $rec_type тип записи
 * @param array $aForm массив данных
 * @param string $sDrawFunc имя функции для выполнения после сохранения
 */
function _admEditPrjDialogSaveForm(&$objResponse, $rec_id = '', $rec_type = '', $aForm = array(), $sDrawFunc = '')
{
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects_offers_dialogue.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/user_content.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/messages.php';
    $bValid = true;
    if (!trim($aForm['post_text'])) {
        $bValid = false;
        $sParent = $sDrawFunc == 'stream0' || $sDrawFunc == 'stream1' || $sDrawFunc == 'stream2' ? 'parent.' : '';
        $objResponse->script("{$sParent}\$('adm_edit_err_msg').set('html', 'Поле заполнено некорректно.'); ");
        $objResponse->script("{$sParent}\$('div_adm_edit_err_msg').setStyle('display', '');");
        $objResponse->script("{$sParent}adm_edit_content.disabled = false; {$sParent}adm_edit_content.button();");
    }
    if ($bValid) {
        $sReason = _parseReason($aForm['user_id'], $aForm['adm_edit_text']);
        $pod = new projects_offers_dialogue();
        $po_text = antispam(trim($aForm['post_text']));
        $po_text = preg_replace("/(\r\n|\r|\n){3,100}/i", "\r\n\r\n", $po_text);
        $error = $pod->SaveDialogueMessage($aForm['user_id'], $po_text, $rec_id, $aForm['po_id'], false, $_SESSION['uid'], $sReason);
        messages::prjDialogModifiedNotification($aForm['user_id'], $aForm['project_id'], $po_text, $sReason);
        $content_id = user_content::MODER_PRJ_DIALOG;
        _admEditAfterAll($objResponse, $content_id, $rec_id, $rec_type, $sDrawFunc, $aForm);
    }
}
Ejemplo n.º 2
0
 /**
  * Добавление предложения к проекту.
  *
  * @param integer $user_id           id фрилансера
  * @param integer $prj_id            id проекта
  * @param integer $cost_from         цена ОТ
  * @param integer $cost_to           цена ДО
  * @param integer $cost_type         валюта цены
  * @param integer $time_from         время ОТ
  * @param integer $time_to           время ДО
  * @param integer $time_type         тип времени (0 - часы, 1 - дни. 2 - месяцы)
  * @param string  $text              текст предложения
  * @param string  $work1_id          id 1 прикрепленной работы
  * @param string  $work2_id          id 2 прикрепленной работы
  * @param string  $work3_id          id 3 прикрепленной работы
  * @param string  $work1_link        ссылка на 1 прикрепленную работы
  * @param string  $work2_link        ссылка на 2 прикрепленную работы
  * @param string  $work3_link        ссылка на 3 прикрепленную работы
  * @param string  $work1_name        название 1 прикрепленной работы
  * @param string  $work2_name        название 2 прикрепленной работы
  * @param string  $work3_name        название 3 прикрепленной работы
  * @param array   $work1_pict        файл 1 работы
  * @param array   $work2_pict        файл 2 работы
  * @param array   $work3_pict        файл 3 работы
  * @param array   $work1_prev_pict   файл превью 1 работы
  * @param array   $work2_prev_pict   файл превью 2 работы
  * @param array   $work3_prev_pict   файл превью 3 работы
  * @param boolean $for_customer_only показывать предложение только работоадетлю
  * @param integer $dialogueId        id ветки диалога
  * @param integer $emp_read          прочитано работодателем или нет
  * @param boolean $prefer_sbr        предпочитаю работать с СБР
  * @param boolean $auto              0 или ID автоответа (не обновляется)
  * @param integer $moduser_id        UID пользователя (админа), изменяющего предложение. если null - то $user_id id фрилансера
  * @param string modified_reason       Причина редактирования
  *
  * @return string текст ошибки в случае неуспеха
  */
 public function AddOffer($user_id, $prj_id, $cost_from, $cost_to, $cost_type, $time_from, $time_to, $time_type, $text, $work1_id, $work2_id, $work3_id, $work1_link, $work2_link, $work3_link, $work1_name, $work2_name, $work3_name, $work1_pict, $work2_pict, $work3_pict, $work1_prev_pict, $work2_prev_pict, $work3_prev_pict, $for_customer_only = false, $dialogueId = 0, $emp_read = 0, $prefer_sbr = false, $is_color = false, $contacts = null, $payed_items = '0', $auto = 0, $moduser_id = null, $modified_reason = '')
 {
     global $DB;
     $obj_portfolio = new portfolio();
     $obj_dialogue = new projects_offers_dialogue();
     if ((int) $user_id <= 0 || (int) $prj_id <= 0) {
         return false;
     }
     $is_color = $is_color ? 't' : 'f';
     if ($cost_from < 0 && $cost_from !== '') {
         $cost_from = 0;
         //$error = 'Начальная стоимость должна быть положительным числом.';
     }
     if ($cost_to < 0 && $cost_to !== '') {
         $cost_to = 0;
         //$error = 'Конечная стоимость должна быть положительным числом.';
     }
     if ($cost_to !== '' && $cost_from !== '' && ($cost_to < $cost_from && $cost_to > 0)) {
         $wrk = $cost_to;
         $cost_to = $cost_from;
         $cost_from = $wrk;
     }
     if ($time_from < 0 && $time_from !== '') {
         $time_from = 0;
     }
     if ($time_to < 0 && $time_to !== '') {
         $time_to = 0;
     }
     if ($time_to !== '' && $time_from !== '' && $time_to < $time_from && intval($time_to) > 0) {
         $wrk = $time_to;
         $time_to = $time_from;
         $time_from = $wrk;
     }
     $prj_id = intval($prj_id);
     $user_id = intval($user_id);
     $cost_from = floatval(str_replace(',', '.', str_replace(' ', '', $cost_from)));
     $cost_to = floatval(str_replace(',', '.', str_replace(' ', '', $cost_to)));
     $cost_type = intval($cost_type);
     $time_from = intval($time_from);
     $time_to = intval($time_to);
     $time_type = intval($time_type);
     $text = __paramValue('string', $text);
     $text = str_replace("\r\n", "\n", $text);
     // Cчитается как два символа -- поэтому надо заменить на один, чтобы при подсчете символов последние символы не обрезались
     //$text = preg_replace("/(\r\n|\r|\n){3,100}/i", "\r\n\r\n", $text);//trim(substr(change_q(trim($text), true, 90), 0, 3000));
     $for_customer_only = $for_customer_only ? 't' : 'f';
     $prefer_sbr = $prefer_sbr ? 't' : 'f';
     $work1_id = intval($work1_id);
     $work2_id = intval($work2_id);
     $work3_id = intval($work3_id);
     $work1_pict = substr(change_q(trim($work1_pict), false, 25), 0, 24);
     $work2_pict = substr(change_q(trim($work2_pict), false, 25), 0, 24);
     $work3_pict = substr(change_q(trim($work3_pict), false, 25), 0, 24);
     $work1_prev_pict = substr(change_q(trim($work1_prev_pict), false, 30), 0, 29);
     $work2_prev_pict = substr(change_q(trim($work2_prev_pict), false, 30), 0, 29);
     $work3_prev_pict = substr(change_q(trim($work3_prev_pict), false, 30), 0, 29);
     $work1_pict = $work1_pict == '' && $work1_prev_pict != '' ? $work1_prev_pict : $work1_pict;
     $work2_pict = $work2_pict == '' && $work2_prev_pict != '' ? $work2_prev_pict : $work2_pict;
     $work3_pict = $work3_pict == '' && $work3_prev_pict != '' ? $work3_prev_pict : $work3_pict;
     $moduser_id = $moduser_id ? $moduser_id : $user_id;
     $payed_items = $payed_items == '1' ? $payed_items : '0';
     $sql = "SELECT po.*, pb.id IS NOT NULL AS is_blocked \n          FROM projects_offers AS po\n          LEFT JOIN projects_offers_blocked pb ON  pb.src_id = po.id\n          WHERE po.project_id = '{$prj_id}' AND po.user_id = " . $user_id;
     $po = $DB->row($sql, $prj_id, $user_id);
     if ($DB->error) {
         return $DB->error;
     }
     $sql = 'SELECT e.is_pro FROM projects p 
         INNER JOIN employer e ON e.uid = p.user_id WHERE p.id = ?i';
     $emp_is_pro = $DB->val($sql, $prj_id);
     if ($po['is_blocked'] == 't' && $moduser_id == $user_id) {
         return 'OfferIsBlocked';
     }
     $slashedText = addslashes($text);
     if ($po['id']) {
         if ($po['refused'] == 't' && $moduser_id == $user_id) {
             return 403;
         }
         $sql = '';
         $sModer = '';
         if ($emp_is_pro != 't' && $moduser_id == $user_id && !hasPermissions('projects') && !is_pro() && ($po['descr'] != $slashedText || $po['pict1'] != $work1_pict && !empty($work1_pict) || $po['pict2'] != $work2_pict && !empty($work2_pict) || $po['pict3'] != $work3_pict && !empty($work3_pict) || $po['prev_pict1'] != $work1_prev_pict && !empty($work1_prev_pict) || $po['prev_pict2'] != $work2_prev_pict && !empty($work2_prev_pict) || $po['prev_pict3'] != $work3_prev_pict && !empty($work3_prev_pict))) {
             // автор, не админ, не про меняет заголовок либо текст - отправить на модерирование
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stop_words.php';
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/user_content.php';
             $stop_words = new stop_words();
             $nStopWordsCnt = $stop_words->calculate($slashedText);
             $sModer = ' , moderator_status =' . ($nStopWordsCnt ? ' 0 ' : ' NULL ');
             if ($nStopWordsCnt) {
                 // если есть что то подозрительное - на модерирование
                 $DB->insert('moderation', array('rec_id' => $po['id'], 'rec_type' => user_content::MODER_PRJ_OFFERS, 'stop_words_cnt' => $nStopWordsCnt));
             } else {
                 // иначе на модерирование не отправляем
                 $DB->query('DELETE FROM moderation WHERE rec_id = ?i AND rec_type = ?i;', $po['id'], user_content::MODER_PRJ_OFFERS);
             }
         }
         $sql .= "UPDATE projects_offers SET\n            descr = '{$slashedText}',\n            cost_from = {$cost_from},\n            cost_to = {$cost_to},\n            cost_type = {$cost_type},\n            time_from = {$time_from},\n            time_to = {$time_to},\n            time_type = {$time_type},\n            portf_id1 = '{$work1_id}',\n            portf_id2 = '{$work2_id}',\n            portf_id3 = '{$work3_id}',\n            pict1 = '{$work1_pict}',\n            pict2 = '{$work2_pict}',\n            pict3 = '{$work3_pict}',\n            prev_pict1 = '{$work1_prev_pict}',\n            prev_pict2 = '{$work2_prev_pict}',\n            prev_pict3 = '{$work3_prev_pict}',\n            only_4_cust = '{$for_customer_only}',\n            prefer_sbr = '{$prefer_sbr}',\n            po_emp_read = '{$emp_read}',\n            is_color = '{$is_color}',\n            payed_items = B'{$payed_items}',\n            moduser_id = {$moduser_id}, \n            modified_reason = '{$modified_reason}',\n            " . ($contacts !== null ? "offer_contacts = '{$contacts}'," : '') . "\n            modified = now() \n            {$sModer} \n            WHERE id = {$po['id']} AND refused = false";
         $this->offer_id = $po['id'];
         $DB->squery($sql);
         $error = $DB->error;
         if ($dialogueId) {
             $error .= $obj_dialogue->SaveDialogueMessage($user_id, $text, $dialogueId, 0, true, $moduser_id);
             $authorId = $DB->val('SELECT user_id FROM projects WHERE id = ?', $prj_id);
             $memBuff = new memBuff();
             $memBuff->delete("prjEventsCnt{$authorId}");
         }
         return $error;
     } else {
         $nStopWordsCnt = 0;
         if ($emp_is_pro != 't' && !is_pro()) {
             // если нужно считаем стоп-слова
             require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stop_words.php';
             $stop_words = new stop_words();
             $nStopWordsCnt = $stop_words->calculate($slashedText);
         }
         include_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects_offers_answers.php';
         $sModVal = !is_pro() && $emp_is_pro != 't' && $nStopWordsCnt ? '0' : 'NULL';
         $sql = "INSERT INTO projects_offers (project_id, user_id, cost_from, cost_to, cost_type, time_from, time_to, time_type, portf_id1, portf_id2, portf_id3, pict1, pict2, pict3, prev_pict1, prev_pict2, prev_pict3, only_4_cust, prefer_sbr, po_emp_read, descr, is_color, payed_items, offer_contacts, po_frl_read, moderator_status, auto)\n          ( SELECT {$prj_id}, {$user_id}, {$cost_from}, {$cost_to}, {$cost_type}, {$time_from}, {$time_to}, {$time_type}, '{$work1_id}', '{$work2_id}', '{$work3_id}', '{$work1_pict}', '{$work2_pict}', '{$work3_pict}', '{$work1_prev_pict}', '{$work2_prev_pict}', '{$work3_prev_pict}', '{$for_customer_only}', '{$prefer_sbr}', '{$emp_read}', '{$slashedText}', '{$is_color}', B'{$payed_items}', '{$contacts}', TRUE, {$sModVal}, {$auto} \n            WHERE NOT EXISTS(SELECT 1 FROM projects_blocked WHERE project_id = {$prj_id}) ); \n          SELECT currval('projects_offers_id_seq');";
         $po_id = $DB->val($sql);
         $error = $DB->error;
         $this->offer_id = $po_id;
         if ($po_id) {
             if ($emp_is_pro != 't' && !is_pro() && $nStopWordsCnt) {
                 require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/user_content.php';
                 $DB->insert('moderation', array('rec_id' => $po_id, 'rec_type' => user_content::MODER_PRJ_OFFERS, 'stop_words_cnt' => $nStopWordsCnt));
             }
             $error .= $obj_dialogue->AddDialogueMessage($po_id, $user_id, $text, true, false, true);
         }
         if (!$error) {
             $_SESSION['po_count'] = (int) $_SESSION['po_count'] + 1;
         }
         return $error;
     }
 }
Ejemplo n.º 3
0
function AddDialogueMessage($form)
{
    global $session;
    session_start();
    $objResponse = new xajaxResponse();
    $offerIsBlocked = projects_offers::isOfferBlocked(false, get_uid(), $form['prj_id']);
    if ($offerIsBlocked) {
        $objResponse->alert('Ваше предложение заблокировано, вы не можете отправить это сообщение');
        return $objResponse;
    }
    $prj = new projects();
    $project = $prj->GetPrjCust(intval($form['prj_id']));
    $is_pro = is_pro();
    if ($project['pro_only'] == 't' && !$is_pro && !is_emp() && !hasPermissions('projects')) {
        if ($project['kind'] == 7) {
            if (contest::IsContestOfferExists($project['id'], get_uid(false))) {
                $is_pro = true;
            }
        } else {
            if (projects_offers::IsPrjOfferExists($project['id'], get_uid(false))) {
                $is_pro = true;
            }
        }
    }
    if ($project['pro_only'] == 't' && !$is_pro && $project['user_id'] != get_uid() && !hasPermissions('projects')) {
        $objResponse->alert('Данная функция доступна только пользователям с аккаунтом PRO.');
        $objResponse->script("\$('savebtn').set('disabled', false);");
        return $objResponse;
    } elseif ($project['verify_only'] == 't' && !($_SESSION['is_verify'] == 't') && $project['user_id'] != get_uid() && !hasPermissions('projects')) {
        $objResponse->alert('Данная функция доступна только верифицированным пользователям.');
        $objResponse->script("\$('savebtn').set('disabled', false);");
        return $objResponse;
    }
    if (!trim($form['po_text'])) {
        $objResponse->alert('Невозможно отправить пустое сообщение.');
        $objResponse->script("\n            \$('savebtn').set('disabled', false);\n        ");
        return $objResponse;
    }
    if (!is_emp() && $form['from'] == 'emp') {
        $objResponse->script("\n            \$('savebtn').set('disabled', false);\n        ");
        $objResponse->alert('Невозможно отправить сообщение. Вы вышли из аккаунта работодателя.');
        return $objResponse;
    } elseif (is_emp() && $form['from'] == 'frl') {
        $objResponse->script("\n            \$('savebtn').set('disabled', false);\n        ");
        $objResponse->alert('Невозможно отправить сообщение. Вы вышли из аккаунта фрилансера.');
        return $objResponse;
    }
    //Не позволяем производить действия с заблокированным проектом
    if (projects::CheckBlocked(intval($form['prj_id']))) {
        $objResponse->script("document.location.href='/projects/index.php?pid=" . intval($form['prj_id']) . "'");
    } elseif (intval($_SESSION['uid'])) {
        $po_id = intval($form['po_id']);
        //$po_text = substr(change_q_x($form['po_text'], false), 0, 1000);
        $po_text = antispam(trim($form['po_text']));
        $po_text = preg_replace("/(\r\n|\r|\n){3,100}/i", "\r\n\r\n", $po_text);
        $po_commentid = intval($form['po_commentid']);
        $user_id = get_uid(false);
        $user = new users();
        $user_name = $user->GetName($user_id, $error);
        $pod = new projects_offers_dialogue();
        $project_dialogue = $pod->GetDialogueForOffer($po_id);
        $project = $pod->GetProjectFromDialogue($po_id);
        if (count($project_dialogue)) {
            for ($i = count($project_dialogue) - 1; $i >= 0; --$i) {
                if ($project_dialogue[$i]['user_id'] != $user_id) {
                    $to_user_name = $project_dialogue[$i]['login'];
                    break;
                }
            }
        }
        if (is_emp()) {
            $emp_read = true;
            $frl_read = false;
        } else {
            $emp_read = false;
            $frl_read = true;
        }
        if (!$po_commentid) {
            $error = $pod->AddDialogueMessage($po_id, $user_id, $po_text, $frl_read, $emp_read);
            $last_comment = $pod->GetLastDialogueMessage($user_id, $po_id);
            $objResponse->script("last_commentid={$last_comment};");
            $objResponse->script("edit_block[{$po_id}] = '&nbsp;&nbsp;<span><a href=\"javascript:void(null)\" onClick=\"answer({$po_id}, {$last_comment});markRead(\\'{$po_id}\\');\" class=\"internal\">Редактировать</a></span>';");
            //		$objResponse->script("alert(last_commentid);");
            //		$objResponse->script("alert(edit_block);");
        } else {
            $error = $pod->SaveDialogueMessage($user_id, $po_text, $po_commentid, $po_id, false);
            if ($error == 1) {
                $objResponse->alert('Вы не можете редактировать комментарий, так как на него уже ответили.');
                return $objResponse;
            }
        }
        $po_text = rtrim(ltrim($po_text, "\r\n"));
        $po_text = substr(change_q_x($po_text, false, true, '', false, false), 0, 1000);
        $po_text = stripslashes($po_text);
        if ($error == '') {
            $sPostText = $po_text;
            if ($project['kind'] != 4) {
                $sId = $po_commentid ? $po_commentid : $last_comment;
                $aComment = $pod->getDialogueMessageById($sId);
                if ($aComment['moderator_status'] === '0') {
                    require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stop_words.php';
                    $stop_words = new stop_words(hasPermissions('projects'));
                    $sPostText = $stop_words->replace($sPostText);
                }
            }
            if (!$po_commentid) {
                $objResponse->append('po_dialogue_talk_' . $po_id, 'innerHTML', '<div style="margin-bottom:8px;font-size:100%;"><span class="' . (is_emp() ? 'emp' : 'frl') . 'name11"><a href="/users/' . get_login($user_id) . '/" class="' . (is_emp() ? 'emp' : 'frl') . 'name11" title="' . $user_name['uname'] . ' ' . $user_name['usurname'] . '">' . $user_name['uname'] . ' ' . $user_name['usurname'] . '</a> [<a href="/users/' . $user_name['login'] . '/" class="' . (is_emp() ? 'emp' : 'frl') . 'name11" title="' . $user_name['login'] . '">' . $user_name['login'] . '</a>]</span> <span id="po_date_' . $last_comment . '">[' . strftime('%d.%m.%Y | %H:%M', time()) . ']</span><br /><div id="po_comment_' . $last_comment . '">' . reformat($sPostText, 50, 0, 0, 1) . '</div><div id="po_comment_original_' . $last_comment . '" style="display:none;">' . str_replace(' ', '&nbsp;', reformat($po_text, 1000, 0, 1)) . '</div></div>');
                //			$objResponse->call('resetfld', $po_id);
                $objResponse->script('dialogue_count[' . $po_id . '] = ' . (count($project_dialogue) + 1));
            } else {
                $objResponse->assign('po_comment_' . $po_commentid, 'innerHTML', reformat($sPostText, 50, 0, 0, 1));
                $objResponse->assign('po_comment_original_' . $po_commentid, 'innerHTML', str_replace(' ', '&nbsp;', reformat($po_text, 1000, 0, 1)));
                $objResponse->assign('po_date_' . $po_commentid, 'innerHTML', dateFormat('[d.m.Y | H:i]', date('Y-m-d H:i:s')));
            }
            $objResponse->call('answer', $po_id);
            if ($to_user_name && $project['id'] && $project['name'] && !$po_commentid) {
                /*require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/smail.php");
                		$smail = new smail();
                		if ($project['user_id'] == $user_id) {
                               $error = $smail->NewPrjMessageOnOfferFrl($user_name['login'], $project['id'], $project['name'], $to_user_name, $po_text);
                		} else {
                               $error = $smail->NewPrjMessageOnOfferEmp($user_name['login'], $project['id'], $project['name'], $to_user_name, $po_text);
                		}*/
            }
        } else {
            $objResponse->alert('Ошибка сохранения.');
        }
    } else {
        $objResponse->alert('Ошибка сохранения. Авторизируйтесь на сайте.');
    }
    return $objResponse;
}
Ejemplo n.º 4
0
                     break;
                 }
             }
         }
         if (is_emp()) {
             $emp_read = true;
             $frl_read = false;
         } else {
             $emp_read = false;
             $frl_read = true;
         }
         if (!$po_commentid) {
             $error = $pod->AddDialogueMessage($po_id, $user_id, $po_text, $frl_read, $emp_read);
             $last_comment = $pod->GetLastDialogueMessage($user_id, $po_id);
         } else {
             $error = $pod->SaveDialogueMessage($user_id, $po_text, $po_commentid, $po_id, false);
             $last_comment = $po_commentid;
             if ($error == 1) {
                 $error = 'Вы не можете редактировать комментарий, так как на него уже ответили.';
             }
         }
         $po_text = rtrim(ltrim($po_text, "\r\n"));
         $po_text = substr(change_q_x($po_text, false, true, '', false, false), 0, 1000);
         $po_text = stripslashes($po_text);
     }
     if (!$error) {
         //header("Location: ".getFriendlyURL("project", $project['id'])."?id={$po_id}&cid={$last_comment}&p=comment");
         header('Location: ' . getFriendlyURL('project', $project['id']));
         exit;
     }
 }