public function process_event(&$event) { global $DB; $this->force_connect(); $r = false; switch ($event->type) { case 'ProjectPosted': $project_id = $event->data['id']; $this->log->notice('New project posted #id = ' . $project_id); $obj_project = new projects(); $project = $obj_project->GetPrjCust($project_id); // Не выбран испольнитель (если испольнитель выбран, то не пишем ответ на этот проект) if ($project && $project['exec_id'] == 0 && $project['kind'] == 1) { $autoresponses = autoresponse::getListForProject($project); foreach ($autoresponses as $autoresponse) { $freelancer = $autoresponse->data['freelancer']; $contacts_freelancer = $autoresponse->data['contacts_freelancer']; // Проверяем если проект только для про, то и пользователь который на него отвечает должен быть ПРО if ($project['pro_only'] == 't' && !payed::CheckPro($freelancer->login)) { continue; } // Проверяем если проект только для верифицированных, то и пользователь который на него отвечает должен быть верифицирован if ($project['verify_only'] == 't' && !$freelancer->IsVerified()) { continue; } // Проверка, что текущий пользователь не является владельцем проекта if ($project['user_id'] == $freelancer->uid) { continue; } // Добавление нового отзыва к проекту $obj_offer = new projects_offers(); $save_contacts = serialize($contacts_freelancer); $DB->start(); $error_offer = $obj_offer->AddOffer($freelancer->uid, $project['id'], '', '', '', '', '', '', antispam(stripslashes($autoresponse->data['descr'])), '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', $autoresponse->toBoolean($autoresponse->data['only_4_cust']), 0, 0, false, false, $save_contacts, 0, $autoresponse->data['id']); // В случае добавление автоответа, уменьшаем счетчик автоответов для пользователя (в транзакции) if ($error_offer || !$autoresponse->reduce($freelancer, $obj_offer, $project_id)) { $this->log->notice('Rollback autoresponse posted for project #id = ' . $project_id); $DB->rollback(); } else { $obj_project->incrementViews($project_id); $this->log->notice(sprintf('New autoresponse #%d posted for project #%d', $obj_offer->offer_id, $project_id)); $DB->commit(); } } } break; } return PGQ_EVENT_OK; }
/** * Изменение блокировки проекта. * * @param int $project_id ID проекта * @param int $act_id ID нового действия (admin_actions) * @param int $src_id ID исходного действия (projects_blocked) * @param string $reason причина * @param int $reason_id ID причины, если она выбрана из списка (таблица admin_reasons, где act_id = 9) * * @return object xajaxResponse */ function updatePrjBlock($project_id, $act_id, $src_id, $reason = '', $reason_id = null) { session_start(); $objResponse = new xajaxResponse(); if (hasPermissions('projects')) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php'; $projects = new projects(); $project = $projects->GetPrjCust($project_id); $sObjLink = '/projects/?pid=' . $project_id; // лог админских действий $reason_id = $reason_id ? $reason_id : null; $reason = str_replace('%USERNAME%', $project['uname'] . ' ' . $project['usurname'], $reason); $reason = change_q($reason, false, 0, true); if ($act_id == 10 && $src_id) { // разблокируем проект $projects->UnBlocked($project_id); // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_PROJ, 10, $project['user_id'], $project_id, $project['name'], $sObjLink, 0, '', $reason_id, $reason); // так как появилось новое действие в логе? $objResponse->script('window.location="/siteadmin/admin_log/?site=proj";'); } elseif ($act_id == 9 && $src_id) { // редактируем текущую блокировку в projects_blocked, admin_log обновится триггером admin_log::updateProjBlock($src_id, $reason, $reason_id); $reason = reformat($project['blocked_reason'], 24, 0, 0, 1, 24); $objResponse->script('window.location.reload(true)'); } elseif ($act_id == 9 && !$src_id) { // блокируем проект $sBlockId = $projects->Blocked($project_id, $reason, $reason_id, $_SESSION['uid']); $project = $projects->GetPrjCust($project_id); // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_PROJ, 9, $project['user_id'], $project_id, $project['name'], $sObjLink, 0, '', $reason_id, $reason, $sBlockId); // так как появилось новое действие в логе? $objResponse->script('window.location="/siteadmin/admin_log/?site=proj";'); } } return $objResponse; }
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) { $fpath = '../'; include '../404.php'; exit; } else { if ($project['kind'] == 2) {
/** * Обрабатываем данные для ввывода информации по шагу */ public function actionProjects() { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects.php"; require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/professions.php"; $prj_id = __paramInit('int', 'project', null, 0); if ($prj_id > 0) { $obj_project = new projects(); $project = $obj_project->GetPrjCust($prj_id); } if ($project['id'] > 0) { require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/users.php"; require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/opinions.php"; // Загружаем данные по отзывам автора проекта $op_data = opinions::getCounts($project['user_id'], array('frl', 'norisk', 'all', 'total')); //$op_data['norisk']['a'] = ( (int)$op_data['norisk']['p'] + (int)$op_data['norisk']['n'] + (int)$op_data['norisk']['m'] ); //$op_data['all']['a'] = ( (int)$op_data['all']['p'] + (int)$op_data['all']['n'] + (int)$op_data['all']['m'] ); $op_data['total']['a'] = (int) $op_data['total']['p'] + (int) $op_data['total']['n'] + (int) $op_data['total']['m']; $user = new users(); $user->GetUserByUID($project['user_id']); $registered = strtolower(ElapsedMnths(strtotime($project['reg_date']))); $is_offer = $this->isOfferProject($project['id']); $count_offer = $this->countOffers(); $count_pay_offer = $this->countPayOffers(); // Максимальное количество ответов для пользователя $max_offers = 3 + $count_pay_offer; // Обработка запросов на странице $action = __paramInit('string', null, 'action'); if ($action && ($count_offer < $max_offers || $project['kind'] == 7 || $action == 'paid_offer')) { $error = $this->actionProcessingProjects($action, $project); } include $_SERVER['DOCUMENT_ROOT'] . "/wizard/registration/steps/tpl.step.answer.php"; } else { $filter = array(); $category = $_COOKIE[$this->parent->getCookieName('categories')]; $subcategory = $_COOKIE[$this->parent->getCookieName('subcategories')]; if ($category > 0) { $cat[] = professions::GetGroupName($category); $filter['active'] = 't'; $filter['my_specs'] = 'f'; $filter['categories'][0] = array($category => '0'); if ($subcategory > 0) { $cat[] = professions::GetProfName($subcategory); unset($filter['categories'][0]); $filter['categories'][1] = array($subcategory => '1'); } $category_name = implode(": ", $cat); } $obj_project = new new_projects(); $obj_project->page_size = step_freelancer::DEF_PROJECTS_PER_PAGE; $projects = $obj_project->getProjects($count, -1, 1, false, $filter, true, false, NULL, true); include $_SERVER['DOCUMENT_ROOT'] . "/wizard/registration/steps/tpl.step.search.php"; } }
/** * Отправляет уведомления об изменении админом диалога в проекте. * * @param int $from_uid UID отправителя * @param int $project_id ID проекта * @param string $msg Текст сообщения * @param string $reason причина редактирования * * @return bool true - успех, false - провал */ public function prjDialogModifiedNotification($from_uid = 0, $project_id = 0, $msg = '', $reason = '') { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php'; $from = new users(); $from->GetUserByUID($from_uid); $pr = new projects(); $prj = $pr->GetPrjCust($project_id); $sName = $prj['name'] ? ' «' . $prj['name'] . '»' : ''; $sLink = getAbsUrl(getFriendlyURL('project', $project_id)); $sRason = $reason ? "\n\nПричина: " . $reason : ''; $sFeedback = str_replace('//', '/{службу поддержки}/', $GLOBALS['host'] . '/about/feedback/'); $message = 'Здравствуйте, ' . $from->uname . ' ' . $from->usurname . ' Модераторы нашего ресурса отредактировали ваш комментарий к предложеню по проекту' . $sName . ' ' . $sLink . ' ' . $msg . $sRason . ' Вы можете обратиться в ' . $sFeedback . '. Надеемся на понимание, Команда Free-lance.ru '; self::Add(users::GetUid($err, 'admin'), $from->login, $message, '', 1); }
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}] = ' <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(' ', ' ', 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(' ', ' ', 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; }
/** * Восстановление предложения. * * @param integer $prj_id ID проекта * @param integer $offer_id ID предложения * * @return xajaxResponse */ function RestoreOffer($prj_id, $offer_id) { session_start(); $objResponse = new xajaxResponse(); require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/contest.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php'; // если пользователь не про или не верифицирован, то есть смысл проверить, может быть конкурс только для про или только для верифицированных $prj = new projects(); $project = $prj->GetPrjCust($prj_id); if ((!is_pro() || !is_verify()) && $project['user_id'] != get_uid() && !hasPermissions('projects')) { if ($project['pro_only'] == 't' && !is_pro()) { $objResponse->alert('Данная функция доступна только пользователям с аккаунтом PRO.'); return $objResponse; } elseif ($project['verify_only'] == 't' && !is_verify()) { $objResponse->alert('Данная функция доступна только верифицированным пользователям.'); return $objResponse; } } $contest = new contest(0, $uid, is_emp(), FALSE, hasPermissions('projects')); $contest->RestoreOffer($offer_id); $objResponse->script("\$('comment{$offer_id}').show()"); return $objResponse; }
/** * Предложения в проектах. Утверждение/удаление записи * * @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 resolvePrjOffers($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_OFFERS, $stream_id); if ($sRecId) { $bRet = true; if ($rec_type == 7) { $aData = array('moderator_status' => $user_id); if ($action == 1 && $is_sent == 'f') { // отправка уведомления о новом сообщении require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pmail.php'; $pmail = new pmail(); $pmail->NewPrjOffer($rec_id); $aData['is_sent'] = true; // устанавливаем флаг отправки } $sDeluserId = $GLOBALS['DB']->val('SELECT deluser_id FROM projects_contest_offers WHERE id = ?i', $rec_id); if ($action == 1 && $sDeluserId && $sDeluserId != $from_id) { $aData['is_deleted'] = false; $aData['deluser_id'] = null; $aData['deleted_reason'] = ''; } elseif ($action == 2 && $sDeluserId != $from_id) { $aData['is_deleted'] = true; $aData['deluser_id'] = $user_id; $aData['deleted_reason'] = $reason; } $GLOBALS['DB']->update('projects_contest_offers', $aData, 'id = ?i', $rec_id); $GLOBALS['DB']->update('projects_offers', array('moderator_status' => $user_id), 'id = ?i', $rec_id); } else { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects_offers.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/admin_log.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php'; $projects_offers = new projects_offers(); $offer = $projects_offers->GetPrjOfferById($rec_id); $aData = $aData2 = array('moderator_status' => $user_id); $projects = new projects(); $project = $projects->GetPrjCust($offer['project_id']); $sObjName = $project['name']; $sObjLink = getFriendlyURL('project', $offer['project_id']); if ($action == 1) { if ($is_sent == 'f') { // отправка уведомления о новом сообщении require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/pmail.php'; $pmail = new pmail(); $pmail->NewPrjOffer($rec_id); $aData['is_sent'] = true; // устанавливаем флаг отправки } if ($offer['blocked_time']) { $projects_offers->UnBlocked($rec_id); // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_PROJ, admin_log::ACT_ID_PRJ_UNBLOCK_OFFER, $from_id, $rec_id, $sObjName, $sObjLink, 0, '', 0, ''); } } elseif ($action == 2 && !$offer['blocked_time']) { $sReason = 'Содержит запрещенную информацию'; $sBlockId = $projects_offers->Blocked($rec_id, $from_id, $offer['project_id'], $reason, 0, $user_id, true); // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_PROJ, admin_log::ACT_ID_PRJ_BLOCK_OFFER, $from_id, $rec_id, $sObjName, $sObjLink, 0, '', 0, $sReason, $sBlockId); } $GLOBALS['DB']->update('projects_offers', $aData, 'id = ?i', $rec_id); $GLOBALS['DB']->update('projects_offers_dialogue', $aData2, 'po_id = ?i AND root = true', $rec_id); } } return $bRet; }
header('Location: /404.php'); exit; } require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/professions.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php'; $sPrjId = __paramInit('string', 'pid'); $aReasons = admin_log::getAdminReasons(9); $js_file[] = 'banned.js'; if ($sPrjId) { if (!preg_match('/^[\\d]+$/', $sPrjId)) { header_location_exit('/404.php'); } require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/projects.php"; $log = $admin_log->getLogProjById($nCount, $sPrjId); $obj_project = new projects(); $project = $obj_project->GetPrjCust($sPrjId); $project_attach = $obj_project->GetAllAttach($sPrjId); $project_history = $obj_project->GetPrjHistory($sPrjId); } else { $_SESSION['admin_log_proj'] = $_SERVER['REQUEST_URI']; $actions = $admin_log->getAdminActions(admin_log::OBJ_CODE_PROJ); $admins = $admin_log->getAdminsInLog(admin_log::OBJ_CODE_PROJ); $all_specs = professions::GetAllProfessions('', 0, 1); $categories = professions::GetAllGroupsLite(true); $filter_specs = ''; $spec_now = 0; for ($i = 0; $i < sizeof($all_specs); $i++) { if ($all_specs[$i]['groupid'] != $spec_now) { $spec_now = $all_specs[$i]['groupid']; $filter_specs .= "filter_specs[" . $all_specs[$i]['groupid'] . "]=["; }
if (!new_projects::UpPublicProject($prj_id, get_uid(), $tr_id, $error)) { if ($error['nomoney']) { header("Location: /bill/?paysum={$error['nomoney']}"); exit; } } else { projects::setFirstProjectsList($prj_id); header('Location: /bill/success/'); exit; } } break; case 'prj_top': $nProject = __paramInit('int', 'pid', 'pid'); $oProject = new projects(); $aProject = $oProject->GetPrjCust($nProject); $_SESSION['bill.GET']['back'] = $_SERVER["HTTP_REFERER"] ? $_SERVER["HTTP_REFERER"] : '/'; if ($uid && !new_projects::isKonkurs($aProject["kind"]) && $aProject["user_id"] == $uid && $aProject['closed'] != "t" && $aProject['is_blocked'] != 't' && projects::checkShowTop($aProject)) { if (!new_projects::topPublicProject($nProject, $uid, $error)) { if ($error['nomoney']) { header("Location: /bill/?paysum={$error['nomoney']}"); exit; } } else { header('Location: /bill/success/'); exit; } } else { header('Location: /404.php'); exit; }
/** * Блокирование/разблокирование предложения по проекту * * @param int $offer_id ID предложения * @param int $user_id UID пользователя * @param int $project_id ID проекта * @param string $reason причина * @param int $reason_id ID причины, если она выбрана из списка (таблица admin_reasons, где act_id = 27) * @param string $reason_name Краткое описание причины действия (из селекта) для лога админских действий * @return object xajaxResponse */ function BlockedProjectOffer($offer_id, $user_id, $project_id, $reason, $reason_id = null, $reason_name = '') { session_start(); $objResponse = new xajaxResponse(); if (hasPermissions('projects')) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects_offers.php'; $projects_offers = new projects_offers(); $offer_id = intval($offer_id); $offer = $projects_offers->GetPrjOfferById($offer_id); if ($offer && $offer['id'] == $offer_id) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php'; $objUser = new users(); $objUser->GetUserByUID($offer['user_id']); // лог админских действий $projects = new projects(); $project = $projects->GetPrjCust($project_id); $sObjName = $project['name']; $sObjLink = getFriendlyURL('project', $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 ($offer['is_blocked'] == 't') { $projects_offers->UnBlocked($offer_id); // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_PROJ, admin_log::ACT_ID_PRJ_UNBLOCK_OFFER, $user_id, $offer_id, $project['name'], $sObjLink, 0, '', $reason_id, $reason); $objResponse->assign("project-offer-block-{$offer_id}", 'innerHTML', ' '); $objResponse->assign("project-offer-block-{$offer_id}", 'style.display', 'none'); $objResponse->assign("project-button-{$offer_id}", 'innerHTML', '<a class="admn" href="javascript:void(0);" onclick="banned.blockedProjectOffer(' . $offer_id . ',' . $user_id . ',' . $project_id . ')">Заблокировать</a>'); } else { $sBlockId = $projects_offers->Blocked($offer_id, $user_id, $project_id, $reason, $reason_id, $_SESSION['uid']); // пишем лог админских действий admin_log::addLog(admin_log::OBJ_CODE_PROJ, admin_log::ACT_ID_PRJ_BLOCK_OFFER, $user_id, $offer_id, $project['name'], $sObjLink, 0, '', $reason_id, $reason, $sBlockId); $reason = reformat($reason, 24, 0, 0, 1, 24); $html = BlockedProjectOfferHTML($reason, $_SESSION['login'], "{$_SESSION['name']} {$_SESSION['surname']}"); $objResponse->assign("project-offer-block-{$offer_id}", 'innerHTML', $html); $objResponse->assign("project-offer-block-{$offer_id}", 'style.display', 'block'); $objResponse->assign("project-button-{$offer_id}", 'innerHTML', '<a class="admn" href="javascript:void(0);" onclick="banned.unblockedProjectOffer(' . $offer_id . ',' . $user_id . ',' . $project_id . ')">Разблокировать</a>'); $objResponse->script("\$('ban_btn').addClass('b-button_rectangle_color_green').removeClass('b-button_rectangle_color_disable');"); } } else { $objResponse->alert('Несуществующее предложение'); } } return $objResponse; }
/** * @param $frm - данные запроса * @param $type - тип страницы, с которой была запрошена форма быстрого редактирования проекта * 1 - лента на главной, * 2 - редактируется конкурс, * 3 - страница проекта в профиле работодателя, * 4 - проект в списке в профиле работодателя * */ function quickprjedit_save_prj($frm, $type) { $objResponse = new xajaxResponse(); if (hasPermissions('projects')) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php'; $oprj = new new_projects(); $project = $oprj->getPrj($frm['id']); if ($project['id']) { $objResponse->script('popupQEditPrjHideErrors();'); $key = $frm['tmpid']; $tmpPrj = new tmp_project($key); $tmpPrj->init(2); $errors = array(); $frm['name'] = trim($frm['name']); $frm['descr'] = trim($frm['descr']); if ($frm['link'] == 'Адрес сайта') { $frm['link'] = ''; } $frm['link'] == trim($frm['link']); if (!empty($frm['link'])) { if (strpos($frm['link'], 'http://') === 0) { $protocol = 'http://'; } if (strpos($frm['link'], 'https://') === 0) { $protocol = 'https://'; } if ($protocol == '') { $protocol = 'http://'; } $frm['link'] = $protocol . ltrim($frm['link'], $protocol); if (!is_url($frm['link'])) { $errors[] = 'logourl'; } } if (empty($frm['name'])) { $errors[] = 'name'; } if (empty($frm['descr'])) { $errors[] = 'descr'; } if ($frm['pf_city']) { $frm['city'] = $frm['pf_city']; } if ($project['kind'] == 7) { if (!preg_match("/^([0-9]{1,2})\\-([0-9]{1,2})\\-([0-9]{4})\$/", $frm['end_date'], $o1) || !checkdate($o1[2], $o1[1], $o1[3])) { $errors[] = 'end_date'; } if (!preg_match("/^([0-9]{1,2})\\-([0-9]{1,2})\\-([0-9]{4})\$/", $frm['win_date'], $o2) || !checkdate($o2[2], $o2[1], $o2[3])) { $errors[] = 'win_date'; } if (!in_array('end_date', $errors) && mktime(0, 0, 0, $o1[2], $o1[1], $o1[3]) <= mktime(0, 0, 0)) { $errors[] = 'end_date_past'; } if (!in_array('end_date', $errors) && mktime(0, 0, 0, $o2[2], $o2[1], $o2[3]) <= mktime(0, 0, 0, $o1[2], $o1[1], $o1[3])) { $errors[] = 'win_date_past'; } } if (!count($errors)) { $c = $frm['categories']; $sc = $frm['subcategories']; foreach ($frm['categories'] 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; } $categories = array(); foreach ($check_array as $k => $val) { if (count($val) > 1 && array_search(0, $val) !== false) { $categories[] = array('category_id' => $k, 'subcategory_id' => 0); unset($check_array[$k]); } else { foreach ($val as $m => $v) { $categories[] = array('category_id' => $k, 'subcategory_id' => $v); } } } $tmpPrj->setProjectField('name', change_q_x($frm['name']), true); $tmpPrj->setProjectField('descr', change_q_x($frm['descr'], false, true, '', false, false)); $tmpPrj->setProjectField('pro_only', $frm['pro_only'] == 1 ? 't' : 'f'); $tmpPrj->setProjectField('verify_only', $frm['verify_only'] == 1 ? 't' : 'f'); $tmpPrj->setProjectField('strong_top', (int) $frm['strong_top']); $tmpPrj->setProjectField('prefer_sbr', $frm['prefer_sbr'] == 1 ? 't' : 'f'); $tmpPrj->setProjectField('urgent', $frm['is_urgent'] == 1 ? 't' : 'f'); $tmpPrj->setProjectField('hide', $frm['is_hide'] == 1 ? 't' : 'f'); switch ($frm['kind']) { case 1: $tmpPrj->setProjectField('country', 0); $tmpPrj->setProjectField('city', 0); $tmpPrj->setProjectField('kind', $frm['kind']); break; case 4: $tmpPrj->setProjectField('country', $frm['country']); $tmpPrj->setProjectField('city', $frm['city']); $tmpPrj->setProjectField('kind', $frm['kind']); break; } if ($project['kind'] == 7) { $tmpPrj->setProjectField('end_date', $frm['end_date']); $tmpPrj->setProjectField('win_date', $frm['win_date']); $tmpPrj->clearWinners(); } $tmpPrj->setCategories($categories); $tmpPrj->setProjectField('link', $frm['link']); $tmpPrj->setProjectField('is_color', $frm['is_color'] == 1 ? 't' : 'f'); $tmpPrj->setProjectField('is_bold', $frm['is_bold'] == 1 ? 't' : 'f'); $tmpPrj->setAddedTopDays($frm['top_ok'] == 1 ? $frm['top_days'] : 0); if (!$project['folder_id']) { $tmpPrj->setProjectField('folder_id', 0); } require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/attachedfiles.php'; $attachedfiles = new attachedfiles($frm['attachedfiles_session']); $attachedfiles_files = $attachedfiles->getFiles(array(1, 3, 4)); $tmpPrj->addAttachedFiles($attachedfiles_files); $attachedfiles->clear(); $tmpPrj->saveProject(get_uid(false), $ttt); require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/project_exrates.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/stop_words.php'; $stop_words = new stop_words(hasPermissions('projects')); $objResponse->script('popupQEditPrjHide();'); switch ($type) { case 1: case 4: // Лента проектов global $session; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects.php'; $prj_id = $project['id']; $obj_project = new new_projects(); $tproject = $obj_project->getProjects($num, -1, 1, false, null, false, true, $prj_id); $this_kind = $tproject[0]['kind']; $this_uid = get_uid(false); $this_pro_last = $_SESSION['pro_last']; $this_is_pro = payed::CheckPro($_SESSION['login']); $this_edit_mode = hasPermissions('projects'); if ($this_uid) { $this_user_role = $_SESSION['role']; } $this_project = $tproject[0]; $row = $this_project; if ($this_edit_mode || $this_project['kind'] == 2 || $this_project['user_id'] == $this_uid || $this_project['offer_id'] || $this_pro_last) { $this_show_data = 1; $row['show_data'] = 1; } else { $this_show_data = 0; $row['show_data'] = 0; } $descr = $row['descr']; $descr = preg_replace('/^ /', "", $descr); $descr = preg_replace("/(\n) /", "\$1", $descr); $descr = reformat(strip_tags(LenghtFormatEx($descr, 180), '<br />'), 50, 1, 0, 1); $descr = preg_replace("//", ' ', $descr); $row['descr'] = $descr; $row['t_is_payed'] = $this_project['payed'] && $this_project['kind'] != 2 && $this_project['kind'] != 7; $row['t_is_contest'] = $this_project['kind'] == 2 || $this_project['kind'] == 7; $row['t_pro_only'] = $this_project['pro_only'] == 't'; $row['t_verify_only'] = $this_project['verify_only'] == 't'; $row['t_hide'] = $this_project['hide'] == 't'; $row['t_urgent'] = $this_project['urgent'] == 't'; $row['t_prefer_sbr'] = $this_project['prefer_sbr'] == 't'; $row['priceby'] = $this_project['priceby']; $row['t_is_adm'] = hasPermissions('projects'); $row['t_is_ontop'] = strtotime($this_project['top_to']) >= time(); $row['unread'] = (int) $this_project['unread_p_msgs'] + (int) $this_project['unread_c_msgs'] + (int) $this_project['unread_c_prjs']; $row['t_is_proonly'] = $this_project['pro_only'] == 't' && !$_SESSION['pro_last'] && !$this_edit_mode && $this_uid != $this_project['user_id']; $attaches = projects::GetAllAttach($this_project['id']); $attaches = !$attaches ? array() : $attaches; foreach ($attaches as $k => $a) { $a['virus'] = is_null($a['virus']) ? $a['virus'] : bindec($a['virus']); $attaches[$k] = $a; } $row['attaches'] = $this_project['attaches'] = $attaches; $is_ajax = true; $can_change_prj = hasPermissions('projects'); $row['friendly_url'] = getFriendlyURL('project', $row['id']); ob_start(); if ($type == 1) { $project = projects::initData($row); require_once $_SERVER['DOCUMENT_ROOT'] . '/projects/tpl.lenta-item.php'; } else { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/employer.php'; $user = new employer(); $user->GetUserByUID($this_project['user_id']); require_once $_SERVER['DOCUMENT_ROOT'] . '/projects/tpl.employer-project-item.php'; } $html_data = ob_get_contents(); ob_end_clean(); $objResponse->assign("project-item{$prj_id}", 'innerHTML', $html_data); if ($row['is_color'] == 't') { $objResponse->script("\$('project-item{$prj_id}').addClass('b-post_bg_fffded')"); } else { $objResponse->script("\$('project-item{$prj_id}').removeClass('b-post_bg_fffded')"); } //$objResponse->script('alert("Лента");'); //$objResponse->script('window.location.reload();'); break; case 2: // Конкурс //$objResponse->script('alert("Конкурс");'); $project_exRates = project_exrates::GetAll(); $translate_exRates = array(0 => 2, 1 => 3, 2 => 4, 3 => 1); global $session; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/contest.php'; $prj_id = $project['id']; $obj_project = new projects(); $project = $obj_project->GetPrjCust($prj_id); if (hasPermissions('projects')) { $project_history = $obj_project->GetPrjHistory($prj_id); } $project_attach = $obj_project->GetAllAttach($prj_id); $contest = new contest($project['id'], $uid, is_emp(), $project['user_id'] == $uid, hasPermissions('projects'), is_pro()); $contest->GetOffers((string) $_GET['filter']); $project['contest_end'] = mktime() > strtotime($project['end_date']); $project['contest_win'] = mktime() > strtotime($project['win_date']); if (trim($project['contacts']) != '') { $contacts_employer = unserialize($project['contacts']); $empty_contacts_employer = 0; foreach ($contacts_employer as $name => $contact) { if (trim($contact['value']) == '') { $empty_contacts_employer++; } } $is_contacts_employer_empty = count($contacts_employer) == $empty_contacts_employer; } ob_start(); require_once $_SERVER['DOCUMENT_ROOT'] . '/projects/contest_item.php'; $html_data = ob_get_contents(); ob_end_clean(); $objResponse->assign("contest_info_{$prj_id}", 'innerHTML', $html_data); break; case 3: // Проект $project_exRates = project_exrates::GetAll(); $translate_exRates = array(0 => 2, 1 => 3, 2 => 4, 3 => 1); $prj_id = $project['id']; $obj_project = new projects(); $project = $obj_project->GetPrjCust($prj_id); if (trim($project['contacts']) != '') { $contacts_employer = unserialize($project['contacts']); $empty_contacts_employer = 0; foreach ($contacts_employer as $name => $contact) { if (trim($contact['value']) == '') { $empty_contacts_employer++; } } $is_contacts_employer_empty = count($contacts_employer) == $empty_contacts_employer; } $project_attach = $obj_project->GetAllAttach($prj_id); ob_start(); require_once $_SERVER['DOCUMENT_ROOT'] . '/projects/tpl.prj-main-info.php'; $html_data = ob_get_contents(); ob_end_clean(); $objResponse->assign("project_info_{$project['id']}", 'innerHTML', $html_data); break; default: $objResponse->script('window.location.reload();'); break; } } else { $tab1 = 0; $tab2 = 0; foreach ($errors as $error) { switch ($error) { case 'end_date': $objResponse->script('$("popup_qedit_prj_fld_err_txt_cal1").set("html", "Неправильная дата");'); $objResponse->script('popupQEditPrjShowError("cal1");'); break; case 'win_date': $objResponse->script('$("popup_qedit_prj_fld_err_txt_cal2").set("html", "Неправильная дата");'); $objResponse->script('popupQEditPrjShowError("cal2");'); break; case 'end_date_past': $objResponse->script('$("popup_qedit_prj_fld_err_txt_cal1").set("html", "Дата окончания конкурса не может находиться в прошлом");'); $objResponse->script('popupQEditPrjShowError("cal1");'); break; case 'win_date_past': $objResponse->script('$("popup_qedit_prj_fld_err_txt_cal2").set("html", "Дата определения победителя должна быть больше даты окончания конкурса");'); $objResponse->script('popupQEditPrjShowError("cal2");'); break; case 'logourl': $objResponse->script('$("popup_qedit_prj_fld_err_pay").setStyle("display","block");'); $objResponse->script('$("popup_qedit_prj_fld_err_pay_txt").set("html", "Ссылка для логотипа указана не верно");'); break; default: $objResponse->script('popupQEditPrjShowError("' . $error . '");'); break; } if (in_array($error, array('name', 'descr', 'location', 'end_date', 'win_date', 'end_date_past', 'win_date_past'))) { ++$tab1; } elseif (in_array($error, array('logourl'))) { ++$tab2; } } if ($tab1) { $objResponse->script('popupQEditPrjMenu(1)'); } elseif ($tab2) { $objResponse->script('popupQEditPrjMenu(2)'); } } } $objResponse->script('popupQEditIsProcess = false;'); } return $objResponse; }
$content = '404.php'; include '../template2.php'; exit; } if (isset($_GET['refuse'])) { $user = new users(); $prj_offer = new projects_offers(); $po_reason = intval($_GET['refuse']); $emp_id = get_uid(false); $emp_name = $user->GetName($emp_id, $error); //Не позволяем производить действия с заблокированным проектом if (projects::CheckBlocked(intval($prj_id))) { $objResponse->script("document.location.href='/projects/index.php?pid=" . intval($prj_id) . "'"); } else { $error = ''; $project = $prj->GetPrjCust($prj_id); if ($project['exec_id'] == $user_id) { $error = $prj->ClearExecutor($prj_id, $emp_id); } if (!$error) { $prj_offer->SetRefused($po_id, $prj_id, $user_id, $po_reason, true); header('Location: /projects/index.php?pid=' . intval($prj_id)); exit; } } } else { $user = new users(); $user_id = intval($user_id); $user->GetUserByUID($user_id); } $content = 'emp_refuse.php';