コード例 #1
0
ファイル: paymill.php プロジェクト: jonatasmm/akeebasubs
 public function __construct(&$subject, $config = array())
 {
     $config = array_merge($config, array('ppName' => 'paymill', 'ppKey' => 'PLG_AKPAYMENT_PAYMILL_TITLE', 'ppImage' => rtrim(JURI::base(), '/') . '/media/com_akeebasubs/images/frontend/paymill.png'));
     parent::__construct($subject, $config);
     require_once __DIR__ . '/paymill/lib/Services/Paymill/Base.php';
     require_once __DIR__ . '/paymill/lib/Services/Paymill/Transactions.php';
     require_once __DIR__ . '/paymill/lib/Services/Paymill/Payments.php';
     require_once __DIR__ . '/paymill/lib/Services/Paymill/Clients.php';
 }
コード例 #2
0
ファイル: viva.php プロジェクト: ZoiaoDePeixe/akeebasubs
 public function __construct(&$subject, $config = array())
 {
     $config = array_merge($config, array('ppName' => 'viva', 'ppKey' => 'PLG_AKPAYMENT_VIVA_TITLE', 'ppImage' => rtrim(JURI::base(), '/') . '/media/com_akeebasubs/images/frontend/LogoViva.png'));
     parent::__construct($subject, $config);
 }
コード例 #3
0
 public function __construct(&$subject, $config = array())
 {
     $config = array_merge($config, array('ppName' => 'paypalproexpress', 'ppKey' => 'PLG_AKPAYMENT_PAYPALPROEXPRESS_TITLE', 'ppImage' => rtrim(JURI::base(), '/') . '/media/com_akeebasubs/images/frontend/btn_xpressCheckout.png'));
     parent::__construct($subject, $config);
 }
コード例 #4
0
ファイル: skrill.php プロジェクト: jonatasmm/akeebasubs
 public function __construct(&$subject, $config = array())
 {
     $config = array_merge($config, array('ppName' => 'skrill', 'ppKey' => 'PLG_AKPAYMENT_SKRILL_TITLE'));
     parent::__construct($subject, $config);
 }
コード例 #5
0
ファイル: 2conew.php プロジェクト: ZoiaoDePeixe/akeebasubs
 public function __construct(&$subject, $config = array())
 {
     $config = array_merge($config, array('ppName' => '2conew', 'ppKey' => 'PLG_AKPAYMENT_2CONEW_TITLE', 'ppImage' => 'https://www.2checkout.com/images/paymentlogoshorizontal.png', 'ppRecurringCancellation' => true));
     parent::__construct($subject, $config);
 }
コード例 #6
0
 /**
  * Processes the form data and creates a new subscription
  */
 public function createNewSubscription()
 {
     // Fetch state and validation variables
     $this->setState('opt', '');
     $state = $this->getStateVariables();
     $validation = $this->getValidation();
     // Mark this subscription attempt in the session
     JFactory::getSession()->set('apply_validation.' . $state->id, 1, 'com_akeebasubs');
     // Step #1.a. Check that the form is valid
     // ----------------------------------------------------------------------
     $isValid = $this->isValid();
     if (!$isValid) {
         return false;
     }
     // Step #1.b. Check that the subscription level is allowed
     // ----------------------------------------------------------------------
     // Is this actually an allowed subscription level?
     $allowedLevels = F0FModel::getTmpInstance('Levels', 'AkeebasubsModel')->only_once(1)->enabled(1)->getItemList();
     $allowed = false;
     if (count($allowedLevels)) {
         foreach ($allowedLevels as $l) {
             if ($l->akeebasubs_level_id == $state->id) {
                 $allowed = true;
                 break;
             }
         }
     }
     if (!$allowed) {
         return false;
     }
     // Fetch the level's object, used later on
     $level = F0FModel::getTmpInstance('Levels', 'AkeebasubsModel')->getItem($state->id);
     // Step #2. Check that the payment plugin exists or return false
     // ----------------------------------------------------------------------
     $plugins = $this->getPaymentPlugins();
     $found = false;
     if (!empty($plugins)) {
         foreach ($plugins as $plugin) {
             if ($plugin->name == $state->paymentmethod) {
                 $found = true;
                 break;
             }
         }
     }
     if (!$found) {
         return false;
     }
     // Reset the session flag, so that future registrations will merge the
     // data from the database
     JFactory::getSession()->set('firstrun', true, 'com_akeebasubs');
     // Step #2.b. Apply block rules in the Professional release
     // ----------------------------------------------------------------------
     if (F0FModel::getTmpInstance('Blockrules', 'AkeebasubsModel')->isBlocked($state)) {
         throw new Exception(JText::_('JLIB_APPLICATION_ERROR_ACCESS_FORBIDDEN'), 403);
     }
     // Step #3. Create or update a user record
     // ----------------------------------------------------------------------
     $user = JFactory::getUser();
     $this->setState('user', $user);
     $userIsSaved = $this->updateUserInfo(true, $level);
     if (!$userIsSaved) {
         return false;
     } else {
         $user = $this->getState('user', $user);
     }
     // Store the user's ID in the session
     $session = JFactory::getSession();
     $session->set('subscribes.user_id', $user->id, 'com_akeebasubs');
     // Step #4. Create or add user extra fields
     // ----------------------------------------------------------------------
     // Find an existing record
     $dummy = $this->saveCustomFields();
     // Step #5. Check for existing subscription records and calculate the subscription expiration date
     // ----------------------------------------------------------------------
     // First, the question: is this level part of a group?
     $haveLevelGroup = false;
     if ($level->akeebasubs_levelgroup_id > 0) {
         // Is the level group published?
         $levelGroup = F0FModel::getTmpInstance('Levelgroups', 'AkeebasubsModel')->getItem($level->akeebasubs_levelgroup_id);
         if ($levelGroup instanceof F0FTable) {
             $haveLevelGroup = $levelGroup->enabled;
         }
     }
     if ($haveLevelGroup) {
         // We have a level group. Get all subscriptions for all levels in
         // the group.
         $subscriptions = array();
         $levelsInGroup = F0FModel::getTmpInstance('Levels', 'AkeebasubsModel')->levelgroup($level->akeebasubs_levelgroup_id)->getList(true);
         foreach ($levelsInGroup as $l) {
             $someSubscriptions = F0FModel::getTmpInstance('Subscriptions', 'AkeebasubsModel')->user_id($user->id)->level($l->akeebasubs_level_id)->paystate('C')->getList(true);
             if (count($someSubscriptions)) {
                 $subscriptions = array_merge($subscriptions, $someSubscriptions);
             }
         }
     } else {
         // No level group found. Get subscriptions on the same level.
         $subscriptions = F0FModel::getTmpInstance('Subscriptions', 'AkeebasubsModel')->user_id($user->id)->level($state->id)->paystate('C')->getList(true);
     }
     $jNow = new JDate();
     $now = $jNow->toUnix();
     $mNow = $jNow->toSql();
     if (empty($subscriptions)) {
         $startDate = $now;
     } else {
         $startDate = $now;
         foreach ($subscriptions as $row) {
             // Only take into account paid-for subscriptions
             if ($row->state != 'C') {
                 continue;
             }
             // Calculate the expiration date
             $jDate = new JDate($row->publish_down);
             $expiryDate = $jDate->toUnix();
             // If the subscription expiration date is earlier than today, ignore it
             if ($expiryDate < $now) {
                 continue;
             }
             // If the previous subscription's expiration date is later than the current start date,
             // update the start date to be one second after that.
             if ($expiryDate > $startDate) {
                 $startDate = $expiryDate + 1;
             }
             // Also mark the old subscription as "communicated". We don't want
             // to spam our users with subscription renewal notices or expiration
             // notification after they have effectively renewed!
             F0FModel::getTmpInstance('Subscriptions', 'AkeebasubsModel')->setId($row->akeebasubs_subscription_id)->getItem()->save(array('contact_flag' => 3));
         }
     }
     // Step #6. Create a new subscription record
     // ----------------------------------------------------------------------
     $nullDate = JFactory::getDbo()->getNullDate();
     $level = F0FModel::getTmpInstance('Levels', 'AkeebasubsModel')->setId($state->id)->getItem();
     if ($level->forever) {
         $jStartDate = new JDate();
         $endDate = '2038-01-01 00:00:00';
     } elseif (!is_null($level->fixed_date) && $level->fixed_date != $nullDate) {
         $jStartDate = new JDate();
         $endDate = $level->fixed_date;
     } else {
         $jStartDate = new JDate($startDate);
         // Subscription duration (length) modifiers, via plugins
         $duration_modifier = 0;
         JLoader::import('joomla.plugin.helper');
         JPluginHelper::importPlugin('akeebasubs');
         $app = JFactory::getApplication();
         $jResponse = $app->triggerEvent('onValidateSubscriptionLength', array($state));
         if (is_array($jResponse) && !empty($jResponse)) {
             foreach ($jResponse as $pluginResponse) {
                 if (empty($pluginResponse)) {
                     continue;
                 }
                 $duration_modifier += $pluginResponse;
             }
         }
         // Calculate the effective duration
         $duration = (int) $level->duration + $duration_modifier;
         if ($duration <= 0) {
             $duration = 0;
         }
         $duration = $duration * 3600 * 24;
         $endDate = $startDate + $duration;
     }
     $mStartDate = $jStartDate->toSql();
     $jEndDate = new JDate($endDate);
     $mEndDate = $jEndDate->toSql();
     // Store the price validation's "oldsub" and "expiration" keys in
     // the subscriptions subcustom array
     $subcustom = $state->subcustom;
     if (empty($subcustom)) {
         $subcustom = array();
     } elseif (is_object($subcustom)) {
         $subcustom = (array) $subcustom;
     }
     $priceValidation = $this->validatePrice();
     $subcustom['fixdates'] = array('oldsub' => $priceValidation->oldsub, 'allsubs' => $priceValidation->allsubs, 'expiration' => $priceValidation->expiration);
     // Serialise custom subscription parameters
     $custom_subscription_params = json_encode($subcustom);
     // Get the IP address
     $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '0.0.0.0';
     if (class_exists('F0FUtilsIp', true)) {
         $ip = F0FUtilsIp::getIp();
     }
     // Get the country from the IP address if the Akeeba GeoIP Provider Plugin is installed and activated
     $ip_country = '(Unknown)';
     if (class_exists('AkeebaGeoipProvider')) {
         $geoip = new AkeebaGeoipProvider();
         $ip_country = $geoip->getCountryName($ip);
         if (empty($ip_country)) {
             $ip_country = '(Unknown)';
         }
     }
     // Setup the new subscription
     $data = array('akeebasubs_subscription_id' => null, 'user_id' => $user->id, 'akeebasubs_level_id' => $state->id, 'publish_up' => $mStartDate, 'publish_down' => $mEndDate, 'notes' => '', 'enabled' => $validation->price->gross < 0.01 ? 1 : 0, 'processor' => $validation->price->gross < 0.01 ? 'none' : $state->paymentmethod, 'processor_key' => $validation->price->gross < 0.01 ? $this->_uuid(true) : '', 'state' => $validation->price->gross < 0.01 ? 'C' : 'N', 'net_amount' => $validation->price->net - $validation->price->discount, 'tax_amount' => $validation->price->tax, 'gross_amount' => $validation->price->gross, 'recurring_amount' => $validation->price->recurring, 'tax_percent' => $validation->price->taxrate, 'created_on' => $mNow, 'params' => $custom_subscription_params, 'ip' => $ip, 'ip_country' => $ip_country, 'akeebasubs_coupon_id' => $validation->price->couponid, 'akeebasubs_upgrade_id' => $validation->price->upgradeid, 'contact_flag' => 0, 'prediscount_amount' => $validation->price->net, 'discount_amount' => $validation->price->discount, 'first_contact' => '0000-00-00 00:00:00', 'second_contact' => '0000-00-00 00:00:00', 'akeebasubs_affiliate_id' => 0, 'affiliate_comission' => 0);
     $subscription = F0FModel::getTmpInstance('Subscriptions', 'AkeebasubsModel')->getTable();
     $subscription->reset();
     $subscription->akeebasubs_subscription_id = 0;
     $subscription->_dontCheckPaymentID = true;
     $result = $subscription->save($data);
     $this->_item = $subscription;
     // Step #7. Hit the coupon code, if a coupon is indeed used
     // ----------------------------------------------------------------------
     if ($validation->price->couponid) {
         F0FModel::getTmpInstance('Coupons', 'AkeebasubsModel')->setId($validation->price->couponid)->getItem()->hit();
     }
     // Step #8. Clear the session
     // ----------------------------------------------------------------------
     $session = JFactory::getSession();
     $session->set('validation_cache_data', null, 'com_akeebasubs');
     $session->set('apply_validation.' . $state->id, null, 'com_akeebasubs');
     // Step #9. Call the specific plugin's onAKPaymentNew() method and get the redirection URL,
     //          or redirect immediately on auto-activated subscriptions
     // ----------------------------------------------------------------------
     if ($subscription->gross_amount != 0) {
         // Non-zero charges; use the plugins
         $app = JFactory::getApplication();
         $jResponse = $app->triggerEvent('onAKPaymentNew', array($state->paymentmethod, $user, $level, $subscription));
         if (empty($jResponse)) {
             return false;
         }
         foreach ($jResponse as $response) {
             if ($response === false) {
                 continue;
             }
             $this->paymentForm = $response;
         }
     } else {
         // Zero charges. First apply subscription replacement
         if (!class_exists('plgAkpaymentAbstract')) {
             require_once JPATH_ADMINISTRATOR . '/components/com_akeebasubs/assets/akpayment.php';
         }
         $updates = array();
         plgAkpaymentAbstract::fixSubscriptionDates($subscription, $updates);
         if (!empty($updates)) {
             $result = $subscription->save($updates);
             $this->_item = $subscription;
         }
         // and then just redirect
         $app = JFactory::getApplication();
         $slug = F0FModel::getTmpInstance('Levels', 'AkeebasubsModel')->setId($subscription->akeebasubs_level_id)->getItem()->slug;
         $app->redirect(str_replace('&amp;', '&', JRoute::_('index.php?option=com_akeebasubs&layout=default&view=message&slug=' . $slug . '&layout=order&subid=' . $subscription->akeebasubs_subscription_id)));
         return false;
     }
     // Return true
     // ----------------------------------------------------------------------
     return true;
 }
コード例 #7
0
ファイル: stripe.php プロジェクト: jonatasmm/akeebasubs
 public function __construct(&$subject, $config = array())
 {
     $config = array_merge($config, array('ppName' => 'stripe', 'ppKey' => 'PLG_AKPAYMENT_STRIPE_TITLE', 'ppImage' => rtrim(JURI::base(), '/') . '/media/com_akeebasubs/images/frontend/stripe-logo.png'));
     parent::__construct($subject, $config);
     require_once dirname(__FILE__) . '/stripe/lib/Stripe.php';
 }
コード例 #8
0
 public function __construct(&$subject, $config = array())
 {
     $config = array_merge($config, array('ppName' => 'paypalpaymentspro', 'ppKey' => 'PLG_AKPAYMENT_PAYPALPAYMENTSPRO_TITLE', 'ppImage' => rtrim(JURI::base(), '/') . '/media/com_akeebasubs/images/frontend/paypaldirectcc.png'));
     parent::__construct($subject, $config);
 }
コード例 #9
0
ファイル: paypal.php プロジェクト: ZoiaoDePeixe/akeebasubs
 public function __construct(&$subject, $config = array())
 {
     $config = array_merge($config, array('ppName' => 'paypal', 'ppKey' => 'PLG_AKPAYMENT_PAYPAL_TITLE', 'ppImage' => 'https://www.paypal.com/en_US/i/bnr/horizontal_solution_PPeCheck.gif'));
     parent::__construct($subject, $config);
 }
コード例 #10
0
ファイル: 2checkout.php プロジェクト: ZoiaoDePeixe/akeebasubs
 public function __construct(&$subject, $config = array())
 {
     $config = array_merge($config, array('ppName' => '2checkout', 'ppKey' => 'PLG_AKPAYMENT_2CHECKOUT_TITLE', 'ppImage' => 'https://www.2checkout.com/images/paymentlogoshorizontal.png'));
     parent::__construct($subject, $config);
 }