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

controllers/grid/users/reviewer/form/ReviewerForm.inc.php

00001 <?php
00002 
00016 import('lib.pkp.classes.form.Form');
00017 
00018 class ReviewerForm extends Form {
00020    var $_monograph;
00021 
00023    var $_reviewRound;
00024 
00026    var $_reviewerFormActions;
00027 
00029    var $_userRoles;
00030 
00036    function ReviewerForm(&$monograph, &$reviewRound) {
00037       parent::Form('controllers/grid/users/reviewer/form/defaultReviewerForm.tpl');
00038       $this->setMonograph($monograph);
00039       $this->setReviewRound($reviewRound);
00040 
00041       // Validation checks for this form
00042       $this->addCheck(new FormValidator($this, 'responseDueDate', 'required', 'editor.review.errorAddingReviewer'));
00043       $this->addCheck(new FormValidator($this, 'reviewDueDate', 'required', 'editor.review.errorAddingReviewer'));
00044 
00045       $this->addCheck(new FormValidatorPost($this));
00046    }
00047 
00048    //
00049    // Getters and Setters
00050    //
00055    function getMonographId() {
00056       $monograph =& $this->getMonograph();
00057       return $monograph->getId();
00058    }
00059 
00064    function &getMonograph() {
00065       return $this->_monograph;
00066    }
00067 
00072    function &getReviewRound() {
00073       return $this->_reviewRound;
00074    }
00075 
00080    function setMonograph(&$monograph) {
00081       $this->_monograph =& $monograph;
00082    }
00083 
00088    function setReviewRound(&$reviewRound) {
00089       $this->_reviewRound =& $reviewRound;
00090    }
00091 
00096    function setReviewerFormAction($action) {
00097       $this->_reviewerFormActions[$action->getId()] =& $action;
00098    }
00099 
00104    function setUserRoles($userRoles) {
00105       $this->_userRoles = $userRoles;
00106    }
00107 
00112    function getUserRoles() {
00113       return $this->_userRoles;
00114    }
00115 
00120    function getReviewerFormActions() {
00121       return $this->_reviewerFormActions;
00122    }
00123    //
00124    // Overridden template methods
00125    //
00131    function initData($args, &$request) {
00132       $reviewerId = (int) $request->getUserVar('reviewerId');
00133       $press =& $request->getContext();
00134       $reviewRound =& $this->getReviewRound();
00135       $seriesEditorSubmissionDao =& DAORegistry::getDAO('SeriesEditorSubmissionDAO');
00136       $monograph =& $seriesEditorSubmissionDao->getById($this->getMonographId());
00137 
00138       // The reviewer id has been set
00139       if (!empty($reviewerId)) {
00140          if ($this->_isValidReviewer($press, $monograph, $reviewRound, $reviewerId)) {
00141             $userDao = & DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
00142             $reviewer =& $userDao->getById($reviewerId);
00143             $this->setData('userNameString', sprintf('%s (%s)', $reviewer->getFullname(), $reviewer->getUsername()));
00144          }
00145       }
00146 
00147       // Get review assignment related data;
00148       $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO');
00149       $reviewAssignment =& $reviewAssignmentDao->getReviewAssignment($reviewRound->getId(), $reviewerId);
00150 
00151       // Get the review method (open, blind, or double-blind)
00152       if (isset($reviewAssignment) && $reviewAssignment->getReviewMethod() != false) {
00153          $reviewMethod = $reviewAssignment->getReviewMethod();
00154       } else {
00155          // Set default value.
00156          $reviewMethod = SUBMISSION_REVIEW_METHOD_BLIND;
00157       }
00158 
00159       // Get the response/review due dates or else set defaults
00160       if (isset($reviewAssignment) && $reviewAssignment->getDueDate() != null) {
00161          $reviewDueDate = strftime(Config::getVar('general', 'date_format_short'), strtotime($reviewAssignment->getDueDate()));
00162       } else {
00163          $numWeeks = max((int) $press->getSetting('numWeeksPerReview'), 4);
00164          $reviewDueDate = strftime(Config::getVar('general', 'date_format_short'), strtotime('+' . $numWeeks . ' week'));
00165       }
00166       if (isset($reviewAssignment) && $reviewAssignment->getResponseDueDate() != null) {
00167          $responseDueDate = strftime(Config::getVar('general', 'date_format_short'), strtotime($reviewAssignment->getResponseDueDate()));
00168       } else {
00169          $numWeeks = max((int) $press->getSetting('numWeeksPerResponse'), 3);
00170          $responseDueDate = strftime(Config::getVar('general', 'date_format_short'), strtotime('+' . $numWeeks . ' week'));
00171       }
00172 
00173       // Get the currently selected reviewer selection type to show the correct tab if we're re-displaying the form
00174       $selectionType = (int) $request->getUserVar('selectionType');
00175       $stageId = $reviewRound->getStageId();
00176 
00177       $this->setData('monographId', $this->getMonographId());
00178       $this->setData('stageId', $stageId);
00179       $this->setData('reviewMethod', $reviewMethod);
00180       $this->setData('reviewRoundId', $reviewRound->getId());
00181       $this->setData('reviewerId', $reviewerId);
00182 
00183       import('classes.mail.MonographMailTemplate');
00184       $template = new MonographMailTemplate($monograph, 'REVIEW_REQUEST');
00185       if ($template) {
00186          $user =& $request->getUser();
00187          $dispatcher =& $request->getDispatcher();
00188          $press =& $request->getPress();
00189          $template->assignParams(array(
00190             'pressUrl' => $dispatcher->url($request, ROUTE_PAGE, $press->getPath()),
00191             'editorialContactSignature' => $user->getContactSignature(),
00192             'signatureFullName' => $user->getFullname(),
00193             'messageToReviewer' => __('reviewer.step1.requestBoilerplate'),
00194             'submissionReviewUrl' => $dispatcher->url($request, ROUTE_PAGE, null, 'reviewer', 'submission', null, array('monographId' => $this->getMonographId()))
00195          ));
00196       }
00197       $this->setData('personalMessage', $template->getBody() . "\n" . $press->getSetting('emailSignature'));
00198       $this->setData('responseDueDate', $responseDueDate);
00199       $this->setData('reviewDueDate', $reviewDueDate);
00200       $this->setData('selectionType', $selectionType);
00201    }
00202 
00208    function fetch(&$request) {
00209 
00210       // Get the review method options.
00211       $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO');
00212       $reviewMethods = $reviewAssignmentDao->getReviewMethodsTranslationKeys();
00213 
00214       $templateMgr =& TemplateManager::getManager();
00215       $templateMgr->assign('reviewMethods', $reviewMethods);
00216       $templateMgr->assign('reviewerActions', $this->getReviewerFormActions());
00217 
00218       // Get the reviewer user groups for the create new reviewer/enroll existing user tabs
00219       $press =& $request->getPress();
00220       $userGroupDao =& DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
00221       $reviewRound =& $this->getReviewRound();
00222       $reviewerUserGroups =& $userGroupDao->getUserGroupsByStage($press->getId(), $reviewRound->getStageId(), false, false, ROLE_ID_REVIEWER);
00223       $userGroups = array();
00224       while($userGroup =& $reviewerUserGroups->next()) {
00225          $userGroups[$userGroup->getId()] = $userGroup->getLocalizedName();
00226          unset($userGroup);
00227       }
00228 
00229       $this->setData('userGroups', $userGroups);
00230       return parent::fetch($request);
00231    }
00232 
00237    function readInputData() {
00238       $this->readUserVars(array(
00239          'selectionType',
00240          'monographId',
00241          'personalMessage',
00242          'responseDueDate',
00243          'reviewDueDate',
00244          'reviewMethod',
00245          'skipEmail',
00246          'keywords',
00247          'interestsTextOnly',
00248          'reviewRoundId',
00249          'stageId',
00250       ));
00251 
00252       $keywords = $this->getData('keywords');
00253       if ($keywords != null && is_array($keywords['interests'])) {
00254          // The interests are coming in encoded -- Decode them for DB storage
00255          $this->setData('interestsKeywords', array_map('urldecode', $keywords['interests']));
00256       }
00257    }
00258 
00264    function execute($args, &$request) {
00265       $seriesEditorSubmissionDao =& DAORegistry::getDAO('SeriesEditorSubmissionDAO');
00266       $submission =& $seriesEditorSubmissionDao->getById($this->getMonographId());
00267       $press =& $request->getPress();
00268 
00269       $currentReviewRound =& $this->getReviewRound();
00270       $stageId = $currentReviewRound->getStageId();
00271       $reviewDueDate = $this->getData('reviewDueDate');
00272       $responseDueDate = $this->getData('responseDueDate');
00273 
00274       // Get reviewer id and validate it.
00275       $reviewerId = (int) $this->getData('reviewerId');
00276 
00277       if (!$this->_isValidReviewer($press, $submission, $currentReviewRound, $reviewerId)) {
00278          fatalError('Invalid reviewer id.');
00279       }
00280 
00281       $reviewMethod = (int) $this->getData('reviewMethod');
00282 
00283       import('classes.submission.seriesEditor.SeriesEditorAction');
00284       $seriesEditorAction = new SeriesEditorAction();
00285       $seriesEditorAction->addReviewer($request, $submission, $reviewerId, $currentReviewRound, $reviewDueDate, $responseDueDate, $reviewMethod);
00286 
00287       // Get the reviewAssignment object now that it has been added.
00288       $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO'); /* @var $reviewAssignmentDao ReviewAssignmentDAO */
00289       $reviewAssignment =& $reviewAssignmentDao->getReviewAssignment($currentReviewRound->getId(), $reviewerId);
00290       $reviewAssignment->setDateNotified(Core::getCurrentDate());
00291       $reviewAssignment->setCancelled(0);
00292       $reviewAssignment->stampModified();
00293       $reviewAssignmentDao->updateObject($reviewAssignment);
00294 
00295       // Notify the reviewer via email.
00296       import('classes.mail.MonographMailTemplate');
00297       $mail = new MonographMailTemplate($submission, 'REVIEW_REQUEST', null, null, null, false);
00298 
00299       if ($mail->isEnabled() && !$this->getData('skipEmail')) {
00300          $userDao = & DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
00301          $reviewer =& $userDao->getById($reviewerId);
00302          $user = $request->getUser();
00303          $mail->addRecipient($reviewer->getEmail(), $reviewer->getFullName());
00304          $mail->setBody($this->getData('personalMessage'));
00305          $dispatcher =& $request->getDispatcher();
00306 
00307          // assign the remaining parameters
00308          $paramArray = array(
00309             'reviewerName' => $reviewer->getFullName(),
00310             'responseDueDate' => $responseDueDate,
00311             'reviewDueDate' => $reviewDueDate,
00312             'reviewerUserName' => $reviewer->getUsername(),
00313          );
00314          $mail->assignParams($paramArray);
00315          $mail->send($request);
00316       }
00317 
00318       return $reviewAssignment;
00319    }
00320 
00321 
00322    //
00323    // Protected methods.
00324    //
00331    function getSearchByNameAction(&$request) {
00332       $reviewRound =& $this->getReviewRound();
00333 
00334       $actionArgs['monographId'] = $this->getMonographId();
00335       $actionArgs['stageId'] = $reviewRound->getStageId();
00336       $actionArgs['reviewRoundId'] = $reviewRound->getId();
00337       $actionArgs['selectionType'] = REVIEWER_SELECT_SEARCH_BY_NAME;
00338 
00339       return new LinkAction(
00340          'addReviewer',
00341          new AjaxAction($request->url(null, null, 'reloadReviewerForm', null, $actionArgs)),
00342          __('editor.monograph.returnToSimpleSearch'),
00343          'return'
00344       );
00345    }
00346 
00347 
00348    //
00349    // Private helper methods
00350    //
00357    function _isValidReviewer(&$press, &$monograph, &$reviewRound, $reviewerId) {
00358       $seriesEditorSubmissionDao =& DAORegistry::getDAO('SeriesEditorSubmissionDAO'); /* @var $seriesEditorSubmissionDao SeriesEditorSubmissionDAO */
00359       $reviewerFactory =& $seriesEditorSubmissionDao->getReviewersNotAssignedToMonograph($press->getId(), $monograph->getId(), $reviewRound);
00360       $reviewersArray = $reviewerFactory->toAssociativeArray();
00361       if (array_key_exists($reviewerId, $reviewersArray)) {
00362          return true;
00363       } else {
00364          return false;
00365       }
00366    }
00367 }
00368 
00369 ?>

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