Inheritance: extends Subscription
Exemplo n.º 1
0
 /**
  * Redeem a gift subscription for a user.
  * @param $gift Gift
  * @return int Status code indicating whether gift subscription could be redeemed
  */
 function _redeemGiftSubscription(&$gift)
 {
     $journalId = $gift->getAssocId();
     $userId = $gift->getRecipientUserId();
     $giftSubscriptionTypeId = $gift->getGiftAssocId();
     // Ensure subscription type exists and is for an individual subscription
     $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO');
     $giftSubscriptionType =& $subscriptionTypeDao->getSubscriptionType($giftSubscriptionTypeId);
     if ($giftSubscriptionType) {
         if ($giftSubscriptionType->getInstitutional()) {
             // Subscription type is not for individuals
             return GIFT_REDEEM_STATUS_ERROR_SUBSCRIPTION_TYPE_INVALID;
         }
     } else {
         // Subscription type no longer exists
         return GIFT_REDEEM_STATUS_ERROR_SUBSCRIPTION_TYPE_INVALID;
     }
     $individualSubscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO');
     $giftNonExpiring = $giftSubscriptionType->getNonExpiring();
     $insert = false;
     // Retrieve user's subscription if they already have one
     if ($individualSubscriptionDao->subscriptionExistsByUserForJournal($userId, $journalId)) {
         $subscription =& $individualSubscriptionDao->getSubscriptionByUserForJournal($userId, $journalId);
         // Ensure user's existing subscription is not non-expiring
         if ($subscription->isNonExpiring()) {
             return GIFT_REDEEM_STATUS_ERROR_SUBSCRIPTION_NON_EXPIRING;
         }
     } else {
         // Otherwise, create a new individual subscription for user
         import('classes.subscription.IndividualSubscription');
         $subscription = new IndividualSubscription();
         $subscription->setJournalId($journalId);
         $subscription->setUserId($userId);
         $subscription->setMembership(null);
         $subscription->setReferenceNumber(null);
         $subscription->setNotes(null);
         $insert = true;
     }
     // Update subscription status and type
     $subscription->setStatus(SUBSCRIPTION_STATUS_ACTIVE);
     $subscription->setTypeId($giftSubscriptionTypeId);
     // Update subscription dates
     if ($giftNonExpiring) {
         $subscription->setDateStart(null);
         $subscription->setDateEnd(null);
     } else {
         // Set subscription start/end dates based on gift redemption date and duration of subscription type
         $time = time();
         $duration = $giftSubscriptionType->getDuration();
         $subscription->setDateStart(mktime(23, 59, 59, date("m", $time), date("d", $time), date("Y", $time)));
         $subscription->setDateEnd(mktime(23, 59, 59, date("m", $time) + $duration, date("d", $time), date("Y", $time)));
     }
     if ($insert) {
         $individualSubscriptionDao->insertSubscription($subscription);
     } else {
         $individualSubscriptionDao->updateSubscription($subscription);
     }
     return GIFT_REDEEM_STATUS_SUCCESS;
 }
 /**
  * Create/update individual subscription. 
  */
 function execute()
 {
     $journal = $this->request->getJournal();
     $journalId = $journal->getId();
     $typeId = $this->getData('typeId');
     $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO');
     $nonExpiring = $subscriptionTypeDao->getSubscriptionTypeNonExpiring($typeId);
     $today = date('Y-m-d');
     $insert = false;
     if (!isset($this->subscription)) {
         import('classes.subscription.IndividualSubscription');
         $subscription = new IndividualSubscription();
         $subscription->setJournalId($journalId);
         $subscription->setUserId($this->userId);
         $subscription->setReferenceNumber(null);
         $subscription->setNotes(null);
         $insert = true;
     } else {
         $subscription =& $this->subscription;
     }
     import('classes.payment.ojs.OJSPaymentManager');
     $paymentManager = new OJSPaymentManager($this->request);
     $paymentPlugin =& $paymentManager->getPaymentPlugin();
     if ($paymentPlugin->getName() == 'ManualPayment') {
         $subscription->setStatus(SUBSCRIPTION_STATUS_AWAITING_MANUAL_PAYMENT);
     } else {
         $subscription->setStatus(SUBSCRIPTION_STATUS_AWAITING_ONLINE_PAYMENT);
     }
     $subscription->setTypeId($typeId);
     $subscription->setMembership($this->getData('membership') ? $this->getData('membership') : null);
     $subscription->setDateStart($nonExpiring ? null : $today);
     $subscription->setDateEnd($nonExpiring ? null : $today);
     $individualSubscriptionDao = DAORegistry::getDAO('IndividualSubscriptionDAO');
     if ($insert) {
         $individualSubscriptionDao->insertSubscription($subscription);
     } else {
         $individualSubscriptionDao->updateSubscription($subscription);
     }
     $subscriptionTypeDao = DAORegistry::getDAO('SubscriptionTypeDAO');
     $subscriptionType =& $subscriptionTypeDao->getSubscriptionType($this->getData('typeId'));
     $queuedPayment =& $paymentManager->createQueuedPayment($journalId, PAYMENT_TYPE_PURCHASE_SUBSCRIPTION, $this->userId, $subscription->getId(), $subscriptionType->getCost(), $subscriptionType->getCurrencyCodeAlpha());
     $queuedPaymentId = $paymentManager->queuePayment($queuedPayment);
     $paymentManager->displayPaymentForm($queuedPaymentId, $queuedPayment);
 }