Open Journal Systems  3.3.0
JournalOAI.inc.php
1 <?php
2 
19 import('lib.pkp.classes.oai.OAI');
20 import('classes.oai.ojs.OAIDAO');
21 
22 class JournalOAI extends OAI {
24  var $site;
25 
27  var $journal;
28 
30  var $journalId;
31 
33  var $dao;
34 
35 
39  function __construct($config) {
40  parent::__construct($config);
41 
42  $request = Application::get()->getRequest();
43  $this->site = $request->getSite();
44  $this->journal = $request->getJournal();
45  $this->journalId = isset($this->journal) ? $this->journal->getId() : null;
46  $this->dao = DAORegistry::getDAO('OAIDAO');
47  $this->dao->setOAI($this);
48  }
49 
54  function getNonPathInfoParams() {
55  return array('journal', 'page');
56  }
57 
63  function articleIdToIdentifier($articleId) {
64  return 'oai:' . $this->config->repositoryId . ':' . 'article/' . $articleId;
65  }
66 
72  function identifierToArticleId($identifier) {
73  $prefix = 'oai:' . $this->config->repositoryId . ':' . 'article/';
74  if (strstr($identifier, $prefix)) {
75  return (int) str_replace($prefix, '', $identifier);
76  } else {
77  return false;
78  }
79  }
80 
85  function setSpecToSectionId($setSpec, $journalId = null) {
86  $tmpArray = preg_split('/:/', $setSpec);
87  if (count($tmpArray) == 1) {
88  list($journalSpec) = $tmpArray;
89  $journalSpec = urldecode($journalSpec);
90  $sectionSpec = null;
91  } else if (count($tmpArray) == 2) {
92  list($journalSpec, $sectionSpec) = $tmpArray;
93  $journalSpec = urldecode($journalSpec);
94  $sectionSpec = urldecode($sectionSpec);
95  } else {
96  return array(0, 0);
97  }
98  return $this->dao->getSetJournalSectionId($journalSpec, $sectionSpec, $this->journalId);
99  }
100 
101 
102  //
103  // OAI interface functions
104  //
105 
109  function repositoryInfo() {
110  $info = new OAIRepository();
111 
112  if (isset($this->journal)) {
113  $info->repositoryName = $this->journal->getLocalizedName();
114  $info->adminEmail = $this->journal->getData('contactEmail');
115 
116  } else {
117  $info->repositoryName = $this->site->getLocalizedTitle();
118  $info->adminEmail = $this->site->getLocalizedContactEmail();
119  }
120 
121  $info->sampleIdentifier = $this->articleIdToIdentifier(1);
122  $info->earliestDatestamp = $this->dao->getEarliestDatestamp(array($this->journalId));
123 
124  $info->toolkitTitle = 'Open Journal Systems';
125  $versionDao = DAORegistry::getDAO('VersionDAO'); /* @var $versionDao VersionDAO */
126  $currentVersion = $versionDao->getCurrentVersion();
127  $info->toolkitVersion = $currentVersion->getVersionString();
128  $info->toolkitURL = 'http://pkp.sfu.ca/ojs/';
129 
130  return $info;
131  }
132 
136  function validIdentifier($identifier) {
137  return $this->identifierToArticleId($identifier) !== false;
138  }
139 
143  function identifierExists($identifier) {
144  $recordExists = false;
145  $articleId = $this->identifierToArticleId($identifier);
146  if ($articleId) {
147  $recordExists = $this->dao->recordExists($articleId, array($this->journalId));
148  }
149  return $recordExists;
150  }
151 
155  function record($identifier) {
156  $articleId = $this->identifierToArticleId($identifier);
157  if ($articleId) {
158  $record = $this->dao->getRecord($articleId, array($this->journalId));
159  }
160  if (!isset($record)) {
161  $record = false;
162  }
163  return $record;
164  }
165 
169  function records($metadataPrefix, $from, $until, $set, $offset, $limit, &$total) {
170  $records = null;
171  if (!HookRegistry::call('JournalOAI::records', array($this, $from, $until, $set, $offset, $limit, &$total, &$records))) {
172  $sectionId = null;
173  if (isset($set)) {
174  list($journalId, $sectionId) = $this->setSpecToSectionId($set);
175  } else {
177  }
178  $records = $this->dao->getRecords(array($journalId, $sectionId), $from, $until, $set, $offset, $limit, $total);
179  }
180  return $records;
181  }
182 
186  function identifiers($metadataPrefix, $from, $until, $set, $offset, $limit, &$total) {
187  $records = null;
188  if (!HookRegistry::call('JournalOAI::identifiers', array($this, $from, $until, $set, $offset, $limit, &$total, &$records))) {
189  $sectionId = null;
190  if (isset($set)) {
191  list($journalId, $sectionId) = $this->setSpecToSectionId($set);
192  } else {
194  }
195  $records = $this->dao->getIdentifiers(array($journalId, $sectionId), $from, $until, $set, $offset, $limit, $total);
196  }
197  return $records;
198  }
199 
203  function sets($offset, $limit, &$total) {
204  $sets = null;
205  if (!HookRegistry::call('JournalOAI::sets', array($this, $offset, $limit, &$total, &$sets))) {
206  $sets = $this->dao->getJournalSets($this->journalId, $offset, $limit, $total);
207  }
208  return $sets;
209  }
210 
214  function resumptionToken($tokenId) {
215  $this->dao->clearTokens();
216  $token = $this->dao->getToken($tokenId);
217  if (!isset($token)) {
218  $token = false;
219  }
220  return $token;
221  }
222 
226  function saveResumptionToken($offset, $params) {
227  $token = new OAIResumptionToken(null, $offset, $params, time() + $this->config->tokenLifetime);
228  $this->dao->insertToken($token);
229  return $token;
230  }
231 }
232 
233 
JournalOAI\$dao
$dao
Definition: JournalOAI.inc.php:45
JournalOAI\articleIdToIdentifier
articleIdToIdentifier($articleId)
Definition: JournalOAI.inc.php:75
JournalOAI\sets
sets($offset, $limit, &$total)
Definition: JournalOAI.inc.php:215
JournalOAI\getNonPathInfoParams
getNonPathInfoParams()
Definition: JournalOAI.inc.php:66
OAIRepository
Definition: OAIStruct.inc.php:84
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
JournalOAI\__construct
__construct($config)
Definition: JournalOAI.inc.php:51
JournalOAI\records
records($metadataPrefix, $from, $until, $set, $offset, $limit, &$total)
Definition: JournalOAI.inc.php:181
OAI\$params
$params
Definition: OAI.inc.php:38
JournalOAI\repositoryInfo
repositoryInfo()
Definition: JournalOAI.inc.php:121
JournalOAI
OJS-specific OAI interface. Designed to support both a site-wide and journal-specific OAI interface (...
Definition: JournalOAI.inc.php:22
JournalOAI\validIdentifier
validIdentifier($identifier)
Definition: JournalOAI.inc.php:148
JournalOAI\identifierToArticleId
identifierToArticleId($identifier)
Definition: JournalOAI.inc.php:84
Seboettg\Collection\count
count()
Definition: ArrayListTrait.php:253
JournalOAI\$journal
$journal
Definition: JournalOAI.inc.php:33
JournalOAI\identifierExists
identifierExists($identifier)
Definition: JournalOAI.inc.php:155
JournalOAI\$journalId
$journalId
Definition: JournalOAI.inc.php:39
JournalOAI\record
record($identifier)
Definition: JournalOAI.inc.php:167
OAIResumptionToken
Definition: OAIStruct.inc.php:140
OAI\$config
$config
Definition: OAI.inc.php:32
JournalOAI\saveResumptionToken
saveResumptionToken($offset, $params)
Definition: JournalOAI.inc.php:238
JournalOAI\$site
$site
Definition: JournalOAI.inc.php:27
JournalOAI\resumptionToken
resumptionToken($tokenId)
Definition: JournalOAI.inc.php:226
OAI
Class to process and respond to OAI requests.
Definition: OAI.inc.php:27
JournalOAI\setSpecToSectionId
setSpecToSectionId($setSpec, $journalId=null)
Definition: JournalOAI.inc.php:97
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
JournalOAI\identifiers
identifiers($metadataPrefix, $from, $until, $set, $offset, $limit, &$total)
Definition: JournalOAI.inc.php:198