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
00031
00038 function authorize(&$request, $args, $roleAssignments) {
00039
00040
00041 $step = isset($args[0]) ? (int) $args[0] : 1;
00042 if ($step<1 || $step>4) return false;
00043
00044
00045 $monographId = (int)$request->getUserVar('monographId');
00046
00047
00048 if ($step === 1 && $monographId === 0) {
00049
00050 import('classes.security.authorization.OmpPressAccessPolicy');
00051 $this->addPolicy(new OmpPressAccessPolicy($request, $roleAssignments));
00052 } else {
00053
00054 import('classes.security.authorization.OmpSubmissionAccessPolicy');
00055 $this->addPolicy(new OmpSubmissionAccessPolicy($request, $args, $roleAssignments, 'monographId'));
00056 }
00057
00058
00059 if (!parent::authorize($request, $args, $roleAssignments)) return false;
00060
00061
00062
00063 $monograph =& $this->getAuthorizedContextObject(ASSOC_TYPE_MONOGRAPH);
00064
00065
00066 if (!is_a($monograph, 'Monograph') && $step == 1) return true;
00067
00068
00069
00070 assert(is_a($monograph, 'Monograph'));
00071
00072
00073
00074 if ($monograph->getSubmissionProgress() == 0 && $step != 4 ) return false;
00075
00076
00077 if ($monograph->getSubmissionProgress() != 0 && $step > $monograph->getSubmissionProgress()) return false;
00078
00079 return true;
00080 }
00081
00082
00083
00084
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
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);
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
00191
00196 function setupTemplate(&$request) {
00197 parent::setupTemplate();
00198 AppLocale::requireComponents(LOCALE_COMPONENT_OMP_SUBMISSION, LOCALE_COMPONENT_PKP_SUBMISSION);
00199
00200
00201 $templateMgr =& TemplateManager::getManager();
00202 $templateMgr->assign('steps', $this->_getStepsNumberAndLocaleKeys());
00203 }
00204
00205
00206
00207
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 ?>