Esempio n. 1
0
 /**
  * Returns the payment form to be submitted by the user's browser. The form must have an ID of
  * "paymentForm" and a visible submit button.
  *
  * @param string $paymentmethod
  * @param JUser $user
  * @param AkeebasubsTableLevel $level
  * @param AkeebasubsTableSubscription $subscription
  * @return string
  */
 public function onAKPaymentNew($paymentmethod, $user, $level, $subscription)
 {
     if ($paymentmethod != $this->ppName) {
         return false;
     }
     $data = (object) array('Email' => trim($user->email), 'FullName' => trim($user->name), 'RequestLang' => $this->getLanguage(), 'Amount' => (int) ($subscription->gross_amount * 100), 'MerchantTrns' => $subscription->akeebasubs_subscription_id, 'CustomerTrns' => $level->title);
     // Create new order by a REST POST
     $jsonResult = $this->httpRequest($this->getRESTHost(), '/api/orders', $data, 'POST', $this->getRESTPort());
     $orderResult = json_decode($jsonResult);
     if ($orderResult->ErrorCode != 0) {
         $errorText = $orderResult->ErrorText;
         $errorUrl = 'index.php?option=' . JRequest::getCmd('option') . '&view=level&slug=' . $level->slug . '&layout=' . JRequest::getCmd('layout', 'default');
         $errorUrl = JRoute::_($errorUrl, false);
         JFactory::getApplication()->redirect($errorUrl, $errorText, 'error');
     }
     // Get the order-code and save it as processor key
     $orderCode = $orderResult->OrderCode;
     $subscription->save(array('processor_key' => $orderCode));
     // Get the payment URL that is used by the form
     $url = $this->getPaymentURL($orderCode);
     @ob_start();
     include dirname(__FILE__) . '/viva/form.php';
     $html = @ob_get_clean();
     return $html;
 }
Esempio n. 2
0
 /**
  * This is called whenever a new subscription is created or an existing
  * subscription is modified. We are using it to create slave subscriptions
  * where necessary and "mirror" the parameters of the master subscription
  * to the slave subscriptions when slave subscriptions already exist.
  *
  * @param   AkeebasubsTableSubscription  $row   The subscription which we act upon
  * @param   array                        $info  Update information
  */
 public function onAKSubscriptionChange($row, $info)
 {
     if (self::$dontFire) {
         return;
     }
     // Get the parameters of the row
     $params = $row->params;
     // No params? No need to check anything else!
     if (empty($params)) {
         return;
     }
     if (!is_object($params) && !is_array($params)) {
         $params = json_decode($params, true);
     } else {
         $params = (array) $params;
     }
     // Nothing in the params array? No need to check anything else!
     if (empty($params)) {
         return;
     }
     // Create new slave subscriptions if the subscription level allows us to
     if (!isset($this->maxSlaves[$row->akeebasubs_level_id])) {
         $this->maxSlaves[$row->akeebasubs_level_id] = 0;
     }
     // Do we have slave users at all?
     if (!array_key_exists('slaveusers', $params)) {
         return;
     }
     JLoader::import('joomla.user.helper');
     $slavesubs_ids = array();
     $data = $row instanceof F0FTable ? $row->getData() : (array) $row;
     // Let's look inside modified fields, is this a new slave, a removed one or I'm just renewing his subscription?
     // Simply create new subscription, the user specified slaves while creating his subscription
     if ($info['status'] == 'new') {
         $slaveusers = $params['slaveusers'];
         // Do we have at least one slave user?
         if (empty($slaveusers)) {
             return;
         }
         $newParams = $params;
         if (isset($newParams['slavesubs_ids'])) {
             unset($newParams['slavesubs_ids']);
         }
         unset($newParams['slaveusers']);
         // Create new slave subscriptions
         JLoader::import('joomla.user.helper');
         $slavesubs_ids = array();
         if ($row instanceof F0FTable) {
             $data = $row->getData();
         } else {
             $data = (array) $row;
         }
         foreach ($slaveusers as $slaveUsername) {
             if (empty($slaveUsername)) {
                 continue;
             }
             $user_id = JUserHelper::getUserId($slaveUsername);
             if ($user_id <= 0) {
                 continue;
             }
             $newdata = array_merge($data, array('akeebasubs_subscription_id' => 0, 'user_id' => $user_id, 'net_amount' => 0, 'tax_amount' => 0, 'gross_amount' => 0, 'tax_percent' => 0, 'params' => $newParams, 'akeebasubs_coupon_id' => 0, 'akeebasubs_upgrade_id' => 0, 'akeebasubs_affiliate_id' => 0, 'affiliate_comission' => 0, 'prediscount_amount' => 0, 'discount_amount' => 0, 'contact_flag' => 0));
             // Save the new subscription record
             $db = JFactory::getDbo();
             $tableName = '#__akeebasubs_subscriptions';
             $tableKey = 'akeebasubs_subscription_id';
             $table = new AkeebasubsTableSubscription($tableName, $tableKey, $db);
             $table->reset();
             self::$dontFire = true;
             $table->save($newdata);
             self::$dontFire = false;
             $slavesubs_ids[] = $table->akeebasubs_subscription_id;
         }
         $params['slavesubs_ids'] = $slavesubs_ids;
         $newdata = array_merge($data, array('params' => json_encode($params), '_dontNotify' => true));
         $db = JFactory::getDbo();
         $tableName = '#__akeebasubs_subscriptions';
         $tableKey = 'akeebasubs_subscription_id';
         $table = new AkeebasubsTableSubscription($tableName, $tableKey, $db);
         $table->reset();
         self::$dontFire = true;
         $table->save($newdata);
         self::$dontFire = false;
     } else {
         $current = $params;
         $previous = json_decode($info['previous']->params, true);
         if (!isset($previous['slaveusers']) || empty($previous['slaveusers'])) {
             $previous['slaveusers'] = array();
         }
         // Let's get the full list of involved people
         $list = array_merge($current['slaveusers'], $previous['slaveusers']);
         $i = 0;
         $dirty = false;
         foreach ($list as $slave) {
             if (empty($slave)) {
                 continue;
             }
             $result = false;
             if (in_array($slave, $current['slaveusers']) && in_array($slave, $previous['slaveusers'])) {
                 // Slave is still here, just check if his subscription is expired, if so extend it
                 $index = array_search($slave, $current['slaveusers']);
                 if (isset($current['slavesubs_ids'][$index])) {
                     $table = F0FModel::getTmpInstance('Subscriptions', 'AkeebasubsModel')->getItem($current['slavesubs_ids'][$index]);
                     if (!$table->enabled) {
                         $table->save(array('publish_down' => $row->publish_down));
                         $dirty = true;
                     }
                     $result = $table->akeebasubs_subscription_id;
                 }
             } elseif (in_array($slave, $current['slaveusers']) && !in_array($slave, $previous['slaveusers'])) {
                 // Added user, create a new subscription for him
                 $result = $this->createSlaveSub($slave, $data, $params);
                 $dirty = true;
             } elseif (!in_array($slave, $current['slaveusers']) && in_array($slave, $previous['slaveusers'])) {
                 // Before he was active, now it's no more; let's fire this slave (aka expire his subscription)
                 $index = array_search($slave, $previous['slaveusers']);
                 if (isset($previous['slavesubs_ids'][$index])) {
                     $this->expireSlaveSub($previous['slavesubs_ids'][$index]);
                     $dirty = true;
                 }
             }
             if ($result) {
                 $slavesubs_ids[] = $result;
             }
         }
         // Do not try to save the subscription unless we made a change in slave subscribers
         if (!$dirty) {
             //return;
         }
         $params['slavesubs_ids'] = $slavesubs_ids;
         $newdata = array_merge($data, array('params' => json_encode($params), '_dontNotify' => true));
         $table = F0FModel::getTmpInstance('Subscriptions', 'AkeebasubsModel')->getTable();
         $table->reset();
         self::$dontFire = true;
         $table->save($newdata);
         self::$dontFire = false;
     }
 }