Ejemplo n.º 1
0
 /**
  * Отображает текущий статус проекта
  * 
  * @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));
 }
Ejemplo n.º 2
0
                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'];
                    ?>
);">
Ejemplo n.º 3
0
/**
 * Смена статуса проекта.
 * 
 * @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;
}