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

pages/submission/SubmissionHandler.inc.php

00001 <?php
00002 
00015 import('classes.handler.Handler');
00016 import('lib.pkp.classes.core.JSONMessage');
00017 
00018 class SubmissionHandler extends Handler {
00022    function SubmissionHandler() {
00023       parent::Handler();
00024       $this->addRoleAssignment(array(ROLE_ID_AUTHOR, ROLE_ID_SERIES_EDITOR, ROLE_ID_PRESS_MANAGER),
00025             array('index', 'wizard', 'saveStep', 'fetchChoices'));
00026    }
00027 
00028 
00029    //
00030    // Implement template methods from PKPHandler
00031    //
00038    function authorize(&$request, $args, $roleAssignments) {
00039       // The policy for the submission handler depends on the
00040       // step currently requested.
00041       $step = isset($args[0]) ? (int) $args[0] : 1;
00042       if ($step<1 || $step>4) return false;
00043 
00044       // Do we have a monograph present in the request?
00045       $monographId = (int)$request->getUserVar('monographId');
00046 
00047       // Are we in step one without a monograph present?
00048       if ($step === 1 && $monographId === 0) {
00049          // Authorize submission creation.
00050          import('classes.security.authorization.OmpPressAccessPolicy');
00051          $this->addPolicy(new OmpPressAccessPolicy($request, $roleAssignments));
00052       } else {
00053          // Authorize editing of incomplete submissions.
00054          import('classes.security.authorization.OmpSubmissionAccessPolicy');
00055          $this->addPolicy(new OmpSubmissionAccessPolicy($request, $args, $roleAssignments, 'monographId'));
00056       }
00057 
00058       // Do policy checking.
00059       if (!parent::authorize($request, $args, $roleAssignments)) return false;
00060 
00061       // Execute additional checking of the step.
00062       // NB: Move this to its own policy for reuse when required in other places.
00063       $monograph =& $this->getAuthorizedContextObject(ASSOC_TYPE_MONOGRAPH);
00064 
00065       // Permit if there is no monograph set, but request is for initial step.
00066       if (!is_a($monograph, 'Monograph') && $step == 1) return true;
00067 
00068       // In all other cases we expect an authorized monograph due to the
00069       // submission access policy above.
00070       assert(is_a($monograph, 'Monograph'));
00071 
00072       // Deny if submission is complete (==0 means complete) and at
00073       // any step other than the "complete" step (=4)
00074       if ($monograph->getSubmissionProgress() == 0 && $step != 4 ) return false;
00075 
00076       // Deny if trying to access a step greater than the current progress
00077       if ($monograph->getSubmissionProgress() != 0 && $step > $monograph->getSubmissionProgress()) return false;
00078 
00079       return true;
00080    }
00081 
00082 
00083    //
00084    // Public Handler Methods
00085    //
00091    function index($args, &$request) {
00092       $request->redirect(null, null, 'wizard');
00093    }
00094 
00101    function wizard($args, &$request) {
00102       $step = isset($args[0]) ? (int) $args[0] : 1;
00103 
00104       $router =& $request->getRouter();
00105       $press =& $router->getContext($request);
00106       $monograph =& $this->getAuthorizedContextObject(ASSOC_TYPE_MONOGRAPH);
00107 
00108       $this->setupTemplate($request);
00109 
00110       if ( $step < 4 ) {
00111          $formClass = "SubmissionSubmitStep{$step}Form";
00112          import("classes.submission.form.$formClass");
00113 
00114          $submitForm = new $formClass($press, $monograph);
00115          if ($submitForm->isLocaleResubmit()) {
00116             $submitForm->readInputData();
00117          } else {
00118             $submitForm->initData();
00119          }
00120          $submitForm->display($request);
00121       } elseif($step == 4) {
00122          $templateMgr =& TemplateManager::getManager();
00123          $templateMgr->assign_by_ref('press', $press);
00124 
00125          // Retrieve the correct url for author review his monograph.
00126          import('controllers.grid.submissions.SubmissionsListGridCellProvider');
00127          list($page, $operation) = SubmissionsListGridCellProvider::getPageAndOperationByUserRoles($request, $monograph);
00128          $dispatcher =& $router->getDispatcher();
00129          $reviewSubmissionUrl = $dispatcher->url($request, ROUTE_PAGE, $press->getPath(), $page, $operation, $monograph->getId());
00130 
00131          $templateMgr->assign('reviewSubmissionUrl', $reviewSubmissionUrl);
00132          $templateMgr->assign('monographId', $monograph->getId());
00133          $templateMgr->assign('submitStep', $step);
00134          $templateMgr->assign('submissionProgress', $monograph->getSubmissionProgress());
00135 
00136          $templateMgr->assign('helpTopicId','submission.index');
00137          $templateMgr->display('submission/form/complete.tpl');
00138       }
00139    }
00140 
00146    function saveStep($args, &$request) {
00147       $step = isset($args[0]) ? (int) $args[0] : 1;
00148 
00149       $router =& $request->getRouter();
00150       $press =& $router->getContext($request);
00151       $monograph =& $this->getAuthorizedContextObject(ASSOC_TYPE_MONOGRAPH);
00152 
00153       $this->setupTemplate($request);
00154 
00155       $formClass = "SubmissionSubmitStep{$step}Form";
00156       import("classes.submission.form.$formClass");
00157 
00158       $submitForm = new $formClass($press, $monograph);
00159       $submitForm->readInputData();
00160 
00161       if (!HookRegistry::call('SubmissionHandler::saveSubmit', array($step, &$monograph, &$submitForm))) {
00162          if (!$submitForm->validate()) {
00163             $this->setupTemplate($request);
00164             $submitForm->display($request);
00165          } else {
00166             $monographId = $submitForm->execute($args, $request);
00167             return $request->redirectUrlJson($router->url($request, null, null, 'wizard', $step+1, array('monographId' => $monographId)));
00168          }
00169       }
00170    }
00171 
00177    function fetchChoices($args, &$request) {
00178       $codeList = (int) $request->getUserVar('codeList');
00179       $term =& $request->getUserVar('term');
00180 
00181       $onixCodelistItemDao =& DAORegistry::getDAO('ONIXCodelistItemDAO');
00182       $codes =& $onixCodelistItemDao->getCodes('List' . $codeList, array(), $term); // $term is escaped in the getCodes method.
00183       import('lib.pkp.classes.core.JSONManager');
00184       $jsonManager = new JSONManager();
00185       header('Content-Type: text/json');
00186       echo $jsonManager->encode(array_values($codes));
00187    }
00188 
00189    //
00190    // Protected helper methods
00191    //
00196    function setupTemplate(&$request) {
00197       parent::setupTemplate();
00198       AppLocale::requireComponents(LOCALE_COMPONENT_OMP_SUBMISSION, LOCALE_COMPONENT_PKP_SUBMISSION);
00199 
00200       // Get steps information.
00201       $templateMgr =& TemplateManager::getManager();
00202       $templateMgr->assign('steps', $this->_getStepsNumberAndLocaleKeys());
00203    }
00204 
00205 
00206    //
00207    // Private helper methods.
00208    //
00209    function _getStepsNumberAndLocaleKeys() {
00210       return array(
00211          1 => 'submission.submit.prepare',
00212          2 => 'submission.submit.upload',
00213          3 => 'submission.submit.catalog',
00214          4 => 'submission.submit.nextSteps'
00215       );
00216    }
00217 }
00218 ?>

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