• Main Page
  • Modules
  • Classes
  • Files
  • File List

controllers/grid/users/reviewer/ReviewerGridCellProvider.inc.php

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    // Template methods from GridCellProvider
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             // The review has not been completed.
00053             if (!$reviewAssignment->getDateCompleted()) return 'unfinished';
00054 
00055             // The reviewer has been sent an acknowledgement.
00056             // Completed states can be 'unconsidered' by an editor.
00057             if ($reviewAssignment->getDateAcknowledged() && !$reviewAssignment->getUnconsidered()) {
00058                return 'completed';
00059             }
00060 
00061             if ($reviewAssignment->getUnconsidered() == REVIEW_ASSIGNMENT_UNCONSIDERED) {
00062                return 'reviewReady';
00063             }
00064 
00065             // Check if the somebody assigned to this monograph stage has read the review.
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             // Get the user groups for this stage
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                // Get the users assigned to this stage and user group
00085                $stageUsers =& $userStageAssignmentDao->getUsersBySubmissionAndStageId(
00086                   $reviewAssignment->getSubmissionId(),
00087                   $reviewAssignment->getStageId(),
00088                   $userGroup->getId()
00089                );
00090 
00091                // mark as completed (viewed) if any of the manager/editor users viewed it.
00092                while ($user =& $stageUsers->next()) {
00093                   if ($viewsDao->getLastViewDate(
00094                      ASSOC_TYPE_REVIEW_RESPONSE,
00095                      $reviewAssignment->getId(), $user->getId()
00096                   )) {
00097                      // Some user has read the review.
00098                      return 'read';
00099                   }
00100                   unset($user);
00101                }
00102                unset($stageUsers);
00103             }
00104 
00105             // Nobody has read the review.
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          // do nothing for these actions
00167       } else {
00168          // Inconsistent state
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 ?>

Generated on Mon Sep 17 2012 13:58:56 for Open Monograph Press by  doxygen 1.7.1