16 import(
'lib.pkp.classes.form.Form');
40 public function __construct($template, $subscriptionId =
null) {
41 parent::__construct($template);
43 $subscriptionId = isset($subscriptionId) ? (int) $subscriptionId :
null;
45 $this->subscription =
null;
46 $this->subscriptionTypes =
null;
48 import(
'classes.subscription.SubscriptionDAO');
51 $isoCodes = new \Sokil\IsoCodes\IsoCodesFactory();
52 $this->validCountries = array();
53 foreach ($isoCodes->getCountries() as $country) {
54 $this->validCountries[$country->getAlpha2()] = $country->getLocalName();
56 asort($this->validCountries);
59 $this->
addCheck(
new FormValidator($this,
'userId',
'required',
'manager.subscriptions.form.userIdRequired'));
62 return $userDao->userExistsById(
$userId);
66 $this->
addCheck(
new FormValidator($this,
'status',
'required',
'manager.subscriptions.form.statusRequired'));
67 $this->
addCheck(
new FormValidatorInSet($this,
'status',
'required',
'manager.subscriptions.form.statusValid', array_keys($this->validStatus)));
69 $this->
addCheck(
new FormValidator($this,
'typeId',
'required',
'manager.subscriptions.form.typeIdRequired'));
71 $this->
addCheck(
new FormValidatorInSet($this,
'notifyEmail',
'optional',
'manager.subscriptions.form.notifyEmailValid', array(
'1')));
81 public function fetch($request, $template =
null, $display =
false) {
83 $templateMgr->assign(array(
84 'subscriptionId' => $this->subscription?$this->subscription->getId():
null,
85 'yearOffsetPast' => SUBSCRIPTION_YEAR_OFFSET_PAST,
86 'yearOffsetFuture' => SUBSCRIPTION_YEAR_OFFSET_FUTURE,
87 'validStatus' => $this->validStatus,
88 'subscriptionTypes' => $this->subscriptionTypes,
90 return parent::fetch($request, $template, $display);
97 if (isset($this->subscription)) {
116 $this->
readUserVars(array(
'status',
'userId',
'typeId',
'membership',
'referenceNumber',
'notes',
'notifyEmail',
'dateStart',
'dateEnd'));
120 $needMembership = $subscriptionTypeDao->getSubscriptionTypeMembership($this->
getData(
'typeId'));
122 if ($needMembership) {
123 $this->
addCheck(
new FormValidator($this,
'membership',
'required',
'manager.subscriptions.form.membershipRequired'));
127 $subscriptionType = $subscriptionTypeDao->getById($this->
getData(
'typeId'));
128 $nonExpiring = $subscriptionType->getNonExpiring();
132 $this->
addCheck(
new FormValidator($this,
'dateStart',
'required',
'manager.subscriptions.form.dateStartRequired'));
133 $this->
addCheck(
new FormValidatorCustom($this,
'dateStart',
'required',
'manager.subscriptions.form.dateStartValid',
function($dateStart) {
134 $dateStartYear = strftime(
'%Y', strtotime($dateStart));
135 $minYear = date(
'Y') + SUBSCRIPTION_YEAR_OFFSET_PAST;
136 $maxYear = date(
'Y') + SUBSCRIPTION_YEAR_OFFSET_FUTURE;
137 return ($dateStartYear >= $minYear && $dateStartYear <= $maxYear);
139 $this->
addCheck(
new FormValidatorCustom($this,
'dateStart',
'required',
'manager.subscriptions.form.dateStartValid',
function($dateStart) {
140 $dateStartMonth = strftime(
'%m', strtotime($dateStart));
141 return ($dateStartMonth >= 1 && $dateStartMonth <= 12);
143 $this->
addCheck(
new FormValidatorCustom($this,
'dateStart',
'required',
'manager.subscriptions.form.dateStartValid',
function($dateStart) {
144 $dateStartDay = strftime(
'%d', strtotime($dateStart));
145 return ($dateStartDay >= 1 && $dateStartDay <= 31);
149 $this->
addCheck(
new FormValidator($this,
'dateEnd',
'required',
'manager.subscriptions.form.dateEndRequired'));
150 $this->
addCheck(
new FormValidatorCustom($this,
'dateEnd',
'required',
'manager.subscriptions.form.dateEndValid',
function($dateEnd) {
151 $dateEndYear = strftime(
'%Y', strtotime($dateEnd)); $minYear = date(
'Y') + SUBSCRIPTION_YEAR_OFFSET_PAST;
152 $maxYear = date(
'Y') + SUBSCRIPTION_YEAR_OFFSET_FUTURE;
153 return ($dateEndYear >= $minYear && $dateEndYear <= $maxYear);
155 $this->
addCheck(
new FormValidatorCustom($this,
'dateEnd',
'required',
'manager.subscriptions.form.dateEndValid',
function($dateEnd) {
156 $dateEndMonth = strftime(
'%m', strtotime($dateEnd));
157 return ($dateEndMonth >= 1 && $dateEndMonth <= 12);
159 $this->
addCheck(
new FormValidatorCustom($this,
'dateEnd',
'required',
'manager.subscriptions.form.dateEndValid',
function($dateEnd) {
160 $dateEndDay = strftime(
'%d', strtotime($dateEnd));
161 return ($dateEndDay >= 1 && $dateEndDay <= 31);
165 $this->
addCheck(
new FormValidatorCustom($this,
'dateStart',
'optional',
'manager.subscriptions.form.dateStartEmpty',
function($dateStart) {
166 return empty($dateStart);
168 $this->
addCheck(
new FormValidatorCustom($this,
'dateEnd',
'optional',
'manager.subscriptions.form.dateEndEmpty',
function($dateEnd) {
169 return empty($dateEnd);
174 if ($this->_data[
'notifyEmail'] == 1) {
175 $this->
addCheck(
new FormValidatorCustom($this,
'notifyEmail',
'required',
'manager.subscriptions.form.subscriptionContactRequired',
function() {
177 $journal = $request->getJournal();
178 $subscriptionName = $journal->getData(
'subscriptionName');
179 $subscriptionEmail = $journal->getData(
'subscriptionEmail');
180 return $subscriptionName !=
'' && $subscriptionEmail !=
'';
188 public function execute(...$functionArgs) {
190 $journal = $request->getJournal();
193 parent::execute(...$functionArgs);
197 $subscription->setUserId($this->
getData(
'userId'));
198 $subscription->setTypeId($this->
getData(
'typeId'));
199 $subscription->setMembership($this->
getData(
'membership') ? $this->
getData(
'membership') :
null);
200 $subscription->setReferenceNumber($this->
getData(
'referenceNumber') ? $this->
getData(
'referenceNumber') :
null);
201 $subscription->setNotes($this->
getData(
'notes') ? $this->
getData(
'notes') :
null);
204 $subscriptionType = $subscriptionTypeDao->getById(
$subscription->getTypeId());
205 if (!$subscriptionType->getNonExpiring()) {
207 $subscription->setDateEnd($this->
getData(
'dateEnd'));
220 $journal = $request->getJournal();
221 $journalName = $journal->getLocalizedTitle();
222 $user = $userDao->getById($this->subscription->getUserId());
223 $subscriptionType = $subscriptionTypeDao->getById($this->subscription->getTypeId());
225 $subscriptionName = $journal->getData(
'subscriptionName');
226 $subscriptionEmail = $journal->getData(
'subscriptionEmail');
227 $subscriptionPhone = $journal->getData(
'subscriptionPhone');
228 $subscriptionMailingAddress = $journal->getData(
'subscriptionMailingAddress');
229 $subscriptionContactSignature = $subscriptionName;
231 if ($subscriptionMailingAddress !=
'') {
232 $subscriptionContactSignature .=
"\n" . $subscriptionMailingAddress;
234 if ($subscriptionPhone !=
'') {
235 $subscriptionContactSignature .=
"\n" . __(
'user.phone') .
': ' . $subscriptionPhone;
238 $subscriptionContactSignature .=
"\n" . __(
'user.email') .
': ' . $subscriptionEmail;
241 'subscriberName' => $user->getFullName(),
242 'journalName' => $journalName,
243 'subscriptionType' => $subscriptionType->getSummaryString(),
244 'username' => $user->getUsername(),
245 'subscriptionContactSignature' => $subscriptionContactSignature
248 import(
'lib.pkp.classes.mail.MailTemplate');
250 $mail->setReplyTo($subscriptionEmail, $subscriptionName);
251 $mail->addRecipient($user->getEmail(), $user->getFullName());
252 $mail->setSubject($mail->getSubject($journal->getPrimaryLocale()));
253 $mail->setBody($mail->getBody($journal->getPrimaryLocale()));
254 $mail->assignParams($paramArray);