/** * Construct the sitemap * @return XMLNode */ function createJournalSitemap() { $issueDao =& DAORegistry::getDAO('IssueDAO'); $publishedArticleDao =& DAORegistry::getDAO('PublishedArticleDAO'); $galleyDao =& DAORegistry::getDAO('ArticleGalleyDAO'); $journal =& Request::getJournal(); $journalId = $journal->getId(); $doc =& XMLCustomWriter::createDocument(); $root =& XMLCustomWriter::createElement($doc, 'urlset'); XMLCustomWriter::setAttribute($root, 'xmlns', SITEMAP_XSD_URL); // Journal home XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($journal->getPath(), 'index', 'index'))); // About page XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($journal->getPath(), 'about'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($journal->getPath(), 'about', 'editorialTeam'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($journal->getPath(), 'about', 'editorialPolicies'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($journal->getPath(), 'about', 'submissions'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($journal->getPath(), 'about', 'siteMap'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($journal->getPath(), 'about', 'aboutThisPublishingSystem'))); // Search XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($journal->getPath(), 'search'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($journal->getPath(), 'search', 'authors'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($journal->getPath(), 'search', 'titles'))); // Issues XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($journal->getPath(), 'issue', 'current'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($journal->getPath(), 'issue', 'archive'))); $publishedIssues =& $issueDao->getPublishedIssues($journalId); while ($issue =& $publishedIssues->next()) { XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($journal->getPath(), 'issue', 'view', $issue->getId()))); // Articles for issue $articles = $publishedArticleDao->getPublishedArticles($issue->getId()); foreach ($articles as $article) { // Abstract XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($journal->getPath(), 'article', 'view', array($article->getId())))); // Galley files $galleys = $galleyDao->getGalleysByArticle($article->getId()); foreach ($galleys as $galley) { XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($journal->getPath(), 'article', 'view', array($article->getId(), $galley->getId())))); } } unset($issue); } XMLCustomWriter::appendChild($doc, $root); return $doc; }
function &exportUsers(&$journal, &$users, $allowedRoles = null) { $roleDao =& DAORegistry::getDAO('RoleDAO'); $doc =& XMLCustomWriter::createDocument('users', USERS_DTD_ID, USERS_DTD_URL); $root =& XMLCustomWriter::createElement($doc, 'users'); foreach ($users as $user) { $userNode =& XMLCustomWriter::createElement($doc, 'user'); XMLCustomWriter::createChildWithText($doc, $userNode, 'username', $user->getUserName(), false); $passwordNode =& XMLCustomWriter::createChildWithText($doc, $userNode, 'password', $user->getPassword()); XMLCustomWriter::setAttribute($passwordNode, 'encrypted', Config::getVar('security', 'encryption')); XMLCustomWriter::createChildWithText($doc, $userNode, 'salutation', $user->getSalutation(), false); XMLCustomWriter::createChildWithText($doc, $userNode, 'first_name', $user->getFirstName()); XMLCustomWriter::createChildWithText($doc, $userNode, 'middle_name', $user->getMiddleName(), false); XMLCustomWriter::createChildWithText($doc, $userNode, 'last_name', $user->getLastName()); XMLCustomWriter::createChildWithText($doc, $userNode, 'initials', $user->getInitials(), false); XMLCustomWriter::createChildWithText($doc, $userNode, 'gender', $user->getGender(), false); XMLCustomWriter::createChildWithText($doc, $userNode, 'email', $user->getEmail()); XMLCustomWriter::createChildWithText($doc, $userNode, 'url', $user->getUrl(), false); XMLCustomWriter::createChildWithText($doc, $userNode, 'phone', $user->getPhone(), false); XMLCustomWriter::createChildWithText($doc, $userNode, 'fax', $user->getFax(), false); XMLCustomWriter::createChildWithText($doc, $userNode, 'mailing_address', $user->getMailingAddress(), false); XMLCustomWriter::createChildWithText($doc, $userNode, 'country', $user->getCountry(), false); if (is_array($user->getAffiliation(null))) { foreach ($user->getAffiliation(null) as $locale => $value) { $affiliationNode =& XMLCustomWriter::createChildWithText($doc, $userNode, 'affiliation', $value, false); if ($affiliationNode) { XMLCustomWriter::setAttribute($affiliationNode, 'locale', $locale); } unset($affiliationNode); } } if (is_array($user->getSignature(null))) { foreach ($user->getSignature(null) as $locale => $value) { $signatureNode =& XMLCustomWriter::createChildWithText($doc, $userNode, 'signature', $value, false); if ($signatureNode) { XMLCustomWriter::setAttribute($signatureNode, 'locale', $locale); } unset($signatureNode); } } $interestsNode =& XMLCustomWriter::createChildWithText($doc, $userNode, 'interests', $user->getInterests(), false); if ($interestsNode) { XMLCustomWriter::setAttribute($interestsNode, 'locale', $locale); } if (is_array($user->getGossip(null))) { foreach ($user->getGossip(null) as $locale => $value) { $gossipNode =& XMLCustomWriter::createChildWithText($doc, $userNode, 'gossip', $value, false); if ($gossipNode) { XMLCustomWriter::setAttribute($gossipNode, 'locale', $locale); } unset($gossipNode); } } if (is_array($user->getBiography(null))) { foreach ($user->getBiography(null) as $locale => $value) { $biographyNode =& XMLCustomWriter::createChildWithText($doc, $userNode, 'biography', $value, false); if ($biographyNode) { XMLCustomWriter::setAttribute($biographyNode, 'locale', $locale); } unset($biographyNode); } } XMLCustomWriter::createChildWithText($doc, $userNode, 'locales', join(':', $user->getLocales()), false); $roles =& $roleDao->getRolesByUserId($user->getId(), $journal->getId()); foreach ($roles as $role) { $rolePath = $role->getRolePath(); if ($allowedRoles !== null && !in_array($rolePath, $allowedRoles)) { continue; } $roleNode =& XMLCustomWriter::createElement($doc, 'role'); XMLCustomWriter::setAttribute($roleNode, 'type', $rolePath); XMLCustomWriter::appendChild($userNode, $roleNode); unset($roleNode); } XMLCustomWriter::appendChild($root, $userNode); } XMLCustomWriter::appendChild($doc, $root); return $doc; }
function &generatePubDateDom(&$doc, $pubdate, $pubstatus) { $root =& XMLCustomWriter::createElement($doc, 'PubDate'); XMLCustomWriter::setAttribute($root, 'PubStatus', $pubstatus); XMLCustomWriter::createChildWithText($doc, $root, 'Year', date('Y', strtotime($pubdate))); XMLCustomWriter::createChildWithText($doc, $root, 'Month', date('m', strtotime($pubdate)), false); XMLCustomWriter::createChildWithText($doc, $root, 'Day', date('d', strtotime($pubdate)), false); return $root; }
/** * Generate the DOM tree for a given article. * @param $doc object DOM object * @param $journal object Journal * @param $issue object Issue * @param $section object Section * @param $article object Article */ function &generateArticleDom(&$doc, &$journal, &$issue, &$section, &$article) { $root =& XMLCustomWriter::createElement($doc, 'record'); /* --- Article Language --- */ XMLCustomWriter::createChildWithText($doc, $root, 'language', DOAJExportDom::mapLang($article->getLanguage()), false); /* --- Publisher name (i.e. institution name) --- */ XMLCustomWriter::createChildWithText($doc, $root, 'publisher', $journal->getSetting('publisherInstitution'), false); /* --- Journal's title --- */ XMLCustomWriter::createChildWithText($doc, $root, 'journalTitle', $journal->getLocalizedTitle(), false); /* --- Identification Numbers --- */ XMLCustomWriter::createChildWithText($doc, $root, 'issn', $journal->getSetting('printIssn'), false); XMLCustomWriter::createChildWithText($doc, $root, 'eissn', $journal->getSetting('onlineIssn'), false); /* --- Article's publication date, volume, issue, DOI --- */ XMLCustomWriter::createChildWithText($doc, $root, 'publicationDate', DOAJExportDom::formatDate($issue->getDatePublished()), false); XMLCustomWriter::createChildWithText($doc, $root, 'volume', $issue->getVolume(), false); XMLCustomWriter::createChildWithText($doc, $root, 'issue', $issue->getNumber(), false); /** --- FirstPage / LastPage (from PubMed plugin)--- * there is some ambiguity for online journals as to what * "page numbers" are; for example, some journals (eg. JMIR) * use the "e-location ID" as the "page numbers" in PubMed */ $pages = $article->getPages(); if (preg_match("/([0-9]+)\\s*-\\s*([0-9]+)/i", $pages, $matches)) { // simple pagination (eg. "pp. 3-8") XMLCustomWriter::createChildWithText($doc, $root, 'startPage', $matches[1]); XMLCustomWriter::createChildWithText($doc, $root, 'endPage', $matches[2]); } elseif (preg_match("/(e[0-9]+)/i", $pages, $matches)) { // elocation-id (eg. "e12") XMLCustomWriter::createChildWithText($doc, $root, 'startPage', $matches[1]); XMLCustomWriter::createChildWithText($doc, $root, 'endPage', $matches[1]); } XMLCustomWriter::createChildWithText($doc, $root, 'doi', $article->getPubId('doi'), false); /* --- Article's publication date, volume, issue, DOI --- */ XMLCustomWriter::createChildWithText($doc, $root, 'publisherRecordId', $article->getPublishedArticleId(), false); XMLCustomWriter::createChildWithText($doc, $root, 'documentType', $article->getLocalizedType(), false); /* --- Article title --- */ foreach ((array) $article->getTitle(null) as $locale => $title) { if (empty($title)) { continue; } $titleNode =& XMLCustomWriter::createChildWithText($doc, $root, 'title', $title); if (strlen($locale) == 5) { XMLCustomWriter::setAttribute($titleNode, 'language', DOAJExportDom::mapLang(String::substr($locale, 0, 2))); } } /* --- Authors and affiliations --- */ $authors =& XMLCustomWriter::createElement($doc, 'authors'); XMLCustomWriter::appendChild($root, $authors); $affilList = DOAJExportDom::generateAffiliationsList($article->getAuthors()); foreach ($article->getAuthors() as $author) { $authorNode =& DOAJExportDom::generateAuthorDom($doc, $root, $issue, $article, $author, $affilList); XMLCustomWriter::appendChild($authors, $authorNode); unset($authorNode); } if (!empty($affilList[0])) { $affils =& XMLCustomWriter::createElement($doc, 'affiliationsList'); XMLCustomWriter::appendChild($root, $affils); for ($i = 0; $i < count($affilList); $i++) { $affilNode =& XMLCustomWriter::createChildWithText($doc, $affils, 'affiliationName', $affilList[$i]); XMLCustomWriter::setAttribute($affilNode, 'affiliationId', $i); unset($affilNode); } } /* --- Abstract --- */ foreach ((array) $article->getAbstract(null) as $locale => $abstract) { if (empty($abstract)) { continue; } $abstractNode =& XMLCustomWriter::createChildWithText($doc, $root, 'abstract', $abstract); if (strlen($locale) == 5) { XMLCustomWriter::setAttribute($abstractNode, 'language', DOAJExportDom::mapLang(String::substr($locale, 0, 2))); } } /* --- FullText URL --- */ $fullTextUrl =& XMLCustomWriter::createChildWithText($doc, $root, 'fullTextUrl', Request::url(null, 'article', 'view', $article->getId())); XMLCustomWriter::setAttribute($fullTextUrl, 'format', 'html'); /* --- Keywords --- */ $keywords =& XMLCustomWriter::createElement($doc, 'keywords'); XMLCustomWriter::appendChild($root, $keywords); $subjects = array_map('trim', explode(';', $article->getLocalizedSubject())); foreach ($subjects as $keyword) { XMLCustomWriter::createChildWithText($doc, $keywords, 'keyword', $keyword, false); } return $root; }
function &generateArticleDom(&$doc, &$journal, &$issue, &$article, &$galley) { $unavailableString = Locale::translate('plugins.importexport.erudit.unavailable'); $root =& XMLCustomWriter::createElement($doc, 'article'); XMLCustomWriter::setAttribute($root, 'idprop', $journal->getJournalId() . '-' . $issue->getIssueId() . '-' . $article->getArticleId() . '-' . $galley->getGalleyId(), false); XMLCustomWriter::setAttribute($root, 'arttype', 'article'); $lang = $article->getLanguage(); XMLCustomWriter::setAttribute($root, 'lang', isset($lang) ? $lang : 'en'); XMLCustomWriter::setAttribute($root, 'processing', 'cart'); /* --- admin --- */ $adminNode =& XMLCustomWriter::createElement($doc, 'admin'); XMLCustomWriter::appendChild($root, $adminNode); /* --- articleinfo --- */ $articleInfoNode =& XMLCustomWriter::createElement($doc, 'articleinfo'); XMLCustomWriter::appendChild($adminNode, $articleInfoNode); // The first public ID should be a full URL to the article. $urlIdNode =& XMLCustomWriter::createChildWithText($doc, $articleInfoNode, 'idpublic', Request::url($journal->getPath(), 'article', 'view', array($article->getArticleId(), $galley->getGalleyId()))); XMLCustomWriter::setAttribute($urlIdNode, 'scheme', 'sici'); /* --- journal --- */ $journalNode =& XMLCustomWriter::createElement($doc, 'journal'); XMLCustomWriter::appendChild($adminNode, $journalNode); XMLCustomWriter::setAttribute($journalNode, 'id', 'ojs-' . $journal->getPath()); XMLCustomWriter::createChildWithText($doc, $journalNode, 'jtitle', $journal->getJournalTitle()); XMLCustomWriter::createChildWithText($doc, $journalNode, 'jshorttitle', $journal->getLocalizedSetting('initials'), false); if (!($printIssn = $journal->getSetting('printIssn'))) { $printIssn = $unavailableString; } XMLCustomWriter::createChildWithText($doc, $journalNode, 'idissn', $printIssn); if (!($onlineIssn = $journal->getSetting('onlineIssn'))) { $onlineIssn = $unavailableString; } XMLCustomWriter::createChildWithText($doc, $journalNode, 'iddigissn', $onlineIssn); /* --- issue --- */ $issueNode =& XMLCustomWriter::createElement($doc, 'issue'); XMLCustomWriter::appendChild($adminNode, $issueNode); XMLCustomWriter::setAttribute($issueNode, 'id', 'ojs-' . $issue->getBestIssueId()); XMLCustomWriter::createChildWithText($doc, $issueNode, 'volume', $issue->getVolume(), false); XMLCustomWriter::createChildWithText($doc, $issueNode, 'issueno', $issue->getNumber(), false); $pubNode =& XMLCustomWriter::createElement($doc, 'pub'); XMLCustomWriter::appendChild($issueNode, $pubNode); XMLCustomWriter::createChildWithText($doc, $pubNode, 'year', $issue->getYear()); $digPubNode =& XMLCustomWriter::createElement($doc, 'digpub'); XMLCustomWriter::appendChild($issueNode, $digPubNode); XMLCustomWriter::createChildWithText($doc, $digPubNode, 'date', EruditExportDom::formatDate($issue->getDatePublished())); /* --- Publisher & DTD --- */ $publisherInstitution =& $journal->getSetting('publisherInstitution'); $publisherNode =& XMLCustomWriter::createElement($doc, 'publisher'); XMLCustomWriter::setAttribute($publisherNode, 'id', 'ojs-' . $journal->getJournalId() . '-' . $issue->getIssueId() . '-' . $article->getArticleId()); XMLCustomWriter::appendChild($adminNode, $publisherNode); $publisherInstitution = $unavailableString; if (empty($publisherInstitution)) { $publisherInstitution = $unavailableString; } XMLCustomWriter::createChildWithText($doc, $publisherNode, 'orgname', $publisherInstitution); $digprodNode =& XMLCustomWriter::createElement($doc, 'digprod'); XMLCustomWriter::createChildWithText($doc, $digprodNode, 'orgname', $publisherInstitution); XMLCustomWriter::setAttribute($digprodNode, 'id', 'ojs-prod-' . $journal->getJournalId() . '-' . $issue->getIssueId() . '-' . $article->getArticleId()); XMLCustomWriter::appendChild($adminNode, $digprodNode); $digdistNode =& XMLCustomWriter::createElement($doc, 'digdist'); XMLCustomWriter::createChildWithText($doc, $digdistNode, 'orgname', $publisherInstitution); XMLCustomWriter::setAttribute($digdistNode, 'id', 'ojs-dist-' . $journal->getJournalId() . '-' . $issue->getIssueId() . '-' . $article->getArticleId()); XMLCustomWriter::appendChild($adminNode, $digdistNode); $dtdNode =& XMLCustomWriter::createElement($doc, 'dtd'); XMLCustomWriter::appendChild($adminNode, $dtdNode); XMLCustomWriter::setAttribute($dtdNode, 'name', 'Erudit Article'); XMLCustomWriter::setAttribute($dtdNode, 'version', '3.0.0'); /* --- copyright --- */ $copyright = $journal->getLocalizedSetting('copyrightNotice'); XMLCustomWriter::createChildWithText($doc, $adminNode, 'copyright', empty($copyright) ? $unavailableString : $copyright); /* --- frontmatter --- */ $frontMatterNode =& XMLCustomWriter::createElement($doc, 'frontmatter'); XMLCustomWriter::appendChild($root, $frontMatterNode); $titleGroupNode =& XMLCustomWriter::createElement($doc, 'titlegr'); XMLCustomWriter::appendChild($frontMatterNode, $titleGroupNode); XMLCustomWriter::createChildWithText($doc, $titleGroupNode, 'title', strip_tags($article->getArticleTitle())); /* --- authorgr --- */ $authorGroupNode =& XMLCustomWriter::createElement($doc, 'authorgr'); XMLCustomWriter::appendChild($frontMatterNode, $authorGroupNode); $authorNum = 1; foreach ($article->getAuthors() as $author) { $authorNode =& XMLCustomWriter::createElement($doc, 'author'); XMLCustomWriter::appendChild($authorGroupNode, $authorNode); XMLCustomWriter::setAttribute($authorNode, 'id', 'ojs-' . $journal->getJournalId() . '-' . $issue->getIssueId() . '-' . $article->getArticleId() . '-' . $galley->getGalleyId() . '-' . $authorNum); $persNameNode =& XMLCustomWriter::createElement($doc, 'persname'); XMLCustomWriter::appendChild($authorNode, $persNameNode); // Opatan Inc. foreach ((array) $author->getFirstName(null) as $locale => $firstName) { $firstName = strip_tags($firstName); $firstNameNode =& XMLCustomWriter::createElement($doc, 'firstname'); XMLCustomWriter::setAttribute($firstNameNode, 'lang', $locale); XMLCustomWriter::appendChild($persNameNode, $firstNameNode); XMLCustomWriter::createChildWithText($doc, $firstNameNode, 'blocktext', $firstName); unset($firstNameNode); } // Opatan Inc. foreach ((array) $author->getMiddleName(null) as $locale => $middleName) { $middleName = strip_tags($middleName); $middleNameNode =& XMLCustomWriter::createElement($doc, 'middlename'); XMLCustomWriter::setAttribute($middleNameNode, 'lang', $locale); XMLCustomWriter::appendChild($persNameNode, $middleNameNode); XMLCustomWriter::createChildWithText($doc, $middleNameNode, 'blocktext', $middleName); unset($middleNameNode); } // Opatan Inc. foreach ((array) $author->getLastName(null) as $locale => $lastName) { $lastName = strip_tags($lastName); $lastNameNode =& XMLCustomWriter::createElement($doc, 'familyname'); XMLCustomWriter::setAttribute($lastNameNode, 'lang', $locale); XMLCustomWriter::appendChild($persNameNode, $lastNameNode); XMLCustomWriter::createChildWithText($doc, $lastNameNode, 'blocktext', $lastName); unset($lastNameNode); } // Opatan Inc. foreach ((array) $author->getAffiliation(null) as $locale => $affiliation) { $affiliation = strip_tags($affiliation); $affiliationNode =& XMLCustomWriter::createElement($doc, 'affiliation'); XMLCustomWriter::setAttribute($affiliationNode, 'lang', $locale); XMLCustomWriter::appendChild($authorNode, $affiliationNode); XMLCustomWriter::createChildWithText($doc, $affiliationNode, 'blocktext', $affiliation, false); } $authorNum++; } /* --- abstract and keywords --- */ foreach ((array) $article->getAbstract(null) as $locale => $abstract) { $abstract = strip_tags($abstract); $abstractNode =& XMLCustomWriter::createElement($doc, 'abstract'); XMLCustomWriter::setAttribute($abstractNode, 'lang', $locale); XMLCustomWriter::appendChild($frontMatterNode, $abstractNode); XMLCustomWriter::createChildWithText($doc, $abstractNode, 'blocktext', $abstract); unset($abstractNode); } if ($keywords = $article->getArticleSubject()) { $keywordGroupNode =& XMLCustomWriter::createElement($doc, 'keywordgr'); XMLCustomWriter::setAttribute($keywordGroupNode, 'lang', ($language = $article->getLanguage()) ? $language : 'en'); foreach (explode(';', $keywords) as $keyword) { XMLCustomWriter::createChildWithText($doc, $keywordGroupNode, 'keyword', trim($keyword), false); } XMLCustomWriter::appendChild($frontMatterNode, $keywordGroupNode); } /* --- body --- */ $bodyNode =& XMLCustomWriter::createElement($doc, 'body'); XMLCustomWriter::appendChild($root, $bodyNode); import('file.ArticleFileManager'); $articleFileManager =& new ArticleFileManager($article->getArticleId()); $file =& $articleFileManager->getFile($galley->getFileId()); $parser =& SearchFileParser::fromFile($file); if (isset($parser)) { if ($parser->open()) { // File supports text indexing. $textNode =& XMLCustomWriter::createElement($doc, 'text'); XMLCustomWriter::appendChild($bodyNode, $textNode); while (($line = $parser->read()) !== false) { $line = trim($line); if ($line != '') { XMLCustomWriter::createChildWithText($doc, $textNode, 'blocktext', $line, false); } } $parser->close(); } } return $root; }
function &getMetadataPage($pageNum, &$errors) { import('xml.XMLCustomWriter'); import('db.DBResultRange'); $journal =& Request::getJournal(); $journalId = $journal->getJournalId(); $falseVar = false; if ($pageNum < 1) { return $falseVar; } $rangeInfo =& new DBResultRange(GOOGLE_SCHOLAR_ITEMS_PER_PAGE, $pageNum); $document =& XMLCustomWriter::createDocument('articles', 'articles.dtd'); $articlesNode =& XMLCustomWriter::createElement($document, 'articles'); XMLCustomWriter::appendChild($document, $articlesNode); $publishedArticleDao =& DAORegistry::getDAO('PublishedArticleDAO'); $publishedArticles =& $publishedArticleDao->getPublishedArticlesByJournalId($journalId, $rangeInfo); $issueDao =& DAORegistry::getDAO('IssueDAO'); $issueCache = array(); while ($publishedArticle =& $publishedArticles->next()) { $articleNode =& XMLCustomWriter::createElement($document, 'article'); XMLCustomWriter::appendChild($articlesNode, $articleNode); $frontNode =& XMLCustomWriter::createElement($document, 'front'); XMLCustomWriter::appendChild($articleNode, $frontNode); $journalMetaNode =& XMLCustomWriter::createElement($document, 'journal-meta'); XMLCustomWriter::appendChild($frontNode, $journalMetaNode); // Journal Metadata $journal =& Request::getJournal(); XMLCustomWriter::createChildWithText($document, $journalMetaNode, 'journal-title', $journal->getJournalTitle(), true); XMLCustomWriter::createChildWithText($document, $journalMetaNode, 'abbrev-journal-title', $journal->getLocalizedSetting('initials'), false); $issn = $journal->getSetting('onlineIssn'); if (empty($issn)) { array_push($errors, Locale::translate('plugins.gateways.googleScholar.errors.noIssn')); return $falseVar; } XMLCustomWriter::createChildWithText($document, $journalMetaNode, 'issn', $issn, false); $publisherNode =& XMLCustomWriter::createElement($document, 'publisher'); $publisherName = $this->getSetting($journalId, 'publisher-name'); if (empty($publisherName)) { array_push($errors, Locale::translate('plugins.gateways.googleScholar.errors.noPublisherName')); return $falseVar; } XMLCustomWriter::createChildWithText($document, $publisherNode, 'publisher-name', $publisherName, true); XMLCustomWriter::appendChild($journalMetaNode, $publisherNode); $articleMetaNode =& XMLCustomWriter::createElement($document, 'article-meta'); XMLCustomWriter::appendChild($frontNode, $articleMetaNode); // Article Metadata $titleGroupNode =& XMLCustomWriter::createElement($document, 'title-group'); XMLCustomWriter::appendChild($articleMetaNode, $titleGroupNode); $titles = $publishedArticle->getTitle(null); $primaryLocale = $journal->getPrimaryLocale(); XMLCustomWriter::createChildWithText($document, $titleGroupNode, 'article-title', $titles[$primaryLocale], true); unset($titles[$primaryLocale]); foreach ($titles as $locale => $title) { XMLCustomWriter::createChildWithText($document, $titleGroupNode, 'trans-title', $title, false); } $contribGroupNode =& XMLCustomWriter::createElement($document, 'contrib-group'); XMLCustomWriter::appendChild($articleMetaNode, $contribGroupNode); foreach ($publishedArticle->getAuthors() as $author) { $contribNode =& XMLCustomWriter::createElement($document, 'contrib'); XMLCustomWriter::appendChild($contribGroupNode, $contribNode); XMLCustomWriter::setAttribute($contribNode, 'contrib-type', 'author'); $nameNode =& XMLCustomWriter::createElement($document, 'name'); XMLCustomWriter::appendChild($contribNode, $nameNode); // Opatan Inc. XMLCustomWriter::createChildWithText($document, $nameNode, 'surname', $author->getAuthorLastName(), true); // Given names in the form: FirstName MiddleName, where MiddleName is optional $name = $author->getAuthorFirstName(); // Opatan Inc. : gets Localized author firstName if (($middleName = $author->getAuthorMiddleName()) != '') { $name .= " {$middleName}"; } // Opatan Inc. XMLCustomWriter::createChildWithText($document, $nameNode, 'given-names', $name, true); } $dateParts = getdate(strtotime($publishedArticle->getDatePublished())); $pubDateNode =& XMLCustomWriter::createElement($document, 'pub-date'); XMLCustomWriter::appendChild($articleMetaNode, $pubDateNode); XMLCustomWriter::createChildWithText($document, $pubDateNode, 'day', $dateParts['mday']); XMLCustomWriter::createChildWithText($document, $pubDateNode, 'month', $dateParts['mon']); XMLCustomWriter::createChildWithText($document, $pubDateNode, 'year', $dateParts['year']); $issueId = $publishedArticle->getIssueId(); if (!isset($issueCache[$issueId])) { $issueCache[$issueId] =& $issueDao->getIssueById($issueId); } $issue =& $issueCache[$issueId]; XMLCustomWriter::createChildWithText($document, $articleMetaNode, 'volume', $issue->getVolume()); XMLCustomWriter::createChildWithText($document, $articleMetaNode, 'issue', $issue->getNumber()); $canonicalUriNode =& XMLCustomWriter::createElement($document, 'self-uri'); XMLCustomWriter::setAttribute($canonicalUriNode, 'xlink:href', Request::url(null, 'article', 'viewArticle', array($publishedArticle->getArticleId()))); XMLCustomWriter::appendChild($articleMetaNode, $canonicalUriNode); foreach ($publishedArticle->getGalleys() as $galley) { $galleyUriNode =& XMLCustomWriter::createElement($document, 'self-uri'); if ($galley->isHTMLGalley()) { XMLCustomWriter::setAttribute($galleyUriNode, 'xlink:href', Request::url(null, 'article', 'viewArticle', array($publishedArticle->getArticleId(), $galley->getGalleyId()))); } else { XMLCustomWriter::setAttribute($galleyUriNode, 'xlink:href', Request::url(null, 'article', 'viewFile', array($publishedArticle->getArticleId(), $galley->getGalleyId()))); } XMLCustomWriter::appendChild($articleMetaNode, $galleyUriNode); } unset($issue); } return $document; }
/** * Create a work or product id element. * * @param $locale string e.g. 'en_US' * @param $localizedTitle string * @param $titleType string One of the O4DOI_TITLE_TYPE_* constants. * * @return XMLNode|DOMImplementation */ function &_titleElement($locale, $localizedTitle, $titleType) { $titleElement =& XMLCustomWriter::createElement($this->getDoc(), 'Title'); // Text format XMLCustomWriter::setAttribute($titleElement, 'textformat', O4DOI_TEXTFORMAT_ASCII); // Language $language = AppLocale::get3LetterIsoFromLocale($locale); assert(!empty($language)); XMLCustomWriter::setAttribute($titleElement, 'language', $language); // Title type (mandatory) XMLCustomWriter::createChildWithText($this->getDoc(), $titleElement, 'TitleType', $titleType); // Title text (mandatory) XMLCustomWriter::createChildWithText($this->getDoc(), $titleElement, 'TitleText', $localizedTitle); return $titleElement; }
/** * Create an XML element with a text node. * * FIXME: Move this to XMLCustomWriter? I leave the decision up to PKP... * * @param $name string * @param $value string * @param $attributes array An array with the attribute names as array * keys and attribute values as array values. * * @return XMLNode|DOMImplementation */ function &createElementWithText($name, $value, $attributes = array()) { $element =& XMLCustomWriter::createElement($this->getDoc(), $name); $elementContent =& XMLCustomWriter::createTextNode($this->getDoc(), String::html2text($value)); XMLCustomWriter::appendChild($element, $elementContent); foreach ($attributes as $attributeName => $attributeValue) { XMLCustomWriter::setAttribute($element, $attributeName, $attributeValue); } return $element; }
/** * Construct a sitemap for a scheduled conference * @return XMLNode */ function createSchedConfSitemap() { $publishedPaperDao =& DAORegistry::getDAO('PublishedPaperDAO'); $galleyDao =& DAORegistry::getDAO('PaperGalleyDAO'); $conference =& Request::getConference(); $conferenceId = $conference->getId(); $schedConf = Request::getSchedConf(); $doc =& XMLCustomWriter::createDocument(); $root =& XMLCustomWriter::createElement($doc, 'urlset'); XMLCustomWriter::setAttribute($root, 'xmlns', SITEMAP_XSD_URL); // Sched. Conf. home XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath()))); // About page XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath(), 'about'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath(), 'about', 'submissions'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath(), 'about', 'siteMap'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath(), 'about', 'aboutThisPublishingSystem'))); // Search XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath(), 'search'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath(), 'search', 'authors'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath(), 'search', 'titles'))); // Conference Information XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath(), 'schedConf', 'overview'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath(), 'schedConf', 'trackPolicies'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath(), 'schedConf', 'presentations'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath(), 'schedConf', 'accommodation'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath(), 'schedConf', 'location'))); XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath(), 'schedConf', 'organizingTeam'))); // Individual Papers $publishedPapers =& $publishedPaperDao->getPublishedPapers($schedConf->getId()); while ($paper =& $publishedPapers->next()) { // Abstract XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath(), 'paper', 'view', $paper->getId()))); // Galley files $galleys = $galleyDao->getGalleysByPaper($paper->getId()); foreach ($galleys as $galley) { XMLCustomWriter::appendChild($root, SitemapHandler::createUrlTree($doc, Request::url($conference->getPath(), $schedConf->getPath(), 'paper', 'view', array($paper->getId(), $galley->getId())))); } } XMLCustomWriter::appendChild($doc, $root); return $doc; }
function &generatePaperDom(&$doc, &$conference, &$track, &$paper) { // register the editor submission DAO for use later // $editorSubmissionDao =& DAORegistry::getDAO('EditorSubmissionDAO'); /* --- MeetingAbstract --- */ $root =& XMLCustomWriter::createElement($doc, 'MeetingAbstract'); XMLCustomWriter::setAttribute($root, 'Status', 'Completed'); /* --- DateCreated --- */ $dateNode =& XMLCustomWriter::createElement($doc, 'DateCreated'); XMLCustomWriter::appendChild($root, $dateNode); XMLCustomWriter::createChildWithText($doc, $dateNode, 'Year', date('Y')); XMLCustomWriter::createChildWithText($doc, $dateNode, 'Month', date('m')); XMLCustomWriter::createChildWithText($doc, $dateNode, 'Day', date('d')); /* --- Article/Paper --- */ $articleNode =& XMLCustomWriter::createElement($doc, 'Article'); XMLCustomWriter::setAttribute($articleNode, 'PubModel', 'Electronic'); XMLCustomWriter::appendChild($root, $articleNode); /* --- Journal/Book --- */ // FIXME: at the moment this is a null element required by NLM $journalNode =& XMLCustomWriter::createChildWithText($doc, $articleNode, 'Journal', null); $journalIssueNode =& XMLCustomWriter::createElement($doc, 'JournalIssue'); XMLCustomWriter::setAttribute($journalIssueNode, 'CitedMedium', 'Internet'); XMLCustomWriter::appendChild($journalNode, $journalIssueNode); $journalDateNode =& XMLCustomWriter::createElement($doc, 'PubDate'); XMLCustomWriter::appendChild($journalIssueNode, $journalDateNode); XMLCustomWriter::createChildWithText($doc, $journalDateNode, 'MedlineDate', date('Y')); /* --- ArticleTitle --- */ // NLM requires english titles for PaperTitle XMLCustomWriter::createChildWithText($doc, $articleNode, 'ArticleTitle', $paper->getLocalizedTitle()); /* --- Pagination --- */ // If there is no page number, then use abstract number $paginationNode =& XMLCustomWriter::createElement($doc, 'Pagination'); XMLCustomWriter::appendChild($articleNode, $paginationNode); $pages = $paper->getPages(); if (preg_match("/([0-9]+)\\s*-\\s*([0-9]+)/i", $pages, $matches)) { // simple pagination (eg. "pp. 3- 8") XMLCustomWriter::createChildWithText($doc, $paginationNode, 'MedlinePgn', $matches[1] . '-' . $matches[2]); } elseif (preg_match("/(e[0-9]+)/i", $pages, $matches)) { // elocation-id (eg. "e12") XMLCustomWriter::createChildWithText($doc, $paginationNode, 'MedlinePgn', $matches[1]); } else { // we need to insert something, so use the best ID possible XMLCustomWriter::createChildWithText($doc, $paginationNode, 'MedlinePgn', $paper->getBestPaperId($conference)); } /* --- Abstract --- */ $abstractNode =& XMLCustomWriter::createElement($doc, 'Abstract'); XMLCustomWriter::appendChild($articleNode, $abstractNode); XMLCustomWriter::createChildWithText($doc, $abstractNode, 'AbstractText', strip_tags($paper->getLocalizedAbstract()), false); /* --- Affiliation --- */ $sponsor = $paper->getLocalizedSponsor(); if ($sponsor != '') { XMLCustomWriter::createChildWithText($doc, $articleNode, 'Affiliation', $sponsor); } /* --- AuthorList --- */ $authorListNode =& XMLCustomWriter::createElement($doc, 'AuthorList'); XMLCustomWriter::setAttribute($authorListNode, 'CompleteYN', 'Y'); XMLCustomWriter::appendChild($articleNode, $authorListNode); foreach ($paper->getAuthors() as $author) { $authorNode =& NLMExportDom::generateAuthorDom($doc, $author); XMLCustomWriter::appendChild($authorListNode, $authorNode); } /* --- Conference --- */ $conferenceNode =& XMLCustomWriter::createElement($doc, 'Author'); XMLCustomWriter::appendChild($authorListNode, $conferenceNode); XMLCustomWriter::createChildWithText($doc, $conferenceNode, 'CollectiveName', $conference->getConferenceTitle()); // OtherInformation element goes here with location for current conference /* --- Language --- */ XMLCustomWriter::createChildWithText($doc, $articleNode, 'Language', strtolower($paper->getLanguage()), false); /* --- MedlineJournalInfo--- */ // FIXME: at the moment this is a null element required by NLM $journalInfoNode =& XMLCustomWriter::createChildWithText($doc, $root, 'MedlineJournalInfo', null); XMLCustomWriter::createChildWithText($doc, $journalInfoNode, 'MedlineTA', null); return $root; }
/** * Add ID-nodes to the given node. * @param $doc DOMDocument * @param $node DOMNode * @param $pubObject object * @param $journalId int */ function generatePubId(&$doc, &$node, &$pubObject, $journalId) { $pubIdPlugins =& PluginRegistry::loadCategory('pubIds', true, $journalId); foreach ($pubIdPlugins as $pubIdPlugin) { $pubIdType = $pubIdPlugin->getPubIdType(); $pubId = $pubObject->getStoredPubId($pubIdType); if ($pubId) { $pubObjectType = $pubIdPlugin->getPubObjectType($pubObject); $pubIdNode =& XMLCustomWriter::createChildWithText($doc, $node, 'pubId', $pubId); XMLCustomWriter::setAttribute($pubIdNode, 'pubIdType', $pubIdType); XMLCustomWriter::setAttribute($pubIdNode, 'pubObjectType', $pubObjectType); XMLCustomWriter::setAttribute($pubIdNode, 'pubObjectId', $pubObject->getId()); } } }
/** * Add ID-nodes to the given node. * @param $doc DOMDocument * @param $node DOMNode * @param $pubObject object * @param $issue Issue */ function generatePubId(&$doc, &$node, &$pubObject, &$issue) { $pubIdPlugins =& PluginRegistry::loadCategory('pubIds', true, $issue->getJournalId()); if (is_array($pubIdPlugins)) { foreach ($pubIdPlugins as $pubIdPlugin) { if ($issue->getPublished()) { $pubId = $pubIdPlugin->getPubId($pubObject); } else { $pubId = $pubIdPlugin->getPubId($pubObject, true); } if ($pubId) { $pubIdType = $pubIdPlugin->getPubIdType(); $idNode =& XMLCustomWriter::createChildWithText($doc, $node, 'id', $pubId); XMLCustomWriter::setAttribute($idNode, 'type', $pubIdType); } } } }
function &generateSuppFileDom(&$doc, &$journal, &$issue, &$article, &$suppFile) { $root =& XMLCustomWriter::createElement($doc, 'supplemental_file'); // FIXME: These should be constants! switch ($suppFile->getType()) { case Locale::translate('author.submit.suppFile.researchInstrument'): $suppFileType = 'research_instrument'; break; case Locale::translate('author.submit.suppFile.researchMaterials'): $suppFileType = 'research_materials'; break; case Locale::translate('author.submit.suppFile.researchResults'): $suppFileType = 'research_results'; break; case Locale::translate('author.submit.suppFile.transcripts'): $suppFileType = 'transcripts'; break; case Locale::translate('author.submit.suppFile.dataAnalysis'): $suppFileType = 'data_analysis'; break; case Locale::translate('author.submit.suppFile.dataSet'): $suppFileType = 'data_set'; break; case Locale::translate('author.submit.suppFile.sourceText'): $suppFileType = 'source_text'; break; default: $suppFileType = 'other'; break; } XMLCustomWriter::setAttribute($root, 'type', $suppFileType); XMLCustomWriter::setAttribute($root, 'public_id', $suppFile->getPublicSuppFileId(), false); XMLCustomWriter::setAttribute($root, 'language', $suppFile->getLanguage(), false); if (is_array($suppFile->getTitle(null))) { foreach ($suppFile->getTitle(null) as $locale => $title) { $titleNode =& XMLCustomWriter::createChildWithText($doc, $root, 'title', $title, false); if ($titleNode) { XMLCustomWriter::setAttribute($titleNode, 'locale', $locale); } unset($titleNode); } } if (is_array($suppFile->getCreator(null))) { foreach ($suppFile->getCreator(null) as $locale => $creator) { $creatorNode =& XMLCustomWriter::createChildWithText($doc, $root, 'creator', $creator, false); if ($creatorNode) { XMLCustomWriter::setAttribute($creatorNode, 'locale', $locale); } unset($creatorNode); } } if (is_array($suppFile->getSubject(null))) { foreach ($suppFile->getSubject(null) as $locale => $subject) { $subjectNode =& XMLCustomWriter::createChildWithText($doc, $root, 'subject', $subject, false); if ($subjectNode) { XMLCustomWriter::setAttribute($subjectNode, 'locale', $locale); } unset($subjectNode); } } if ($suppFileType == 'other') { if (is_array($suppFile->getTypeOther(null))) { foreach ($suppFile->getTypeOther(null) as $locale => $typeOther) { $typeOtherNode =& XMLCustomWriter::createChildWithText($doc, $root, 'type_other', $typeOther, false); if ($typeOtherNode) { XMLCustomWriter::setAttribute($typeOtherNode, 'locale', $locale); } unset($typeOtherNode); } } } if (is_array($suppFile->getDescription(null))) { foreach ($suppFile->getDescription(null) as $locale => $description) { $descriptionNode =& XMLCustomWriter::createChildWithText($doc, $root, 'description', $description, false); if ($descriptionNode) { XMLCustomWriter::setAttribute($descriptionNode, 'locale', $locale); } unset($descriptionNode); } } if (is_array($suppFile->getPublisher(null))) { foreach ($suppFile->getPublisher(null) as $locale => $publisher) { $publisherNode =& XMLCustomWriter::createChildWithText($doc, $root, 'publisher', $publisher, false); if ($publisherNode) { XMLCustomWriter::setAttribute($publisherNode, 'locale', $locale); } unset($publisherNode); } } if (is_array($suppFile->getSponsor(null))) { foreach ($suppFile->getSponsor(null) as $locale => $sponsor) { $sponsorNode =& XMLCustomWriter::createChildWithText($doc, $root, 'sponsor', $sponsor, false); if ($sponsorNode) { XMLCustomWriter::setAttribute($sponsorNode, 'locale', $locale); } unset($sponsorNode); } } XMLCustomWriter::createChildWithText($doc, $root, 'date_created', NativeExportDom::formatDate($suppFile->getDateCreated()), false); if (is_array($suppFile->getSource(null))) { foreach ($suppFile->getSource(null) as $locale => $source) { $sourceNode =& XMLCustomWriter::createChildWithText($doc, $root, 'source', $source, false); if ($sourceNode) { XMLCustomWriter::setAttribute($sourceNode, 'locale', $locale); } unset($sourceNode); } } import('file.ArticleFileManager'); $articleFileManager =& new ArticleFileManager($article->getArticleId()); $fileNode =& XMLCustomWriter::createElement($doc, 'file'); XMLCustomWriter::appendChild($root, $fileNode); $embedNode =& XMLCustomWriter::createChildWithText($doc, $fileNode, 'embed', base64_encode($articleFileManager->readFile($suppFile->getFileId()))); XMLCustomWriter::setAttribute($embedNode, 'filename', $suppFile->getOriginalFileName()); XMLCustomWriter::setAttribute($embedNode, 'encoding', 'base64'); XMLCustomWriter::setAttribute($embedNode, 'mime_type', $suppFile->getFileType()); return $root; }
/** * Create a new XML node. * @param $doc XMLNode|DOMImplementation * @param $nodePath string an XPath-like string that describes the * node to be created. * @param $value string the value to be added as a text node (if any) * @return XMLNode|DOMDocument */ function &_createNode($doc, $nodePath, $value = null) { // Separate the element name from the attributes. $elementPlusAttributes = explode('[', $nodePath); $element = $elementPlusAttributes[0]; assert(!empty($element)); // Create the element. $newNode =& XMLCustomWriter::createElement($doc, $element); // Check for configurable attributes in element value, remove them from value // and add them to regular attributes $attributeOffset = strpos($value, '[@'); if ($attributeOffset !== false) { // no configurable attributes if (count($elementPlusAttributes) < 2) { $elementPlusAttributes[] = ''; } if ($attributeOffset !== 0) { $elementPlusAttributes[1] = rtrim($elementPlusAttributes[1], ']') . ltrim(substr($value, $attributeOffset), '['); $value = substr($value, 0, $attributeOffset); } else { $elementPlusAttributes[1] = rtrim($elementPlusAttributes[1], ']') . ltrim(substr($value, $attributeOffset), '['); $value = ""; } } // Add attributes. if (count($elementPlusAttributes) == 2) { // Separate the attribute key/value pairs. $unparsedAttributes = explode('@', rtrim(ltrim($elementPlusAttributes[1], '@'), ']')); foreach ($unparsedAttributes as $unparsedAttribute) { // Split attribute expressions into key and value. list($attributeName, $attributeValue) = explode('=', rtrim($unparsedAttribute, ' ')); $attributeValue = trim($attributeValue, '"'); XMLCustomWriter::setAttribute($newNode, $attributeName, $attributeValue); } } // Insert a text node if we got a value for it. if (!is_null($value)) { $textNode =& XMLCustomWriter::createTextNode($doc, $value); XMLCustomWriter::appendChild($newNode, $textNode); } return $newNode; }
/** * Create METS:metsHdr for export */ function &createmetsHdr($doc) { $root =& XMLCustomWriter::createElement($doc, 'METS:metsHdr'); XMLCustomWriter::setAttribute($root, 'CREATEDATE', date('c')); XMLCustomWriter::setAttribute($root, 'LASTMODDATE', date('c')); $agentNode =& XMLCustomWriter::createElement($doc, 'METS:agent'); XMLCustomWriter::setAttribute($agentNode, 'ROLE', 'DISSEMINATOR'); XMLCustomWriter::setAttribute($agentNode, 'TYPE', 'ORGANIZATION'); $organization = Request::getUserVar('organization'); if ($organization == '') { $siteDao =& DAORegistry::getDAO('SiteDAO'); $site = $siteDao->getSite(); $organization = $site->getLocalizedTitle(); } XMLCustomWriter::createChildWithText($doc, $agentNode, 'METS:name', $organization, false); XMLCustomWriter::appendChild($root, $agentNode); $agentNode2 =& XMLCustomWriter::createElement($doc, 'METS:agent'); XMLCustomWriter::setAttribute($agentNode2, 'ROLE', 'CREATOR'); XMLCustomWriter::setAttribute($agentNode2, 'TYPE', 'OTHER'); XMLCustomWriter::createChildWithText($doc, $agentNode2, 'METS:name', MetsExportDom::getCreatorString(), false); XMLCustomWriter::appendChild($root, $agentNode2); return $root; }
/** * Generate publisher date - order matters * @param $doc XMLNode * @param $pubdate string * @return XMLNode */ function &_generatePublisherDateDom(&$doc, $pubdate) { $publicationDateNode =& XMLCustomWriter::createElement($doc, 'publication_date'); XMLCustomWriter::setAttribute($publicationDateNode, 'media_type', 'online'); $parsedPubdate = strtotime($pubdate); XMLCustomWriter::createChildWithText($doc, $publicationDateNode, 'year', date('Y', $parsedPubdate)); return $publicationDateNode; }
function exportIssues(&$journal, &$issues) { $this->import('MetsExportDom'); $doc =& XMLCustomWriter::createDocument('', null); $root =& XMLCustomWriter::createElement($doc, 'METS:mets'); XMLCustomWriter::setAttribute($root, 'xmlns:METS', 'http://www.loc.gov/METS/'); XMLCustomWriter::setAttribute($root, 'xmlns:xlink', 'http://www.w3.org/TR/xlink'); XMLCustomWriter::setAttribute($root, 'xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); XMLCustomWriter::setAttribute($root, 'PROFILE', 'Australian METS Profile 1.0'); XMLCustomWriter::setAttribute($root, 'TYPE', 'journal'); XMLCustomWriter::setAttribute($root, 'OBJID', 'J-' . $journal->getJournalId()); XMLCustomWriter::setAttribute($root, 'xsi:schemaLocation', 'http://www.loc.gov/METS/ http://www.loc.gov/mets/mets.xsd'); $HeaderNode =& MetsExportDom::createmetsHdr($doc); XMLCustomWriter::appendChild($root, $HeaderNode); MetsExportDom::generateJournalDmdSecDom($doc, $root, $journal); $fileSec =& XMLCustomWriter::createElement($doc, 'METS:fileSec'); $fileGrpOriginal =& XMLCustomWriter::createElement($doc, 'METS:fileGrp'); XMLCustomWriter::setAttribute($fileGrpOriginal, 'USE', 'original'); $fileGrpDerivative =& XMLCustomWriter::createElement($doc, 'METS:fileGrp'); XMLCustomWriter::setAttribute($fileGrpDerivative, 'USE', 'derivative'); foreach ($issues as $issue) { MetsExportDom::generateIssueDmdSecDom($doc, $root, $issue, $journal); MetsExportDom::generateIssueFileSecDom($doc, $fileGrpOriginal, $issue); MetsExportDom::generateIssueHtmlGalleyFileSecDom($doc, $fileGrpDerivative, $issue); } $amdSec =& MetsExportDom::createmetsamdSec($doc, $root, $journal); XMLCustomWriter::appendChild($root, $amdSec); XMLCustomWriter::appendChild($fileSec, $fileGrpOriginal); XMLCustomWriter::appendChild($fileSec, $fileGrpDerivative); XMLCustomWriter::appendChild($root, $fileSec); MetsExportDom::generateStructMap($doc, $root, $journal, $issues); XMLCustomWriter::appendChild($doc, $root); header("Content-Type: application/xml"); header("Cache-Control: private"); header("Content-Disposition: attachment; filename=\"" . $journal->getPath() . "-mets.xml\""); XMLCustomWriter::printXML($doc); return true; }
/** * Create a single subject element. * @param $subject string * @param $subjectScheme string * @return XMLNode|DOMImplementation */ function &_subjectElement($subject, $subjectScheme = null) { $subjectElement =& $this->createElementWithText('subject', $subject); if (!empty($subjectScheme)) { XMLCustomWriter::setAttribute($subjectElement, 'subjectScheme', $subjectScheme); } return $subjectElement; }
function exportSchedConfs(&$conference, &$schedConfIdArray) { $this->import('MetsExportDom'); $schedConfDAO =& DAORegistry::getDAO('SchedConfDAO'); $doc =& XMLCustomWriter::createDocument(); $root =& XMLCustomWriter::createElement($doc, 'METS:mets'); XMLCustomWriter::setAttribute($root, 'xmlns:METS', 'http://www.loc.gov/METS/'); XMLCustomWriter::setAttribute($root, 'xmlns:xlink', 'http://www.w3.org/TR/xlink'); XMLCustomWriter::setAttribute($root, 'xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); XMLCustomWriter::setAttribute($root, 'PROFILE', 'Australian METS Profile 1.0'); XMLCustomWriter::setAttribute($root, 'TYPE', 'conference'); XMLCustomWriter::setAttribute($root, 'OBJID', 'C-' . $conference->getId()); XMLCustomWriter::setAttribute($root, 'xsi:schemaLocation', 'http://www.loc.gov/METS/ http://www.loc.gov/mets/mets.xsd'); $headerNode =& MetsExportDom::createmetsHdr($doc); XMLCustomWriter::appendChild($root, $headerNode); MetsExportDom::generateConfDmdSecDom($doc, $root, $conference); $fileSec =& XMLCustomWriter::createElement($doc, 'METS:fileSec'); $fileGrp =& XMLCustomWriter::createElement($doc, 'METS:fileGrp'); XMLCustomWriter::setAttribute($fileGrp, 'USE', 'original'); $i = 0; while ($i < sizeof($schedConfIdArray)) { $schedConf =& $schedConfDAO->getSchedConf($schedConfIdArray[$i]); MetsExportDom::generateSchedConfDmdSecDom($doc, $root, $conference, $schedConf); MetsExportDom::generateSchedConfFileSecDom($doc, $fileGrp, $conference, $schedConf); $i++; } $amdSec =& MetsExportDom::createmetsamdSec($doc, $root, $conference); XMLCustomWriter::appendChild($root, $amdSec); XMLCustomWriter::appendChild($fileSec, $fileGrp); XMLCustomWriter::appendChild($root, $fileSec); MetsExportDom::generateConfstructMapWithSchedConfsIdArray($doc, $root, $conference, $schedConfIdArray); XMLCustomWriter::appendChild($doc, $root); header("Content-Type: application/xml"); header("Cache-Control: private"); header("Content-Disposition: attachment; filename=\"" . $conference->getPath() . "-mets.xml\""); XMLCustomWriter::printXML($doc); return true; }
/** * Add the metadata XML of a single article to an * XML article list. * * @param $articleDoc DOMDocument * @param $article PublishedArticle * @param $journal Journal * @param $markToDelete boolean If true the returned XML * will only contain a deletion marker. */ function _addArticleXml(&$articleDoc, &$article, &$journal, $markToDelete = false) { assert(is_a($article, 'Article')); // Get the root node of the list. assert(is_a($articleDoc, 'DOMDocument')); $articleList =& $articleDoc->documentElement; // Create a new article node. $articleNode =& XMLCustomWriter::createElement($articleDoc, 'article'); // Add ID information. XMLCustomWriter::setAttribute($articleNode, 'id', $article->getId()); XMLCustomWriter::setAttribute($articleNode, 'sectionId', $article->getSectionId()); XMLCustomWriter::setAttribute($articleNode, 'journalId', $article->getJournalId()); XMLCustomWriter::setAttribute($articleNode, 'instId', $this->_instId); // Set the load action. $loadAction = $markToDelete ? 'delete' : 'replace'; XMLCustomWriter::setAttribute($articleNode, 'loadAction', $loadAction); XMLCustomWriter::appendChild($articleList, $articleNode); // The XML for an article marked to be deleted contains no metadata. if ($markToDelete) { return; } assert(is_a($article, 'PublishedArticle')); // Add authors. $authors = $article->getAuthors(); if (!empty($authors)) { $authorList =& XMLCustomWriter::createElement($articleDoc, 'authorList'); foreach ($authors as $author) { /* @var $author Author */ XMLCustomWriter::createChildWithText($articleDoc, $authorList, 'author', $author->getFullName(true)); } XMLCustomWriter::appendChild($articleNode, $authorList); } // We need the request to retrieve locales and build URLs. $request = PKPApplication::getRequest(); // Get all supported locales. $site = $request->getSite(); $supportedLocales = $site->getSupportedLocales() + array_keys($journal->getSupportedLocaleNames()); assert(!empty($supportedLocales)); // Add titles. $titleList =& XMLCustomWriter::createElement($articleDoc, 'titleList'); // Titles are used for sorting, we therefore need // them in all supported locales. assert(!empty($supportedLocales)); foreach ($supportedLocales as $locale) { $localizedTitle = $article->getLocalizedTitle($locale); if (!is_null($localizedTitle)) { // Add the localized title. $titleNode =& XMLCustomWriter::createChildWithText($articleDoc, $titleList, 'title', $localizedTitle); XMLCustomWriter::setAttribute($titleNode, 'locale', $locale); // If the title does not exist in the given locale // then use the localized title for sorting only. $title = $article->getTitle($locale); $sortOnly = empty($title) ? 'true' : 'false'; XMLCustomWriter::setAttribute($titleNode, 'sortOnly', $sortOnly); } } XMLCustomWriter::appendChild($articleNode, $titleList); // Add abstracts. $abstracts = $article->getAbstract(null); // return all locales if (!empty($abstracts)) { $abstractList =& XMLCustomWriter::createElement($articleDoc, 'abstractList'); foreach ($abstracts as $locale => $abstract) { $abstractNode =& XMLCustomWriter::createChildWithText($articleDoc, $abstractList, 'abstract', $abstract); XMLCustomWriter::setAttribute($abstractNode, 'locale', $locale); } XMLCustomWriter::appendChild($articleNode, $abstractList); } // Add discipline. $disciplines = $article->getDiscipline(null); // return all locales if (!empty($disciplines)) { $disciplineList =& XMLCustomWriter::createElement($articleDoc, 'disciplineList'); foreach ($disciplines as $locale => $discipline) { $disciplineNode =& XMLCustomWriter::createChildWithText($articleDoc, $disciplineList, 'discipline', $discipline); XMLCustomWriter::setAttribute($disciplineNode, 'locale', $locale); } XMLCustomWriter::appendChild($articleNode, $disciplineList); } // Add subjects and subject classes. $subjectClasses = $article->getSubjectClass(null); $subjects = $article->getSubject(null); if (!empty($subjectClasses) || !empty($subjects)) { $subjectList =& XMLCustomWriter::createElement($articleDoc, 'subjectList'); if (!is_array($subjectClasses)) { $subjectClasses = array(); } if (!is_array($subjects)) { $subjects = array(); } $locales = array_unique(array_merge(array_keys($subjectClasses), array_keys($subjects))); foreach ($locales as $locale) { $subject = ''; if (isset($subjectClasses[$locale])) { $subject .= $subjectClasses[$locale]; } if (isset($subjects[$locale])) { if (!empty($subject)) { $subject .= ' '; } $subject .= $subjects[$locale]; } $subjectNode =& XMLCustomWriter::createChildWithText($articleDoc, $subjectList, 'subject', $subject); XMLCustomWriter::setAttribute($subjectNode, 'locale', $locale); } XMLCustomWriter::appendChild($articleNode, $subjectList); } // Add type. $types = $article->getType(null); // return all locales if (!empty($types)) { $typeList =& XMLCustomWriter::createElement($articleDoc, 'typeList'); foreach ($types as $locale => $type) { $typeNode =& XMLCustomWriter::createChildWithText($articleDoc, $typeList, 'type', $type); XMLCustomWriter::setAttribute($typeNode, 'locale', $locale); } XMLCustomWriter::appendChild($articleNode, $typeList); } // Add coverage. $coverageGeo = $article->getCoverageGeo(null); $coverageChron = $article->getCoverageChron(null); $coverageSample = $article->getCoverageSample(null); if (!empty($coverageGeo) || !empty($coverageChron) || !empty($coverageSample)) { $coverageList =& XMLCustomWriter::createElement($articleDoc, 'coverageList'); if (!is_array($coverageGeo)) { $coverageGeo = array(); } if (!is_array($coverageChron)) { $coverageChron = array(); } if (!is_array($coverageSample)) { $coverageSample = array(); } $locales = array_unique(array_merge(array_keys($coverageGeo), array_keys($coverageChron), array_keys($coverageSample))); foreach ($locales as $locale) { $coverage = ''; if (isset($coverageGeo[$locale])) { $coverage .= $coverageGeo[$locale]; } if (isset($coverageChron[$locale])) { if (!empty($coverage)) { $coverage .= '; '; } $coverage .= $coverageChron[$locale]; } if (isset($coverageSample[$locale])) { if (!empty($coverage)) { $coverage .= '; '; } $coverage .= $coverageSample[$locale]; } $coverageNode =& XMLCustomWriter::createChildWithText($articleDoc, $coverageList, 'coverage', $coverage); XMLCustomWriter::setAttribute($coverageNode, 'locale', $locale); } XMLCustomWriter::appendChild($articleNode, $coverageList); } // Add journal titles. $journalTitleList =& XMLCustomWriter::createElement($articleDoc, 'journalTitleList'); // Journal titles are used for sorting, we therefore need // them in all supported locales. foreach ($supportedLocales as $locale) { $localizedTitle = $journal->getName($locale); $sortOnly = false; if (is_null($localizedTitle)) { // If the title does not exist in the given locale // then use the localized title for sorting only. $journalTitle = $journal->getLocalizedName(); $sortOnly = true; } else { $journalTitle = $localizedTitle; } $journalTitleNode =& XMLCustomWriter::createChildWithText($articleDoc, $journalTitleList, 'journalTitle', $journalTitle); XMLCustomWriter::setAttribute($journalTitleNode, 'locale', $locale); $sortOnly = $sortOnly ? 'true' : 'false'; XMLCustomWriter::setAttribute($journalTitleNode, 'sortOnly', $sortOnly); } XMLCustomWriter::appendChild($articleNode, $journalTitleList); // Add publication dates. $publicationDate = $article->getDatePublished(); if (!empty($publicationDate)) { // Transform and store article publication date. $publicationDate = $this->_convertDate($publicationDate); $dateNode =& XMLCustomWriter::createChildWithText($articleDoc, $articleNode, 'publicationDate', $publicationDate); } $issueId = $article->getIssueId(); if (is_numeric($issueId)) { $issueDao = DAORegistry::getDAO('IssueDAO'); /* @var $issueDao IssueDAO */ $issue = $issueDao->getById($issueId); if (is_a($issue, 'Issue')) { $issuePublicationDate = $issue->getDatePublished(); if (!empty($issuePublicationDate)) { // Transform and store issue publication date. $issuePublicationDate = $this->_convertDate($issuePublicationDate); $dateNode =& XMLCustomWriter::createChildWithText($articleDoc, $articleNode, 'issuePublicationDate', $issuePublicationDate); } } } // We need the router to build file URLs. $router = $request->getRouter(); /* @var $router PageRouter */ // Add galley files $articleGalleyDao = DAORegistry::getDAO('ArticleGalleyDAO'); $galleys = $articleGalleyDao->getBySubmissionId($article->getId()); $galleyList = null; while ($galley = $galleys->next()) { /* @var $galley ArticleGalley */ $locale = $galley->getLocale(); $galleyUrl = $router->url($request, $journal->getPath(), 'article', 'download', array(intval($article->getId()), intval($galley->getId()))); if (!empty($locale) && !empty($galleyUrl)) { if (is_null($galleyList)) { $galleyList =& XMLCustomWriter::createElement($articleDoc, 'galleyList'); } $galleyNode =& XMLCustomWriter::createElement($articleDoc, 'galley'); XMLCustomWriter::setAttribute($galleyNode, 'locale', $locale); XMLCustomWriter::setAttribute($galleyNode, 'fileName', $galleyUrl); XMLCustomWriter::appendChild($galleyList, $galleyNode); } } // Wrap the galley XML as CDATA. if (!is_null($galleyList)) { if (is_callable(array($articleDoc, 'saveXml'))) { $galleyXml = $articleDoc->saveXml($galleyList); } else { $galleyXml = $galleyList->toXml(); } $galleyOuterNode =& XMLCustomWriter::createElement($articleDoc, 'galley-xml'); if (is_callable(array($articleDoc, 'createCDATASection'))) { $cdataNode = $articleDoc->createCDATASection($galleyXml); } else { $cdataNode = new XMLNode(); $cdataNode->setValue('<![CDATA[' . $galleyXml . ']]>'); } XMLCustomWriter::appendChild($galleyOuterNode, $cdataNode); XMLCustomWriter::appendChild($articleNode, $galleyOuterNode); } }
/** * Create a new XML node. * @param $doc XMLNode|DOMImplementation * @param $nodePath string an XPath-like string that describes the * node to be created. * @param $value string the value to be added as a text node (if any) * @return XMLNode|DOMDocument */ function &_createNode($doc, $nodePath, $value = null) { // Separate the element name from the attributes. $elementPlusAttributes = explode('[', $nodePath); $element = $elementPlusAttributes[0]; assert(!empty($element)); // Create the element. $newNode =& XMLCustomWriter::createElement($doc, $element); // Add attributes. if (count($elementPlusAttributes) == 2) { // Separate the attribute key/value pairs. $unparsedAttributes = explode('@', rtrim(ltrim($elementPlusAttributes[1], '@'), ']')); foreach ($unparsedAttributes as $unparsedAttribute) { // Split attribute expressions into key and value. list($attributeName, $attributeValue) = explode('=', rtrim($unparsedAttribute, ' ')); $attributeValue = trim($attributeValue, '"'); XMLCustomWriter::setAttribute($newNode, $attributeName, $attributeValue); } } // Insert a text node if we got a value for it. if (!is_null($value)) { $textNode =& XMLCustomWriter::createTextNode($doc, $value); XMLCustomWriter::appendChild($newNode, $textNode); } return $newNode; }
/** * Export the selected email templates as XML * @param $args array * @@param $request PKPRequest */ function exportEmails($args, $request) { $this->validate(); import('lib.pkp.classes.xml.XMLCustomWriter'); $selectedEmailKeys = (array) $request->getUserVar('tplId'); if (empty($selectedEmailKeys)) { $request->redirect(null, null, 'emails'); } $journal = Request::getJournal(); $doc = XMLCustomWriter::createDocument(); $emailTexts = XMLCustomWriter::createElement($doc, 'email_texts'); $emailTexts->setAttribute('locale', AppLocale::getLocale()); $emailTexts->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); $emailTemplateDao = DAORegistry::getDAO('EmailTemplateDAO'); $emailTemplates = $emailTemplateDao->getEmailTemplates(AppLocale::getLocale(), $journal->getId()); foreach ($emailTemplates as $emailTemplate) { $emailKey = $emailTemplate->getData('emailKey'); if (!in_array($emailKey, $selectedEmailKeys)) { continue; } $subject = $emailTemplate->getData('subject'); $body = $emailTemplate->getData('body'); $emailTextNode = XMLCustomWriter::createElement($doc, 'email_text'); XMLCustomWriter::setAttribute($emailTextNode, 'key', $emailKey); //append subject node $subjectNode = XMLCustomWriter::createChildWithText($doc, $emailTextNode, 'subject', $subject, false); XMLCustomWriter::appendChild($emailTextNode, $subjectNode); //append body node $bodyNode = XMLCustomWriter::createChildWithText($doc, $emailTextNode, 'body', $body, false); XMLCustomWriter::appendChild($emailTextNode, $bodyNode); //append email_text node XMLCustomWriter::appendChild($emailTexts, $emailTextNode); } XMLCustomWriter::appendChild($doc, $emailTexts); header("Content-Type: application/xml"); header("Cache-Control: private"); header("Content-Disposition: attachment; filename=\"email-templates-" . date('Y-m-d-H-i-s') . ".xml\""); XMLCustomWriter::printXML($doc); }