Open Journal Systems  3.3.0
DOAJJsonFilter.inc.php
1 <?php
2 
16 import('lib.pkp.plugins.importexport.native.filter.NativeImportExportFilter');
17 
18 
24  function __construct($filterGroup) {
25  $this->setDisplayName('DOAJ JSON export');
26  parent::__construct($filterGroup);
27  }
28 
29  //
30  // Implement template methods from PersistableFilter
31  //
35  function getClassName() {
36  return 'plugins.importexport.doaj.filter.DOAJJsonFilter';
37  }
38 
39  //
40  // Implement template methods from Filter
41  //
47  function &process(&$pubObject) {
48  $deployment = $this->getDeployment();
49  $context = $deployment->getContext();
50  $plugin = $deployment->getPlugin();
51  $cache = $plugin->getCache();
52 
53  // Create the JSON string Article JSON example bibJson https://github.com/DOAJ/harvester/blob/9b59fddf2d01f7c918429d33b63ca0f1a6d3d0d0/service/tests/fixtures/article.py
54 
55  $publication = $pubObject->getCurrentPublication();
56  $issueId = $publication->getData('issueId');
57  if ($cache->isCached('issues', $issueId)) {
58  $issue = $cache->get('issues', $issueId);
59  } else {
60  $issueDao = DAORegistry::getDAO('IssueDAO'); /* @var $issueDao IssueDAO */
61  $issue = $issueDao->getById($issueId, $context->getId());
62  if ($issue) $cache->add($issue, null);
63  }
64 
65  $article = array();
66  $article['bibjson']['journal'] = array();
67  // Publisher name (i.e. institution name)
68  $publisher = $context->getData('publisherInstitution');
69  if (!empty($publisher)) $article['bibjson']['journal']['publisher'] = $publisher;
70  // To-Do: license ???
71  // Journal's title (M)
72  $journalTitle = $context->getName($context->getPrimaryLocale());
73  $article['bibjson']['journal']['title'] = $journalTitle;
74  // Identification Numbers
75  $issns = array();
76  $pissn = $context->getData('printIssn');
77  if (!empty($pissn)) $issns[] = $pissn;
78  $eissn = $context->getData('onlineIssn');
79  if (!empty($eissn)) $issns[] = $eissn;
80  if (!empty($issns)) $article['bibjson']['journal']['issns'] = $issns;
81  // Volume, Number
82  $volume = $issue->getVolume();
83  if (!empty($volume)) $article['bibjson']['journal']['volume'] = $volume;
84  $issueNumber = $issue->getNumber();
85  if (!empty($issueNumber)) $article['bibjson']['journal']['number'] = $issueNumber;
86 
87  // Article title
88  $article['bibjson']['title'] = $pubObject->getTitle($pubObject->getLocale());
89  // Identifiers
90  $article['bibjson']['identifier'] = array();
91  // DOI
92  $doi = $pubObject->getStoredPubId('doi');
93  if (!empty($doi)) $article['bibjson']['identifier'][] = array('type' => 'doi', 'id' => $doi);
94  // Print and online ISSN
95  if (!empty($pissn)) $article['bibjson']['identifier'][] = array('type' => 'pissn', 'id' => $pissn);
96  if (!empty($eissn)) $article['bibjson']['identifier'][] = array('type' => 'eissn', 'id' => $eissn);
97  // Year and month from article's publication date
98  $publicationDate = $this->formatDate($issue->getDatePublished());
99  if ($pubObject->getDatePublished()) {
100  $publicationDate = $this->formatDate($pubObject->getDatePublished());
101  }
102  $yearMonth = explode('-', $publicationDate);
103  $article['bibjson']['year'] = $yearMonth[0];
104  $article['bibjson']['month'] = $yearMonth[1];
110  $startPage = $pubObject->getStartingPage();
111  $endPage = $pubObject->getEndingPage();
112  if (isset($startPage) && $startPage !== "") {
113  $article['bibjson']['start_page'] = $startPage;
114  $article['bibjson']['end_page'] = $endPage;
115  }
116  // FullText URL
117  $request = Application::get()->getRequest();
118  $article['bibjson']['link'] = array();
119  $article['bibjson']['link'][] = array(
120  'url' => $request->url($context->getPath(), 'article', 'view', $pubObject->getId()),
121  'type' => 'fulltext',
122  'content_type' => 'html'
123  );
124  // Authors: name and affiliation
125  $article['bibjson']['author'] = array();
126  $articleAuthors = $pubObject->getAuthors();
127  foreach ($articleAuthors as $articleAuthor) {
128  $author = array('name' => $articleAuthor->getFullName(false));
129  $affiliation = $articleAuthor->getAffiliation($pubObject->getLocale());
130  if (!empty($affiliation)) $author['affiliation'] = $affiliation;
131  $article['bibjson']['author'][] = $author;
132  }
133  // Abstract
134  $abstract = $pubObject->getAbstract($pubObject->getLocale());
135  if (!empty($abstract)) $article['bibjson']['abstract'] = PKPString::html2text($abstract);
136  // Keywords
137  $dao = DAORegistry::getDAO('SubmissionKeywordDAO');
138  $keywords = $dao->getKeywords($publication->getId(), array($pubObject->getLocale()));
139  $allowedNoOfKeywords = array_slice($keywords[$pubObject->getLocale()]??[], 0, 6);
140  if (!empty($keywords[$pubObject->getLocale()])) $article['bibjson']['keywords'] = $allowedNoOfKeywords;
141 
142  /* not needed here:
143  // Language
144  $language = AppLocale::get3LetterIsoFromLocale($pubObject->getLocale());
145  // publisherRecordId
146  $publisherRecordId = $pubObject->getId();
147  // documentType
148  $type = $pubObject->getType($pubObject->getLocale());
149  */
150 
151  $json = json_encode($article);
152  return $json;
153  }
154 
160  function formatDate($date) {
161  if ($date == '') return null;
162  return date('Y-F', strtotime($date));
163  }
164 
165 }
166 
167 
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
DOAJJsonFilter\formatDate
formatDate($date)
Definition: DOAJJsonFilter.inc.php:160
DOAJJsonFilter\getClassName
getClassName()
Definition: DOAJJsonFilter.inc.php:35
NativeImportExportFilter\getDeployment
getDeployment()
Definition: NativeImportExportFilter.inc.php:49
NativeImportExportFilter
Base class that converts between Native XML documents and DataObjects.
Definition: NativeImportExportFilter.inc.php:18
DOAJJsonFilter\process
& process(&$pubObject)
Definition: DOAJJsonFilter.inc.php:47
PKPString\html2text
static html2text($html)
Definition: PKPString.inc.php:395
DOAJJsonFilter\__construct
__construct($filterGroup)
Definition: DOAJJsonFilter.inc.php:24
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
Filter\setDisplayName
setDisplayName($displayName)
Definition: Filter.inc.php:140
DOAJJsonFilter
Class that converts an Article to a DOAJ JSON string.
Definition: DOAJJsonFilter.inc.php:19