public createJournalIssueNode ( $doc, $issue, $journalLocalePrecedence ) : DOMElement | ||
$doc | DOMDocument | |
$issue | Issue | |
$journalLocalePrecedence | array | |
return | DOMElement |
function createJournalIssueNode($doc, $issue, $journalLocalePrecedence)
{
$deployment = $this->getDeployment();
$journalIssueNode = $doc->createElementNS($deployment->getNamespace(), 'JournalIssue');
// Volume
$volume = $issue->getVolume();
if (!empty($volume) && $issue->getShowVolume()) {
$journalIssueNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'JournalVolumeNumber', htmlspecialchars($volume, ENT_COMPAT, 'UTF-8')));
}
// Number
$number = $issue->getNumber();
if (!empty($number) && $issue->getShowNumber()) {
$journalIssueNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'JournalIssueNumber', htmlspecialchars($number, ENT_COMPAT, 'UTF-8')));
}
// Identification
$identification = $issue->getIssueIdentification();
if (!empty($identification)) {
$journalIssueNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'JournalIssueDesignation', htmlspecialchars($identification, ENT_COMPAT, 'UTF-8')));
}
assert(!(empty($number) && empty($identification)));
// Nominal Year
$year = (string) $issue->getYear();
$yearlen = strlen($year);
if ($issue->getShowYear() && !empty($year) && ($yearlen == 2 || $yearlen == 4)) {
$issueDateNode = $doc->createElementNS($deployment->getNamespace(), 'JournalIssueDate');
$issueDateNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'DateFormat', O4DOI_DATE_FORMAT_YYYY));
// Try to extend the year if necessary.
if ($yearlen == 2) {
// Assume that the issue date will never be
// more than one year in the future.
if ((int) $year <= (int) date('y') + 1) {
$year = '20' . $year;
} else {
$year = '19' . $year;
}
}
$issueDateNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'Date', $year));
$journalIssueNode->appendChild($issueDateNode);
}
return $journalIssueNode;
}
/** * @copydoc O4DOIXmlFilter::createJournalIssueNode() */ function createJournalIssueNode($doc, $issue, $journalLocalePrecedence) { $deployment = $this->getDeployment(); $context = $deployment->getContext(); $plugin = $deployment->getPlugin(); $journalIssueNode = parent::createJournalIssueNode($doc, $issue, $journalLocalePrecedence); // Publication Date $datePublished = $issue->getDatePublished(); if (!empty($datePublished)) { $journalIssueNode->appendChild($node = $doc->createElementNS($deployment->getNamespace(), 'PublicationDate', date('Ymd', strtotime($datePublished)))); } // Issue Title (mandatory) $localizedTitles = $this->getTranslationsByPrecedence($issue->getTitle(null), $journalLocalePrecedence); // Retrieve the first key/value pair... foreach ($localizedTitles as $locale => $localizedTitle) { break; } if (empty($localizedTitle)) { $localizedTitles = $this->getTranslationsByPrecedence($context->getName(null), $journalLocalePrecedence); // Retrieve the first key/value pair... foreach ($localizedTitles as $locale => $localizedTitle) { break; } assert(!empty($localizedTitle)); // Hack to make sure that no untranslated title appears: $showTitle = $issue->getShowTitle(); $issue->setShowTitle(0); $localizedTitle = $localizedTitle . ', ' . $issue->getIssueIdentification(); $issue->setShowTitle($showTitle); } $journalIssueNode->appendChild($this->createTitleNode($doc, $locale, $localizedTitle, O4DOI_TITLE_TYPE_ISSUE)); // Extent (for issues-as-manifestation only) if (!$this->isWork($context, $plugin)) { $issueGalleyDao = DAORegistry::getDAO('IssueGalleyDAO'); /* @var $issueGalleyDao IssueGalleyDAO */ $issueGalleys = $issueGalleyDao->getGalleysByIssue($issue->getId()); if (!empty($issueGalleys)) { foreach ($issueGalleys as $issueGalley) { $journalIssueNode->appendChild($this->createExtentNode($doc, $issueGalley)); } } } return $journalIssueNode; }