/** * Отдает HTML для Редактирование предложения по проектам * * @param object $objResponse xajaxResponse * @param string $rec_id идентификатор записи * @param string $rec_type тип записи * @param array $aParams дополнительные параметры с UID отправителя. остальные - опционально * @return string */ function _admEditPrjOfferParseForm(&$objResponse, $rec_id = '', $rec_type = '', $aParams = array()) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/users.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/account.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/portfolio.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/professions.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects_offers.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects_offers_answers.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/projects_offers_dialogue.php'; $offer = projects_offers::GetPrjOfferById($rec_id); $dialogue = new projects_offers_dialogue(); $user = new users(); $account = new account(); $portfolio = new portfolio(); $professions = professions::GetSelFilProf($offer['user_id']); $professions = $professions ? $professions : array(); $cur_prof = $professions ? $professions[0]['id'] : 0; $op_sum = projects_offers_answers::COLOR_FM_COST; if (!($portf_works = $portfolio->GetPortfProf($offer['user_id'], $cur_prof))) { $portf_works = array(); } $user->GetUserByUID($offer['user_id']); $account->GetInfo($offer['user_id']); $offer['dialogue'] = $dialogue->GetDialogueForOffer($offer['id']); ob_start(); include_once $_SERVER['DOCUMENT_ROOT'] . '/user/adm_edit_tpl/projects_offers.php'; $sHtml = ob_get_contents(); ob_end_clean(); // текст $sOnReady = "if(document.getElementById('adm_edit_descr')) document.getElementById('adm_edit_descr').value = (\$('adm_edit_descr_source')? \$('adm_edit_descr_source').value : null);"; // работы ----------------------------------- $offer['portfolio_work_1_id'] = $offer['portf_id1']; $offer['portfolio_work_2_id'] = $offer['portf_id2']; $offer['portfolio_work_3_id'] = $offer['portf_id3']; $offer['portfolio_work_1'] = $offer['pict1']; $offer['portfolio_work_2'] = $offer['pict2']; $offer['portfolio_work_3'] = $offer['pict3']; $offer['portfolio_work_1_prev_pict'] = $offer['prev_pict1']; $offer['portfolio_work_2_prev_pict'] = $offer['prev_pict2']; $offer['portfolio_work_3_prev_pict'] = $offer['prev_pict3']; $offer['cost_from'] = round($offer['cost_from'], 2); $offer['cost_to'] = round($offer['cost_to'], 2); $use = array(); $sWorks = 'adm_edit_content.works_ids = new Array(); adm_edit_content.works_names = new Array(); adm_edit_content.works_prevs = new Array(); adm_edit_content.works_picts = new Array(); adm_edit_content.works_links = new Array();'; if ($portf_works) { foreach ($portf_works as $key => $value) { $use[$value['id']] = 1; $sWorks .= "adm_edit_content.works_ids[{$value['id']}] = '{$value['id']}';\n adm_edit_content.works_names[{$value['id']}] = '" . htmlspecialchars(addslashes(trim($value['name']))) . "';\n adm_edit_content.works_prevs[{$value['id']}] = '" . trim($value['prev_pict']) . "';\n adm_edit_content.works_picts[{$value['id']}] = '" . trim($value['pict']) . "';\n adm_edit_content.works_links[{$value['id']}] = '" . trim($value['link']) . "';"; } } for ($i = 1; $i < 4; $i++) { if ($user_offer['portf_id' . $i] > 0 && !isset($use[$user_offer['portf_id' . $i]])) { $sId = $user_offer['portf_id' . $i]; $sWorks .= "adm_edit_content.works_ids[{$sId}] = '{$sId}';\n adm_edit_content.works_prevs[{$sId}] = '" . trim($user_offer['prev_pict' . $i]) . "';\n adm_edit_content.works_picts[{$sId}] = '" . trim($user_offer['pict' . $i]) . "';"; } } if ($offer['portfolio_work_1'] != '') { $sWorks .= "adm_edit_content.prjOfferAddWork({$offer['portfolio_work_1_id']}, '{$offer['portfolio_work_1']}', '{$offer['portfolio_work_1_prev_pict']}');"; } if ($offer['portfolio_work_2'] != '') { $sWorks .= "adm_edit_content.prjOfferAddWork({$offer['portfolio_work_2_id']}, '{$offer['portfolio_work_2']}', '{$offer['portfolio_work_2_prev_pict']}');"; } if ($offer['portfolio_work_3'] != '') { $sWorks .= "adm_edit_content.prjOfferAddWork({$offer['portfolio_work_3_id']}, '{$offer['portfolio_work_3']}', '{$offer['portfolio_work_3_prev_pict']}');"; } //------------------------------------------- $objResponse->assign('h4_adm_edit', 'innerHTML', 'Редактировать предложения по проекту'); $objResponse->assign('div_adm_edit', 'innerHTML', $sHtml); $objResponse->script("\$('div_adm_reason').setStyle('display', 'none');"); $objResponse->script("adm_edit_content.editMenuItems = ['', 'Основное', 'Файлы'];"); $objResponse->script('adm_edit_content.edit();'); $objResponse->script("adm_edit_content.userLogin = '******';"); $objResponse->script($sOnReady); $objResponse->script($sWorks); $objResponse->script('xajax_getAdmEditReasons(' . admin_log::ACT_ID_EDIT_PRJ_OFFERS . ');'); }
/** * Блокирование/разблокирование предложения по проекту * * @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 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; }
/** * Выбор пользователя в предложении к проекту * * @param array $aParams массив входящих данных * @return array $aResult ответ */ protected function x____projects_response_select($aParams = array()) { $this->_validDevice($aParams); require_once ABS_PATH . '/classes/projects_offers.php'; $nUid = get_uid(false); $oOffer = new projects_offers(); $nId = intvalPgSql($aParams['id']); $aOffer = $oOffer->GetPrjOfferById($nId); if (is_array($aOffer) && $aOffer) { require_once ABS_PATH . '/classes/projects.php'; $oPrj = new new_projects(); $aProject = $oPrj->GetPrjCust($aOffer['project_id']); if (!empty($aProject) || $aProject['is_blocked'] == 'f') { // Не позволяем производить действия с заблокированным проектом if ($nUid == $aProject['user_id']) { $nSelect = intvalPgSql($aParams['select']); if ($nSelect > 0 && $nSelect < 4) { $aOffer['emp_uid'] = $aProject['user_id']; switch ($nSelect) { case 1: $error = false; if ($aProject['exec_id'] == $aOffer['user_id']) { $error = $oPrj->ClearExecutor($aProject['id'], $nUid); } if (!$error) { $error = $oOffer->SetRefused($aOffer['id'], $aProject['id'], $aOffer['user_id'], '', true); } if ($error) { $this->error(EXTERNAL_ERR_SERVER_ERROR); } else { $aOffer['refused'] = 't'; } break; case 2: $error = false; if ($aProject['exec_id'] == $aOffer['user_id']) { $error = $oPrj->ClearExecutor($aProject['id'], $nUid); } if (!$error) { $error = $oOffer->SetSelected($aOffer['id'], $aProject['id'], $aOffer['user_id'], true); } if ($error) { $this->error(EXTERNAL_ERR_SERVER_ERROR); } else { $aOffer['selected'] = 't'; } break; case 3: if ($oPrj->SetExecutor($aProject['id'], $aOffer['user_id'], $nUid)) { $this->error(EXTERNAL_ERR_SERVER_ERROR); } else { $aOffer['exec_id'] = $aOffer['user_id']; } break; } $aResult = array('project_response' => $this->_getProjectOfferData($aOffer)); } else { $this->error(EXTERNAL_ERR_PRJ_SELECTED); } } else { $this->error(EXTERNAL_ERR_OWNER); } } else { $this->error(EXTERNAL_ERR_PROJECT_NOT_FOUND); } } else { $this->error(EXTERNAL_ERR_OFFER_NOT_FOUND); } return $aResult; }