33 public function __construct($plugin, $xmlpsWrapper, $user) {
34 $this->_plugin = $plugin;
36 $this->_xmlpsWrapper = $xmlpsWrapper;
48 $locale = ($submission->getLanguage() !=
'') ? $submission->getLanguage() : $journal->getPrimaryLocale();
57 foreach ($submission->getAuthors() as $author) {
58 $authors[$count][
'firstName'] = $author->getFirstName();
59 $authors[$count][
'lastName'] = $author->getLastName();
60 $authors[$count][
'email'] = $author->getEmail();
61 $authors[$count][
'orcid'] = $author->getOrcid();
62 $authors[$count][
'affiliation'] = $author->getLocalizedAffiliation();
63 $authors[$count][
'country'] = $author->getCountry();
64 $authors[$count][
'bio'] = $author->getLocalizedBiography();
65 $userGroup = $userGroupDao->getById($author->getUserGroupId());
66 $authors[$count][
'contribType'] = $userGroup->getLocalizedName();
72 $publishedArticle = $publishedArticleDao->getByArticleId($submission->getId());
73 if ($publishedArticle){
74 $issue = $issueDao->getById($publishedArticle->getIssueId());
75 $issueDetails = array (
76 'issue-year' => $issue->getYear(),
77 'issue-volume' => $issue->getVolume(),
78 'issue-number' => $issue->getNumber(),
79 'issue-title' => $issue->getLocalizedTitle(),
86 $matchedPage = $matches[1];
87 $fpage = $matchedPage;
88 $lpage = $matchedPage;
90 } elseif (
PKPString::regexp_match_get(
'/^[Pp][Pp]?[.]?[ ]?(\d+)[ ]?(-|–)[ ]?([Pp][Pp]?[.]?[ ]?)?(\d+)$/', $submission->getPages(), $matches)) {
93 $pageCount = $fpage - $lpage + 1;
97 foreach ($journal->getName(
null) as $loc => $title) {
98 $journalTitles[strtoupper(substr($loc, 0, 2))] = htmlspecialchars($title);
102 foreach ($submission->getTitle(
null) as $loc => $title) {
103 $articleTitles[strtoupper(substr($loc, 0, 2))] = htmlspecialchars($title);
107 $abstracts = array();
108 if (is_array($submission->getAbstract(
null)))
foreach ($submission->getAbstract(
null) as $loc => $abstract) {
109 $abstract = htmlspecialchars(strip_tags($abstract));
110 if (empty($abstract))
continue;
111 $abstracts[strtoupper(substr($loc, 0, 2))] = $abstract;
118 'article-titles' => $articleTitles,
119 'abstracts' => $abstracts,
120 'journal-titles' => $journalTitles,
121 'journal-id' => htmlspecialchars($journal->getSetting(
'abbreviation', $locale) ? $journal->getSetting(
'abbreviation', $locale) : $journal->getSetting(
'acronym', $locale)),
122 'institution' => $journal->getSetting(
'publisherInstitution'),
123 'contributors' => $authors,
124 'issue-details' => $issueDetails,
125 'online-ISSN' => $journal->getSetting(
'onlineIssn'),
126 'print-ISSN' => $journal->getSetting(
'printIssn'),
127 'doi' => $submission->getStoredPubId(
'doi'),
128 'article-id' => $submission->getBestArticleId(),
129 'copyright-year' => $submission->getCopyrightYear(),
130 'copyright-statement' => htmlspecialchars(__(
'submission.copyrightStatement', array(
'copyrightYear' => $submission->getCopyrightYear(),
'copyrightHolder' => $submission->getLocalizedCopyrightHolder()))),
131 'license-url' => $submission->getLicenseURL(),
133 'fpage' => isset($fpage) ? $fpage:
'',
134 'lpage' => isset($lpage) ? $lpage:
'',
135 'page-count' => isset($pageCount) ? $pageCount:
'',
136 'date-published' => $submission->getDatePublished(),
137 'subj-group-heading' => $sectionDao->getById($submission->getSectionId()),
147 if (!is_null($citationStyleHash =
Config::getVar(
'markup',
'ots_citation_style_hash'))) {
148 return $citationStyleHash;
150 return $this->_plugin->getSetting($contextId,
'cslStyle');
163 public function triggerConversion($journal, $submissionFile, $stage, $target, $jobInfoId) {
165 $submission = $submissionDao->getById($submissionFile->getSubmissionId());
168 $filePath = $submissionFile->getFilePath();
169 $filename = basename($filePath);
170 $fileContent = file_get_contents($filePath);
174 $jobId = $this->_xmlpsWrapper->submitJob($filename, $fileContent, $citationStyle, $metadata);
178 $this->_plugin->import(
'classes.MarkupJobInfo');
179 $markupJobInfo = $markupJobInfoDao->getMarkupJobInfo($jobInfoId);
180 $markupJobInfo->setXmlJobId($jobId);
181 $markupJobInfoDao->updateMarkupJobInfo($markupJobInfo);
199 while($i++ < $maxReq) {
200 $jobStatus = $this->_xmlpsWrapper->getJobStatus($jobId);
201 if (!is_null($statusCallbackFn) && is_callable($statusCallbackFn)) {
202 $statusCallbackFn($jobStatus);
213 $submissionFile = $submissionFileDao->getLatestRevision($submissionFile->getFileId());
214 if (empty($submissionFile)) {
218 $tmpZipFile = $this->_xmlpsWrapper->downloadFile($jobId);
241 $destination = sys_get_temp_dir() .
'/' . uniqid();
244 'plugins.generic.markup.archive.badZip',
266 public function zipArchiveExtract($zipFile, $destination, &$message, $validFiles = array()) {
267 $zip =
new ZipArchive;
268 if (!$zip->open($zipFile, ZIPARCHIVE::CHECKCONS)) {
269 $message = $zip->getStatusString();
273 if (!empty($validFiles)) {
275 $extractFiles = array();
276 foreach ($validFiles as $validFile) {
277 if ($zip->locateName($validFile) !==
false) {
278 $extractFiles[] = $validFile;
281 $status = $zip->extractTo($destination, $extractFiles);
284 $status = $zip->extractTo($destination);
287 if ($status ===
false && $zip->getStatusString() !=
'No error') {
289 $message = $zip->getStatusString();
309 $journalId = $journal->getId();
310 $submissionId = $submission->getId();
312 $genre = $genreDao->getByKey(
'SUBMISSION', $journalId);
313 $genreId = $genre->getId();
315 $fileName = isset($params[
'filename']) ?
"{$params['filename']}.xml" :
'document.xml';
317 $submissionFile = $submissionFileDao->newDataObjectByGenreId($genreId);
318 $submissionFile->setUploaderUserId($this->user->getId());
319 $submissionFile->setSubmissionId($submissionId);
320 $submissionFile->setGenreId($genreId);
321 $submissionFile->setFileSize(filesize($filePath));
322 $submissionFile->setFileStage($params[
'fileStage']);
325 $submissionFile->setOriginalFileName($fileName);
326 $submissionFile->setFileType(
'text/xml');
327 $submissionFile->setViewable(
true);
328 $submissionFile->setSubmissionLocale($submission->getLocale());
331 $submissionFile->setAssocType($params[
'assocType']);
332 $submissionFile->setAssocId($params[
'assocId']);
333 $insertedFile = $submissionFileDao->insertObject($submissionFile, $filePath,
false);
334 return $insertedFile;
348 $journalId = $journal->getId();
349 $submissionId = $submission->getId();
352 $genre = $genreDao->getByKey(
'IMAGE', $journalId);
353 $genreId = $genre->getId();
355 $fileName = basename($filePath);
358 $submissionFile = $submissionFileDao->newDataObjectByGenreId($genreId);
359 $submissionFile->setUploaderUserId($this->user->getId());
360 $submissionFile->setSubmissionId($submissionId);
361 $submissionFile->setGenreId($genreId);
362 $submissionFile->setFileSize(filesize($filePath));
363 $submissionFile->setFileStage(SUBMISSION_FILE_DEPENDENT);
366 $submissionFile->setOriginalFileName($fileName);
367 $submissionFile->setFileType(mime_content_type($filePath));
368 $submissionFile->setViewable(
true);
369 $submissionFile->setSubmissionLocale($submission->getLocale());
372 $submissionFile->setAssocType($params[
'assocType']);
373 $submissionFile->setAssocId($params[
'assocId']);
374 $insertedFile = $submissionFileDao->insertObject($submissionFile, $filePath,
false);
375 return $insertedFile;
389 public function addFileToSubmissionGalley($existing_galley_by_labels, $submission, $genreId, $format, $filePath, $params = array()) {
390 $submissionId = $submission->getId();
393 $articleGalley =
null;
395 $label =
'XMLPS-' . strtoupper($format) .
'-' . date(
"MdSY@H:i",time());
397 $fileName = isset($params[
'filename']) ?
"{$params['filename']}.{$format}" :
"document.{$format}";
400 $articleGalley = $articleGalleyDao->newDataObject();
401 $articleGalley->setSubmissionId($submissionId);
402 $articleGalley->setLabel($label);
403 $articleGalley->setLocale($submission->getLocale());
404 $articleGalleyDao->insertObject($articleGalley);
407 $submissionFile = $submissionFileDao->newDataObjectByGenreId($genreId);
408 $submissionFile->setUploaderUserId($this->user->getId());
409 $submissionFile->setSubmissionId($submissionId);
410 $submissionFile->setGenreId($genreId);
411 $submissionFile->setFileSize(filesize($filePath));
412 $submissionFile->setFileStage(SUBMISSION_FILE_PROOF);
415 $submissionFile->setOriginalFileName($fileName);
416 $submissionFile->setSubmissionLocale($submission->getLocale());
421 $submissionFile->setFileType(
'application/pdf');
424 $submissionFile->setFileType(
'application/epub+zip');
427 $submissionFile->setFileType(
'text/xml');
431 $submissionFile->setAssocType(ASSOC_TYPE_GALLEY);
432 $submissionFile->setAssocId($articleGalley->getId());
433 $insertedFile = $submissionFileDao->insertObject($submissionFile, $filePath,
false);
436 $articleGalley->setFileId($submissionFile->getFileId());
437 $articleGalleyDao->updateObject($articleGalley);
439 return $insertedFile;
454 protected function _processHtmlMediaFiles($context, $submission, $submissionFile, $stage, $htmlArchiveFilePath) {
457 $destination = sys_get_temp_dir() .
'/' . uniqid();
460 'plugins.generic.markup.archive.badZip',
462 'file' => $htmlArchiveFilePath,
469 foreach (glob(
"{$destination}/media/*.png") as $filePath) {
471 'assocType' => ASSOC_TYPE_SUBMISSION_FILE,
472 'assocId' => $submissionFile->getFileId(),
490 'fileStage' => $fileStage,
491 'assocType' => (
int)$submissionFile->getAssocType(),
492 'assocId' => (
int)$submissionFile->getAssocId(),
493 'filename' => $fileName,
496 $htmlZilePath =
"{$extractionPath}/html.zip";
511 $journalId = $journal->getId();
514 'fileStage' => SUBMISSION_FILE_PRODUCTION_READY,
515 'assocType' => (
int)$submissionFile->getAssocType(),
516 'assocId' => (
int)$submissionFile->getAssocId(),
517 'filename' => $fileName
520 $wantedFormats = $this->_plugin->getSetting($journalId,
'wantedFormats');
522 $genre = $genreDao->getByKey(
'SUBMISSION', $journalId);
526 $galleys = $articleGalleyDao->getBySubmissionId($submission->getId());
527 $existing_galley_by_labels = array();
528 while ($galley = $galleys->next()) {
529 $existing_galley_by_labels[$galley->getLabel()] = $galley;
533 'filename' => $fileName,
535 if (in_array(
'pdf', $wantedFormats)) {
536 $this->
addFileToSubmissionGalley($existing_galley_by_labels, $submission, $genre->getId(),
'pdf',
"{$extractionPath}/document.pdf", $gParams);
538 if (in_array(
'xml', $wantedFormats)) {
539 $this->
addFileToSubmissionGalley($existing_galley_by_labels, $submission, $genre->getId(),
'xml',
"{$extractionPath}/document.xml", $gParams);
541 if (in_array(
'epub', $wantedFormats)) {
542 $this->
addFileToSubmissionGalley($existing_galley_by_labels, $submission, $genre->getId(),
'epub',
"{$extractionPath}/document.epub", $gParams);
560 require_once(dirname(__FILE__) .
'/MarkupJobInfo.inc.php');
562 $jobInfo->setId($jobId);
563 $jobInfo->setFileId($fileId);
564 $jobInfo->setUserId($user->getId());
565 $jobInfo->setJournalId($journal->getId());
566 $jobInfo->setXmlJobId(NULL);
567 $markupJobInfoDao->insertMarkupJobInfo($jobInfo);
584 if (!is_null(self::$_otsWrapper) && $reuseCached) {
587 $journalId = $journal->getId();
589 extract($plugin->getOTSLoginParametersForJournal($journal->getId(), $userObject));
593 require_once(dirname(__FILE__) .
'/XMLPSWrapper.inc.php');
594 self::$_otsWrapper =
new XMLPSWrapper($host, $user, $password);
616 if (!isset($creds[
'host']) || empty($creds[
'host'])) {
619 if (!isset($creds[
'user']) || empty($creds[
'user'])) {
622 if (!isset($creds[
'password']) || empty($creds[
'password'])) {
634 import(
'lib.pkp.classes.security.AccessKeyManager');
636 $accessKey = $accessKeyManager->createKey(
'MarkupContext', $user->getId(),
null, 1);
647 import(
'lib.pkp.classes.security.AccessKeyManager');
650 $accessKey = $accessKeyManager->validateKey(
655 return !is_null($accessKey);