00001 <?php
00002
00017 import('payment.ojs.OJSQueuedPayment');
00018 import('payment.PaymentManager');
00019
00020 define('PAYMENT_TYPE_MEMBERSHIP', 0x000000001 );
00021 define('PAYMENT_TYPE_SUBSCRIPTION', 0x000000002 );
00022 define('PAYMENT_TYPE_PURCHASE_ARTICLE', 0x000000003 );
00023 define('PAYMENT_TYPE_DONATION', 0x000000004 );
00024 define('PAYMENT_TYPE_SUBMISSION', 0x000000005 );
00025 define('PAYMENT_TYPE_FASTTRACK', 0x000000006 );
00026 define('PAYMENT_TYPE_PUBLICATION', 0x000000007 );
00027
00028 class OJSPaymentManager extends PaymentManager {
00029 function &getManager() {
00030 static $manager;
00031 if (!isset($manager)) {
00032 $manager =& new OJSPaymentManager();
00033 }
00034 return $manager;
00035 }
00036
00037 function isConfigured() {
00038 $journal =& Request::getJournal();
00039 return parent::isConfigured() && $journal->getSetting('journalPaymentsEnabled');
00040 }
00041
00042 function &createQueuedPayment($journalId, $type, $userId, $assocId, $amount, $currencyCode = null) {
00043 $journalSettingsDAO =& DAORegistry::getDAO('JournalSettingsDAO');
00044 if ( is_null($currencyCode) ) $currencyCode = $journalSettingsDAO->getSetting($journalId, 'currency');
00045 $payment =& new OJSQueuedPayment($amount, $currencyCode, $userId, $assocId);
00046 $payment->setJournalId($journalId);
00047 $payment->setType($type);
00048
00049 switch ( $type ) {
00050 case PAYMENT_TYPE_PURCHASE_ARTICLE:
00051 $payment->setRequestUrl(Request::url(null, 'article', 'view', $assocId ) );
00052 break;
00053 case PAYMENT_TYPE_MEMBERSHIP:
00054 case PAYMENT_TYPE_SUBSCRIPTION:
00055 $payment->setRequestUrl(Request::url(null, 'user') );
00056 break;
00057 case PAYMENT_TYPE_DONATION:
00058 $payment->setRequestUrl(Request::url(null, 'donations', 'thankYou') );
00059 break;
00060 case PAYMENT_TYPE_FASTTRACK:
00061 case PAYMENT_TYPE_PUBLICATION:
00062 case PAYMENT_TYPE_SUBMISSION:
00063 $authorSubmissionDao = &DAORegistry::getDAO('AuthorSubmissionDAO');
00064 $authorSubmission = &$authorSubmissionDao->getAuthorSubmission($assocId);
00065 if ($authorSubmission->getSubmissionProgress()!=0) {
00066 $payment->setRequestUrl(Request::url(null, 'author', 'submit', $authorSubmission->getSubmissionProgress(), array('articleId' => $assocId)));
00067 } else {
00068 $payment->setRequestUrl(Request::url(null, 'author') );
00069 }
00070 break;
00071 default:
00072
00073 break;
00074 }
00075
00076 return $payment;
00077 }
00078
00079 function &createCompletedPayment( $queuedPayment, $payMethod ) {
00080 import('payment.ojs.OJSCompletedPayment');
00081 $payment =& new OJSCompletedPayment();
00082 $payment->setJournalId($queuedPayment->getJournalId());
00083 $payment->setType($queuedPayment->getType());
00084 $payment->setAmount($queuedPayment->getAmount());
00085 $payment->setCurrencyCode($queuedPayment->getCurrencyCode());
00086 $payment->setUserId($queuedPayment->getUserId());
00087 $payment->setAssocId($queuedPayment->getAssocId());
00088 $payment->setPayMethodPluginName($payMethod);
00089
00090 return $payment;
00091 }
00092
00093 function donationEnabled() {
00094 $journal =& Request::getJournal();
00095 return $this->isConfigured() && $journal->getSetting('donationFeeEnabled');
00096 }
00097
00098 function submissionEnabled() {
00099 $journal =& Request::getJournal();
00100 return $this->isConfigured() && $journal->getSetting('submissionFeeEnabled') && $journal->getSetting('submissionFee') > 0;
00101 }
00102
00103 function fastTrackEnabled() {
00104 $journal =& Request::getJournal();
00105 return $this->isConfigured() && $journal->getSetting('fastTrackFeeEnabled') && $journal->getSetting('fastTrackFee') > 0;
00106 }
00107
00108 function publicationEnabled() {
00109 $journal =& Request::getJournal();
00110 return $this->isConfigured() && $journal->getSetting('publicationFeeEnabled') && $journal->getSetting('publicationFee') > 0;
00111 }
00112
00113 function membershipEnabled() {
00114 $journal =& Request::getJournal();
00115 return $this->isConfigured() && $journal->getSetting('membershipFeeEnabled') && $journal->getSetting('membershipFee') > 0;
00116 }
00117
00118 function purchaseArticleEnabled() {
00119 $journal =& Request::getJournal();
00120 return $this->isConfigured() && $journal->getSetting('purchaseArticleFeeEnabled') && $journal->getSetting('purchaseArticleFee') > 0;
00121 }
00122
00123 function onlyPdfEnabled() {
00124 $journal =& Request::getJournal();
00125 return $this->isConfigured() && $journal->getSetting('restrictOnlyPdf');
00126 }
00127
00128 function acceptSubscriptionPayments() {
00129 $journal =& Request::getJournal();
00130 return $this->isConfigured() && $journal->getSetting('acceptSubscriptionPayments');
00131 }
00132
00133 function &getPaymentPlugin() {
00134 $journal =& Request::getJournal();
00135 $paymentMethodPluginName = $journal->getSetting('paymentMethodPluginName');
00136 $paymentMethodPlugin = null;
00137 if (!empty($paymentMethodPluginName)) {
00138 $plugins =& PluginRegistry::loadCategory('paymethod');
00139 if (isset($plugins[$paymentMethodPluginName])) $paymentMethodPlugin =& $plugins[$paymentMethodPluginName];
00140 }
00141 return $paymentMethodPlugin;
00142 }
00143
00144 function fulfillQueuedPayment(&$queuedPayment, $payMethodPluginName = null) {
00145 $returner = false;
00146 if ($queuedPayment) switch ($queuedPayment->getType()) {
00147 case PAYMENT_TYPE_MEMBERSHIP:
00148 $userDao =& DAORegistry::getDAO('UserDAO');
00149 $user =& $userDao->getUser($queuedPayment->getuserId());
00150 $userDao->renewMembership($user);
00151 $returner = true;
00152 break;
00153 case PAYMENT_TYPE_SUBSCRIPTION:
00154 $subscriptionId = $queuedPayment->getAssocId();
00155 $subscriptionDao =& DAORegistry::getDAO('SubscriptionDAO');
00156 $subscription =& $subscriptionDao->getSubscription($subscriptionId);
00157 if (!$subscription || $subscription->getUserId() != $queuedPayment->getUserId() || $subscription->getJournalId() != $queuedPayment->getJournalId()) {
00158
00159 error_log(print_r($subscription, true));
00160 return false;
00161 }
00162
00163 $subscriptionDao->renewSubscription($subscription);
00164
00165 $returner = true;
00166 break;
00167 case PAYMENT_TYPE_FASTTRACK:
00168 $articleDAO =& DAORegistry::getDAO('ArticleDAO');
00169 $article =& $articleDAO->getArticle($queuedPayment->getAssocId(), $queuedPayment->getJournalId());
00170 $article->setFastTracked(true);
00171 $articleDAO->updateArticle($article);
00172 $returner = true;
00173 break;
00174 case PAYMENT_TYPE_PURCHASE_ARTICLE:
00175 case PAYMENT_TYPE_DONATION:
00176 case PAYMENT_TYPE_SUBMISSION:
00177 case PAYMENT_TYPE_PUBLICATION:
00178 $returner = true;
00179 }
00180 $completedPaymentDao =& DAORegistry::getDAO('OJSCompletedPaymentDAO');
00181 $completedPayment =& $this->createCompletedPayment($queuedPayment, $payMethodPluginName);
00182 $completedPaymentDao->insertCompletedPayment($completedPayment);
00183
00184 $queuedPaymentDao =& DAORegistry::getDAO('QueuedPaymentDAO');
00185 $queuedPaymentDao->deleteQueuedPayment($queuedPayment);
00186
00187 return $returner;
00188 }
00189
00190
00191 }
00192
00193 ?>