function handleSuppFileNode(&$journal, &$suppNode, &$issue, &$section, &$article, &$errors, $isCommandLine, &$articleFileManager) { $errors = array(); $journalSupportedLocales = array_keys($journal->getSupportedLocaleNames()); // => journal locales must be set up before $journalPrimaryLocale = $journal->getPrimaryLocale(); $suppFileDao =& DAORegistry::getDAO('SuppFileDAO'); $suppFile = new SuppFile(); $suppFile->setArticleId($article->getId()); for ($index = 0; $node = $suppNode->getChildByName('title', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $journalPrimaryLocale; } elseif (!in_array($locale, $journalSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.articleSuppFileTitleLocaleUnsupported', array('suppFileTitle' => $node->getValue(), 'articleTitle' => $article->getLocalizedTitle(), 'issueTitle' => $issue->getIssueIdentification(), 'locale' => $locale)); return false; } $suppFile->setTitle($node->getValue(), $locale); } for ($index = 0; $node = $suppNode->getChildByName('creator', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $journalPrimaryLocale; } elseif (!in_array($locale, $journalSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.articleSuppFileCreatorLocaleUnsupported', array('suppFileTitle' => $node->getValue(), 'articleTitle' => $article->getLocalizedTitle(), 'issueTitle' => $issue->getIssueIdentification(), 'locale' => $locale)); return false; } $suppFile->setCreator($node->getValue(), $locale); } for ($index = 0; $node = $suppNode->getChildByName('subject', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $journalPrimaryLocale; } elseif (!in_array($locale, $journalSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.articleSuppFileSubjectLocaleUnsupported', array('suppFileTitle' => $node->getValue(), 'articleTitle' => $article->getLocalizedTitle(), 'issueTitle' => $issue->getIssueIdentification(), 'locale' => $locale)); return false; } $suppFile->setSubject($node->getValue(), $locale); } for ($index = 0; $node = $suppNode->getChildByName('type_other', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $journalPrimaryLocale; } elseif (!in_array($locale, $journalSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.articleSuppFileTypeOtherLocaleUnsupported', array('suppFileTitle' => $node->getValue(), 'articleTitle' => $article->getLocalizedTitle(), 'issueTitle' => $issue->getIssueIdentification(), 'locale' => $locale)); return false; } $suppFile->setTypeOther($node->getValue(), $locale); } for ($index = 0; $node = $suppNode->getChildByName('description', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $journalPrimaryLocale; } elseif (!in_array($locale, $journalSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.articleSuppFileDescriptionLocaleUnsupported', array('suppFileTitle' => $node->getValue(), 'articleTitle' => $article->getLocalizedTitle(), 'issueTitle' => $issue->getIssueIdentification(), 'locale' => $locale)); return false; } $suppFile->setDescription($node->getValue(), $locale); } for ($index = 0; $node = $suppNode->getChildByName('publisher', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $journalPrimaryLocale; } elseif (!in_array($locale, $journalSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.articleSuppFilePublisherLocaleUnsupported', array('suppFileTitle' => $node->getValue(), 'articleTitle' => $article->getLocalizedTitle(), 'issueTitle' => $issue->getIssueIdentification(), 'locale' => $locale)); return false; } $suppFile->setPublisher($node->getValue(), $locale); } for ($index = 0; $node = $suppNode->getChildByName('sponsor', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $journalPrimaryLocale; } elseif (!in_array($locale, $journalSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.articleSuppFileSponsorLocaleUnsupported', array('suppFileTitle' => $node->getValue(), 'articleTitle' => $article->getLocalizedTitle(), 'issueTitle' => $issue->getIssueIdentification(), 'locale' => $locale)); return false; } $suppFile->setSponsor($node->getValue(), $locale); } for ($index = 0; $node = $suppNode->getChildByName('source', $index); $index++) { $locale = $node->getAttribute('locale'); if ($locale == '') { $locale = $journalPrimaryLocale; } elseif (!in_array($locale, $journalSupportedLocales)) { $errors[] = array('plugins.importexport.native.import.error.articleSuppFileSourceLocaleUnsupported', array('suppFileTitle' => $node->getValue(), 'articleTitle' => $article->getLocalizedTitle(), 'issueTitle' => $issue->getIssueIdentification(), 'locale' => $locale)); return false; } $suppFile->setSource($node->getValue(), $locale); } if ($node = $suppNode->getChildByName('date_created')) { $createdDate = strtotime($node->getValue()); if ($createdDate !== -1) { $suppFile->setDateCreated($createdDate); } } switch ($suppType = $suppNode->getAttribute('type')) { case 'research_instrument': $suppFile->setType(__('author.submit.suppFile.researchInstrument')); break; case 'research_materials': $suppFile->setType(__('author.submit.suppFile.researchMaterials')); break; case 'research_results': $suppFile->setType(__('author.submit.suppFile.researchResults')); break; case 'transcripts': $suppFile->setType(__('author.submit.suppFile.transcripts')); break; case 'data_analysis': $suppFile->setType(__('author.submit.suppFile.dataAnalysis')); break; case 'data_set': $suppFile->setType(__('author.submit.suppFile.dataSet')); break; case 'source_text': $suppFile->setType(__('author.submit.suppFile.sourceText')); break; case 'other': $suppFile->setType(''); break; default: $errors[] = array('plugins.importexport.native.import.error.unknownSuppFileType', array('suppFileType' => $suppType)); return false; } $suppFile->setLanguage($suppNode->getAttribute('language')); $suppFile->setPublicSuppFileId($suppNode->getAttribute('public_id')); if (!($fileNode = $suppNode->getChildByName('file'))) { $errors[] = array('plugins.importexport.native.import.error.suppFileMissing', array('articleTitle' => $article->getLocalizedTitle(), 'sectionTitle' => $section->getLocalizedTitle(), 'issueTitle' => $issue->getIssueIdentification())); return false; } if ($href = $fileNode->getChildByName('href')) { $url = $href->getAttribute('src'); if ($isCommandLine || NativeImportDom::isAllowedMethod($url)) { if ($isCommandLine && NativeImportDom::isRelativePath($url)) { // The command-line tool does a chdir; we need to prepend the original pathname to relative paths so we're not looking in the wrong place. $url = PWD . '/' . $url; } if (($fileId = $articleFileManager->copySuppFile($url, $href->getAttribute('mime_type'))) === false) { $errors[] = array('plugins.importexport.native.import.error.couldNotCopy', array('url' => $url)); return false; } } } if ($embed = $fileNode->getChildByName('embed')) { if (($type = $embed->getAttribute('encoding')) !== 'base64') { $errors[] = array('plugins.importexport.native.import.error.unknownEncoding', array('type' => $type)); return false; } $originalName = $embed->getAttribute('filename'); if (($fileId = $articleFileManager->writeSuppFile($originalName, base64_decode($embed->getValue()), $embed->getAttribute('mime_type'))) === false) { $errors[] = array('plugins.importexport.native.import.error.couldNotWriteFile', array('originalName' => $originalName)); return false; } } if (!$fileId) { $errors[] = array('plugins.importexport.native.import.error.suppFileMissing', array('articleTitle' => $article->getLocalizedTitle(), 'sectionTitle' => $section->getLocalizedTitle(), 'issueTitle' => $issue->getIssueIdentification())); return false; } $suppFile->setFileId($fileId); $suppFileDao->insertSuppFile($suppFile); return true; }
/** * Mock and register a SuppFileDAO as a test * back end for the SolrWebService class. */ private function _registerMockSuppFileDAO() { // Mock an SuppFileDAO. $suppFileDao = $this->getMock('SuppFileDAO', array('getSuppFilesByArticle'), array(), '', false); // Mock a list of supplementary files. $suppFile1 = new SuppFile(); $suppFile1->setId(2); $suppFile1->setLanguage('de'); $suppFile1->setFileType('application/pdf'); $suppFile1->setFileName('suppFile1.pdf'); $suppFile2 = new SuppFile(); $suppFile2->setId(3); $suppFile2->setLanguage('tu'); $suppFile2->setFileType('text/html'); $suppFile2->setFileName('suppFile2.html'); $suppFile2->setTitle('Titel', 'de_DE'); $suppFile2->setCreator('Autor', 'de_DE'); $suppFile2->setSubject('Thema', 'de_DE'); $suppFile2->setTypeOther('Sonstiger Typ', 'de_DE'); $suppFile2->setDescription('Beschreibung', 'de_DE'); $suppFile2->setSource('Quelle', 'de_DE'); $suppFiles = array($suppFile1, $suppFile2); // Mock the getSuppFilesByArticle() method. $suppFileDao->expects($this->any())->method('getSuppFilesByArticle')->will($this->returnValue($suppFiles)); // Register the mock DAO. DAORegistry::registerDAO('SuppFileDAO', $suppFileDao); }