O4DOIXmlFilter::createJournalIssueNode PHP Method

createJournalIssueNode() public method

Create the journal issue node.
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;
    }

Usage Example

Ejemplo n.º 1
0
 /**
  * @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;
 }