16 import(
'classes.handler.Handler');
26 parent::__construct();
32 array(ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR, ROLE_ID_ASSISTANT, ROLE_ID_REVIEWER, ROLE_ID_AUTHOR),
33 array(
'convertToXml',
'generateGalleyFiles',
'profile',
34 'triggerConversion',
'fetchConversionJobStatus')
43 function authorize($request, &$args, $roleAssignments) {
44 $op = $request->getRouter()->getRequestedOp($request);
46 if(in_array(
$op, array(
'profile',
'batch'))) {
47 import(
'lib.pkp.classes.security.authorization.ContextAccessPolicy');
51 import(
'lib.pkp.classes.security.authorization.SubmissionFileAccessPolicy');
55 return parent::authorize($request, $args, $roleAssignments);
68 'messageKey' =>
'plugins.generic.markup.modal.xmlConversionText',
69 'target' =>
'xml-conversion',
70 'stageId' => $request->getUserVar(
'stageId')
72 return $this->
_conversion($args, $request, $params);
85 'messageKey' =>
'plugins.generic.markup.modal.galleyProductionText',
86 'target' =>
'galley-generate',
87 'stageId' => WORKFLOW_STAGE_ID_PRODUCTION
89 return $this->
_conversion($args, $request, $params);
99 protected function _conversion($args, $request, $params) {
100 $context = $request->getContext();
101 $dispatcher = $request->getDispatcher();
102 $authType = $this->_plugin->getSetting($context->getId(),
'authType');
105 if (!$submissionFile) {
109 $fileId = $submissionFile->getFileId();
110 $stageId = $params[
'stageId'];
112 $pluginIsConfigured =
false;
113 $this->_plugin->import(
'classes.MarkupConversionHelper');
116 $pluginIsConfigured =
true;
119 $pluginIsConfigured = is_null($authType) ? false :
true;
121 $loginCredentialsConfigured =
true;
124 extract($this->_plugin->getOTSLoginParametersForJournal($context->getId(), $request->getUser()));
125 if (is_null($user) || is_null($password)) {
126 $loginCredentialsConfigured =
false;
129 $conversionTriggerUrl = $dispatcher->url($request, ROUTE_PAGE,
null,
'markup',
'triggerConversion',
null, array(
'submissionId' => $submissionFile->getSubmissionId(),
'fileId' => $fileId,
'stageId' => $stageId,
'target' => $params[
'target']));
130 $editorTemplateFile = $this->_plugin->getTemplatePath() .
'convert.tpl';
133 $templateMgr->assign(
'fileId', $fileId);
134 $templateMgr->assign(
'messageKey', $params[
'messageKey']);
135 $templateMgr->assign(
'pluginIsConfigured', $pluginIsConfigured);
136 $templateMgr->assign(
'loginCredentialsConfigured', $loginCredentialsConfigured);
137 $templateMgr->assign(
'conversionTriggerUrl', $conversionTriggerUrl);
138 $templateMgr->assign(
'pluginJavaScriptURL', $this->_plugin->getJsUrl($request));
139 $output = $templateMgr->fetch($editorTemplateFile);
153 if (!$submissionFile) {
157 $fileId = $submissionFile->getFileId();
158 $stageId = $request->getUserVar(
'stageId');
160 $target = $request->getUserVar(
'target');
161 $jobId = $this->_plugin->fetchGateway($fileId, $stageId, $target);
163 $journal = $request->getJournal();
164 $url = $this->_plugin->getSetting($journal->getid(),
'markupHostURL');
165 $message = __(
'plugins.generic.markup.job.success', array(
'url' => $url));
167 $router = $request->getRouter();
168 $dispatcher = $router->getDispatcher();
169 $conversionJobStatusCheckUrl = $dispatcher->url($request, ROUTE_PAGE,
null,
'markup',
170 'fetchConversionJobStatus',
null, array(
'submissionId' => $submissionFile->getSubmissionId(),
'fileId' => $submissionFile->getFileId(),
'stageId' => $stageId,
'job' => $jobId));
171 $templateFile = $this->_plugin->getTemplatePath() .
'convert-result.tpl';
174 $templateMgr->assign(
'jobId', $jobId);
175 $templateMgr->assign(
'message', $message);
176 $templateMgr->assign(
'conversionJobStatusCheckUrl', $conversionJobStatusCheckUrl);
177 $output = $templateMgr->fetch($templateFile);
191 $journal = $request->getJournal();
192 $jobId = $request->getUserVar(
'job');
195 $jobInfo = $markupJobInfoDao->getMarkupJobInfo($jobId);
196 $xmlJobId = $jobInfo->getXmlJobId();
199 extract($this->_plugin->getOTSLoginParametersForJournal($journal->getId(), $request->getUser()));
201 $this->_plugin->import(
'classes.XMLPSWrapper');
202 $xmlpsWrapper =
new XMLPSWrapper($host, $user, $password);
203 $code = (int) $xmlpsWrapper->getJobStatus($xmlJobId);
204 $status = $xmlpsWrapper->statusCodeToLabel($code);
209 'isCompleted' => $isCompleted
214 $json->setEvent(
'dataChanged');
215 $json->setAdditionalAttributes(array(
'reloadContainer' =>
true));
228 public function profile($args, $request) {
229 $context = $request->getContext();
233 $this->_plugin->import(
'MarkupProfileSettingsForm');
235 if ($request->getUserVar(
'save')) {
236 $form->readInputData();
237 if ($form->validate()) {
240 $notificationManager->createTrivialNotification(
241 $request->getUser()->getId(),
242 NOTIFICATION_TYPE_SUCCESS,
243 array(
'contents' => __(
'plugins.generic.markup.settings.saved'))
250 return new JSONMessage(
true, $form->fetch($request));
260 public function batch($args, $request) {
262 LOCALE_COMPONENT_APP_SUBMISSION,
263 LOCALE_COMPONENT_PKP_SUBMISSION,
264 LOCALE_COMPONENT_APP_EDITOR,
265 LOCALE_COMPONENT_PKP_EDITOR,
266 LOCALE_COMPONENT_PKP_COMMON,
267 LOCALE_COMPONENT_APP_COMMON
270 $this->_plugin->import(
'classes.MarkupBatchConversionHelper');
273 $context = $request->getContext();
274 $dispatcher = $request->getDispatcher();
276 $submissionMetadata = $batchConversionHelper->buildSubmissionMetadataByContext($context->getId());
277 $batchConversionStatusUrl = $dispatcher->url($request, ROUTE_PAGE,
null,
'batch',
'fetchConversionStatus',
null);
278 $startConversionUrl = $dispatcher->url($request, ROUTE_PAGE,
null,
'batch',
'startConversion',
null);
279 $templateMgr->assign(
'batchConversionStatusUrl', $batchConversionStatusUrl);
280 $templateMgr->assign(
'startConversionUrl', $startConversionUrl);
282 if ($batchConversionHelper->isRunning()) {
283 $data = $batchConversionHelper->readOutFile();
284 $cancelConversionUrl = $dispatcher->url($request, ROUTE_PAGE,
null,
'batch',
'cancelConversion',
285 null, array(
'token' => $data[
'cancellationToken']));
286 $templateMgr->assign(
'cancelConversionUrl', $cancelConversionUrl);
288 $templateMgr->assign(
'submissions', $submissionMetadata);
289 $templateMgr->assign(
'batchConversionIsRunning', $batchConversionHelper->isRunning());
290 $templateFile = $this->_plugin->getTemplatePath() .
'batchConversion.tpl';
291 $output = $templateMgr->fetch($templateFile);
303 public function media($args, $request) {
304 $user = $request->getUser();
305 $context = $request->getContext();
307 if (!$submissionFile) {
312 import(
'lib.pkp.classes.submission.SubmissionFile');
313 $dependentFiles = $submissionFileDao->getLatestRevisionsByAssocId(
314 ASSOC_TYPE_SUBMISSION_FILE,
315 $submissionFile->getFileId(),
316 $submissionFile->getSubmissionId(),
317 SUBMISSION_FILE_DEPENDENT
321 if (!in_array($submissionFile->getFileType(), array(
'text/xml',
'application/xml'))) {
325 $mediaSubmissionFile =
null;
326 foreach ($dependentFiles as $dependentFile) {
327 if ($dependentFile->getOriginalFileName() == $request->getUserVar(
'fileName')) {
328 $mediaSubmissionFile = $dependentFile;
333 if (!$mediaSubmissionFile) {
334 $request->getDispatcher()->handle404();
337 $filePath = $mediaSubmissionFile->getFilePath();
338 header(
'Content-Type:'.$mediaSubmissionFile->getFileType());
339 header(
'Content-Length: ' . $mediaSubmissionFile->getFileSize());