17 import(
'classes.subscription.SubscriptionDAO');
18 import(
'classes.subscription.InstitutionalSubscription');
20 define(
'SUBSCRIPTION_INSTITUTION_NAME', 0x20);
21 define(
'SUBSCRIPTION_DOMAIN', 0x21);
22 define(
'SUBSCRIPTION_IP_RANGE', 0x22);
32 function getById($subscriptionId, $journalId =
null) {
33 $params = array((
int) $subscriptionId);
34 if ($journalId) $params[] = (int) $journalId;
38 JOIN subscription_types st ON (s.type_id = st.type_id)
39 JOIN institutional_subscriptions iss ON (s.subscription_id = iss.subscription_id)
40 WHERE st.institutional = 1
41 AND s.subscription_id = ?
42 ' . ($journalId?
' AND s.journal_id = ?':
''),
47 if ($result->RecordCount() != 0) {
48 $returner = $this->
_fromRow($result->GetRowAssoc(
false));
64 JOIN subscription_types st ON (st.type_id = s.type_id)
65 JOIN institutional_subscriptions iss ON (s.subscription_id = iss.subscription_id)
66 WHERE st.institutional = 1
85 JOIN subscription_types st ON (s.type_id = st.type_id)
86 JOIN institutional_subscriptions iss ON (s.subscription_id = iss.subscription_id)
87 WHERE st.institutional = 1
89 AND s.journal_id = ?',
111 JOIN subscription_types st ON (s.type_id = st.type_id)
112 JOIN institutional_subscriptions iss ON (s.subscription_id = iss.subscription_id)
113 WHERE AND st.institutional = 1' .
114 $exactMatch ?
' AND LOWER(iss.institution_name) = LOWER(?)'
115 :
' AND LOWER(iss.institution_name) LIKE LOWER(?)'
116 .
' AND s.journal_id = ?',
132 $params = array((
int) $journalId);
133 if ($status !==
null) $params[] = (int) $status;
136 FROM subscriptions s,
137 JOIN subscription_types st ON (s.type_id = st.type_id)
138 WHERE st.institutional = 1 AND
140 ' . ($status !==
null?
' AND s.status = ?':
''),
143 $returner = isset($result->fields[0]) ? $result->fields[0] : 0;
164 $params = array((
int) $subscriptionId);
165 if ($journalId) $params[] = (int) $journalId;
169 JOIN subscription_types st ON (s.type_id = st.type_id)
170 WHERE st.institutional = 1
171 AND s.subscription_id = ?
172 ' . ($journalId?
' AND s.journal_id = ?':
''),
175 $returner = isset($result->fields[0]) && $result->fields[0] != 0 ? true :
false;
190 JOIN subscription_types st ON (s.type_id = st.type_id)
191 WHERE st.institutional = 1
192 AND s.subscription_id = ?
195 (
int) $subscriptionId,
199 $returner = isset($result->fields[0]) && $result->fields[0] != 0 ? true :
false;
214 JOIN subscription_types st ON (s.type_id = st.type_id)
215 WHERE st.institutional = 1
217 AND s.journal_id = ?',
223 $returner = isset($result->fields[0]) && $result->fields[0] != 0 ? true :
false;
239 JOIN subscription_types st ON (s.type_id = st.type_id)
240 JOIN institutional_subscriptions iss ON (s.subscription_id = iss.subscription_id)
241 WHERE st.institutional = 1' .
242 $exactMatch ?
' AND LOWER(iss.institution_name) = LOWER(?)'
243 :
' AND LOWER(iss.institution_name) LIKE LOWER(?)'
244 .
' AND s.journal_id = ?',
250 $returner = isset($result->fields[0]) && $result->fields[0] != 0 ? true :
false;
261 $subscriptionId =
null;
263 $subscriptionId = $institutionalSubscription->getId();
266 'INSERT INTO institutional_subscriptions
267 (subscription_id, institution_name, mailing_address, domain)
271 (
int) $subscriptionId,
272 $institutionalSubscription->getInstitutionName(),
273 $institutionalSubscription->getInstitutionMailingAddress(),
274 $institutionalSubscription->getDomain()
281 return $subscriptionId;
293 'UPDATE institutional_subscriptions
294 SET institution_name = ?,
297 WHERE subscription_id = ?',
299 $institutionalSubscription->getInstitutionName(),
300 $institutionalSubscription->getInstitutionMailingAddress(),
301 $institutionalSubscription->getDomain(),
302 (
int) $institutionalSubscription->getId()
317 $this->
update(
'DELETE FROM subscriptions WHERE subscription_id = ?', (
int) $subscriptionId);
318 $this->
update(
'DELETE FROM institutional_subscriptions WHERE subscription_id = ?', (
int) $subscriptionId);
328 'SELECT s.subscription_id
330 WHERE s.journal_id = ?',
334 if ($result->RecordCount() != 0) {
335 while (!$result->EOF) {
336 $subscriptionId = $result->fields[0];
350 $result = $this->
retrieve(
'SELECT s.subscription_id FROM subscriptions s WHERE s.user_id = ?', (
int) $userId);
351 if ($result->RecordCount() != 0) {
352 while (!$result->EOF) {
353 $subscriptionId = $result->fields[0];
369 'SELECT s.subscription_id FROM subscriptions s WHERE s.user_id = ? AND s.journal_id = ?',
370 array((
int) $userId, (
int) $journalId)
373 if ($result->RecordCount() != 0) {
374 while (!$result->EOF) {
375 $subscriptionId = $result->fields[0];
389 $result = $this->
retrieve(
'SELECT s.subscription_id FROM subscriptions s WHERE s.type_id = ?', (
int) $subscriptionTypeId);
391 if ($result->RecordCount() != 0) {
392 while (!$result->EOF) {
393 $subscriptionId = $result->fields[0];
410 JOIN subscription_types st ON (s.type_id = st.type_id)
411 JOIN institutional_subscriptions iss ON (s.subscription_id = iss.subscription_id)
412 WHERE st.institutional = 1
413 ORDER BY iss.institution_name ASC, s.subscription_id',
432 function getByJournalId($journalId, $status =
null, $searchField =
null, $searchMatch =
null, $search =
null, $dateField =
null, $dateFrom =
null, $dateTo =
null, $rangeInfo =
null) {
434 $params = array_merge($userDao->getFetchParameters(), array((
int) $journalId));
435 $ipRangeSql1 = $ipRangeSql2 =
'';
436 $searchSql = $this->
_generateSearchSQL($status, $searchField, $searchMatch, $search, $dateField, $dateFrom, $dateTo, $params);
438 if (!empty($search))
switch ($searchField) {
439 case SUBSCRIPTION_INSTITUTION_NAME:
440 if ($searchMatch ===
'is') {
441 $searchSql =
' AND LOWER(iss.institution_name) = LOWER(?)';
442 } elseif ($searchMatch ===
'contains') {
443 $searchSql =
' AND LOWER(iss.institution_name) LIKE LOWER(?)';
444 $search =
'%' . $search .
'%';
446 $searchSql =
' AND LOWER(iss.institution_name) LIKE LOWER(?)';
447 $search = $search .
'%';
451 case SUBSCRIPTION_DOMAIN:
452 if ($searchMatch ===
'is') {
453 $searchSql =
' AND LOWER(iss.domain) = LOWER(?)';
454 } elseif ($searchMatch ===
'contains') {
455 $searchSql =
' AND LOWER(iss.domain) LIKE LOWER(?)';
456 $search =
'%' . $search .
'%';
458 $searchSql =
' AND LOWER(iss.domain) LIKE LOWER(?)';
459 $search = $search .
'%';
463 case SUBSCRIPTION_IP_RANGE:
464 if ($searchMatch ===
'is') {
465 $searchSql =
' AND LOWER(isip.ip_string) = LOWER(?)';
466 } elseif ($searchMatch ===
'contains') {
467 $searchSql =
' AND LOWER(isip.ip_string) LIKE LOWER(?)';
468 $search =
'%' . $search .
'%';
470 $searchSql =
' AND LOWER(isip.ip_string) LIKE LOWER(?)';
471 $search = $search .
'%';
474 $ipRangeSql1 =
', institutional_subscription_ip isip' ;
475 $ipRangeSql2 =
' AND s.subscription_id = isip.subscription_id';
481 'SELECT DISTINCT s.*, iss.*,
482 ' . $userDao->getFetchColumns() .
'
484 JOIN subscription_types st ON (s.type_id = st.type_id)
485 JOIN users u ON (s.user_id = u.user_id)
486 JOIN institutional_subscriptions iss ON (s.subscription_id = iss.subscription_id)
487 ' . $userDao->getFetchJoins() .
'
489 WHERE st.institutional = 1
492 ' . $searchSql .
' ORDER BY iss.institution_name ASC, s.subscription_id',
510 if (empty($journalId) || (empty($domain) && empty($IP)))
return false;
515 if ($checkDate ==
null) {
518 $checkDate = $this->
dateToDB($checkDate);
522 case SUBSCRIPTION_DATE_START:
523 $dateSql = sprintf(
'%s >= s.date_start AND %s >= s.date_start', $checkDate, $today);
525 case SUBSCRIPTION_DATE_END:
526 $dateSql = sprintf(
'%s <= s.date_end AND %s >= s.date_start', $checkDate, $today);
529 $dateSql = sprintf(
'%s >= s.date_start AND %s <= s.date_end', $checkDate, $checkDate);
533 if (!empty($domain)) {
535 SELECT iss.subscription_id
536 FROM institutional_subscriptions iss
537 JOIN subscriptions s ON (iss.subscription_id = s.subscription_id)
538 JOIN subscription_types st ON (s.type_id = st.type_id)
539 WHERE POSITION(UPPER(LPAD(iss.domain, LENGTH(iss.domain)+1, \'.\')) IN UPPER(LPAD(?, LENGTH(?)+1, \'.\'))) != 0
540 AND iss.domain != \'\'
542 AND s.status = ' . SUBSCRIPTION_STATUS_ACTIVE .
'
543 AND st.institutional = 1
544 AND ((st.non_expiring = 1) OR (st.non_expiring = 0 AND (' . $dateSql .
')))
545 AND (st.format = ' . SUBSCRIPTION_TYPE_FORMAT_ONLINE .
'
546 OR st.format = ' . SUBSCRIPTION_TYPE_FORMAT_PRINT_ONLINE .
')',
554 if ($result->RecordCount() != 0) {
555 $returner = $result->fields[0];
567 $IP = sprintf(
'%u', ip2long($IP));
570 'SELECT isip.subscription_id
571 FROM institutional_subscription_ip isip
572 JOIN subscriptions s ON (isip.subscription_id = s.subscription_id)
573 JOIN subscription_types st ON (s.type_id = st.type_id)
574 WHERE ((isip.ip_end IS NOT NULL
575 AND ? >= isip.ip_start AND ? <= isip.ip_end
577 AND s.status = ' . SUBSCRIPTION_STATUS_ACTIVE .
'
578 AND st.institutional = 1
579 AND ((st.non_expiring = 1) OR (st.non_expiring = 0 AND (' . $dateSql .
')))
580 AND (st.format = ' . SUBSCRIPTION_TYPE_FORMAT_ONLINE .
'
581 OR st.format = ' . SUBSCRIPTION_TYPE_FORMAT_PRINT_ONLINE .
'))
582 OR (isip.ip_end IS NULL
583 AND ? = isip.ip_start
585 AND s.status = ' . SUBSCRIPTION_STATUS_ACTIVE .
'
586 AND st.institutional = 1
587 AND ((st.non_expiring = 1) OR (st.non_expiring = 0 AND (' . $dateSql .
')))
588 AND (st.format = ' . SUBSCRIPTION_TYPE_FORMAT_ONLINE .
'
589 OR st.format = ' . SUBSCRIPTION_TYPE_FORMAT_PRINT_ONLINE .
')))',
599 if ($result->RecordCount() != 0) {
600 $returner = $result->fields[0];
616 $dateEnd = explode(
'-', $dateEnd);
621 JOIN subscription_types st ON (s.type_id = st.type_id)
622 JOIN institutional_subscriptions iss ON (s.subscription_id = iss.subscription_id)
623 WHERE s.status = ' . SUBSCRIPTION_STATUS_ACTIVE .
'
624 AND st.institutional = 1
625 AND EXTRACT(YEAR FROM s.date_end) = ?
626 AND EXTRACT(MONTH FROM s.date_end) = ?
627 AND EXTRACT(DAY FROM s.date_end) = ?
629 ORDER BY iss.institution_name ASC, s.subscription_id',
665 $institutionalSubscription = parent::_fromRow($row);
667 $institutionalSubscription->setInstitutionName($row[
'institution_name']);
668 $institutionalSubscription->setInstitutionMailingAddress($row[
'mailing_address']);
669 $institutionalSubscription->setDomain($row[
'domain']);
673 FROM institutional_subscription_ip
674 WHERE subscription_id = ?
675 ORDER BY institutional_subscription_ip_id ASC',
676 (
int) $institutionalSubscription->getId()
680 while (!$ipResult->EOF) {
681 $ipRow = $ipResult->GetRowAssoc(
false);
682 $ipRanges[] = $ipRow[
'ip_string'];
683 $ipResult->MoveNext();
686 $institutionalSubscription->setIPRanges($ipRanges);
689 HookRegistry::call(
'InstitutionalSubscriptionDAO::_fromRow', array(&$institutionalSubscription, &$row));
691 return $institutionalSubscription;
701 if (empty($ipRanges)) {
705 if (empty($subscriptionId)) {
711 while (list(, $curIPString) = each($ipRanges)) {
716 if (strpos($curIPString, SUBSCRIPTION_IP_RANGE_RANGE) ===
false) {
719 if (strpos($curIPString, SUBSCRIPTION_IP_RANGE_WILDCARD) ===
false) {
722 if (strpos($curIPString,
'/') ===
false) {
723 $ipStart = sprintf(
"%u", ip2long(trim($curIPString)));
727 list($cidrIPString, $cidrBits) = explode(
'/', trim($curIPString));
729 if ($cidrBits == 0) {
732 $cidrMask = (0xffffffff << (32 - $cidrBits));
735 $ipStart = sprintf(
'%u', ip2long($cidrIPString) & $cidrMask);
737 if ($cidrBits != 32) {
738 $ipEnd = sprintf(
'%u', ip2long($cidrIPString) | (~$cidrMask & 0xffffffff));
744 $ipStart = sprintf(
'%u', ip2long(str_replace(SUBSCRIPTION_IP_RANGE_WILDCARD,
'0', trim($curIPString))));
745 $ipEnd = sprintf(
'%u', ip2long(str_replace(SUBSCRIPTION_IP_RANGE_WILDCARD,
'255', trim($curIPString))));
750 list($ipStart, $ipEnd) = explode(SUBSCRIPTION_IP_RANGE_RANGE, $curIPString);
753 $ipStart = sprintf(
'%u', ip2long(str_replace(SUBSCRIPTION_IP_RANGE_WILDCARD,
'0', trim($ipStart))));
754 $ipEnd = sprintf(
'%u', ip2long(str_replace(SUBSCRIPTION_IP_RANGE_WILDCARD,
'255', trim($ipEnd))));
758 if (($ipStart !=
null) && ($returner)) {
759 $returner = $this->
update(
760 'INSERT INTO institutional_subscription_ip
761 (subscription_id, ip_string, ip_start, ip_end)
765 (
int) $subscriptionId,
787 'DELETE FROM institutional_subscription_ip WHERE subscription_id = ?', (
int) $subscriptionId