18 import(
'lib.pkp.classes.payment.QueuedPayment');
19 import(
'lib.pkp.classes.payment.PaymentManager');
21 define(
'PAYMENT_TYPE_MEMBERSHIP', 0x000000001);
22 define(
'PAYMENT_TYPE_RENEW_SUBSCRIPTION', 0x000000002);
23 define(
'PAYMENT_TYPE_PURCHASE_ARTICLE', 0x000000003);
24 define(
'PAYMENT_TYPE_DONATION', 0x000000004);
25 define(
'PAYMENT_TYPE_SUBMISSION', 0x000000005);
26 define(
'PAYMENT_TYPE_FASTTRACK', 0x000000006);
27 define(
'PAYMENT_TYPE_PUBLICATION', 0x000000007);
28 define(
'PAYMENT_TYPE_PURCHASE_SUBSCRIPTION', 0x000000008);
29 define(
'PAYMENT_TYPE_PURCHASE_ISSUE', 0x000000009);
37 return parent::isConfigured() && $this->_context->getData(
'paymentsEnabled');
51 if (is_null($currencyCode)) $currencyCode = $this->_context->getData(
'currency');
52 $payment =
new QueuedPayment($amount, $currencyCode, $userId, $assocId);
53 $payment->setContextId($this->_context->getId());
54 $payment->setType($type);
55 $router = $request->getRouter();
56 $dispatcher = $router->getDispatcher();
59 case PAYMENT_TYPE_PURCHASE_ARTICLE:
60 $payment->setRequestUrl($dispatcher->url($request, ROUTE_PAGE,
null,
'article',
'view', $assocId));
62 case PAYMENT_TYPE_PURCHASE_ISSUE:
63 $payment->setRequestUrl($dispatcher->url($request, ROUTE_PAGE,
null,
'issue',
'view', $assocId));
65 case PAYMENT_TYPE_PURCHASE_SUBSCRIPTION:
66 $payment->setRequestUrl($dispatcher->url($request, ROUTE_PAGE,
null,
'issue',
'current'));
68 case PAYMENT_TYPE_RENEW_SUBSCRIPTION:
69 $payment->setRequestUrl($dispatcher->url($request, ROUTE_PAGE,
null,
'user',
'subscriptions'));
71 case PAYMENT_TYPE_PUBLICATION:
73 $submission = $submissionDao->getById($assocId);
74 if ($submission->getSubmissionProgress()!=0) {
75 $payment->setRequestUrl($dispatcher->url($request, ROUTE_PAGE,
null,
'submission',
'wizard', $submission->getSubmissionProgress(), array(
'submissionId' => $assocId)));
77 $payment->setRequestUrl($dispatcher->url($request, ROUTE_PAGE,
null,
'authorDashboard',
'submission', $submission->getId()));
80 case PAYMENT_TYPE_MEMBERSHIP:
81 case PAYMENT_TYPE_DONATION:
82 case PAYMENT_TYPE_FASTTRACK:
83 case PAYMENT_TYPE_SUBMISSION:
86 error_log(
'Invalid payment type "' . $type .
'"');
102 import(
'lib.pkp.classes.payment.CompletedPayment');
104 $payment->setContextId($queuedPayment->getContextId());
105 $payment->setType($queuedPayment->getType());
106 $payment->setAmount($queuedPayment->getAmount());
107 $payment->setCurrencyCode($queuedPayment->getCurrencyCode());
109 if ($userId) $payment->setUserId($userId);
110 else $payment->setUserId($queuedPayment->getUserId());
112 $payment->setAssocId($queuedPayment->getAssocId());
113 $payment->setPayMethodPluginName($payMethod);
123 return $this->
isConfigured() && $this->_context->getData(
'publicationFee') > 0;
131 return $this->
isConfigured() && $this->_context->getData(
'membershipFee') > 0;
139 return $this->
isConfigured() && $this->_context->getData(
'purchaseArticleFee') > 0;
147 return $this->
isConfigured() && $this->_context->getData(
'purchaseIssueFee') > 0;
155 return $this->
isConfigured() && $this->_context->getData(
'restrictOnlyPdf');
163 $paymentMethodPluginName = $this->_context->getData(
'paymentPluginName');
164 $paymentMethodPlugin =
null;
165 if (!empty($paymentMethodPluginName)) {
167 if (isset($plugins[$paymentMethodPluginName])) $paymentMethodPlugin = $plugins[$paymentMethodPluginName];
169 return $paymentMethodPlugin;
181 $journal = $request->getContext();
182 if ($queuedPayment)
switch ($queuedPayment->getType()) {
183 case PAYMENT_TYPE_MEMBERSHIP:
185 $user = $userDao->getById($queuedPayment->getUserId());
186 $dateEnd = $user->getSetting(
'dateEndMembership', 0);
187 if (!$dateEnd) $dateEnd = 0;
191 if ($dateEnd < $time ) $dateEnd = $time;
193 $dateEnd = mktime(23, 59, 59, date(
"m", $dateEnd), date(
"d", $dateEnd), date(
"Y", $dateEnd)+1);
194 $user->updateSetting(
'dateEndMembership', $dateEnd,
'date', 0);
197 case PAYMENT_TYPE_PURCHASE_SUBSCRIPTION:
198 $subscriptionId = $queuedPayment->getAssocId();
201 if ($institutionalSubscriptionDao->subscriptionExists($subscriptionId)) {
202 $subscription = $institutionalSubscriptionDao->getById($subscriptionId);
203 $institutional =
true;
205 $subscription = $individualSubscriptionDao->getById($subscriptionId);
206 $institutional =
false;
208 if (!$subscription || $subscription->getUserId() != $queuedPayment->getUserId() || $subscription->getJournalId() != $queuedPayment->getContextId()) {
209 fatalError(
'Subscription integrity checks fail!');
213 if ($institutional) {
215 import(
'classes.subscription.InstitutionalSubscription');
216 $subscription->setStatus(SUBSCRIPTION_STATUS_NEEDS_APPROVAL);
217 if ($subscription->isNonExpiring()) {
218 $institutionalSubscriptionDao->updateObject($subscription);
220 $institutionalSubscriptionDao->renewSubscription($subscription);
224 if ($journal->getData(
'enableSubscriptionOnlinePaymentNotificationPurchaseInstitutional')) {
225 import(
'classes.subscription.SubscriptionAction');
229 import(
'classes.subscription.IndividualSubscription');
230 $subscription->setStatus(SUBSCRIPTION_STATUS_ACTIVE);
231 if ($subscription->isNonExpiring()) {
232 $individualSubscriptionDao->updateObject($subscription);
234 $individualSubscriptionDao->renewSubscription($subscription);
237 if ($journal->getData(
'enableSubscriptionOnlinePaymentNotificationPurchaseIndividual')) {
238 import(
'classes.subscription.SubscriptionAction');
244 case PAYMENT_TYPE_RENEW_SUBSCRIPTION:
245 $subscriptionId = $queuedPayment->getAssocId();
248 if ($institutionalSubscriptionDao->subscriptionExists($subscriptionId)) {
249 $subscription = $institutionalSubscriptionDao->getById($subscriptionId);
250 $institutional =
true;
252 $subscription = $individualSubscriptionDao->getById($subscriptionId);
253 $institutional =
false;
255 if (!$subscription || $subscription->getUserId() != $queuedPayment->getUserId() || $subscription->getJournalId() != $queuedPayment->getContextId()) {
258 if ($institutional) {
259 $institutionalSubscriptionDao->renewSubscription($subscription);
262 if ($journal->getData(
'enableSubscriptionOnlinePaymentNotificationRenewInstitutional')) {
263 import(
'classes.subscription.SubscriptionAction');
267 $individualSubscriptionDao->renewSubscription($subscription);
270 if ($journal->getData(
'enableSubscriptionOnlinePaymentNotificationRenewIndividual')) {
271 import(
'classes.subscription.SubscriptionAction');
277 case PAYMENT_TYPE_DONATION:
281 case PAYMENT_TYPE_PURCHASE_ARTICLE:
282 case PAYMENT_TYPE_PURCHASE_ISSUE:
283 case PAYMENT_TYPE_SUBMISSION:
284 case PAYMENT_TYPE_PUBLICATION:
292 $completedPayment = $this->
createCompletedPayment($queuedPayment, $payMethodPluginName, $request->getUser()->getId());
293 $completedPaymentDao->insertObject($completedPayment);
296 $queuedPaymentDao->deleteById($queuedPayment->getId());
306 switch ($payment->getType()) {
307 case PAYMENT_TYPE_PURCHASE_SUBSCRIPTION:
308 case PAYMENT_TYPE_RENEW_SUBSCRIPTION:
311 if ($institutionalSubscriptionDao->subscriptionExists($payment->getAssocId())) {
312 $subscription = $institutionalSubscriptionDao->getById($payment->getAssocId());
315 $subscription = $individualSubscriptionDao->getById($payment->getAssocId());
317 if (!$subscription)
return __(
'payment.type.subscription');
320 $subscriptionType = $subscriptionTypeDao->getById($subscription->getTypeId());
322 return __(
'payment.type.subscription') .
' (' . $subscriptionType->getLocalizedName() .
')';
323 case PAYMENT_TYPE_DONATION:
325 return __(
'payment.type.donation');
326 case PAYMENT_TYPE_MEMBERSHIP:
327 return __(
'payment.type.membership');
328 case PAYMENT_TYPE_PURCHASE_ARTICLE:
329 return __(
'payment.type.purchaseArticle');
330 case PAYMENT_TYPE_PURCHASE_ISSUE:
331 return __(
'payment.type.purchaseIssue');
332 case PAYMENT_TYPE_SUBMISSION:
334 return __(
'payment.type.submission');
335 case PAYMENT_TYPE_FASTTRACK:
337 return __(
'payment.type.fastTrack');
338 case PAYMENT_TYPE_PUBLICATION:
339 return __(
'payment.type.publication');