/** * Смена статуса проекта. * * @param array $params * * @return \xajaxResponse */ function changeProjectStatus($params) { $objResponse =& new xajaxResponse(); $uid = get_uid(false); $project_id = intval(@$params['project_id']); $status = @$params['status']; $feedback = @$params['feedback']; $rating = @$params['rating']; $hash = @$params['hash']; unset($params['hash'], $params['u_token_key'], $params['feedback'], $params['rating']); $current_hash = projects_helper::getStatusHash($params); if (!($uid > 0) || $hash !== $current_hash) { return $objResponse; } // Проект. $obj_project = new projects(); //$project = $obj_project->GetPrjCust($project_id); //Сделал отдельный метод получающий только то что нам нужно //лучше так делать а то далеко не всегда существующие методы оптимальны //в них выбирается много лишнего $project = $obj_project->getProjectWithFeedback($project_id); if (!$project || !in_array($project['kind'], array(1, 5, 9))) { return $objResponse; } $is_project_owner = $project['user_id'] == $uid; $is_exec = $project['exec_id'] == $uid; if (!($is_project_owner || $is_exec)) { return $objResponse; } //Сохраним текущий статус $old_status = $project['status']; $is_emp = is_emp(); $attr = array('is_emp' => $is_emp, 'project' => $project); $offer = array(); if ($project['exec_id']) { $obj_offer = new projects_offers(); $offer = $obj_offer->GetPrjOffer($project['id'], $project['exec_id']); if (!$offer) { return $objResponse; } $attr['offer'] = $offer; } $projectsStatus = new projects_status(); $projectsStatus->attributes($attr); $projectsStatus->changeStatus($status); $project = $projectsStatus->getProject(); $offer = $projectsStatus->getOffer(); if ($project['status'] > projects_status::STATUS_ACCEPT && !empty($feedback)) { //Время вышло if (!projects_feedback::isAllowFeedback($project['close_date'])) { return $objResponse; } //Если отзыв от работодателя и положительный то в зависимости от статуса ПРО фрилансера отзыв скрывается либо публикуется //Если отзыв от фрилансера то всегда публикуется $is_show = $is_emp && $rating > 0 ? $offer['is_pro'] == 't' : true; $obj_feedback = new projects_feedback(); $is_valid = $obj_feedback->attributes(array('feedback' => $feedback, 'rating' => $rating, 'is_emp' => $is_emp, 'user_id' => $uid, 'show' => $is_show, 'touser_id' => $is_emp ? $project['exec_id'] : $project['user_id'])); if (!$is_valid || !$obj_feedback->addFeedback($project_id)) { return $objResponse; } $prefix = $is_emp ? 'emp' : 'frl'; $attributes = $obj_feedback->attributes(); $project[$prefix . '_feedback'] = $attributes['feedback']; $project[$prefix . '_rating'] = $attributes['rating']; } if ($project['status'] > projects_status::STATUS_ACCEPT) { // Отправляем письма об отзывах $mes = new projects_smail(); if ($old_status != $project['status']) { //была смена статуса на закрытие $mes->onFinish($project, $is_emp); } else { $mes->onFeedback($project, $is_emp); } } if ($project['status'] == projects_status::STATUS_EMPCLOSE) { //$objResponse->remove('project_public_agane')->remove('project_edit'); $objResponse->script("\$\$('.__project_close_hide').destroy();"); } $sHtml = projects_helper::renderStatus($project, $offer); $objResponse->assign('project_status_' . $project_id, 'innerHTML', $sHtml); if ($project['kind'] == 9 && $offer['status'] == projects_status::STATUS_DECLINE) { $objResponse->script('window.location.reload()'); } return $objResponse; }
$hash = __paramInit('string', 'hash', 'hash', NULL); $current_hash = projects_helper::getStatusHash(array('project_id' => $project_id, 'status' => $status)); //Проверка корректности входных параметров по хешу if ($hash !== $current_hash) { header("Location: /404.php"); exit; } $obj_project = new projects(); $project = $obj_project->GetPrjCust($project_id); //Если нет такого проекта или юзер непричастен к нему то 404 if (!$project || $project['user_id'] != $uid && $project['exec_id'] != $uid) { header("Location: /404.php"); exit; } $is_emp = is_emp(); $attr = array('is_emp' => $is_emp, 'project' => $project); $offer = array(); if ($project['exec_id']) { $obj_offer = new projects_offers(); $offer = $obj_offer->GetPrjOffer($project['id'], $project['exec_id']); if (!$offer) { header("Location: /404.php"); exit; } $attr['offer'] = $offer; } $projectsStatus = new projects_status(); $projectsStatus->attributes($attr); $projectsStatus->changeStatus($status); header("Location: " . getFriendlyURL("project", $project)); exit;