Open Journal Systems  3.3.0
UserIndividualSubscriptionForm.inc.php
1 <?php
2 
16 import('lib.pkp.classes.form.Form');
17 
20  var $request;
21 
23  var $userId;
24 
26  var $subscription;
27 
30 
37  function __construct($request, $userId = null, $subscriptionId = null) {
38  parent::__construct('frontend/pages/purchaseIndividualSubscription.tpl');
39 
40  $this->userId = isset($userId) ? (int) $userId : null;
41  $this->subscription = null;
42  $this->request = $request;
43 
44  $subscriptionId = isset($subscriptionId) ? (int) $subscriptionId : null;
45 
46  if (isset($subscriptionId)) {
47  $subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /* @var $subscriptionDao IndividualSubscriptionDAO */
48  if ($subscriptionDao->subscriptionExists($subscriptionId)) {
49  $this->subscription = $subscriptionDao->getById($subscriptionId);
50  }
51  }
52 
53  $journal = $this->request->getJournal();
54  $journalId = $journal->getId();
55 
56  $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /* @var $subscriptionTypeDao SubscriptionTypeDAO */
57  $subscriptionTypes = $subscriptionTypeDao->getByInstitutional($journalId, false, false);
58  $this->subscriptionTypes = $subscriptionTypes->toAssociativeArray();
59 
60  // Ensure subscription type is valid
61  $this->addCheck(new FormValidatorCustom($this, 'typeId', 'required', 'user.subscriptions.form.typeIdValid', function($typeId) use ($journalId) {
62  $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /* @var $subscriptionTypeDao SubscriptionTypeDAO */
63  return ($subscriptionTypeDao->subscriptionTypeExistsByTypeId($typeId, $journalId) && $subscriptionTypeDao->getSubscriptionTypeInstitutional($typeId) == 0) && $subscriptionTypeDao->getSubscriptionTypeDisablePublicDisplay($typeId) == 0;
64  }));
65 
66  // Ensure that user does not already have a subscription for this journal
67  if (!isset($subscriptionId)) {
68  $this->addCheck(new FormValidatorCustom($this, 'userId', 'required', 'user.subscriptions.form.subscriptionExists', array(DAORegistry::getDAO('IndividualSubscriptionDAO'), 'subscriptionExistsByUserForJournal'), array($journalId), true));
69  } else {
70  $this->addCheck(new FormValidatorCustom($this, 'userId', 'required', 'user.subscriptions.form.subscriptionExists', function($userId) use ($journalId, $subscriptionId) {
71  $subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /* @var $subscriptionDao IndividualSubscriptionDAO */
72  $checkId = $subscriptionDao->getByUserIdForJournal($userId, $journalId);
73  return ($checkId == 0 || $checkId == $subscriptionId) ? true : false;
74  }));
75  }
76 
77  $this->addCheck(new FormValidatorPost($this));
78  $this->addCheck(new FormValidatorCSRF($this));
79  }
80 
84  function initData() {
85  if (isset($this->subscription)) {
87 
88  $this->_data = array(
89  'typeId' => $subscription->getTypeId(),
90  'membership' => $subscription->getMembership()
91  );
92  }
93  }
94 
98  function display($request = null, $template = null) {
99  if (is_null($request)) {
101  }
102  $templateMgr = TemplateManager::getManager($this->request);
103  $templateMgr->assign(array(
104  'subscriptionId' => $this->subscription?$this->subscription->getId():null,
105  'subscriptionTypes' => array_map(
106  function($subscriptionType) {return $subscriptionType->getLocalizedName() . ' (' . $subscriptionType->getCost() . ' ' . $subscriptionType->getCurrencyCodeAlpha() . ')';},
108  ),
109  ));
110  parent::display($request, $template);
111  }
112 
116  function readInputData() {
117  $this->readUserVars(array('typeId', 'membership'));
118 
119  // If subscription type requires it, membership is provided
120  $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /* @var $subscriptionTypeDao SubscriptionTypeDAO */
121  $needMembership = $subscriptionTypeDao->getSubscriptionTypeMembership($this->getData('typeId'));
122 
123  if ($needMembership) {
124  $this->addCheck(new FormValidator($this, 'membership', 'required', 'user.subscriptions.form.membershipRequired'));
125  }
126  }
127 
131  function execute(...$functionArgs) {
132  $journal = $this->request->getJournal();
133  $journalId = $journal->getId();
134  $typeId = $this->getData('typeId');
135  $individualSubscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /* @var $individualSubscriptionDao IndividualSubscriptionDAO */
136  $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /* @var $subscriptionTypeDao SubscriptionTypeDAO */
137  $subscriptionType = $subscriptionTypeDao->getById($typeId, $journalId);
138  $nonExpiring = $subscriptionType->getNonExpiring();
139  $today = date('Y-m-d');
140  $insert = false;
141 
142  parent::execute(...$functionArgs);
143 
144  if (!isset($this->subscription)) {
145  $subscription = $individualSubscriptionDao->newDataObject();
146  $subscription->setJournalId($journalId);
147  $subscription->setUserId($this->userId);
148  $subscription->setReferenceNumber(null);
149  $subscription->setNotes(null);
150 
151  $insert = true;
152  } else {
154  }
155 
156  $paymentManager = Application::getPaymentManager($journal);
157  $paymentPlugin = $paymentManager->getPaymentPlugin();
158 
159  if ($paymentPlugin->getName() == 'ManualPayment') {
160  $subscription->setStatus(SUBSCRIPTION_STATUS_AWAITING_MANUAL_PAYMENT);
161  } else {
162  $subscription->setStatus(SUBSCRIPTION_STATUS_AWAITING_ONLINE_PAYMENT);
163  }
164 
165  $subscription->setTypeId($typeId);
166  $subscription->setMembership($this->getData('membership') ? $this->getData('membership') : null);
167  $subscription->setDateStart($nonExpiring ? null : $today);
168  $subscription->setDateEnd($nonExpiring ? null : $today);
169 
170  if ($subscription->getId()) {
171  $individualSubscriptionDao->updateObject($subscription);
172  } else {
173  $individualSubscriptionDao->insertObject($subscription);
174  }
175 
176  $queuedPayment = $paymentManager->createQueuedPayment($this->request, PAYMENT_TYPE_PURCHASE_SUBSCRIPTION, $this->userId, $subscription->getId(), $subscriptionType->getCost(), $subscriptionType->getCurrencyCodeAlpha());
177  $paymentManager->queuePayment($queuedPayment);
178 
179  $paymentForm = $paymentManager->getPaymentForm($queuedPayment);
180  $paymentForm->display($this->request);
181  }
182 }
UserIndividualSubscriptionForm\__construct
__construct($request, $userId=null, $subscriptionId=null)
Definition: UserIndividualSubscriptionForm.inc.php:49
UserIndividualSubscriptionForm\execute
execute(... $functionArgs)
Definition: UserIndividualSubscriptionForm.inc.php:143
UserIndividualSubscriptionForm\readInputData
readInputData()
Definition: UserIndividualSubscriptionForm.inc.php:128
UserIndividualSubscriptionForm\$subscription
$subscription
Definition: UserIndividualSubscriptionForm.inc.php:35
UserIndividualSubscriptionForm\initData
initData()
Definition: UserIndividualSubscriptionForm.inc.php:96
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
UserIndividualSubscriptionForm\$userId
$userId
Definition: UserIndividualSubscriptionForm.inc.php:29
Form\readUserVars
readUserVars($vars)
Definition: Form.inc.php:378
Form\getData
getData($key)
Definition: Form.inc.php:220
FormValidatorPost
Form validation check to make sure the form is POSTed.
Definition: FormValidatorPost.inc.php:18
Application\getPaymentManager
static getPaymentManager($context)
Definition: Application.inc.php:226
UserIndividualSubscriptionForm\$request
$request
Definition: UserIndividualSubscriptionForm.inc.php:23
UserIndividualSubscriptionForm
Form class for user purchase of individual subscription.
Definition: UserIndividualSubscriptionForm.inc.php:18
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
FormValidator
Class to represent a form validation check.
Definition: FormValidator.inc.php:23
UserIndividualSubscriptionForm\$subscriptionTypes
$subscriptionTypes
Definition: UserIndividualSubscriptionForm.inc.php:41
Form\addCheck
addCheck($formValidator)
Definition: Form.inc.php:395
FormValidatorCSRF
Form validation check to make sure the CSRF token is correct.
Definition: FormValidatorCSRF.inc.php:18
Form
Class defining basic operations for handling HTML forms.
Definition: Form.inc.php:47
FormValidatorCustom
Form validation check with a custom user function performing the validation check.
Definition: FormValidatorCustom.inc.php:18
UserIndividualSubscriptionForm\display
display($request=null, $template=null)
Definition: UserIndividualSubscriptionForm.inc.php:110