_isCurrentUserAssignedAuthor = $isCurrentUserAssignedAuthor; } // // Template methods from GridCellProvider // /** * Gathers the state of a given cell given a $row/$column combination * * @param \PKP\controllers\grid\GridRow $row * @param GridColumn $column * * @return string */ public function getCellState($row, $column) { $reviewAssignment = $row->getData(); $columnId = $column->getId(); assert($reviewAssignment instanceof \PKP\core\DataObject && !empty($columnId)); /** @var ReviewAssignment $reviewAssignment */ switch ($columnId) { case 'name': case 'method': return ''; case 'considered': case 'actions': return $reviewAssignment->getStatus(); } } /** * Extracts variables for a given column from a data element * so that they may be assigned to template before rendering. * * @param \PKP\controllers\grid\GridRow $row * @param GridColumn $column * * @return array */ public function getTemplateVarsFromRowColumn($row, $column) { $element = $row->getData(); $columnId = $column->getId(); assert($element instanceof \PKP\core\DataObject && !empty($columnId)); /** @var ReviewAssignment $element */ switch ($columnId) { case 'name': $isReviewAnonymous = in_array($element->getReviewMethod(), [ReviewAssignment::SUBMISSION_REVIEW_METHOD_ANONYMOUS, ReviewAssignment::SUBMISSION_REVIEW_METHOD_DOUBLEANONYMOUS]); if ($this->_isCurrentUserAssignedAuthor && $isReviewAnonymous) { return ['label' => __('editor.review.anonymousReviewer')]; } return ['label' => $element->getReviewerFullName()]; case 'method': return ['label' => __($element->getReviewMethodKey())]; case 'considered': $statusText = $this->_getStatusText($this->getCellState($row, $column), $row); $reviewAssignment = $row->getData(); $competingInterests = $reviewAssignment->getCompetingInterests(); if ($competingInterests) { $statusText .= '' . __('reviewer.competingInterests') . ''; } return ['label' => $statusText]; case 'actions': // Only attach actions to this column. See self::getCellActions() return ['label' => '']; } return parent::getTemplateVarsFromRowColumn($row, $column); } /** * Get cell actions associated with this row/column combination * * @param \PKP\controllers\grid\GridRow $row * @param GridColumn $column * * @return array an array of LinkAction instances */ public function getCellActions($request, $row, $column, $position = GridHandler::GRID_ACTION_POSITION_DEFAULT) { $reviewAssignment = $row->getData(); /** @var ReviewAssignment $reviewAssignment */ // Authors can't perform action on reviews if ($this->_isCurrentUserAssignedAuthor) { return []; } $actionArgs = [ 'submissionId' => $reviewAssignment->getSubmissionId(), 'reviewAssignmentId' => $reviewAssignment->getId(), 'stageId' => $reviewAssignment->getStageId() ]; $router = $request->getRouter(); $action = false; $submission = Repo::submission()->get($reviewAssignment->getSubmissionId()); // Only attach actions to the actions column. The actions and status // columns share state values. $columnId = $column->getId(); if ($columnId == 'actions') { switch ($this->getCellState($row, $column)) { case ReviewAssignment::REVIEW_ASSIGNMENT_STATUS_RESPONSE_OVERDUE: case ReviewAssignment::REVIEW_ASSIGNMENT_STATUS_REVIEW_OVERDUE: return [new SendReminderLinkAction($request, 'editor.review.reminder', $actionArgs)]; case ReviewAssignment::REVIEW_ASSIGNMENT_STATUS_COMPLETE: return [ new SendThankYouLinkAction($request, 'editor.review.thankReviewer', $actionArgs), new UnconsiderReviewLinkAction($request, $reviewAssignment, $submission), ]; case ReviewAssignment::REVIEW_ASSIGNMENT_STATUS_THANKED: return [new UnconsiderReviewLinkAction($request, $reviewAssignment, $submission)]; case ReviewAssignment::REVIEW_ASSIGNMENT_STATUS_RECEIVED: $user = $request->getUser(); return [new ReviewNotesLinkAction($request, $reviewAssignment, $submission, $user, 'grid.users.reviewer.ReviewerGridHandler', true)]; } } return parent::getCellActions($request, $row, $column, $position); } /** * Provide meaningful locale keys for the various grid status states. * * @param string $state * @param \PKP\controllers\grid\GridRow $row * * @return string */ public function _getStatusText($state, $row) { $reviewAssignment = $row->getData(); switch ($state) { case ReviewAssignment::REVIEW_ASSIGNMENT_STATUS_AWAITING_RESPONSE: return '' . __('editor.review.requestSent') . '' . __('editor.review.responseDue', ['date' => substr($reviewAssignment->getDateResponseDue(), 0, 10)]) . ''; case ReviewAssignment::REVIEW_ASSIGNMENT_STATUS_ACCEPTED: return '' . __('editor.review.requestAccepted') . '' . __('editor.review.reviewDue', ['date' => substr($reviewAssignment->getDateDue(), 0, 10)]) . ''; case ReviewAssignment::REVIEW_ASSIGNMENT_STATUS_COMPLETE: return $this->_getStatusWithRecommendation('common.complete', $reviewAssignment); case ReviewAssignment::REVIEW_ASSIGNMENT_STATUS_REVIEW_OVERDUE: return '' . __('common.overdue') . '' . __('editor.review.reviewDue', ['date' => substr($reviewAssignment->getDateDue(), 0, 10)]) . ''; case ReviewAssignment::REVIEW_ASSIGNMENT_STATUS_RESPONSE_OVERDUE: return '' . __('common.overdue') . '' . __('editor.review.responseDue', ['date' => substr($reviewAssignment->getDateResponseDue(), 0, 10)]) . ''; case ReviewAssignment::REVIEW_ASSIGNMENT_STATUS_DECLINED: return '' . __('editor.review.requestDeclined') . ''; case ReviewAssignment::REVIEW_ASSIGNMENT_STATUS_CANCELLED: return '' . __('editor.review.requestCancelled') . ''; case ReviewAssignment::REVIEW_ASSIGNMENT_STATUS_RECEIVED: return $this->_getStatusWithRecommendation('editor.review.reviewSubmitted', $reviewAssignment); case ReviewAssignment::REVIEW_ASSIGNMENT_STATUS_THANKED: return $this->_getStatusWithRecommendation('editor.review.reviewerThanked', $reviewAssignment); case ReviewAssignment::REVIEW_ASSIGNMENT_STATUS_REQUEST_RESEND: return '' . __('editor.review.ReviewerResendRequest') . '' . __('editor.review.responseDue', ['date' => substr($reviewAssignment->getDateDue(), 0, 10)]) . ''; default: return ''; } } /** * Retrieve a formatted HTML string that displays the state of the review * with the review recommendation if one exists. Or return just the state. * Only works with some states. * * @param string $statusKey Locale key for status text * @param \PKP\submission\reviewAssignment\ReviewAssignment $reviewAssignment * * @return string */ public function _getStatusWithRecommendation($statusKey, $reviewAssignment) { if (!$reviewAssignment->getRecommendation()) { return __($statusKey); } return '' . __($statusKey) . '' . __('submission.recommendation', ['recommendation' => $reviewAssignment->getLocalizedRecommendation()]) . ''; } }