16 require_once dirname(__FILE__) .
'/../libs/swordappv2/swordappclient.php';
17 require_once dirname(__FILE__) .
'/../libs/swordappv2/swordappentry.php';
18 require_once dirname(__FILE__) .
'/PKPPackagerMetsSwap.php';
45 $this->_submission = $submission;
48 $this->_outPath = tempnam(
'/tmp',
'sword');
49 unlink($this->_outPath);
50 mkdir($this->_outPath);
51 mkdir($this->_outPath .
'/files');
62 $this->_context = $journalDao->getById($submission->getContextId());
65 $this->_section = $sectionDao->getById($submission->getSectionId());
67 if (method_exists($submission,
'getIssueId')) {
69 $this->_issue = $issueDao->getById($submission->getIssueId());
78 $this->_package->setCustodian($this->_context->getContactName());
79 $this->_package->setTitle(html_entity_decode($this->_submission->getLocalizedTitle(), ENT_QUOTES,
'UTF-8'));
80 $this->_package->setAbstract(html_entity_decode(strip_tags($this->_submission->getLocalizedAbstract()), ENT_QUOTES,
'UTF-8'));
81 $this->_package->setType($this->_section->getLocalizedIdentifyType());
82 $publication = $this->_submission->getCurrentPublication();
83 foreach ($publication->getData(
'authors') as $author) {
84 $creator = $author->getFullName(
true);
85 $affiliation = $author->getLocalizedAffiliation();
86 if (!empty($affiliation)) $creator .=
"; $affiliation";
87 $this->_package->addCreator($creator);
89 $this->_package->sac_name_records[] = [
90 'family' => $author->getFamilyName(Locale::getDefault()),
91 'given' => $author->getGivenName(Locale::getDefault()),
92 'email' => $author->getEmail(),
93 'primary_contact' => ($author->getId() === $publication->getData(
'primaryContactId'))
102 public function _addFile($submissionFile) {
103 $targetFilename = $this->_outPath .
'/files/' . $submissionFile->getOriginalFileName();
104 copy($submissionFile->getFilePath(), $targetFilename);
105 $this->_package->addFile($submissionFile->getOriginalFileName(), $submissionFile->getFileType());
112 foreach ($this->_submission->getGalleys() as $galley) {
113 $this->
_addFile($galley->getFile());
123 $submissionFiles = $submissionFileDao->getBySubmissionId($this->_submission->getId());
125 $submissionFiles = array_reverse($submissionFiles,
true);
127 foreach ($submissionFiles as $submissionFile) {
128 $fileStage = $submissionFile->getFileStage();
129 if (!isset($files[$fileStage])) {
130 $files[$fileStage] = array();
132 $files[$fileStage][] = $submissionFile;
136 SUBMISSION_FILE_PRODUCTION_READY,
137 SUBMISSION_FILE_COPYEDIT,
138 SUBMISSION_FILE_REVIEW_FILE,
139 SUBMISSION_FILE_SUBMISSION
141 $mostRecentEditorialFile =
null;
142 foreach ($stages as $subFileStage) {
143 if (isset($files[$subFileStage])) {
144 $mostRecentEditorialFile = array_shift($files[$subFileStage]);
145 $this->
_addFile($mostRecentEditorialFile);
156 $this->_package->create();
165 public function deposit($url, $username, $password, $apikey =
null) {
166 $clientOpts = $apikey ? [CURLOPT_HTTPHEADER => [
"X-Ojs-Sword-Api-Token:".$apikey]] : array();
168 $response = $client->deposit(
169 $url, $username, $password,
171 $this->_outPath .
'/deposit.zip',
172 'http://purl.org/net/sword/package/METSDSpaceSIP',
173 'application/zip',
false,
true
175 if ($response->sac_status > 299)
176 throw new Exception(
"Status: $response->sac_status , summary: $response->sac_summary");
185 import(
'lib.pkp.classes.file.FileManager');
187 $fileManager->rmtree($this->_outPath);