Open Journal Systems  3.3.0
DRIVERPlugin.inc.php
1 <?php
2 
16 define('DRIVER_ACCESS_OPEN', 0);
17 define('DRIVER_ACCESS_CLOSED', 1);
18 define('DRIVER_ACCESS_EMBARGOED', 2);
19 define('DRIVER_ACCESS_DELAYED', 3);
20 define('DRIVER_ACCESS_RESTRICTED', 4);
21 
22 import('lib.pkp.classes.plugins.GenericPlugin');
23 
24 class DRIVERPlugin extends GenericPlugin {
25 
29  function register($category, $path, $mainContextId = null) {
30  $success = parent::register($category, $path, $mainContextId);
31  if ($success && $this->getEnabled($mainContextId)) {
32  $this->import('DRIVERDAO');
33  $driverDao = new DRIVERDAO();
34  DAORegistry::registerDAO('DRIVERDAO', $driverDao);
35 
36  // Add DRIVER set to OAI results
37  HookRegistry::register('OAIDAO::getJournalSets', array($this, 'sets'));
38  HookRegistry::register('JournalOAI::records', array($this, 'recordsOrIdentifiers'));
39  HookRegistry::register('JournalOAI::identifiers', array($this, 'recordsOrIdentifiers'));
40  HookRegistry::register('OAIDAO::_returnRecordFromRow', array($this, 'addSet'));
41  HookRegistry::register('OAIDAO::_returnIdentifierFromRow', array($this, 'addSet'));
42 
43  // consider DRIVER article in article tombstones
44  HookRegistry::register('ArticleTombstoneManager::insertArticleTombstone', array($this, 'insertDRIVERArticleTombstone'));
45  }
46  return $success;
47  }
48 
49  function getDisplayName() {
50  return __('plugins.generic.driver.displayName');
51  }
52 
53  function getDescription() {
54  return __('plugins.generic.driver.description');
55  }
56 
57  /*
58  * OAI interface
59  */
60 
64  function sets($hookName, $params) {
65  $sets =& $params[5];
66  array_push($sets, new OAISet('driver', 'Open Access DRIVERset', ''));
67  return false;
68  }
69 
73  function recordsOrIdentifiers($hookName, $params) {
74  $journalOAI =& $params[0];
75  $from = $params[1];
76  $until = $params[2];
77  $set = $params[3];
78  $offset = $params[4];
79  $limit = $params[5];
80  $total =& $params[6];
81  $records =& $params[7];
82 
83  $records = array();
84  if (isset($set) && $set == 'driver') {
85  $driverDao = DAORegistry::getDAO('DRIVERDAO'); /* @var $driverDao DRIVERDAO */
86  $driverDao->setOAI($journalOAI);
87  if ($hookName == 'JournalOAI::records') {
88  $funcName = '_returnRecordFromRow';
89  } else if ($hookName == 'JournalOAI::identifiers') {
90  $funcName = '_returnIdentifierFromRow';
91  }
92  $journalId = $journalOAI->journalId;
93  $records = $driverDao->getDRIVERRecordsOrIdentifiers(array($journalId, null), $from, $until, $offset, $limit, $total, $funcName);
94  return true;
95  }
96  return false;
97  }
98 
102  function addSet($hookName, $params) {
103  $record =& $params[0];
104  $row = $params[1];
105 
106  if ($this->isDRIVERRecord($row)) {
107  $record->sets[] = 'driver';
108  }
109  return false;
110  }
111 
115  function insertDRIVERArticleTombstone($hookName, $params) {
116  $articleTombstone =& $params[0];
117 
118  if ($this->isDRIVERArticle($articleTombstone->getOAISetObjectId(ASSOC_TYPE_JOURNAL), $articleTombstone->getDataObjectId())) {
119  $dataObjectTombstoneSettingsDao = DAORegistry::getDAO('DataObjectTombstoneSettingsDAO'); /* @var $dataObjectTombstoneSettingsDao DataObjectTombstoneSettingsDAO */
120  $dataObjectTombstoneSettingsDao->updateSetting($articleTombstone->getId(), 'driver', true, 'bool');
121  }
122  return false;
123  }
124 
130  function isDRIVERRecord($row) {
131  // if the article is alive
132  if (!isset($row['tombstone_id'])) {
133  $journalDao = DAORegistry::getDAO('JournalDAO'); /* @var $journalDao JournalDAO */
134  $issueDao = DAORegistry::getDAO('IssueDAO'); /* @var $issueDao IssueDAO */
135 
136  $journal = $journalDao->getById($row['journal_id']);
137  $submission = Services::get('submission')->get($row['submission_id']);
138  $publication = $submission->getCurrentPublication();
139  $issue = $issueDao->getById($publication->getData('issueId'));
140 
141  // is open access
142  $status = '';
143  if ($journal->getData('publishingMode') == PUBLISHING_MODE_OPEN) {
144  $status = DRIVER_ACCESS_OPEN;
145  } else if ($journal->getData('publishingMode') == PUBLISHING_MODE_SUBSCRIPTION) {
146  if ($issue->getAccessStatus() == 0 || $issue->getAccessStatus() == ISSUE_ACCESS_OPEN) {
147  $status = DRIVER_ACCESS_OPEN;
148  } else if ($issue->getAccessStatus() == ISSUE_ACCESS_SUBSCRIPTION) {
149  if ($publication->getData('accessStatus') == ARTICLE_ACCESS_OPEN) {
150  $status = DRIVER_ACCESS_OPEN;
151  } else if ($issue->getAccessStatus() == ISSUE_ACCESS_SUBSCRIPTION && $issue->getOpenAccessDate() != NULL) {
152  $status = DRIVER_ACCESS_EMBARGOED;
153  } else if ($issue->getAccessStatus() == ISSUE_ACCESS_SUBSCRIPTION && $issue->getOpenAccessDate() == NULL) {
154  $status = DRIVER_ACCESS_CLOSED;
155  }
156  }
157  }
158  if ($journal->getData('restrictSiteAccess') == 1 || $journal->getData('restrictArticleAccess') == 1) {
159  $status = DRIVER_ACCESS_RESTRICTED;
160  }
161 
162  if ($status == DRIVER_ACCESS_EMBARGOED && date('Y-m-d') >= date('Y-m-d', strtotime($issue->getOpenAccessDate()))) {
163  $status = DRIVER_ACCESS_DELAYED;
164  }
165 
166  // is there a full text
167  $galleys = $submission->getGalleys();
168  if (!empty($galleys)) {
169  return $status == DRIVER_ACCESS_OPEN;
170  }
171  return false;
172  } else {
173  $dataObjectTombstoneSettingsDao = DAORegistry::getDAO('DataObjectTombstoneSettingsDAO'); /* @var $dataObjectTombstoneSettingsDao DataObjectTombstoneSettingsDAO */
174  return $dataObjectTombstoneSettingsDao->getSetting($row['tombstone_id'], 'driver');
175  }
176  }
177 
178 
184  function isDRIVERArticle($journalId, $articleId) {
185  $journalDao = DAORegistry::getDAO('JournalDAO'); /* @var $journalDao JournalDAO */
186  $issueDao = DAORegistry::getDAO('IssueDAO'); /* @var $issueDao IssueDAO */
187 
188  $journal = $journalDao->getById($journalId);
189  $submission = Services::get('submission')->get($articleId);
190  $publication = $submission->getCurrentPublication();
191  $issue = $issueDao->getById($publication->getData('issueId'));
192 
193  // is open access
194  $status = '';
195  if ($journal->getData('publishingMode') == PUBLISHING_MODE_OPEN) {
196  $status = DRIVER_ACCESS_OPEN;
197  } else if ($journal->getData('publishingMode') == PUBLISHING_MODE_SUBSCRIPTION) {
198  if ($issue->getAccessStatus() == 0 || $issue->getAccessStatus() == ISSUE_ACCESS_OPEN) {
199  $status = DRIVER_ACCESS_OPEN;
200  } else if ($issue->getAccessStatus() == ISSUE_ACCESS_SUBSCRIPTION) {
201  if ($publication->getData('accessStatus') == ARTICLE_ACCESS_OPEN) {
202  $status = DRIVER_ACCESS_OPEN;
203  } else if ($issue->getAccessStatus() == ISSUE_ACCESS_SUBSCRIPTION && $issue->getOpenAccessDate() != NULL) {
204  $status = DRIVER_ACCESS_EMBARGOED;
205  } else if ($issue->getAccessStatus() == ISSUE_ACCESS_SUBSCRIPTION && $issue->getOpenAccessDate() == NULL) {
206  $status = DRIVER_ACCESS_CLOSED;
207  }
208  }
209  }
210  if ($journal->getData('restrictSiteAccess') == 1 || $journal->getData('restrictArticleAccess') == 1) {
211  $status = DRIVER_ACCESS_RESTRICTED;
212  }
213 
214  if ($status == DRIVER_ACCESS_EMBARGOED && date('Y-m-d') >= date('Y-m-d', strtotime($issue->getOpenAccessDate()))) {
215  $status = DRIVER_ACCESS_DELAYED;
216  }
217 
218  // is there a full text
219  $galleys = $submission->getGalleys();
220  if (!empty($galleys)) {
221  return $status == DRIVER_ACCESS_OPEN;
222  }
223  return false;
224  }
225 
226 }
227 
228 
DRIVERPlugin\addSet
addSet($hookName, $params)
Definition: DRIVERPlugin.inc.php:102
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
DRIVERPlugin\isDRIVERArticle
isDRIVERArticle($journalId, $articleId)
Definition: DRIVERPlugin.inc.php:184
DRIVERPlugin\insertDRIVERArticleTombstone
insertDRIVERArticleTombstone($hookName, $params)
Definition: DRIVERPlugin.inc.php:115
DRIVERPlugin
DRIVER plugin class.
Definition: DRIVERPlugin.inc.php:24
OAISet
Definition: OAIStruct.inc.php:235
Plugin\getEnabled
getEnabled()
Definition: Plugin.inc.php:868
DAORegistry\registerDAO
static registerDAO($name, $dao)
Definition: DAORegistry.inc.php:40
DRIVERPlugin\getDescription
getDescription()
Definition: DRIVERPlugin.inc.php:53
DRIVERPlugin\isDRIVERRecord
isDRIVERRecord($row)
Definition: DRIVERPlugin.inc.php:130
DRIVERPlugin\sets
sets($hookName, $params)
Definition: DRIVERPlugin.inc.php:64
DRIVERPlugin\recordsOrIdentifiers
recordsOrIdentifiers($hookName, $params)
Definition: DRIVERPlugin.inc.php:73
DRIVERPlugin\getDisplayName
getDisplayName()
Definition: DRIVERPlugin.inc.php:49
HookRegistry\register
static register($hookName, $callback, $hookSequence=HOOK_SEQUENCE_NORMAL)
Definition: HookRegistry.inc.php:70
DRIVERDAO
DAO operations for DRIVER.
Definition: DRIVERDAO.inc.php:19
GenericPlugin
Abstract class for generic plugins.
Definition: GenericPlugin.inc.php:18
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49