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

controllers/grid/users/reviewerSelect/ReviewerSelectGridHandler.inc.php

00001 <?php
00002 
00015 // import grid base classes
00016 import('lib.pkp.classes.controllers.grid.GridHandler');
00017 
00018 
00019 // import author grid specific classes
00020 import('controllers.grid.users.reviewerSelect.ReviewerSelectGridCellProvider');
00021 import('controllers.grid.users.reviewerSelect.ReviewerSelectGridRow');
00022 
00023 class ReviewerSelectGridHandler extends GridHandler {
00027    function ReviewerSelectGridHandler() {
00028       parent::GridHandler();
00029 
00030       $this->addRoleAssignment(array(ROLE_ID_SERIES_EDITOR, ROLE_ID_PRESS_MANAGER, ROLE_ID_PRESS_ASSISTANT),
00031             array('fetchGrid'));
00032    }
00033 
00034    //
00035    // Implement template methods from PKPHandler
00036    //
00043    function authorize(&$request, $args, $roleAssignments) {
00044       $stageId = (int)$request->getUserVar('stageId');
00045 
00046       import('classes.security.authorization.OmpWorkflowStageAccessPolicy');
00047       $this->addPolicy(new OmpWorkflowStageAccessPolicy($request, $args, $roleAssignments, 'monographId', $stageId));
00048 
00049       import('classes.security.authorization.internal.ReviewRoundRequiredPolicy');
00050       $this->addPolicy(new ReviewRoundRequiredPolicy($request, $args));
00051 
00052       return parent::authorize($request, $args, $roleAssignments);
00053    }
00054 
00055    /*
00056     * Configure the grid
00057     * @param $request PKPRequest
00058     */
00059    function initialize(&$request) {
00060       parent::initialize($request);
00061 
00062       AppLocale::requireComponents(
00063          LOCALE_COMPONENT_PKP_SUBMISSION,
00064          LOCALE_COMPONENT_PKP_MANAGER,
00065          LOCALE_COMPONENT_PKP_USER,
00066          LOCALE_COMPONENT_OMP_EDITOR
00067       );
00068       $monograph =& $this->getAuthorizedContextObject(ASSOC_TYPE_MONOGRAPH);
00069 
00070       // Columns
00071       $cellProvider = new ReviewerSelectGridCellProvider();
00072       $this->addColumn(
00073          new GridColumn(
00074             'select',
00075             '',
00076             null,
00077             'controllers/grid/users/reviewerSelect/reviewerSelectRadioButton.tpl',
00078             $cellProvider,
00079             array('width' => 5)
00080          )
00081       );
00082       $this->addColumn(
00083          new GridColumn(
00084             'name',
00085             'author.users.contributor.name',
00086             null,
00087             'controllers/grid/gridCell.tpl',
00088             $cellProvider,
00089             array('alignment' => COLUMN_ALIGNMENT_LEFT,
00090                   'width' => 30
00091                )
00092          )
00093       );
00094       $this->addColumn(
00095          new GridColumn(
00096             'done',
00097             'common.done',
00098             null,
00099             'controllers/grid/gridCell.tpl',
00100             $cellProvider
00101          )
00102       );
00103       $this->addColumn(
00104          new GridColumn(
00105             'avg',
00106             'editor.review.days',
00107             null,
00108             'controllers/grid/gridCell.tpl',
00109             $cellProvider
00110          )
00111       );
00112       $this->addColumn(
00113          new GridColumn(
00114             'last',
00115             'editor.submissions.lastAssigned',
00116             null,
00117             'controllers/grid/gridCell.tpl',
00118             $cellProvider
00119          )
00120       );
00121       $this->addColumn(
00122          new GridColumn(
00123             'active',
00124             'common.active',
00125             null,
00126             'controllers/grid/gridCell.tpl',
00127             $cellProvider
00128          )
00129       );
00130       $this->addColumn(
00131          new GridColumn(
00132             'interests',
00133             'user.interests',
00134             null,
00135             'controllers/grid/gridCell.tpl',
00136             $cellProvider,
00137             array('width' => 20)
00138          )
00139       );
00140    }
00141 
00142 
00143    //
00144    // Overridden methods from GridHandler
00145    //
00150    function &getRowInstance() {
00151       $row = new ReviewerSelectGridRow();
00152       return $row;
00153    }
00154 
00158    function renderFilter(&$request) {
00159       return parent::renderFilter($request, $this->getFilterSelectionData($request));
00160    }
00161 
00165    function loadData(&$request, $filter) {
00166       $interests = $filter['interestSearchKeywords'];
00167       $reviewerValues = $filter['reviewerValues'];
00168 
00169       // Retrieve the authors associated with this monograph to be displayed in the grid
00170       $doneMin = $reviewerValues['doneMin'];
00171       $doneMax = $reviewerValues['doneMax'];
00172       $avgMin = $reviewerValues['avgMin'];
00173       $avgMax = $reviewerValues['avgMax'];
00174       $lastMin = $reviewerValues['lastMin'];
00175       $lastMax = $reviewerValues['lastMax'];
00176       $activeMin = $reviewerValues['activeMin'];
00177       $activeMax = $reviewerValues['activeMax'];
00178 
00179       $seriesEditorSubmissionDao =& DAORegistry::getDAO('SeriesEditorSubmissionDAO');
00180       $monograph =& $this->getAuthorizedContextObject(ASSOC_TYPE_MONOGRAPH);
00181       $reviewRound =& $this->getAuthorizedContextObject(ASSOC_TYPE_REVIEW_ROUND);
00182       $data =& $seriesEditorSubmissionDao->getFilteredReviewers($monograph->getPressId(), $doneMin, $doneMax, $avgMin, $avgMax,
00183                $lastMin, $lastMax, $activeMin, $activeMax, $interests, $monograph->getId(), $reviewRound->getId());
00184       return $data;
00185    }
00186 
00191    function getFilterSelectionData(&$request) {
00192       $form = $this->getFilterForm();
00193 
00194       // Only read form data if the clientSubmit flag has been checked
00195       $clientSubmit = (boolean) $request->getUserVar('clientSubmit');
00196 
00197       $form->readInputData();
00198       if($clientSubmit && $form->validate()) {
00199          return $form->getFilterSelectionData();
00200       } else {
00201          // Load defaults
00202          return $this->_getFilterData();
00203       }
00204    }
00205 
00210    function getFilterForm() {
00211       $monograph =& $this->getAuthorizedContextObject(ASSOC_TYPE_MONOGRAPH);
00212       $stageId = $this->getAuthorizedContextObject(ASSOC_TYPE_WORKFLOW_STAGE);
00213       $reviewRound = $this->getAuthorizedContextObject(ASSOC_TYPE_REVIEW_ROUND);
00214       import('controllers.grid.users.reviewerSelect.form.AdvancedSearchReviewerFilterForm');
00215       $filterForm = new AdvancedSearchReviewerFilterForm($monograph, $stageId, $reviewRound->getId());
00216       return $filterForm;
00217    }
00218 
00223    function _getFilterData() {
00224       $filterData = array();
00225 
00226       $filterData['interestSearchKeywords'] = null;
00227 
00228       $seriesEditorSubmissionDao =& DAORegistry::getDAO('SeriesEditorSubmissionDAO');
00229       $reviewerValues = $seriesEditorSubmissionDao->getAnonymousReviewerStatistics();
00230       $filterData['reviewerValues'] = $reviewerValues;
00231 
00232       return $filterData;
00233    }
00234 }
00235 
00236 ?>

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