00001 <?php
00002
00015
00016
00017
00018 import('xml.XMLCustomWriter');
00019
00020 import('classes.plugins.ImportExportPlugin');
00021
00022 define('DOAJ_XSD_URL', 'http://www.doaj.org/schemas/doajArticles.xsd');
00023
00024 class DOAJPlugin extends ImportExportPlugin {
00031 function register($category, $path) {
00032 $success = parent::register($category, $path);
00033 $this->addLocaleData();
00034 return $success;
00035 }
00036
00042 function getName() {
00043 return 'DOAJPlugin';
00044 }
00045
00050 function getDisplayName() {
00051 return Locale::translate('plugins.importexport.doaj.displayName');
00052 }
00053
00058 function getDescription() {
00059 return Locale::translate('plugins.importexport.doaj.description');
00060 }
00061
00066 function getInstallDataFile() {
00067 return $this->getPluginPath() . '/' . 'data.xml';
00068 }
00069
00074 function display(&$args) {
00075 $templateMgr =& TemplateManager::getManager();
00076 parent::display($args);
00077 $journal =& Request::getJournal();
00078
00079 switch (array_shift($args)) {
00080 case 'export':
00081
00082 $this->exportJournal($journal);
00083 break;
00084 case 'email':
00085
00086 $this->emailRep($journal, Request::getUserVar('send'));
00087 break;
00088 default:
00089 $this->setBreadcrumbs();
00090 $templateMgr->display($this->getTemplatePath() . 'index.tpl');
00091 }
00092 }
00093
00099 function exportJournal(&$journal, $outputFile = null) {
00100 $this->import('DOAJExportDom');
00101 $doc =& XMLCustomWriter::createDocument('journal', DOAJ_XSD_URL);
00102
00103 $journalNode =& DOAJExportDom::generateJournalDom($doc, $journal);
00104 XMLCustomWriter::appendChild($doc, $journalNode);
00105
00106 if (!empty($outputFile)) {
00107 if (($h = fopen($outputFile, 'wb'))===false) return false;
00108 fwrite($h, XMLCustomWriter::getXML($doc));
00109 fclose($h);
00110 } else {
00111 header("Content-Type: application/xml");
00112 header("Cache-Control: private");
00113 header("Content-Disposition: attachment; filename=\"journal-" . $journal->getJournalId() . ".xml\"");
00114 XMLCustomWriter::printXML($doc);
00115 }
00116 return true;
00117 }
00118
00123 function emailRep(&$journal, $send = false) {
00124 $user =& Request::getUser();
00125
00126 $issn = $journal->getSetting('printIssn');
00127
00128 import('mail.MailTemplate');
00129 $mail =& new MailTemplate('DOAJ_EMAIL_REP');
00130
00131 if ($send && !$mail->hasErrors()) {
00132 $mail->send();
00133 Request::redirect(null, 'manager', 'importexport');
00134 } else {
00135 $paramArray = array(
00136 'username' => $user->getFirstName() . ' ' . $user->getLastName(),
00137 'journalName' => $journal->getJournalTitle(),
00138 'isOpenAccess' => $journal->getSetting('enableSubscriptions') ? 'No' : 'Yes',
00139 'altTitle' => $journal->getLocalizedSetting('abbreviation'),
00140 'journalURL' => $journal->getUrl(),
00141 'hasAuthorFee' => $journal->getSetting('submissionFee') > 0 ? 'Yes' : 'No',
00142 'infoURL' => $journal->getUrl(),
00143 'isPeerReviewed' => 'Yes',
00144 'isOriginalResearch' => '',
00145 'isAcademic' => '',
00146 'isActive' => $this->compareToCurDate($journal->getJournalId()) ? 'Yes' : 'No',
00147 'hasPrintedForm' => $issn != '' ? 'Yes' : 'No',
00148 'hasEmbargo' => '',
00149 'accessFrom' => $journal->getSetting('initialYear'),
00150 'firstVolume' => $journal->getSetting('initialVolume'),
00151 'firstIssue' => $journal->getSetting('initialNumber'),
00152 'issn' => $issn,
00153 'eissn' => $journal->getSetting('onlineIssn'),
00154 'publisherName' => $journal->getSetting('publisherInstitution'),
00155 'country' => $user->getCountry(),
00156 'languages' => Locale::getLocale(),
00157 'keywords' => $journal->getLocalizedSetting('searchKeywords'),
00158 'contactName' => $journal->getSetting('contactName'),
00159 'contactEmail' => $journal->getSetting('contactEmail'),
00160 'frequency' => ($journal->getSetting('volumePerYear'))*($journal->getSetting('issuePerVolume')),
00161 'articlesPerIssue' => $this->getArticlesPerIssue($journal->getJournalId())
00162 );
00163 $mail->assignParams($paramArray);
00164 $mail->addRecipient('Sonja.Brage@lub.lu.se', 'Sonja Brage');
00165 $mail->displayEditForm(Request::url(null, 'manager', 'importexport', array('plugin', $this->getName(), 'email')));
00166 }
00167 }
00168
00174 function getArticlesPerIssue ($journalId) {
00175 $publishedArticleDao =& DAORegistry::getDAO('PublishedArticleDAO');
00176 $journalStatsDao =& DAORegistry::getDAO('JournalStatisticsDAO');
00177
00178 $articleCount = $publishedArticleDao->getPublishedArticleCountByJournalId($journalId);
00179 $numIssues = $journalStatsDao->getIssueStatistics($journalId);
00180
00181 if ($numIssues['numPublishedIssues'] > 0)
00182 return round($articleCount / $numIssues['numPublishedIssues'], 2);
00183 else return 0;
00184 }
00185
00192 function compareToCurDate ($journalId) {
00193
00194 $issueDao =& DAORegistry::getDAO('IssueDAO');
00195 $lastIssue = $issueDao->getLastCreatedIssue($journalId);
00196
00197 if (!$lastIssue) return false;
00198
00199 $issueDate = strtotime($lastIssue->getDatePublished());
00200
00201 return ($issueDate > time() - (60 * 60 * 24 * 365));
00202 }
00203 }
00204
00205 ?>