Open Journal Systems  3.3.0
pages/user/UserHandler.inc.php
1 <?php
2 
16 import('lib.pkp.pages.user.PKPUserHandler');
17 
18 class UserHandler extends PKPUserHandler {
24  function subscriptions($args, $request) {
25  $this->validate(null, $request);
26 
27  $journal = $request->getJournal();
28  $user = $request->getUser();
29  $templateMgr = TemplateManager::getManager($request);
30  if (!$journal || !$user || $journal->getData('publishingMode') != PUBLISHING_MODE_SUBSCRIPTION) {
31  $request->redirect(null, 'index');
32  }
33 
34  $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /* @var $subscriptionTypeDao SubscriptionTypeDAO */
35  $individualSubscriptionTypesExist = $subscriptionTypeDao->subscriptionTypesExistByInstitutional($journal->getId(), false);
36  $institutionalSubscriptionTypesExist = $subscriptionTypeDao->subscriptionTypesExistByInstitutional($journal->getId(), true);
37  if (!$individualSubscriptionTypesExist && !$institutionalSubscriptionTypesExist) $request->redirect(null, 'index');
38 
39  // Subscriptions contact and additional information
40  // Get subscriptions and options for current journal
41  if ($individualSubscriptionTypesExist) {
42  $subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /* @var $subscriptionDao IndividualSubscriptionDAO */
43  $userIndividualSubscription = $subscriptionDao->getByUserIdForJournal($user->getId(), $journal->getId());
44  $templateMgr->assign('userIndividualSubscription', $userIndividualSubscription);
45  }
46 
47  if ($institutionalSubscriptionTypesExist) {
48  $subscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO'); /* @var $subscriptionDao InstitutionalSubscriptionDAO */
49  $userInstitutionalSubscriptions = $subscriptionDao->getByUserIdForJournal($user->getId(), $journal->getId());
50  $templateMgr->assign('userInstitutionalSubscriptions', $userInstitutionalSubscriptions);
51  }
52 
53  $paymentManager = Application::getPaymentManager($journal);
54 
55  $this->setupTemplate($request);
56 
57  $templateMgr->assign(array(
58  'subscriptionName' => $journal->getData('subscriptionName'),
59  'subscriptionEmail' => $journal->getData('subscriptionEmail'),
60  'subscriptionPhone' => $journal->getData('subscriptionPhone'),
61  'subscriptionMailingAddress' => $journal->getData('subscriptionMailingAddress'),
62  'subscriptionAdditionalInformation' => $journal->getLocalizedData('subscriptionAdditionalInformation'),
63  'journalTitle' => $journal->getLocalizedName(),
64  'journalPath' => $journal->getPath(),
65  'individualSubscriptionTypesExist' => $individualSubscriptionTypesExist,
66  'institutionalSubscriptionTypesExist' => $institutionalSubscriptionTypesExist,
67  'paymentsEnabled' => $paymentManager->isConfigured(),
68  ));
69  $templateMgr->display('frontend/pages/userSubscriptions.tpl');
70 
71  }
72 
78  function _checkIncompleteSetup($journal) {
79  if($journal->getLocalizedAcronym() == '' || $journal->getData('contactEmail') == '' ||
80  $journal->getData('contactName') == '' || $journal->getLocalizedData('abbreviation') == '') {
81  return true;
82  } else return false;
83  }
84 
89  function setupTemplate($request = null) {
90  parent::setupTemplate($request);
91  AppLocale::requireComponents(LOCALE_COMPONENT_APP_AUTHOR, LOCALE_COMPONENT_APP_EDITOR, LOCALE_COMPONENT_APP_MANAGER, LOCALE_COMPONENT_PKP_GRID);
92  }
93 
94 
95  //
96  // Payments
97  //
103  function purchaseSubscription($args, $request) {
104  $this->validate(null, $request);
105  $journal = $request->getJournal();
106  if (empty($args) || !$journal || $journal->getData('publishingMode') != PUBLISHING_MODE_SUBSCRIPTION) {
107  $request->redirect(null, 'index');
108  }
109 
110  $paymentManager = Application::getPaymentManager($journal);
111  $acceptSubscriptionPayments = $paymentManager->isConfigured();
112  if (!$acceptSubscriptionPayments) $request->redirect(null, 'index');
113 
114  $this->setupTemplate($request);
115  $user = $request->getUser();
116 
117  $institutional = array_shift($args);
118  if (!empty($args)) {
119  $subscriptionId = (int) array_shift($args);
120  }
121 
122  if ($institutional == 'institutional') {
123  $institutional = true;
124  import('classes.subscription.form.UserInstitutionalSubscriptionForm');
125  $subscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO'); /* @var $subscriptionDao InstitutionalSubscriptionDAO */
126  } else {
127  $institutional = false;
128  import('classes.subscription.form.UserIndividualSubscriptionForm');
129  $subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /* @var $subscriptionDao IndividualSubscriptionDAO */
130  }
131 
132  if (isset($subscriptionId)) {
133  // Ensure subscription to be updated is for this user
134  if (!$subscriptionDao->subscriptionExistsByUser($subscriptionId, $user->getId())) {
135  $request->redirect(null, 'index');
136  }
137 
138  // Ensure subscription can be updated
139  $subscription = $subscriptionDao->getById($subscriptionId);
140  $subscriptionStatus = $subscription->getStatus();
141  import('classes.subscription.Subscription');
142  $validStatus = array(
143  SUBSCRIPTION_STATUS_ACTIVE,
144  SUBSCRIPTION_STATUS_AWAITING_ONLINE_PAYMENT,
145  SUBSCRIPTION_STATUS_AWAITING_MANUAL_PAYMENT
146  );
147 
148  if (!in_array($subscriptionStatus, $validStatus)) $request->redirect(null, 'index');
149 
150  if ($institutional) {
151  $subscriptionForm = new UserInstitutionalSubscriptionForm($request, $user->getId(), $subscriptionId);
152  } else {
153  $subscriptionForm = new UserIndividualSubscriptionForm($request, $user->getId(), $subscriptionId);
154  }
155 
156  } else {
157  if ($institutional) {
158  $subscriptionForm = new UserInstitutionalSubscriptionForm($request, $user->getId());
159  } else {
160  // Ensure user does not already have an individual subscription
161  if ($subscriptionDao->subscriptionExistsByUserForJournal($user->getId(), $journal->getId())) {
162  $request->redirect(null, 'index');
163  }
164  $subscriptionForm = new UserIndividualSubscriptionForm($request, $user->getId());
165  }
166  }
167 
168  $subscriptionForm->initData();
169  $subscriptionForm->display();
170  }
171 
177  function payPurchaseSubscription($args, $request) {
178  $this->validate(null, $request);
179 
180  if (empty($args)) $request->redirect(null, 'index');
181 
182  $journal = $request->getJournal();
183  if (!$journal) $request->redirect(null, 'index');
184  if ($journal->getData('publishingMode') != PUBLISHING_MODE_SUBSCRIPTION) $request->redirect(null, 'index');
185 
186  $paymentManager = Application::getPaymentManager($journal);
187  $acceptSubscriptionPayments = $paymentManager->isConfigured();
188  if (!$acceptSubscriptionPayments) $request->redirect(null, 'index');
189 
190  $this->setupTemplate($request);
191  $user = $request->getUser();
192 
193  $institutional = array_shift($args);
194  if (!empty($args)) {
195  $subscriptionId = (int) array_shift($args);
196  }
197 
198  if ($institutional == 'institutional') {
199  $institutional = true;
200  import('classes.subscription.form.UserInstitutionalSubscriptionForm');
201  $subscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO'); /* @var $subscriptionDao InstitutionalSubscriptionDAO */
202  } else {
203  $institutional = false;
204  import('classes.subscription.form.UserIndividualSubscriptionForm');
205  $subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /* @var $subscriptionDao IndividualSubscriptionDAO */
206  }
207 
208  if (isset($subscriptionId)) {
209  // Ensure subscription to be updated is for this user
210  if (!$subscriptionDao->subscriptionExistsByUser($subscriptionId, $user->getId())) {
211  $request->redirect(null, 'index');
212  }
213 
214  // Ensure subscription can be updated
215  $subscription = $subscriptionDao->getById($subscriptionId);
216  $subscriptionStatus = $subscription->getStatus();
217  import('classes.subscription.Subscription');
218  $validStatus = array(
219  SUBSCRIPTION_STATUS_ACTIVE,
220  SUBSCRIPTION_STATUS_AWAITING_ONLINE_PAYMENT,
221  SUBSCRIPTION_STATUS_AWAITING_MANUAL_PAYMENT
222  );
223 
224  if (!in_array($subscriptionStatus, $validStatus)) $request->redirect(null, 'index');
225 
226  if ($institutional) {
227  $subscriptionForm = new UserInstitutionalSubscriptionForm($request, $user->getId(), $subscriptionId);
228  } else {
229  $subscriptionForm = new UserIndividualSubscriptionForm($request, $user->getId(), $subscriptionId);
230  }
231 
232  } else {
233  if ($institutional) {
234  $subscriptionForm = new UserInstitutionalSubscriptionForm($request, $user->getId());
235  } else {
236  // Ensure user does not already have an individual subscription
237  if ($subscriptionDao->subscriptionExistsByUserForJournal($user->getId(), $journal->getId())) {
238  $request->redirect(null, 'index');
239  }
240  $subscriptionForm = new UserIndividualSubscriptionForm($request, $user->getId());
241  }
242  }
243 
244  $subscriptionForm->readInputData();
245 
246  // Check for any special cases before trying to save
247  if ($request->getUserVar('addIpRange')) {
248  $editData = true;
249  $ipRanges = $subscriptionForm->getData('ipRanges');
250  $ipRanges[] = '';
251  $subscriptionForm->setData('ipRanges', $ipRanges);
252 
253  } else if (($delIpRange = $request->getUserVar('delIpRange')) && count($delIpRange) == 1) {
254  $editData = true;
255  list($delIpRange) = array_keys($delIpRange);
256  $delIpRange = (int) $delIpRange;
257  $ipRanges = $subscriptionForm->getData('ipRanges');
258  array_splice($ipRanges, $delIpRange, 1);
259  $subscriptionForm->setData('ipRanges', $ipRanges);
260  }
261 
262  if (isset($editData)) {
263  $subscriptionForm->display();
264  } else {
265  if ($subscriptionForm->validate()) {
266  $subscriptionForm->execute();
267  } else {
268  $subscriptionForm->display();
269  }
270  }
271  }
272 
278  function completePurchaseSubscription($args, $request) {
279  $this->validate(null, $request);
280  $journal = $request->getJournal();
281  if (!$journal || count($args) != 2 || $journal->getData('publishingMode') != PUBLISHING_MODE_SUBSCRIPTION) {
282  $request->redirect(null, 'index');
283  }
284 
285  $paymentManager = Application::getPaymentManager($journal);
286  $acceptSubscriptionPayments = $paymentManager->isConfigured();
287  if (!$acceptSubscriptionPayments) $request->redirect(null, 'index');
288 
289  $this->setupTemplate($request);
290  $user = $request->getUser();
291  $institutional = array_shift($args);
292  $subscriptionId = (int) array_shift($args);
293 
294  if ($institutional == 'institutional') {
295  $subscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO'); /* @var $subscriptionDao InstitutionalSubscriptionDAO */
296  } else {
297  $subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /* @var $subscriptionDao IndividualSubscriptionDAO */
298  }
299 
300  if (!$subscriptionDao->subscriptionExistsByUser($subscriptionId, $user->getId())) $request->redirect(null, 'index');
301 
302  $subscription = $subscriptionDao->getById($subscriptionId);
303  $subscriptionStatus = $subscription->getStatus();
304  import('classes.subscription.Subscription');
305  $validStatus = array(SUBSCRIPTION_STATUS_ACTIVE, SUBSCRIPTION_STATUS_AWAITING_ONLINE_PAYMENT);
306 
307  if (!in_array($subscriptionStatus, $validStatus)) $request->redirect(null, 'index');
308 
309  $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /* @var $subscriptionTypeDao SubscriptionTypeDAO */
310  $subscriptionType = $subscriptionTypeDao->getById($subscription->getTypeId());
311 
312  $queuedPayment = $paymentManager->createQueuedPayment($request, PAYMENT_TYPE_PURCHASE_SUBSCRIPTION, $user->getId(), $subscriptionId, $subscriptionType->getCost(), $subscriptionType->getCurrencyCodeAlpha());
313  $paymentManager->queuePayment($queuedPayment);
314 
315  $paymentForm = $paymentManager->getPaymentForm($queuedPayment);
316  $paymentForm->display($request);
317  }
318 
324  function payRenewSubscription($args, $request) {
325  $this->validate(null, $request);
326  $journal = $request->getJournal();
327  if (count($args) != 2 || !$journal || $journal->getData('publishingMode') != PUBLISHING_MODE_SUBSCRIPTION) {
328  $request->redirect(null, 'index');
329  }
330 
331  $paymentManager = Application::getPaymentManager($journal);
332  $acceptSubscriptionPayments = $paymentManager->isConfigured();
333  if (!$acceptSubscriptionPayments) $request->redirect(null, 'index');
334 
335  $this->setupTemplate($request);
336  $user = $request->getUser();
337  $institutional = array_shift($args);
338  $subscriptionId = (int) array_shift($args);
339 
340  if ($institutional == 'institutional') {
341  $subscriptionDao = DAORegistry::getDAO('InstitutionalSubscriptionDAO'); /* @var $subscriptionDao InstitutionalSubscriptionDAO */
342  } else {
343  $subscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO'); /* @var $subscriptionDao IndividualSubscriptionDAO */
344  }
345 
346  if (!$subscriptionDao->subscriptionExistsByUser($subscriptionId, $user->getId())) $request->redirect(null, 'index');
347 
348  $subscription = $subscriptionDao->getById($subscriptionId);
349 
350  if ($subscription->isNonExpiring()) $request->redirect(null, 'index');
351 
352  import('classes.subscription.Subscription');
353  $subscriptionStatus = $subscription->getStatus();
354  $validStatus = array(
355  SUBSCRIPTION_STATUS_ACTIVE,
356  SUBSCRIPTION_STATUS_AWAITING_ONLINE_PAYMENT,
357  SUBSCRIPTION_STATUS_AWAITING_MANUAL_PAYMENT
358  );
359 
360  if (!in_array($subscriptionStatus, $validStatus)) $request->redirect(null, 'index');
361 
362  $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO'); /* @var $subscriptionTypeDao SubscriptionTypeDAO */
363  $subscriptionType = $subscriptionTypeDao->getById($subscription->getTypeId());
364 
365  $queuedPayment = $paymentManager->createQueuedPayment($request, PAYMENT_TYPE_RENEW_SUBSCRIPTION, $user->getId(), $subscriptionId, $subscriptionType->getCost(), $subscriptionType->getCurrencyCodeAlpha());
366  $paymentManager->queuePayment($queuedPayment);
367 
368  $paymentForm = $paymentManager->getPaymentForm($queuedPayment);
369  $paymentForm->display($request);
370  }
371 
377  function payMembership($args, $request) {
378  $this->validate(null, $request);
379  $this->setupTemplate($request);
380  $journal = $request->getJournal();
381  $user = $request->getUser();
382 
383  $paymentManager = Application::getPaymentManager($journal);
384 
385  $queuedPayment = $paymentManager->createQueuedPayment($request, PAYMENT_TYPE_MEMBERSHIP, $user->getId(), null, $journal->getData('membershipFee'));
386  $paymentManager->queuePayment($queuedPayment);
387 
388  $paymentForm = $paymentManager->getPaymentForm($queuedPayment);
389  $paymentForm->display($request);
390  }
391 }
392 
393 
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKPUserHandler
Base class to handle API requests for user operations.
Definition: api/v1/users/PKPUserHandler.inc.php:20
UserHandler\payRenewSubscription
payRenewSubscription($args, $request)
Definition: pages/user/UserHandler.inc.php:324
Application\getPaymentManager
static getPaymentManager($context)
Definition: Application.inc.php:226
UserHandler\subscriptions
subscriptions($args, $request)
Definition: pages/user/UserHandler.inc.php:24
UserHandler\setupTemplate
setupTemplate($request=null)
Definition: pages/user/UserHandler.inc.php:89
UserHandler\payMembership
payMembership($args, $request)
Definition: pages/user/UserHandler.inc.php:377
UserHandler
Handle API requests for user operations.
Definition: api/v1/users/UserHandler.inc.php:19
UserIndividualSubscriptionForm
Form class for user purchase of individual subscription.
Definition: UserIndividualSubscriptionForm.inc.php:18
UserHandler\_checkIncompleteSetup
_checkIncompleteSetup($journal)
Definition: pages/user/UserHandler.inc.php:78
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
UserInstitutionalSubscriptionForm
Form class for user purchase of institutional subscription.
Definition: UserInstitutionalSubscriptionForm.inc.php:18
PKPHandler\validate
validate($requiredContexts=null, $request=null)
Definition: PKPHandler.inc.php:351
UserHandler\payPurchaseSubscription
payPurchaseSubscription($args, $request)
Definition: pages/user/UserHandler.inc.php:177
UserHandler\completePurchaseSubscription
completePurchaseSubscription($args, $request)
Definition: pages/user/UserHandler.inc.php:278
UserHandler\purchaseSubscription
purchaseSubscription($args, $request)
Definition: pages/user/UserHandler.inc.php:103