17 import(
'classes.subscription.Subscription');
18 import(
'classes.subscription.SubscriptionType');
20 define(
'SUBSCRIPTION_USER', 0x01);
21 define(
'SUBSCRIPTION_MEMBERSHIP', 0x02);
22 define(
'SUBSCRIPTION_REFERENCE_NUMBER', 0x03);
23 define(
'SUBSCRIPTION_NOTES', 0x04);
32 abstract function getById($subscriptionId);
41 'SELECT journal_id FROM subscriptions WHERE subscription_id = ?', (
int) $subscriptionId
44 $returner = isset($result->fields[0]) ? $result->fields[0] :
false;
56 SUBSCRIPTION_STATUS_ACTIVE =>
'subscriptions.status.active',
57 SUBSCRIPTION_STATUS_NEEDS_INFORMATION =>
'subscriptions.status.needsInformation',
58 SUBSCRIPTION_STATUS_NEEDS_APPROVAL =>
'subscriptions.status.needsApproval',
59 SUBSCRIPTION_STATUS_AWAITING_MANUAL_PAYMENT =>
'subscriptions.status.awaitingManualPayment',
60 SUBSCRIPTION_STATUS_AWAITING_ONLINE_PAYMENT =>
'subscriptions.status.awaitingOnlinePayment',
61 SUBSCRIPTION_STATUS_OTHER =>
'subscriptions.status.other'
106 return $this->
_getInsertId(
'subscriptions',
'subscription_id');
121 abstract function deleteById($subscriptionId, $journalId);
148 abstract function getAll($rangeInfo =
null);
162 abstract function getByJournalId($journalId, $status =
null, $searchField =
null, $searchMatch =
null, $search =
null, $dateField =
null, $dateFrom =
null, $dateTo =
null, $rangeInfo =
null);
170 abstract function getByDateEnd($dateEnd, $journalId, $rangeInfo =
null);
184 protected function _generateSearchSQL($status =
null, $searchField =
null, $searchMatch =
null, $search =
null, $dateField =
null, $dateFrom =
null, $dateTo =
null, &$params) {
187 if (!empty($search))
switch ($searchField) {
188 case IDENTITY_SETTING_GIVENNAME:
189 if ($searchMatch ===
'is') {
190 $searchSql =
' AND LOWER(COALESCE(ugl.setting_value,ugpl.setting_value)) = LOWER(?)';
191 } elseif ($searchMatch ===
'contains') {
192 $searchSql =
' AND LOWER(COALESCE(ugl.setting_value,ugpl.setting_value)) LIKE LOWER(?)';
193 $search =
'%' . $search .
'%';
195 $searchSql =
' AND LOWER(COALESCE(ugl,ugpl)) LIKE LOWER(?)';
196 $search = $search .
'%';
200 case IDENTITY_SETTING_FAMILYNAME:
201 if ($searchMatch ===
'is') {
202 $searchSql =
' AND LOWER(COALESCE(ufl.setting_value,ufpl.setting_value)) = LOWER(?)';
203 } elseif ($searchMatch ===
'contains') {
204 $searchSql =
' AND LOWER(COALESCE(ufl.setting_value,ufpl.setting_value)) LIKE LOWER(?)';
205 $search =
'%' . $search .
'%';
207 $searchSql =
' AND LOWER(COALESCE(ufl.setting_value,ufpl.setting_value)) LIKE LOWER(?)';
208 $search = $search .
'%';
212 case USER_FIELD_USERNAME:
213 if ($searchMatch ===
'is') {
214 $searchSql =
' AND LOWER(u.username) = LOWER(?)';
215 } elseif ($searchMatch ===
'contains') {
216 $searchSql =
' AND LOWER(u.username) LIKE LOWER(?)';
217 $search =
'%' . $search .
'%';
219 $searchSql =
' AND LOWER(u.username) LIKE LOWER(?)';
220 $search = $search .
'%';
224 case USER_FIELD_EMAIL:
225 if ($searchMatch ===
'is') {
226 $searchSql =
' AND LOWER(u.email) = LOWER(?)';
227 } elseif ($searchMatch ===
'contains') {
228 $searchSql =
' AND LOWER(u.email) LIKE LOWER(?)';
229 $search =
'%' . $search .
'%';
231 $searchSql =
' AND LOWER(u.email) LIKE LOWER(?)';
232 $search = $search .
'%';
236 case SUBSCRIPTION_MEMBERSHIP:
237 if ($searchMatch ===
'is') {
238 $searchSql =
' AND LOWER(s.membership) = LOWER(?)';
239 } elseif ($searchMatch ===
'contains') {
240 $searchSql =
' AND LOWER(s.membership) LIKE LOWER(?)';
241 $search =
'%' . $search .
'%';
243 $searchSql =
' AND LOWER(s.membership) LIKE LOWER(?)';
244 $search = $search .
'%';
248 case SUBSCRIPTION_REFERENCE_NUMBER:
249 if ($searchMatch ===
'is') {
250 $searchSql =
' AND LOWER(s.reference_number) = LOWER(?)';
251 } elseif ($searchMatch ===
'contains') {
252 $searchSql =
' AND LOWER(s.reference_number) LIKE LOWER(?)';
253 $search =
'%' . $search .
'%';
255 $searchSql =
' AND LOWER(s.reference_number) LIKE LOWER(?)';
256 $search = $search .
'%';
260 case SUBSCRIPTION_NOTES:
261 if ($searchMatch ===
'is') {
262 $searchSql =
' AND LOWER(s.notes) = LOWER(?)';
263 } elseif ($searchMatch ===
'contains') {
264 $searchSql =
' AND LOWER(s.notes) LIKE LOWER(?)';
265 $search =
'%' . $search .
'%';
267 $searchSql =
' AND LOWER(s.notes) LIKE LOWER(?)';
268 $search = $search .
'%';
274 if (!empty($dateFrom) || !empty($dateTo))
switch($dateField) {
275 case SUBSCRIPTION_DATE_START:
276 if (!empty($dateFrom)) {
277 $searchSql .=
' AND s.date_start >= ' . $this->
datetimeToDB($dateFrom);
279 if (!empty($dateTo)) {
280 $searchSql .=
' AND s.date_start <= ' . $this->
datetimeToDB($dateTo);
283 case SUBSCRIPTION_DATE_END:
284 if (!empty($dateFrom)) {
285 $searchSql .=
' AND s.date_end >= ' . $this->
datetimeToDB($dateFrom);
287 if (!empty($dateTo)) {
288 $searchSql .=
' AND s.date_end <= ' . $this->
datetimeToDB($dateTo);
293 if (!empty($status)) {
294 $searchSql .=
' AND s.status = ' . (int) $status;
313 $subscription->setId($row[
'subscription_id']);
314 $subscription->setJournalId($row[
'journal_id']);
315 $subscription->setUserId($row[
'user_id']);
316 $subscription->setTypeId($row[
'type_id']);
317 $subscription->setDateStart($this->
dateFromDB($row[
'date_start']));
318 $subscription->setDateEnd($this->
dateFromDB($row[
'date_end']));
319 $subscription->setStatus($row[
'status']);
320 $subscription->setMembership($row[
'membership']);
321 $subscription->setReferenceNumber($row[
'reference_number']);
322 $subscription->setNotes($row[
'notes']);
326 return $subscription;
335 $dateStart = $subscription->getDateStart();
336 $dateEnd = $subscription->getDateEnd();
338 sprintf(
'INSERT INTO subscriptions
339 (journal_id, user_id, type_id, date_start, date_end, status, membership, reference_number, notes)
341 (?, ?, ?, %s, %s, ?, ?, ?, ?)',
342 $dateStart!==
null?$this->
dateToDB($dateStart):
'null',
345 (
int) $subscription->getJournalId(),
346 (
int) $subscription->getUserId(),
347 (
int) $subscription->getTypeId(),
348 (
int) $subscription->getStatus(),
349 $subscription->getMembership(),
350 $subscription->getReferenceNumber(),
351 $subscription->getNotes()
356 $subscription->setId($subscriptionId);
358 return $subscriptionId;
366 $dateStart = $subscription->getDateStart();
367 $dateEnd = $subscription->getDateEnd();
369 sprintf(
'UPDATE subscriptions
378 reference_number = ?,
380 WHERE subscription_id = ?',
381 $dateStart!==
null?$this->
dateToDB($dateStart):
'null',
384 (
int) $subscription->getJournalId(),
385 (
int) $subscription->getUserId(),
386 (
int) $subscription->getTypeId(),
387 (
int) $subscription->getStatus(),
388 $subscription->getMembership(),
389 $subscription->getReferenceNumber(),
390 $subscription->getNotes(),
391 (
int) $subscription->getId()
403 if ($subscription->isNonExpiring())
return;
406 $subscriptionType = $subscriptionTypeDao->getById($subscription->getTypeId());
408 $duration = $subscriptionType->getDuration();
409 $dateEnd = strtotime($subscription->getDateEnd());
413 if ($dateEnd < $time ) $dateEnd = $time;
415 $subscription->setDateEnd(mktime(23, 59, 59, date(
"m", $dateEnd)+$duration, date(
"d", $dateEnd), date(
"Y", $dateEnd)));