Open Journal Systems  3.3.0
IndividualSubscriptionDAO.inc.php
1 <?php
2 
17 import('classes.subscription.SubscriptionDAO');
18 import('classes.subscription.IndividualSubscription');
19 
27  function getById($subscriptionId, $journalId = null) {
28  $params = array((int) $subscriptionId);
29  if ($journalId) $params[] = (int) $journalId;
30  $result = $this->retrieve(
31  'SELECT s.*
32  FROM subscriptions s
33  JOIN subscription_types st ON (s.type_id = st.type_id)
34  WHERE st.institutional = 0
35  AND s.subscription_id = ?
36  ' . ($journalId?' AND s.journal_id = ?':''),
37  $params
38  );
39 
40  $returner = null;
41  if ($result->RecordCount() != 0) {
42  $returner = $this->_fromRow($result->GetRowAssoc(false));
43  }
44 
45  $result->Close();
46  return $returner;
47  }
48 
55  function getByUserIdForJournal($userId, $journalId) {
56  $result = $this->retrieveRange(
57  'SELECT s.*
58  FROM
59  subscriptions s,
60  subscription_types st
61  WHERE s.type_id = st.type_id
62  AND st.institutional = 0
63  AND s.user_id = ?
64  AND s.journal_id = ?',
65  array(
66  (int) $userId,
67  (int) $journalId
68  )
69  );
70 
71  $returner = null;
72  if ($result->RecordCount() != 0) {
73  $returner = $this->_fromRow($result->GetRowAssoc(false));
74  }
75 
76  $result->Close();
77  return $returner;
78  }
79 
86  function getByUserId($userId, $rangeInfo = null) {
87  $result = $this->retrieveRange(
88  'SELECT s.*
89  FROM
90  subscriptions s,
91  subscription_types st
92  WHERE s.type_id = st.type_id
93  AND st.institutional = 0
94  AND s.user_id = ?',
95  (int) $userId,
96  $rangeInfo
97  );
98 
99  return new DAOResultFactory($result, $this, '_fromRow');
100  }
101 
108  function getStatusCount($journalId, $status = null) {
109  $params = array((int) $journalId);
110  if ($status !== null) $params[] = (int) $status;
111 
112  $result = $this->retrieve(
113  'SELECT COUNT(*)
114  FROM subscriptions s,
115  subscription_types st
116  WHERE s.type_id = st.type_id AND
117  st.institutional = 0 AND
118  s.journal_id = ?
119  ' . ($status !== null?' AND s.status = ?':''),
120  $params
121  );
122 
123  $returner = isset($result->fields[0]) ? $result->fields[0] : 0;
124 
125  $result->Close();
126  return $returner;
127  }
128 
134  function getSubscribedUserCount($journalId) {
135  return $this->getStatusCount($journalId);
136  }
137 
143  function subscriptionExists($subscriptionId) {
144  $result = $this->retrieve(
145  'SELECT COUNT(*)
146  FROM
147  subscriptions s,
148  subscription_types st
149  WHERE s.type_id = st.type_id
150  AND st.institutional = 0
151  AND s.subscription_id = ?',
152  (int) $subscriptionId
153  );
154 
155  $returner = isset($result->fields[0]) && $result->fields[0] != 0 ? true : false;
156 
157  $result->Close();
158  return $returner;
159  }
160 
167  function subscriptionExistsByUser($subscriptionId, $userId) {
168  $result = $this->retrieve(
169  'SELECT COUNT(*)
170  FROM
171  subscriptions s,
172  subscription_types st
173  WHERE s.type_id = st.type_id
174  AND st.institutional = 0
175  AND s.subscription_id = ?
176  AND s.user_id = ?',
177  array(
178  (int) $subscriptionId,
179  (int) $userId
180  )
181  );
182 
183  $returner = isset($result->fields[0]) && $result->fields[0] != 0 ? true : false;
184 
185  $result->Close();
186  return $returner;
187  }
188 
195  function subscriptionExistsByUserForJournal($userId, $journalId) {
196  $result = $this->retrieve(
197  'SELECT COUNT(*)
198  FROM
199  subscriptions s,
200  subscription_types st
201  WHERE s.type_id = st.type_id
202  AND st.institutional = 0
203  AND s.user_id = ?
204  AND s.journal_id = ?',
205  array(
206  (int) $userId,
207  (int) $journalId
208  )
209  );
210 
211  $returner = isset($result->fields[0]) && $result->fields[0] != 0 ? true : false;
212 
213  $result->Close();
214  return $returner;
215  }
216 
221  function newDataObject() {
222  return new IndividualSubscription();
223  }
224 
230  function _fromRow($row) {
231  $individualSubscription = parent::_fromRow($row);
232  HookRegistry::call('IndividualSubscriptionDAO::_fromRow', array(&$individualSubscription, &$row));
233 
234  return $individualSubscription;
235  }
236 
242  function insertObject($individualSubscription) {
243  return $this->_insertObject($individualSubscription);
244  }
245 
250  function updateObject($individualSubscription) {
251  $this->_updateObject($individualSubscription);
252  }
253 
259  function deleteById($subscriptionId, $journalId = null) {
260  $params = array((int) $subscriptionId);
261  if ($journalId) $params[] = (int) $journalId;
262  $this->update(
263  'DELETE FROM subscriptions
264  WHERE subscription_id = ?'
265  .($journalId ? ' AND journal_id = ?' : ''),
266  $params
267  );
268  }
269 
275  function deleteByJournalId($journalId) {
276  $result = $this->retrieve(
277  'SELECT s.subscription_id
278  FROM
279  subscriptions s
280  WHERE s.journal_id = ?',
281  (int) $journalId
282  );
283 
284  $returner = true;
285  if ($result->RecordCount() != 0) {
286  while (!$result->EOF) {
287  $subscriptionId = $result->fields[0];
288  $returner = $this->deleteById($subscriptionId);
289  if (!$returner) {
290  break;
291  }
292  $result->MoveNext();
293  }
294  }
295 
296  $result->Close();
297  return $returner;
298  }
299 
305  function deleteByUserId($userId) {
306  $result = $this->retrieve(
307  'SELECT s.subscription_id
308  FROM
309  subscriptions s
310  WHERE s.user_id = ?',
311  (int) $userId
312  );
313 
314  $returner = true;
315  if ($result->RecordCount() != 0) {
316  while (!$result->EOF) {
317  $subscriptionId = $result->fields[0];
318  $returner = $this->deleteById($subscriptionId);
319  if (!$returner) {
320  break;
321  }
322  $result->MoveNext();
323  }
324  }
325 
326  $result->Close();
327  return $returner;
328  }
329 
336  function deleteByUserIdForJournal($userId, $journalId) {
337  $result = $this->retrieve(
338  'SELECT s.subscription_id
339  FROM
340  subscriptions s
341  WHERE s.user_id = ?
342  AND s.journal_id = ?',
343  array (
344  (int) $userId,
345  (int) $journalId
346  )
347  );
348 
349  $returner = true;
350  if ($result->RecordCount() != 0) {
351  while (!$result->EOF) {
352  $subscriptionId = $result->fields[0];
353  $returner = $this->deleteById($subscriptionId);
354  if (!$returner) {
355  break;
356  }
357  $result->MoveNext();
358  }
359  }
360 
361  $result->Close();
362  return $returner;
363  }
364 
370  function deleteByTypeId($subscriptionTypeId) {
371  $result = $this->retrieve(
372  'SELECT s.subscription_id
373  FROM
374  subscriptions s
375  WHERE s.type_id = ?',
376  (int) $subscriptionTypeId
377  );
378 
379  $returner = true;
380  if ($result->RecordCount() != 0) {
381  while (!$result->EOF) {
382  $subscriptionId = $result->fields[0];
383  $returner = $this->deleteById($subscriptionId);
384  if (!$returner) {
385  break;
386  }
387  $result->MoveNext();
388  }
389  }
390 
391  $result->Close();
392  return $returner;
393  }
394 
400  function getAll($rangeInfo = null) {
401  $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
402  $result = $this->retrieveRange(
403  'SELECT s.*,
404  ' . $userDao->getFetchColumns() .'
405  FROM
406  subscriptions s,
407  subscription_types st,
408  users u,
409  ' . $userDao->getFetchJoins() .'
410  WHERE s.type_id = st.type_id
411  AND st.institutional = 0
412  AND s.user_id = u.user_id
413  ' . $userDao->getOrderBy() .',
414  s.subscription_id',
415  $userDao->getFetchParameters(),
416  $rangeInfo
417  );
418 
419  return new DAOResultFactory($result, $this, '_fromRow');
420  }
421 
434  function getByJournalId($journalId, $status = null, $searchField = null, $searchMatch = null, $search = null, $dateField = null, $dateFrom = null, $dateTo = null, $rangeInfo = null) {
435  $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
436  $params = array_merge($userDao->getFetchParameters(), array((int) $journalId));
437  $result = $this->retrieveRange(
438  'SELECT s.*,
439  ' . $userDao->getFetchColumns() . '
440  FROM subscriptions s
441  JOIN subscription_types st ON (s.type_id = st.type_id)
442  JOIN users u ON (s.user_id = u.user_id)
443  ' . $userDao->getFetchJoins() . '
444  WHERE st.institutional = 0
445  AND s.journal_id = ? ' .
446  parent::_generateSearchSQL($status, $searchField, $searchMatch, $search, $dateField, $dateFrom, $dateTo, $params) . ' ' .
447  $userDao->getOrderBy() .', s.subscription_id',
448  $params,
449  $rangeInfo
450  );
451  return new DAOResultFactory($result, $this, '_fromRow');
452  }
453 
462  function isValidIndividualSubscription($userId, $journalId, $check = SUBSCRIPTION_DATE_BOTH, $checkDate = null) {
463  if (empty($userId) || empty($journalId)) {
464  return false;
465  }
466 
467  $today = $this->dateToDB(Core::getCurrentDate());
468 
469  if ($checkDate == null) {
470  $checkDate = $today;
471  } else {
472  $checkDate = $this->dateToDB($checkDate);
473  }
474 
475  switch($check) {
476  case SUBSCRIPTION_DATE_START:
477  $dateSql = sprintf('%s >= s.date_start AND %s >= s.date_start', $checkDate, $today);
478  break;
479  case SUBSCRIPTION_DATE_END:
480  $dateSql = sprintf('%s <= s.date_end AND %s >= s.date_start', $checkDate, $today);
481  break;
482  default:
483  $dateSql = sprintf('%s >= s.date_start AND %s <= s.date_end', $checkDate, $checkDate);
484  }
485 
486  $result = $this->retrieve('
487  SELECT s.subscription_id
488  FROM subscriptions s
489  JOIN subscription_types st ON (s.type_id = st.type_id)
490  WHERE s.user_id = ?
491  AND s.journal_id = ?
492  AND s.status = ' . SUBSCRIPTION_STATUS_ACTIVE . '
493  AND st.institutional = 0
494  AND ((st.non_expiring = 1) OR (st.non_expiring = 0 AND (' . $dateSql . ')))
495  AND (st.format = ' . SUBSCRIPTION_TYPE_FORMAT_ONLINE . '
496  OR st.format = ' . SUBSCRIPTION_TYPE_FORMAT_PRINT_ONLINE . ')',
497  array(
498  (int) $userId,
499  (int) $journalId
500  )
501  );
502 
503  if ($result->RecordCount() != 0) $returner = (boolean) $result->fields[0];
504  else $returner = false;
505 
506  $result->Close();
507  return $returner;
508  }
509 
517  function getByDateEnd($dateEnd, $journalId, $rangeInfo = null) {
518  $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
519  $dateEnd = explode('-', $dateEnd);
520  $params = array_merge(
521  $userDao->getFetchParameters(),
522  array(
523  $dateEnd[0],
524  $dateEnd[1],
525  $dateEnd[2],
526  (int) $journalId
527  ));
528 
529  $result = $this->retrieveRange(
530  'SELECT s.*,
531  ' . $userDao->getFetchColumns() .'
532  FROM subscriptions s
533  JOIN subscription_types st ON (s.type_id = st.type_id)
534  JOIN users u ON (u.user_id = s.user_id)
535  ' . $userDao->getFetchJoins() .'
536  WHERE s.status = ' . SUBSCRIPTION_STATUS_ACTIVE . '
537  AND st.institutional = 0
538  AND EXTRACT(YEAR FROM s.date_end) = ?
539  AND EXTRACT(MONTH FROM s.date_end) = ?
540  AND EXTRACT(DAY FROM s.date_end) = ?
541  AND s.journal_id = ?
542  ' . $userDao->getOrderBy() .', s.subscription_id',
543  $params,
544  $rangeInfo
545  );
546  return new DAOResultFactory($result, $this, '_fromRow');
547  }
548 
555  function renewSubscription($individualSubscription) {
556  return $this->_renewSubscription($individualSubscription);
557  }
558 }
559 
560 
IndividualSubscriptionDAO\deleteById
deleteById($subscriptionId, $journalId=null)
Definition: IndividualSubscriptionDAO.inc.php:259
DAOResultFactory
Wrapper around ADORecordSet providing "factory" features for generating objects from DAOs.
Definition: DAOResultFactory.inc.php:21
IndividualSubscriptionDAO\getByJournalId
getByJournalId($journalId, $status=null, $searchField=null, $searchMatch=null, $search=null, $dateField=null, $dateFrom=null, $dateTo=null, $rangeInfo=null)
Definition: IndividualSubscriptionDAO.inc.php:434
IndividualSubscriptionDAO\renewSubscription
renewSubscription($individualSubscription)
Definition: IndividualSubscriptionDAO.inc.php:555
IndividualSubscriptionDAO\deleteByUserIdForJournal
deleteByUserIdForJournal($userId, $journalId)
Definition: IndividualSubscriptionDAO.inc.php:336
SubscriptionDAO\_insertObject
_insertObject($subscription)
Definition: SubscriptionDAO.inc.php:334
IndividualSubscriptionDAO\isValidIndividualSubscription
isValidIndividualSubscription($userId, $journalId, $check=SUBSCRIPTION_DATE_BOTH, $checkDate=null)
Definition: IndividualSubscriptionDAO.inc.php:462
IndividualSubscriptionDAO\updateObject
updateObject($individualSubscription)
Definition: IndividualSubscriptionDAO.inc.php:250
DAO\retrieveRange
& retrieveRange($sql, $params=false, $dbResultRange=null, $callHooks=true)
Definition: DAO.inc.php:176
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
DAO\dateToDB
dateToDB($d)
Definition: DAO.inc.php:309
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
IndividualSubscriptionDAO\subscriptionExistsByUserForJournal
subscriptionExistsByUserForJournal($userId, $journalId)
Definition: IndividualSubscriptionDAO.inc.php:195
IndividualSubscriptionDAO\_fromRow
_fromRow($row)
Definition: IndividualSubscriptionDAO.inc.php:230
IndividualSubscriptionDAO\getByUserIdForJournal
getByUserIdForJournal($userId, $journalId)
Definition: IndividualSubscriptionDAO.inc.php:55
IndividualSubscriptionDAO\deleteByUserId
deleteByUserId($userId)
Definition: IndividualSubscriptionDAO.inc.php:305
IndividualSubscriptionDAO\subscriptionExistsByUser
subscriptionExistsByUser($subscriptionId, $userId)
Definition: IndividualSubscriptionDAO.inc.php:167
IndividualSubscriptionDAO\getById
getById($subscriptionId, $journalId=null)
Definition: IndividualSubscriptionDAO.inc.php:27
IndividualSubscriptionDAO\newDataObject
newDataObject()
Definition: IndividualSubscriptionDAO.inc.php:221
SubscriptionDAO
Abstract class for retrieving and modifying subscriptions.
Definition: SubscriptionDAO.inc.php:25
IndividualSubscriptionDAO\deleteByTypeId
deleteByTypeId($subscriptionTypeId)
Definition: IndividualSubscriptionDAO.inc.php:370
IndividualSubscriptionDAO\getAll
getAll($rangeInfo=null)
Definition: IndividualSubscriptionDAO.inc.php:400
DAO\update
update($sql, $params=false, $callHooks=true, $dieOnError=true)
Definition: DAO.inc.php:214
IndividualSubscriptionDAO\getByDateEnd
getByDateEnd($dateEnd, $journalId, $rangeInfo=null)
Definition: IndividualSubscriptionDAO.inc.php:517
IndividualSubscriptionDAO\getStatusCount
getStatusCount($journalId, $status=null)
Definition: IndividualSubscriptionDAO.inc.php:108
IndividualSubscriptionDAO
Operations for retrieving and modifying IndividualSubscription objects.
Definition: IndividualSubscriptionDAO.inc.php:20
IndividualSubscription
Basic class describing an individual (non-institutional) subscription.
Definition: IndividualSubscription.inc.php:19
IndividualSubscriptionDAO\subscriptionExists
subscriptionExists($subscriptionId)
Definition: IndividualSubscriptionDAO.inc.php:143
Core\getCurrentDate
static getCurrentDate($ts=null)
Definition: Core.inc.php:63
SubscriptionDAO\_renewSubscription
_renewSubscription($subscription)
Definition: SubscriptionDAO.inc.php:402
IndividualSubscriptionDAO\getByUserId
getByUserId($userId, $rangeInfo=null)
Definition: IndividualSubscriptionDAO.inc.php:86
IndividualSubscriptionDAO\deleteByJournalId
deleteByJournalId($journalId)
Definition: IndividualSubscriptionDAO.inc.php:275
IndividualSubscriptionDAO\getSubscribedUserCount
getSubscribedUserCount($journalId)
Definition: IndividualSubscriptionDAO.inc.php:134
SubscriptionDAO\_updateObject
_updateObject($subscription)
Definition: SubscriptionDAO.inc.php:365
IndividualSubscriptionDAO\insertObject
insertObject($individualSubscription)
Definition: IndividualSubscriptionDAO.inc.php:242
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86