16 import(
'lib.pkp.classes.scheduledTask.ScheduledTask');
24 return __(
'admin.scheduledTask.subscriptionExpiryReminder');
33 protected function sendReminder ($subscription, $journal, $emailKey) {
37 $journalName = $journal->getLocalizedName();
38 $user = $userDao->getById($subscription->getUserId());
39 if (!isset($user))
return false;
41 $subscriptionType = $subscriptionTypeDao->getById($subscription->getTypeId());
43 $subscriptionName = $journal->getData(
'subscriptionName');
44 $subscriptionEmail = $journal->getData(
'subscriptionEmail');
45 $subscriptionPhone = $journal->getData(
'subscriptionPhone');
46 $subscriptionMailingAddress = $journal->getData(
'subscriptionMailingAddress');
48 $subscriptionContactSignature = $subscriptionName;
52 if ($subscriptionMailingAddress !=
'') {
53 $subscriptionContactSignature .=
"\n" . $subscriptionMailingAddress;
55 if ($subscriptionPhone !=
'') {
56 $subscriptionContactSignature .=
"\n" . __(
'user.phone') .
': ' . $subscriptionPhone;
59 $subscriptionContactSignature .=
"\n" . __(
'user.email') .
': ' . $subscriptionEmail;
62 'subscriberName' => $user->getFullName(),
63 'journalName' => $journalName,
64 'subscriptionType' => $subscriptionType->getSummaryString(),
65 'expiryDate' => $subscription->getDateEnd(),
66 'username' => $user->getUsername(),
67 'subscriptionContactSignature' => $subscriptionContactSignature
70 import(
'lib.pkp.classes.mail.MailTemplate');
71 $mail =
new MailTemplate($emailKey, $journal->getPrimaryLocale(), $journal,
false);
72 $mail->setReplyTo(
null);
73 $mail->setFrom($subscriptionEmail, $subscriptionName);
74 $mail->addRecipient($user->getEmail(), $user->getFullName());
75 $mail->setSubject($mail->getSubject($journal->getPrimaryLocale()));
76 $mail->setBody($mail->getBody($journal->getPrimaryLocale()));
77 $mail->assignParams($paramArray);
88 if ($journal->getData(
'publishingMode') == PUBLISHING_MODE_SUBSCRIPTION) {
90 $curYear = $curDate[
'year'];
91 $curMonth = $curDate[
'month'];
92 $curDay = $curDate[
'day'];
95 if ($beforeMonths = $journal->getData(
'numMonthsBeforeSubscriptionExpiryReminder')) {
96 $beforeYears = (int)floor($beforeMonths/12);
97 $beforeMonths = (int)fmod($beforeMonths,12);
99 $expiryYear = $curYear + $beforeYears + (int)floor(($curMonth+$beforeMonths)/12);
100 $expiryMonth = (int)fmod($curMonth+$beforeMonths,12);
101 $expiryDay = $curDay;
106 $dateEnd = $expiryYear .
'-' . $expiryMonth .
'-' . $expiryDay;
107 $individualSubscriptions = $individualSubscriptionDao->getByDateEnd($dateEnd, $journal->getId());
108 $institutionalSubscriptions = $institutionalSubscriptionDao->getByDateEnd($dateEnd, $journal->getId());
110 while ($subscription = $individualSubscriptions->next()) {
111 $this->
sendReminder($subscription, $journal,
'SUBSCRIPTION_BEFORE_EXPIRY');
114 while ($subscription = $institutionalSubscriptions->next()) {
115 $this->
sendReminder($subscription, $journal,
'SUBSCRIPTION_BEFORE_EXPIRY');
120 if ($beforeWeeks = $journal->getData(
'numWeeksBeforeSubscriptionExpiryReminder')) {
121 $beforeDays = $beforeWeeks * 7;
123 $expiryMonth = $curMonth + (int)floor(($curDay+$beforeDays)/31);
124 $expiryYear = $curYear + (int)floor($expiryMonth/12);
125 $expiryDay = (int)fmod($curDay+$beforeDays,31);
126 $expiryMonth = (int)fmod($expiryMonth,12);
131 $dateEnd = $expiryYear .
'-' . $expiryMonth .
'-' . $expiryDay;
132 $individualSubscriptions = $individualSubscriptionDao->getByDateEnd($dateEnd, $journal->getId());
133 $institutionalSubscriptions = $institutionalSubscriptionDao->getByDateEnd($dateEnd, $journal->getId());
135 while ($subscription = $individualSubscriptions->next()) {
136 $this->
sendReminder($subscription, $journal,
'SUBSCRIPTION_BEFORE_EXPIRY');
139 while ($subscription = $institutionalSubscriptions->next()) {
140 $this->
sendReminder($subscription, $journal,
'SUBSCRIPTION_BEFORE_EXPIRY');
145 if ($afterMonths = $journal->getData(
'numMonthsAfterSubscriptionExpiryReminder')) {
146 $afterYears = (int)floor($afterMonths/12);
147 $afterMonths = (int)fmod($afterMonths,12);
149 if (($curMonth - $afterMonths) <= 0) {
151 $expiryMonth = 12 + ($curMonth - $afterMonths);
153 $expiryMonth = $curMonth - $afterMonths;
156 $expiryYear = $curYear - $afterYears;
157 $expiryDay = $curDay;
162 $dateEnd = $expiryYear .
'-' . $expiryMonth .
'-' . $expiryDay;
163 $individualSubscriptions = $individualSubscriptionDao->getByDateEnd($dateEnd, $journal->getId());
164 $institutionalSubscriptions = $institutionalSubscriptionDao->getByDateEnd($dateEnd, $journal->getId());
166 while ($subscription = $individualSubscriptions->next()) {
167 $this->
sendReminder($subscription, $journal,
'SUBSCRIPTION_AFTER_EXPIRY_LAST');
170 while ($subscription = $institutionalSubscriptions->next()) {
171 $this->
sendReminder($subscription, $journal,
'SUBSCRIPTION_AFTER_EXPIRY_LAST');
176 if ($afterWeeks = $journal->getData(
'numWeeksAfterSubscriptionExpiryReminder')) {
177 $afterDays = $afterWeeks * 7;
179 if (($curDay - $afterDays) <= 0) {
181 $expiryDay = 31 + ($curDay - $afterDays);
184 $expiryDay = $curDay - $afterDays;
187 if (($curMonth - $afterMonths) == 0) {
192 $expiryMonth = $curMonth - $afterMonths;
195 $expiryYear = $curYear - $afterYears;
200 $dateEnd = $expiryYear .
'-' . $expiryMonth .
'-' . $expiryDay;
201 $individualSubscriptions = $individualSubscriptionDao->getByDateEnd($dateEnd, $journal->getId());
202 $institutionalSubscriptions = $institutionalSubscriptionDao->getByDateEnd($dateEnd, $journal->getId());
204 while ($subscription = $individualSubscriptions->next()) {
205 $this->
sendReminder($subscription, $journal,
'SUBSCRIPTION_AFTER_EXPIRY');
208 while ($subscription = $institutionalSubscriptions->next()) {
209 $this->
sendReminder($subscription, $journal,
'SUBSCRIPTION_AFTER_EXPIRY');
220 $journals = $journalDao->getAll(
true);
224 'month' => date(
'n'),
228 while ($journal = $journals->next()) {
236 $shortMonths = array(2,4,6,9,11);
238 if (($todayDate[
'day'] == 1) && in_array(($todayDate[
'month'] - 1), $shortMonths)) {
240 $curDate[
'day'] = 31;
241 $curDate[
'month'] = $todayDate[
'month'] - 1;
243 if ($curDate[
'month'] == 0) {
244 $curDate[
'month'] = 12;
245 $curDate[
'year'] = $todayDate[
'year'] - 1;
247 $curDate[
'year'] = $todayDate[
'year'];
250 $journals = $journalDao->getAll(
true);
251 while ($journal = $journals->next()) {
259 if (($todayDate[
'day'] == 1) && ($todayDate[
'month'] == 3)) {
261 $curDate[
'day'] = 30;
262 $curDate[
'month'] = 2;
263 $curDate[
'year'] = $todayDate[
'year'];
265 $journals = $journalDao->getAll(
true);
266 while ($journal = $journals->next()) {
272 if (date(
"L", mktime(0,0,0,0,0,$curDate[
'year'])) !=
'1') {
274 $curDate[
'day'] = 29;
276 $journals = $journalDao->getAll(
true);
278 while ($journal = $journals->next()) {