Open Journal Systems  3.3.0
IssueAction.inc.php
1 <?php
2 
17 class IssueAction {
28  function subscriptionRequired($issue, $journal) {
29  assert(is_a($issue, 'Issue'));
30  assert(is_a($journal, 'Journal'));
31  assert($journal->getId() == $issue->getJournalId());
32 
33  // Check subscription state.
34  $result = $journal->getData('publishingMode') == PUBLISHING_MODE_SUBSCRIPTION &&
35  $issue->getAccessStatus() != ISSUE_ACCESS_OPEN && (
36  is_null($issue->getOpenAccessDate()) ||
37  strtotime($issue->getOpenAccessDate()) > time()
38  );
39  HookRegistry::call('IssueAction::subscriptionRequired', array(&$journal, &$issue, &$result));
40  return $result;
41  }
42 
51  function allowedPrePublicationAccess($journal, $submission, $user) {
52  if ($this->_roleAllowedPrePublicationAccess($journal, $user)) return true;
53 
54  if ($user && $journal) {
55  $journalId = $journal->getId();
56  $userId = $user->getId();
57 
58  $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO'); /* @var $stageAssignmentDao StageAssignmentDAO */
59  $stageAssignments = $stageAssignmentDao->getBySubmissionAndRoleId($submission->getId(), ROLE_ID_AUTHOR, null, $userId);
60  $stageAssignment = $stageAssignments->next();
61  if ($stageAssignment) return true;
62  }
63  return false;
64  }
65 
73  function allowedIssuePrePublicationAccess($journal, $user) {
74  return $this->_roleAllowedPrePublicationAccess($journal, $user);
75  }
76 
85  function subscribedUser($user, $journal, $issueId = null, $articleId = null) {
86  $subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /* @var $subscriptionDao IndividualSubscriptionDAO */
87  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); /* @var $submissionDao SubmissionDAO */
88  $submission = $submissionDao->getById($articleId);
89  $result = false;
90  if (isset($user) && isset($journal)) {
91  if ($submission && $this->allowedPrePublicationAccess($journal, $submission, $user)) {
92  $result = true;
93  } else {
94  $result = $subscriptionDao->isValidIndividualSubscription($user->getId(), $journal->getId());
95  }
96 
97  // If no valid subscription, check if there is an expired subscription
98  // that was valid during publication date of any one of the submission's
99  // publications
100  if (!$result && $journal->getData('subscriptionExpiryPartial')) {
101  if (isset($submission) && !empty($submission->getData('publications'))) {
102  import('classes.subscription.SubscriptionDAO');
103  foreach ($submission->getData('publications') as $publication) {
104  if ($subscriptionDao->isValidIndividualSubscription($user->getId(), $journal->getId(), SUBSCRIPTION_DATE_END, $publication->getData('datePublished'))) {
105  $result = true;
106  break;
107  }
108  }
109  } else if (isset($issueId)) {
110  $issueDao = DAORegistry::getDAO('IssueDAO'); /* @var $issueDao IssueDAO */
111  $issue = $issueDao->getById($issueId);
112  if (isset($issue) && $issue->getPublished()) {
113  import('classes.subscription.SubscriptionDAO');
114  $result = $subscriptionDao->isValidIndividualSubscription($user->getId(), $journal->getId(), SUBSCRIPTION_DATE_END, $issue->getDatePublished());
115  }
116  }
117  }
118  }
119  HookRegistry::call('IssueAction::subscribedUser', array(&$user, &$journal, &$issueId, &$articleId, &$result));
120  return $result;
121  }
122 
131  function subscribedDomain($request, $journal, $issueId = null, $articleId = null) {
132  $subscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO'); /* @var $subscriptionDao InstitutionalSubscriptionDAO */
133  $result = false;
134  if (isset($journal)) {
135  $result = $subscriptionDao->isValidInstitutionalSubscription($request->getRemoteDomain(), $request->getRemoteAddr(), $journal->getId());
136 
137  // If no valid subscription, check if there is an expired subscription
138  // that was valid during publication date of requested content
139  if (!$result && $journal->getData('subscriptionExpiryPartial')) {
140  if (isset($articleId)) {
141  $submission = Services::get('submission')->get($articleId);
142  if ($submission->getData('status') === STATUS_PUBLISHED) {
143  import('classes.subscription.SubscriptionDAO');
144  $result = $subscriptionDao->isValidInstitutionalSubscription($request->getRemoteDomain(), $request->getRemoteAddr(), $journal->getId(), SUBSCRIPTION_DATE_END, $submission->getDatePublished());
145  }
146  } else if (isset($issueId)) {
147  $issueDao = DAORegistry::getDAO('IssueDAO'); /* @var $issueDao IssueDAO */
148  $issue = $issueDao->getById($issueId);
149  if (isset($issue) && $issue->getPublished()) {
150  import('classes.subscription.SubscriptionDAO');
151  $result = $subscriptionDao->isValidInstitutionalSubscription($request->getRemoteDomain(), $request->getRemoteAddr(), $journal->getId(), SUBSCRIPTION_DATE_END, $issue->getDatePublished());
152  }
153  }
154  }
155  }
156  HookRegistry::call('IssueAction::subscribedDomain', array(&$request, &$journal, &$issueId, &$articleId, &$result));
157  return (boolean) $result;
158  }
159 
167  function _roleAllowedPrePublicationAccess($journal, $user) {
168  $roleDao = DAORegistry::getDAO('RoleDAO'); /* @var $roleDao RoleDAO */
169  if ($user && $journal) {
170  $journalId = $journal->getId();
171  $userId = $user->getId();
172  $subscriptionAssumedRoles = array(
173  ROLE_ID_MANAGER,
174  ROLE_ID_SUB_EDITOR,
175  ROLE_ID_ASSISTANT,
176  ROLE_ID_SUBSCRIPTION_MANAGER
177  );
178 
179  $roles = $roleDao->getByUserId($userId, $journalId);
180  foreach ($roles as $role) {
181  if (in_array($role->getRoleId(), $subscriptionAssumedRoles)) return true;
182  }
183  }
184  return false;
185  }
186 }
187 
188 
IssueAction\_roleAllowedPrePublicationAccess
_roleAllowedPrePublicationAccess($journal, $user)
Definition: IssueAction.inc.php:167
IssueAction\subscribedDomain
subscribedDomain($request, $journal, $issueId=null, $articleId=null)
Definition: IssueAction.inc.php:131
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
IssueAction\allowedPrePublicationAccess
allowedPrePublicationAccess($journal, $submission, $user)
Definition: IssueAction.inc.php:51
IssueAction
IssueAction class.
Definition: IssueAction.inc.php:17
IssueAction\subscriptionRequired
subscriptionRequired($issue, $journal)
Definition: IssueAction.inc.php:28
IssueAction\allowedIssuePrePublicationAccess
allowedIssuePrePublicationAccess($journal, $user)
Definition: IssueAction.inc.php:73
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
IssueAction\subscribedUser
subscribedUser($user, $journal, $issueId=null, $articleId=null)
Definition: IssueAction.inc.php:85
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49