00001 <?php
00002
00015
00016 import('lib.pkp.classes.controllers.grid.GridHandler');
00017
00018
00019
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
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
00057
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
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
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
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
00195 $clientSubmit = (boolean) $request->getUserVar('clientSubmit');
00196
00197 $form->readInputData();
00198 if($clientSubmit && $form->validate()) {
00199 return $form->getFilterSelectionData();
00200 } else {
00201
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 ?>