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'; }
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); }
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); }
public function __construct(&$subject, $config = array()) { $config = array_merge($config, array('ppName' => 'skrill', 'ppKey' => 'PLG_AKPAYMENT_SKRILL_TITLE')); parent::__construct($subject, $config); }
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); }
/** * 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('&', '&', 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; }
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'; }
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); }
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); }
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); }