00001 <?php
00002
00015
00016
00017
00018 import('xml.XMLCustomWriter');
00019
00020 class EruditExportDom {
00021 function &generateArticleDom(&$doc, &$journal, &$issue, &$article, &$galley) {
00022 $unavailableString = Locale::translate('plugins.importexport.erudit.unavailable');
00023
00024 $root = &XMLCustomWriter::createElement($doc, 'article');
00025 XMLCustomWriter::setAttribute($root, 'idprop', $journal->getJournalId() . '-' . $issue->getIssueId() . '-' . $article->getArticleId() . '-' . $galley->getGalleyId(), false);
00026 XMLCustomWriter::setAttribute($root, 'arttype', 'article');
00027
00028 $lang = $article->getLanguage();
00029 XMLCustomWriter::setAttribute($root, 'lang', isset($lang)?$lang:'en');
00030 XMLCustomWriter::setAttribute($root, 'processing', 'cart');
00031
00032
00033
00034 $adminNode = &XMLCustomWriter::createElement($doc, 'admin');
00035 XMLCustomWriter::appendChild($root, $adminNode);
00036
00037
00038
00039 $articleInfoNode = &XMLCustomWriter::createElement($doc, 'articleinfo');
00040 XMLCustomWriter::appendChild($adminNode, $articleInfoNode);
00041
00042
00043 $urlIdNode = &XMLCustomWriter::createChildWithText($doc, $articleInfoNode, 'idpublic', Request::url($journal->getPath(), 'article', 'view', array($article->getArticleId(), $galley->getGalleyId())));
00044 XMLCustomWriter::setAttribute($urlIdNode, 'scheme', 'sici');
00045
00046
00047
00048 $journalNode = &XMLCustomWriter::createElement($doc, 'journal');
00049 XMLCustomWriter::appendChild($adminNode, $journalNode);
00050 XMLCustomWriter::setAttribute($journalNode, 'id', 'ojs-' . $journal->getPath());
00051 XMLCustomWriter::createChildWithText($doc, $journalNode, 'jtitle', $journal->getJournalTitle());
00052 XMLCustomWriter::createChildWithText($doc, $journalNode, 'jshorttitle', $journal->getLocalizedSetting('initials'), false);
00053
00054 if (!($printIssn = $journal->getSetting('printIssn'))) {
00055 $printIssn = $unavailableString;
00056 }
00057 XMLCustomWriter::createChildWithText($doc, $journalNode, 'idissn', $printIssn);
00058 if (!($onlineIssn = $journal->getSetting('onlineIssn'))) {
00059 $onlineIssn = $unavailableString;
00060 }
00061 XMLCustomWriter::createChildWithText($doc, $journalNode, 'iddigissn', $onlineIssn);
00062
00063
00064
00065 $issueNode = &XMLCustomWriter::createElement($doc, 'issue');
00066 XMLCustomWriter::appendChild($adminNode, $issueNode);
00067 XMLCustomWriter::setAttribute($issueNode, 'id', 'ojs-' . $issue->getBestIssueId());
00068 XMLCustomWriter::createChildWithText($doc, $issueNode, 'volume', $issue->getVolume(), false);
00069 XMLCustomWriter::createChildWithText($doc, $issueNode, 'issueno', $issue->getNumber(), false);
00070
00071 $pubNode = &XMLCustomWriter::createElement($doc, 'pub');
00072 XMLCustomWriter::appendChild($issueNode, $pubNode);
00073 XMLCustomWriter::createChildWithText($doc, $pubNode, 'year', $issue->getYear());
00074
00075 $digPubNode = &XMLCustomWriter::createElement($doc, 'digpub');
00076 XMLCustomWriter::appendChild($issueNode, $digPubNode);
00077 XMLCustomWriter::createChildWithText($doc, $digPubNode, 'date', EruditExportDom::formatDate($issue->getDatePublished()));
00078
00079
00080
00081 $publisherInstitution = &$journal->getSetting('publisherInstitution');
00082 $publisherNode = &XMLCustomWriter::createElement($doc, 'publisher');
00083 XMLCustomWriter::setAttribute($publisherNode, 'id', 'ojs-' . $journal->getJournalId() . '-' . $issue->getIssueId() . '-' . $article->getArticleId());
00084 XMLCustomWriter::appendChild($adminNode, $publisherNode);
00085 $publisherInstitution = $unavailableString;
00086 if (empty($publisherInstitution)) $publisherInstitution = $unavailableString;
00087 XMLCustomWriter::createChildWithText($doc, $publisherNode, 'orgname', $publisherInstitution);
00088
00089 $digprodNode = &XMLCustomWriter::createElement($doc, 'digprod');
00090 XMLCustomWriter::createChildWithText($doc, $digprodNode, 'orgname', $publisherInstitution);
00091 XMLCustomWriter::setAttribute($digprodNode, 'id', 'ojs-prod-' . $journal->getJournalId() . '-' . $issue->getIssueId() . '-' . $article->getArticleId());
00092 XMLCustomWriter::appendChild($adminNode, $digprodNode);
00093
00094 $digdistNode = &XMLCustomWriter::createElement($doc, 'digdist');
00095 XMLCustomWriter::createChildWithText($doc, $digdistNode, 'orgname', $publisherInstitution);
00096 XMLCustomWriter::setAttribute($digdistNode, 'id', 'ojs-dist-' . $journal->getJournalId() . '-' . $issue->getIssueId() . '-' . $article->getArticleId());
00097 XMLCustomWriter::appendChild($adminNode, $digdistNode);
00098
00099
00100 $dtdNode = &XMLCustomWriter::createElement($doc, 'dtd');
00101 XMLCustomWriter::appendChild($adminNode, $dtdNode);
00102 XMLCustomWriter::setAttribute($dtdNode, 'name', 'Erudit Article');
00103 XMLCustomWriter::setAttribute($dtdNode, 'version', '3.0.0');
00104
00105
00106 $copyright = $journal->getLocalizedSetting('copyrightNotice');
00107 XMLCustomWriter::createChildWithText($doc, $adminNode, 'copyright', empty($copyright)?$unavailableString:$copyright);
00108
00109
00110
00111 $frontMatterNode = &XMLCustomWriter::createElement($doc, 'frontmatter');
00112 XMLCustomWriter::appendChild($root, $frontMatterNode);
00113
00114 $titleGroupNode = &XMLCustomWriter::createElement($doc, 'titlegr');
00115 XMLCustomWriter::appendChild($frontMatterNode, $titleGroupNode);
00116
00117 XMLCustomWriter::createChildWithText($doc, $titleGroupNode, 'title', strip_tags($article->getArticleTitle()));
00118
00119
00120
00121
00122 $authorGroupNode = &XMLCustomWriter::createElement($doc, 'authorgr');
00123 XMLCustomWriter::appendChild($frontMatterNode, $authorGroupNode);
00124 $authorNum = 1;
00125 foreach ($article->getAuthors() as $author) {
00126 $authorNode = &XMLCustomWriter::createElement($doc, 'author');
00127 XMLCustomWriter::appendChild($authorGroupNode, $authorNode);
00128 XMLCustomWriter::setAttribute($authorNode, 'id', 'ojs-' . $journal->getJournalId() . '-' . $issue->getIssueId() . '-' . $article->getArticleId() . '-' . $galley->getGalleyId() . '-' . $authorNum);
00129
00130 $persNameNode = &XMLCustomWriter::createElement($doc, 'persname');
00131 XMLCustomWriter::appendChild($authorNode, $persNameNode);
00132
00133 XMLCustomWriter::createChildWithText($doc, $persNameNode, 'firstname', $author->getFirstName());
00134 XMLCustomWriter::createChildWithText($doc, $persNameNode, 'middlename', $author->getMiddleName(), false);
00135 XMLCustomWriter::createChildWithText($doc, $persNameNode, 'familyname', $author->getLastName());
00136
00137 if ($author->getAffiliation() != '') {
00138 $affiliationNode = &XMLCustomWriter::createElement($doc, 'affiliation');
00139 XMLCustomWriter::appendChild($authorNode, $affiliationNode);
00140 XMLCustomWriter::createChildWithText($doc, $affiliationNode, 'blocktext', $author->getAffiliation(), false);
00141 }
00142
00143 $authorNum++;
00144 }
00145
00146
00147
00148 foreach((array) $article->getAbstract(null) as $locale => $abstract) {
00149 $abstract = strip_tags($abstract);
00150 $abstractNode = &XMLCustomWriter::createElement($doc, 'abstract');
00151 XMLCustomWriter::setAttribute ($abstractNode, 'lang', $locale);
00152 XMLCustomWriter::appendChild($frontMatterNode, $abstractNode);
00153 XMLCustomWriter::createChildWithText($doc, $abstractNode, 'blocktext', $abstract);
00154 unset($abstractNode);
00155 }
00156
00157 if ($keywords = $article->getArticleSubject()) {
00158 $keywordGroupNode = &XMLCustomWriter::createElement($doc, 'keywordgr');
00159 XMLCustomWriter::setAttribute ($keywordGroupNode, 'lang', ($language = $article->getLanguage())?$language:'en');
00160 foreach (explode(';', $keywords) as $keyword) {
00161 XMLCustomWriter::createChildWithText($doc, $keywordGroupNode, 'keyword', trim($keyword), false);
00162 }
00163 XMLCustomWriter::appendChild($frontMatterNode, $keywordGroupNode);
00164 }
00165
00166
00167
00168 $bodyNode = &XMLCustomWriter::createElement($doc, 'body');
00169 XMLCustomWriter::appendChild($root, $bodyNode);
00170
00171 import('file.ArticleFileManager');
00172 $articleFileManager = &new ArticleFileManager($article->getArticleId());
00173 $file = &$articleFileManager->getFile($galley->getFileId());
00174
00175 $parser = &SearchFileParser::fromFile($file);
00176 if (isset($parser)) {
00177 if ($parser->open()) {
00178
00179 $textNode = &XMLCustomWriter::createElement($doc, 'text');
00180 XMLCustomWriter::appendChild($bodyNode, $textNode);
00181
00182 while(($line = $parser->read()) !== false) {
00183 $line = trim($line);
00184 if ($line != '') XMLCustomWriter::createChildWithText($doc, $textNode, 'blocktext', $line, false);
00185 }
00186 $parser->close();
00187 }
00188 }
00189
00190 return $root;
00191 }
00192
00193 function formatDate($date) {
00194 if ($date == '') return null;
00195 return date('Y-m-d', strtotime($date));
00196 }
00197 }
00198
00199 ?>