/** * Отображает текущий статус проекта * * @param array $project * @param array $offer * @return boolean */ public static function renderStatus($project, $offer) { $uid = get_uid(FALSE); $is_project_owner = $project['user_id'] == $uid; $is_offer_owner = $offer ? $offer['user_id'] == $uid : FALSE; $is_adm = hasPermissions('projects') && !$is_project_owner && !$is_offer_owner; $is_exec = $offer ? $project['exec_id'] == $offer['user_id'] : FALSE; //Если не владелец проекта или предложения или не админ то показываем статус по умолчанию $is_guest = !($uid > 0) || !$is_project_owner && !$is_offer_owner; //Если фрилансер не исполнитель и нет движухи по статусу то ничего не показываем $is_frl_status_new = $is_offer_owner && !$is_exec && $offer['status'] == projects_status::STATUS_NEW; if (($is_guest || $is_frl_status_new) && !$is_adm) { return FALSE; } if (!isset($project['emp_feedback']) || !isset($project['frl_feedback'])) { $obj_feedback = new projects_feedback(); $project += $obj_feedback->getFeedbackByProjectID($project['id']); } $is_allow_feedback = !$project['close_date'] || projects_feedback::isAllowFeedback($project['close_date']); $fullname = $is_project_owner && $offer ? "{$offer['uname']} {$offer['usurname']} [{$offer['login']}]" : "{$project['uname']} {$project['usurname']} [{$project['login']}]"; $date_feedback = ($project['close_date'] ? strtotime($project['close_date']) : time()) + projects_feedback::LIFETIME; $date_feedback_formatted = date("d.m.Y H:i", $date_feedback); return Template::render(PORJECTS_TPL_PATH . 'projects_status.tpl.php', array('fullname' => $fullname, 'project' => $project, 'offer' => $offer, 'is_exec' => $is_exec, 'is_adm' => !$is_project_owner && !$is_offer_owner, 'date_feedback' => $date_feedback_formatted, 'is_allow_feedback' => $is_allow_feedback)); }
echo $theme['id']; ?> " <?php //= $showPostFootBlock ? '' : 'style="display:none"' ?> ></div> </div> <?php } ?> <?php } elseif ($theme['opinion_type'] == 3) { $is_allow_edit = FALSE; $is_owner = $theme['touser_id'] == $uid; if ($is_owner) { $is_allow_edit = $theme['sbr_rating'] < 0 || projects_feedback::isAllowFeedback($theme['posted_time']); } $is_allow_edit = $is_tservices_adm || $is_allow_edit; $is_allow_delete = $is_tservices_adm || $is_owner; ?> <?php if ($is_allow_edit || $is_allow_delete) { ?> <div class="b-post__foot b-post__foot_padtop_10"> <?php if ($is_allow_edit) { ?> <a class="b-post__link b-post__link_dot_c10601" href="javascript:void(0)" onclick="xajax_projectEditFeedback(<?php echo $theme['id']; ?> );">
/** * Смена статуса проекта. * * @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; }