16 import(
'classes.handler.Handler');
26 parent::__construct();
32 array(ROLE_ID_MANAGER),
33 array(
'filesToConvert',
'startConversion',
'fetchConversionStatus',
'cancelConversion')
40 function authorize($request, &$args, $roleAssignments) {
41 $op = $request->getRouter()->getRequestedOp($request);
43 if(
$op ==
'filesToConvert') {
44 import(
'lib.pkp.classes.security.authorization.SubmissionAccessPolicy');
48 return parent::authorize($request, $args, $roleAssignments);
59 $context = $request->getContext();
63 $filesToConvert = array();
64 $validFileExtensions = array(
'pdf',
'doc',
'docx');
65 $submissionFiles = $submissionFileDao->getLatestRevisions($submission->getId());
66 foreach ($submissionFiles as $submissionFile) {
67 $genre = $genreDao->getById($submissionFile->getGenreId());
68 if (intval($genre->getCategory()) != GENRE_CATEGORY_DOCUMENT)
70 if (intval($genre->getDependent()) != 0)
72 if (!in_array(strtolower($submissionFile->getExtension()), $validFileExtensions))
74 $filesToConvert[] = array(
75 'fileId' => $submissionFile->getFileId(),
76 'stage' => $submission->getStageId(),
91 $user = $request->getUser();
92 $dispatcher = $request->getDispatcher();
94 $pattern =
'/submission_(\d+)/';
95 $submissions = array();
96 foreach ($_POST as $field => $value) {
97 if (preg_match($pattern, $field, $matches) && (intval($value) !== -1) ) {
98 $submissionId = $matches[1];
99 $submissions[$submissionId] = $value;
102 if (
count($submissions)) {
104 $this->_plugin->import(
'classes.MarkupConversionHelper');
108 $url = $request->url(
null,
'gateway',
'plugin', array(
'MarkupBatchGatewayPlugin',
109 'userId', $user->getId(),
'accessKey', $accessKey));
112 curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Expect:'));
113 curl_setopt($ch, CURLOPT_URL, $url);
114 curl_setopt($ch, CURLOPT_POSTFIELDS, $submissions);
115 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
116 curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1000);
122 $notificationManager->createTrivialNotification(
124 NOTIFICATION_TYPE_SUCCESS,
126 'contents' => __(
'plugins.generic.markup.trigger-conversion'),
132 $url = $dispatcher->url($request, ROUTE_PAGE,
null,
'management',
'settings',
'website',
133 array(),
'markupBatchConversion');
134 $request->redirectUrl($url);
145 $this->_plugin->import(
'classes.MarkupBatchConversionHelper');
147 $data = $batchConversionHelper->readOutFile();
148 $responseData =
null;
149 if (is_array($data)) {
150 $responseData = <<<OED
152 <h3>Batch conversion job infos</h3>
153 <
p><em>Running {$data[
'processedCount']} out of {$data[
'submissionCount']}.</em></
p>
155 <dt>
Submission Id</dt><dd>{$data[
'submissionId']}</dd>
156 <dt>OJS Job ID</dt><dd>{$data[
'jobInfoId']}</dd>
157 <dt>OTS Job ID</dt><dd>{$data[
'otsJobId']}</dd>
158 <dt>Job Status</dt><dd>{$data[
'conversionStatus']}</dd>
164 $responseData = array(
165 'errorMessage' => __(
'plugins.generic.markup.conversion-running'),
180 $user = $request->getUser();
181 $dispatcher = $request->getDispatcher();
182 $conversionPageUrl = $dispatcher->url($request, ROUTE_PAGE,
null,
'management',
'settings',
'website',
183 array(),
'markupBatchConversion');
184 $this->_plugin->import(
'classes.MarkupBatchConversionHelper');
186 if (!$batchConversionHelper->isRunning()) {
187 $request->redirectUrl($conversionPageUrl);
192 $data = $batchConversionHelper->readOutFile();
193 $token = $request->getUserVar(
'token');
194 if ($token != $data[
'cancellationToken']) {
195 $request->redirectUrl($conversionPageUrl);
199 $pid = intval($data[
'pid']);
201 if (posix_kill($pid, 9)) {
202 $notificationManager->createTrivialNotification(
204 NOTIFICATION_TYPE_SUCCESS,
206 'contents' => __(
'plugins.generic.markup.cancel-success'),
211 $notificationManager->createTrivialNotification(
213 NOTIFICATION_TYPE_ERROR,
215 'contents' => __(
'plugins.generic.markup.cancel-failure'),
219 $batchConversionHelper->deleteOutFile();
220 $request->redirectUrl($conversionPageUrl);