00001 <?php
00002
00015 import('lib.pkp.classes.controllers.grid.DataObjectGridCellProvider');
00016
00017 import('lib.pkp.classes.linkAction.request.AjaxModal');
00018 import('lib.pkp.classes.linkAction.request.AjaxAction');
00019
00020 class ReviewerGridCellProvider extends DataObjectGridCellProvider {
00024 function ReviewerGridCellProvider() {
00025 parent::DataObjectGridCellProvider();
00026 }
00027
00028
00029
00030
00031
00038 function getCellState(&$row, &$column) {
00039 $reviewAssignment =& $row->getData();
00040 $columnId = $column->getId();
00041 assert(is_a($reviewAssignment, 'DataObject') && !empty($columnId));
00042 switch ($columnId) {
00043 case 'name':
00044 if ($reviewAssignment->getDateCompleted())
00045 return 'linkReview';
00046 if ($reviewAssignment->getDateDue() < Core::getCurrentDate() || $reviewAssignment->getDateResponseDue() < Core::getCurrentDate())
00047 return 'overdue';
00048
00049 return '';
00050
00051 case 'considered':
00052
00053 if (!$reviewAssignment->getDateCompleted()) return 'unfinished';
00054
00055
00056
00057 if ($reviewAssignment->getDateAcknowledged() && !$reviewAssignment->getUnconsidered()) {
00058 return 'completed';
00059 }
00060
00061 if ($reviewAssignment->getUnconsidered() == REVIEW_ASSIGNMENT_UNCONSIDERED) {
00062 return 'reviewReady';
00063 }
00064
00065
00066 $monographDao =& DAORegistry::getDAO('MonographDAO');
00067 $userGroupDao =& DAORegistry::getDAO('UserGroupDAO');
00068 $userStageAssignmentDao =& DAORegistry::getDAO('UserStageAssignmentDAO');
00069 $viewsDao =& DAORegistry::getDAO('ViewsDAO');
00070
00071 $monograph =& $monographDao->getById($reviewAssignment->getSubmissionId());
00072
00073
00074 $userGroups =& $userGroupDao->getUserGroupsByStage(
00075 $monograph->getPressId(),
00076 $reviewAssignment->getStageId(),
00077 true,
00078 true
00079 );
00080 while ($userGroup = $userGroups->next()) {
00081 $roleId = $userGroup->getRoleId();
00082 if ($roleId != ROLE_ID_PRESS_MANAGER && $roleId != ROLE_ID_SERIES_EDITOR) continue;
00083
00084
00085 $stageUsers =& $userStageAssignmentDao->getUsersBySubmissionAndStageId(
00086 $reviewAssignment->getSubmissionId(),
00087 $reviewAssignment->getStageId(),
00088 $userGroup->getId()
00089 );
00090
00091
00092 while ($user =& $stageUsers->next()) {
00093 if ($viewsDao->getLastViewDate(
00094 ASSOC_TYPE_REVIEW_RESPONSE,
00095 $reviewAssignment->getId(), $user->getId()
00096 )) {
00097
00098 return 'read';
00099 }
00100 unset($user);
00101 }
00102 unset($stageUsers);
00103 }
00104
00105
00106 return 'reviewReady';
00107 }
00108 }
00109
00117 function getTemplateVarsFromRowColumn(&$row, $column) {
00118 $element =& $row->getData();
00119 $columnId = $column->getId();
00120 assert(is_a($element, 'DataObject') && !empty($columnId));
00121 switch ($columnId) {
00122 case 'name':
00123 return array('label' => $element->getReviewerFullName());
00124
00125 case 'considered':
00126 return array('status' => $this->getCellState($row, $column));
00127 }
00128
00129 return parent::getTemplateVarsFromRowColumn($row, $column);
00130 }
00131
00138 function getCellActions(&$request, &$row, &$column, $position = GRID_ACTION_POSITION_DEFAULT) {
00139 $reviewAssignment =& $row->getData();
00140 $actionArgs = array(
00141 'monographId' => $reviewAssignment->getSubmissionId(),
00142 'reviewAssignmentId' => $reviewAssignment->getId(),
00143 'stageId' => $reviewAssignment->getStageId()
00144 );
00145
00146 $router =& $request->getRouter();
00147 $action = false;
00148 $state = $this->getCellState($row, $column);
00149 if ($state == 'linkReview') {
00150 $user =& $request->getUser();
00151 $monographDao =& DAORegistry::getDAO('MonographDAO');
00152 $monograph =& $monographDao->getById($reviewAssignment->getSubmissionId());
00153 import('controllers.review.linkAction.ReviewNotesLinkAction');
00154 $action = new ReviewNotesLinkAction($request, $reviewAssignment, $monograph, $user);
00155
00156 } elseif ($state == 'overdue') {
00157 import('controllers.api.task.SendReminderLinkAction');
00158 $action = new SendReminderLinkAction($request, 'editor.review.reminder', $actionArgs);
00159 } elseif ($state == 'read') {
00160 import('controllers.api.task.SendThankYouLinkAction');
00161 $action = new SendThankYouLinkAction($request, 'editor.review.thankReviewer', $actionArgs);
00162 } elseif ($state == 'completed') {
00163 import('controllers.review.linkAction.UnconsiderReviewLinkAction');
00164 $action = new UnconsiderReviewLinkAction($request, $reviewAssignment, $monograph);
00165 } elseif (in_array($state, array('', 'declined', 'unfinished', 'reviewReady'))) {
00166
00167 } else {
00168
00169 assert(false);
00170 }
00171
00172 return ($action) ? array($action) : array();
00173 }
00174
00180 function _getHoverTitleText($state) {
00181 switch ($state) {
00182 case 'completed':
00183 return __('common.complete');
00184 case 'overdue':
00185 return __('common.overdue');
00186 case 'accepted':
00187 return __('common.accepted');
00188 case 'declined':
00189 return __('common.declined');
00190 case 'reminder':
00191 return __('common.reminder');
00192 case 'new':
00193 return __('common.unread');
00194 default:
00195 return '';
00196 }
00197 }
00198 }
00199
00200 ?>