예제 #1
0
 public function displaySubscriptions($tab, $user, $ui)
 {
     $db = JFactory::getDBO();
     include_once JPATH_SITE . '/components/com_acctexp/acctexp.class.php';
     $dateFormat = $this->params->get('dateFormat', "m/d/Y");
     $meta_user = new metaUser($user->id);
     $html_return = '' . '<table class="aeceventlog_table" style="border-collapse: collapse">' . '<tr class="aeceventlog_row_header">' . '<th width="30%" class="text-center">Plan</th>' . '<th width="10%" class="text-center">Primary</th>' . '<th width="10%" class="text-center">Status</th>' . '<th width="10%" class="text-center">Started</th>' . '<th width="20%" class="text-center">Ends</th>' . '</tr>';
     $subscriptions = $meta_user->getAllSubscriptions();
     $subscr_info = $this->getAllCurrentSubscriptionsInfoComplete($user->id);
     foreach ($subscriptions as $i => $subscriptionid) {
         $subscription = new Subscription();
         $subscription->load($subscriptionid);
         $plan_name = $subscr_info[$i]->name == '' ? "Excluded" : $subscr_info[$i]->name;
         $html_return .= '<tr>' . '<td width="30%" class="text-center">' . $plan_name . '</td>' . '<td width="10%" class="text-center">' . ($subscription->primary ? "Yes" : "No") . '</td>' . '<td width="10%" class="text-center">' . $this->getIconHtml($subscription->status) . ' ' . $subscription->status . '</td>' . '<td width="10%" class="text-center">' . date($dateFormat, strtotime($subscription->signup_date)) . '</td>';
         $html_return .= '<td width="10%" class="text-center">';
         if (!empty($subscription->lifetime)) {
             $html_return .= JText::_('AEC_ISLIFETIME');
         } else {
             if ($subscription->recurring && in_array($subscription->status, array('Active', 'Trial'))) {
                 $html_return .= JText::_('AEC_WILLRENEW') . ': ' . date($dateFormat, strtotime($subscription->expiration));
             } else {
                 $html_return .= date($dateFormat, strtotime($subscription->expiration));
             }
         }
         $html_return .= '</td></tr>';
     }
     $html_return .= '</table>';
     return $html_return;
 }
예제 #2
0
 /**
  * @param $userId
  * @param $serviceProvider
  * @return array|bool
  * @throws Exception
  */
 public function cancelSubscription($userId, $serviceProvider)
 {
     $activeSubscription = Subscription::getActiveSubscriptions($userId, $serviceProvider);
     if (!$activeSubscription) {
         PaypalSubscription::log(['message' => "Error. Can\\'t cancel subscription. User has no active subscriptions", 'level' => PaypalSubscription::LOG_LEVEL_ERROR, 'user_id' => $userId]);
         return false;
     }
     /* free subscription */
     if ((int) $activeSubscription['price'] == 0) {
         $recordId = $activeSubscription['subId'];
         $subscription = new Subscription();
         $subscription->load($recordId);
         $subscription->status = Subscription::STATUS_CANCELED;
         $subscription->save();
         $result = ['error' => 0, 'message' => 'success. Subscription canceled.'];
         return $result;
     } else {
         if (!$activeSubscription['subscription_id']) {
             PaypalSubscription::log(['message' => "Error. Can\\'t cancel subscription. Wrong subscription id", 'level' => PaypalSubscription::LOG_LEVEL_ERROR, 'user_id' => $userId]);
             return false;
         }
         $config = Config::get();
         $paypalService = new PaypalSubscription($config);
         $lastTransaction = $paypalService->getLastActiveTransactionBySubscription($activeSubscription['subId']);
         $transactionId = $lastTransaction['txn_id'];
         $subscriptionId = $activeSubscription['subscription_id'];
         $refundAmount = $paypalService->getTransactionRefundAmount($lastTransaction);
         $cancelSubscriptionResult = $paypalService->changeSubscriptionStatus($subscriptionId, 'Cancel');
         $refundTransactionResult = $paypalService->refundTransaction($lastTransaction, $refundAmount);
         if ($cancelSubscriptionResult['ACK'] == "Success" && $refundTransactionResult['ACK'] == "Success") {
             $subscription = new Subscription();
             $subscription->loadBySubscriptionId($subscriptionId);
             $subscription->status = Subscription::STATUS_CANCELING;
             $subscription->save();
             $result = ['error' => 0, 'message' => 'success. Subscription canceling.'];
             PaypalSubscription::log(['txn_id' => $transactionId, 'subscr_id' => $subscriptionId, 'message' => "Subscription canceling", 'level' => PaypalSubscription::LOG_LEVEL_INFO, 'data' => '', 'user_id' => $userId]);
             return $result;
         } else {
             PaypalSubscription::log(['txn_id' => $transactionId, 'subscr_id' => $subscriptionId, 'message' => "Error. Can\\'t cancel subscription. Rejected by PayPal", 'level' => PaypalSubscription::LOG_LEVEL_ERROR, 'data' => json_encode(['cancelSubscriptionResult' => $cancelSubscriptionResult, 'refundTransactionResult' => $refundTransactionResult]), 'user_id' => $userId]);
             return false;
         }
     }
 }
 public function cancelSubscription($userId, $validateUsersCount = true)
 {
     $result = ['error' => 1, 'message' => "Error canceling subscription. Please contact support about this issue"];
     $ipn = new SubscriptionsIPN();
     $ipn->configureDatabase($userId);
     /* clear subscription plan restrictions */
     unset($_SESSION['subscriptionPlanOptions']);
     /**/
     $gsSubscriptions = Subscription::getActiveSubscriptions();
     if (count($gsSubscriptions) != 1) {
         PayPalIPN::log(['message' => "Error. Can\\'t cancel subscription. User has no active subscriptions", 'level' => PayPalIPN::LOG_LEVEL_ERROR, 'user_id' => $userId]);
     }
     $subscription = $gsSubscriptions[0];
     $subscriptionPlan = new SubscriptionPlan();
     $subscriptionPlan->load($subscription['plan_id']);
     if (!$this->validateUsersCount() && $validateUsersCount) {
         $result = ['error' => 2, 'message' => 'Error, wrong users count'];
     }
     /* free subscription */
     if ($subscriptionPlan->service_provider == 'getscorecard' && $subscriptionPlan->service_name == 'free') {
         $recordId = $subscription['subId'];
         $subscription = new Subscription();
         $subscription->load($recordId);
         $subscription->status = Subscription::STATUS_CANCELED;
         $subscription->save();
         $result = ['error' => 0, 'message' => 'success. Subscription canceling.'];
     } else {
         if (!$subscription['subscription_id']) {
             PayPalIPN::log(['message' => "Error. Can\\'t cancel subscription. Wrong subscription id", 'level' => PayPalIPN::LOG_LEVEL_ERROR, 'user_id' => $userId]);
         }
         $lastTransaction = $ipn->getLastActiveTransactionBySubscription($subscription['subId']);
         $transactionId = $lastTransaction['txn_id'];
         $subscriptionId = $subscription['subscription_id'];
         $refundAmount = $ipn->getTransactionRefundAmount($lastTransaction);
         $cancelSubscriptionResult = $ipn->changeSubscriptionStatus($subscriptionId, 'Cancel');
         $refundTransactionResult = $ipn->refundTransaction($lastTransaction, $refundAmount);
         if ($cancelSubscriptionResult['ACK'] == "Success" && $refundTransactionResult['ACK'] == "Success") {
             $subscription = new Subscription();
             $subscription->loadBySubscriptionId($subscriptionId);
             $subscription->status = Subscription::STATUS_CANCELING;
             $subscription->save();
             $result = ['error' => 0, 'message' => 'success. Subscription canceling.'];
             PayPalIPN::log(['txn_id' => $transactionId, 'subscr_id' => $subscriptionId, 'message' => "Subscription canceling", 'level' => PayPalIPN::LOG_LEVEL_INFO, 'data' => '', 'user_id' => $userId]);
         } else {
             PayPalIPN::log(['txn_id' => $transactionId, 'subscr_id' => $subscriptionId, 'message' => "Error. Can\\'t cancel subscription. Rejected by PayPal", 'level' => PayPalIPN::LOG_LEVEL_ERROR, 'data' => json_encode(['cancelSubscriptionResult' => $cancelSubscriptionResult, 'refundTransactionResult' => $refundTransactionResult]), 'user_id' => $userId]);
         }
     }
     return $result;
 }
예제 #4
0
 public function delete()
 {
     $subids = $this->getAllSubscriptions();
     foreach ($subids as $id) {
         $subscription = new Subscription();
         $subscription->load($id);
         $subscription->delete();
     }
     $this->meta->delete();
 }
예제 #5
0
 public function index($subscriptionid, $userid = array())
 {
     $groups = $this->state->filter->status;
     if (is_array($groups) && count($groups) === 1) {
         if ($this->state->filter->status[0] == 'all') {
             $groups = array('active', 'excluded', 'expired', 'pending', 'cancelled', 'hold', 'closed');
         }
     }
     if (is_array($groups)) {
         foreach ($groups as $k => $v) {
             $groups[$k] = strtolower($v);
         }
     }
     if (array_search('notconfig', $this->state->filter->status)) {
         $set_group = 'notconfig';
     } else {
         $set_group = strtolower($this->state->filter->status[0]);
     }
     if (!empty($orderby)) {
         if ($set_group == 'notconfig') {
             $forder = array('name ASC', 'name DESC', 'lastname ASC', 'lastname DESC', 'username ASC', 'username DESC', 'signup_date ASC', 'signup_date DESC', 'lastpay_date ASC', 'lastpay_date DESC');
         } else {
             $forder = array('expiration ASC', 'expiration DESC', 'lastpay_date ASC', 'lastpay_date DESC', 'name ASC', 'name DESC', 'lastname ASC', 'lastname DESC', 'username ASC', 'username DESC', 'signup_date ASC', 'signup_date DESC', 'lastpay_date ASC', 'lastpay_date DESC', 'plan_name ASC', 'plan_name DESC', 'status ASC', 'status DESC', 'type ASC', 'type DESC');
         }
         if (!in_array($orderby, $forder)) {
             $this->state->sort = 'name ASC';
         }
     }
     // define displaying at html
     $action = array();
     switch ($set_group) {
         case 'active':
             $action[0] = 'active';
             $action[1] = JText::_('AEC_HEAD_ACTIVE_SUBS');
             break;
         case 'excluded':
             $action[0] = 'excluded';
             $action[1] = JText::_('AEC_HEAD_EXCLUDED_SUBS');
             break;
         case 'expired':
             $action[0] = 'expired';
             $action[1] = JText::_('AEC_HEAD_EXPIRED_SUBS');
             break;
         case 'pending':
             $action[0] = 'pending';
             $action[1] = JText::_('AEC_HEAD_PENDING_SUBS');
             break;
         case 'cancelled':
             $action[0] = 'cancelled';
             $action[1] = JText::_('AEC_HEAD_CANCELLED_SUBS');
             break;
         case 'hold':
             $action[0] = 'hold';
             $action[1] = JText::_('AEC_HEAD_HOLD_SUBS');
             break;
         case 'closed':
             $action[0] = 'closed';
             $action[1] = JText::_('AEC_HEAD_CLOSED_SUBS');
             break;
         case 'manual':
         case 'notconfig':
             $action[0] = 'manual';
             $action[1] = JText::_('AEC_HEAD_MANUAL_SUBS');
             break;
     }
     $where = array();
     $where_or = array();
     $notconfig = false;
     $planid = trim(aecGetParam('assign_planid', null));
     $users_selected = is_array($subscriptionid) && count($subscriptionid) || is_array($userid) && count($userid);
     if (!empty($planid) && $users_selected) {
         $plan = new SubscriptionPlan();
         $plan->load($planid);
         if (!empty($subscriptionid)) {
             foreach ($subscriptionid as $sid) {
                 $metaUser = new metaUser(false, $sid);
                 $metaUser->establishFocus($plan);
                 $metaUser->focusSubscription->applyUsage($planid, 'none', 1);
             }
         }
         if (!empty($userid)) {
             foreach ($userid as $uid) {
                 $metaUser = new metaUser($uid);
                 $metaUser->establishFocus($plan);
                 $metaUser->focusSubscription->applyUsage($planid, 'none', 1);
                 $subscriptionid[] = $metaUser->focusSubscription->id;
             }
         }
         // Also show active users now
         if (!in_array('active', $groups)) {
             $groups[] = 'active';
         }
     }
     $set_status = trim(aecGetParam('set_status', null));
     $add_or_set_expiration = trim(aecGetParam('add_or_set_expiration', null));
     $set_time = trim(aecGetParam('set_time', null));
     $set_time_unit = trim(aecGetParam('set_time_unit', null));
     if ((!empty($set_status) || !empty($add_or_set_expiration)) && is_array($subscriptionid) && count($subscriptionid) > 0) {
         foreach ($subscriptionid as $k) {
             $subscriptionHandler = new Subscription();
             if (!empty($k)) {
                 $subscriptionHandler->load($k);
             } else {
                 $subscriptionHandler->createNew($k, '', 1);
             }
             if (strcmp($set_status, 'now') === 0) {
                 $subscriptionHandler->expire();
                 if (!in_array('expired', $groups)) {
                     $groups[] = 'expired';
                 }
             } elseif (strcmp($set_status, 'exclude') === 0) {
                 $subscriptionHandler->setStatus('Excluded');
                 if (!in_array('excluded', $groups)) {
                     $groups[] = 'excluded';
                 }
             } elseif (strcmp($set_status, 'close') === 0) {
                 $subscriptionHandler->setStatus('Closed');
                 if (!in_array('closed', $groups)) {
                     $groups[] = 'closed';
                 }
             } elseif (strcmp($set_status, 'hold') === 0) {
                 $subscriptionHandler->setStatus('Hold');
                 if (!in_array('hold', $groups)) {
                     $groups[] = 'hold';
                 }
             } elseif (strcmp($set_status, 'include') === 0) {
                 $subscriptionHandler->setStatus('Active');
                 if (!in_array('active', $groups)) {
                     $groups[] = 'active';
                 }
             } elseif (strcmp($set_status, 'lifetime') === 0) {
                 if (!$subscriptionHandler->isLifetime()) {
                     $subscriptionHandler->expiration = '9999-12-31 00:00:00';
                     $subscriptionHandler->lifetime = 1;
                 }
                 $subscriptionHandler->setStatus('Active');
                 if (!in_array('active', $groups)) {
                     $groups[] = 'active';
                 }
             }
             if ($set_status !== 'lifetime' && !empty($add_or_set_expiration) && !empty($set_time) && !empty($set_time_unit)) {
                 if ($add_or_set_expiration == 'set') {
                     $subscriptionHandler->setExpiration($set_time_unit, $set_time, 0);
                     $subscriptionHandler->lifetime = 0;
                     $subscriptionHandler->storeload();
                     if (!in_array('active', $groups)) {
                         $groups[] = 'active';
                     }
                 } elseif ($add_or_set_expiration == 'add') {
                     if ($subscriptionHandler->lifetime) {
                         $subscriptionHandler->setExpiration($set_time_unit, $set_time, 0);
                     } else {
                         $subscriptionHandler->setExpiration($set_time_unit, $set_time, 1);
                     }
                     $subscriptionHandler->lifetime = 0;
                     $subscriptionHandler->storeload();
                     if (!in_array('active', $groups)) {
                         $groups[] = 'active';
                     }
                 }
             }
         }
     }
     if (is_array($groups)) {
         if (in_array('notconfig', $groups)) {
             $notconfig = true;
             $groups = array('notconfig');
         } else {
             if (in_array('excluded', $groups)) {
                 $where_or[] = "a.status = 'Excluded'";
             }
             if (in_array('expired', $groups)) {
                 $where_or[] = "a.status = 'Expired'";
             }
             if (in_array('active', $groups)) {
                 $where_or[] = "(a.status = 'Active' || a.status = 'Trial')";
             }
             if (in_array('pending', $groups)) {
                 $where_or[] = "a.status = 'Pending'";
             }
             if (in_array('cancelled', $groups)) {
                 $where_or[] = "a.status = 'Cancelled'";
             }
             if (in_array('hold', $groups)) {
                 $where_or[] = "a.status = 'Hold'";
             }
             if (in_array('closed', $groups)) {
                 $where_or[] = "a.status = 'Closed'";
             }
         }
     }
     if (isset($search) && $search != '') {
         if ($notconfig) {
             $where[] = "(username LIKE '%{$search}%' OR name LIKE '%{$search}%')";
         } else {
             $where[] = "(b.username LIKE '%{$search}%' OR b.name LIKE '%{$search}%')";
         }
     }
     $group_plans = ItemGroupHandler::getChildren($this->state->filter->group, 'item');
     if (!empty($this->state->filter->plan) || !empty($group_plans)) {
         $plan_selection = array();
         if (!empty($this->state->filter->plan)) {
             $plan_selection = $this->state->filter->plan;
         }
         if (!empty($group_plans)) {
             $plan_selection = array_merge($plan_selection, $group_plans);
         }
         if (empty($plan_selection[0])) {
             unset($plan_selection[0]);
         }
         $plan_selection = array_unique($plan_selection);
         if (!$notconfig && !empty($plan_selection)) {
             $where[] = "a.plan IN (" . implode(',', $plan_selection) . ")";
         }
     }
     // get the total number of records
     if ($notconfig) {
         $where[] = 'b.status is null';
         $query = 'SELECT count(*)' . ' FROM #__users AS a' . ' LEFT JOIN #__acctexp_subscr AS b ON a.id = b.userid' . (count($where) ? ' WHERE ' . implode(' AND ', $where) : '');
     } else {
         $query = 'SELECT count(*)' . ' FROM #__acctexp_subscr AS a' . ' INNER JOIN #__users AS b ON a.userid = b.id';
         if (count($where_or)) {
             $where[] = count($where_or) ? '(' . implode(' OR ', $where_or) . ')' : '';
         }
         $query .= count($where) ? ' WHERE ' . implode(' AND ', $where) : '';
     }
     $this->db->setQuery($query);
     $nav = $this->getPagination($this->db->loadResult());
     $orderby = $this->state->sort;
     // get the subset (based on limits) of required records
     if ($notconfig) {
         $forder = array('name ASC', 'name DESC', 'lastname ASC', 'lastname DESC', 'username ASC', 'username DESC', 'signup_date ASC', 'signup_date DESC');
         if (!in_array($this->state->sort, $forder)) {
             $orderby = 'name ASC';
         }
         if (strpos($orderby, 'lastname') !== false) {
             $orderby = str_replace('lastname', 'SUBSTRING_INDEX(name, \' \', -1)', $orderby);
         }
         $query = 'SELECT a.id, a.name, a.username, a.registerDate as signup_date' . ' FROM #__users AS a' . ' LEFT JOIN #__acctexp_subscr AS b ON a.id = b.userid' . (count($where) ? ' WHERE ' . implode(' AND ', $where) : '') . ' ORDER BY ' . str_replace('signup_date', 'registerDate', $orderby) . ' LIMIT ' . $nav->limitstart . ',' . $nav->limit;
         if (strpos($orderby, 'SUBSTRING_INDEX') !== false) {
             $orderby = str_replace('SUBSTRING_INDEX(name, \' \', -1)', 'lastname', $orderby);
         }
     } else {
         if (strpos($orderby, 'lastname') !== false) {
             $orderby = str_replace('lastname', 'SUBSTRING_INDEX(b.name, \' \', -1)', $orderby);
         }
         $query = 'SELECT a.*, b.name, b.username, b.email, c.name AS plan_name' . ' FROM #__acctexp_subscr AS a' . ' INNER JOIN #__users AS b ON a.userid = b.id' . ' LEFT JOIN #__acctexp_plans AS c ON a.plan = c.id' . (count($where) ? ' WHERE ' . implode(' AND ', $where) : '') . ' ORDER BY ' . $orderby . ' LIMIT ' . $nav->limitstart . ',' . $nav->limit;
         if (strpos($orderby, 'SUBSTRING_INDEX') !== false) {
             $orderby = str_replace('SUBSTRING_INDEX(b.name, \' \', -1)', 'lastname', $orderby);
         }
     }
     $this->state->sort = $orderby;
     $this->db->setQuery('SET SQL_BIG_SELECTS=1');
     $this->db->query();
     $this->db->setQuery($query);
     $rows = $this->db->loadObjectList();
     if ($this->db->getErrorNum()) {
         echo $this->db->stderr();
         return false;
     }
     $this->db->setQuery('SET SQL_BIG_SELECTS=0');
     $this->db->query();
     $processors = PaymentProcessorHandler::getObjectList(PaymentProcessorHandler::getProcessorList());
     $procs = array('free' => 'Free', 'none' => 'None');
     foreach ($processors as $processor) {
         $procs[$processor->processor_name] = $processor->processor->info['longname'];
     }
     foreach ($rows as $k => $row) {
         if (!isset($rows[$k]->type)) {
             continue;
         }
         $rows[$k]->type = $procs[$rows[$k]->type];
     }
     // Get list of plans for filter
     $query = 'SELECT `id`, `name`' . ' FROM #__acctexp_plans' . ' ORDER BY `ordering`';
     $this->db->setQuery($query);
     $db_plans = $this->db->loadObjectList();
     $plans2[] = JHTML::_('select.option', '0', JText::_('BIND_USER'), 'id', 'name');
     if (is_array($db_plans)) {
         $plans2 = array_merge($plans2, $db_plans);
     }
     $lists['set_plan'] = JHTML::_('select.genericlist', $plans2, 'assign_planid', 'class="form-control inputbox" size="1"', 'id', 'name', 0);
     $lists['filter_plan'] = '<select id="plan-filter-select" name="plan[]" multiple="multiple" size="5">';
     foreach ($db_plans as $plan) {
         $lists['filter_plan'] .= '<option value="' . $plan->id . '"' . (in_array($plan->id, $this->state->filter->plan) ? ' selected="selected"' : '') . '>' . $plan->name . '</option>';
     }
     $lists['filter_plan'] .= '</select>';
     $grouplist = ItemGroupHandler::getTree();
     $lists['filter_group'] = '<select id="group-filter-select" name="group[]" multiple="multiple" size="5">';
     foreach ($grouplist as $glisti) {
         if (defined('JPATH_MANIFESTS')) {
             $lists['filter_group'] .= '<option value="' . $glisti[0] . '"' . (in_array($glisti[0], $this->state->filter->group) ? ' selected="selected"' : '') . '>' . str_replace('&nbsp;', ' ', $glisti[1]) . '</option>';
         } else {
             $lists['filter_group'] .= '<option value="' . $glisti[0] . '"' . (in_array($glisti[0], $this->state->filter->group) ? ' selected="selected"' : '') . '>' . $glisti[1] . '</option>';
         }
     }
     $lists['filter_group'] .= '</select>';
     $status = array('excluded' => JText::_('AEC_SEL_EXCLUDED'), 'pending' => JText::_('AEC_SEL_PENDING'), 'active' => JText::_('AEC_SEL_ACTIVE'), 'expired' => JText::_('AEC_SEL_EXPIRED'), 'closed' => JText::_('AEC_SEL_CLOSED'), 'cancelled' => JText::_('AEC_SEL_CANCELLED'), 'hold' => JText::_('AEC_SEL_HOLD'), 'notconfig' => JText::_('AEC_SEL_NOT_CONFIGURED'));
     $lists['filter_status'] = '<select id="status-group-select" name="status[]" multiple="multiple" size="5">';
     foreach ($status as $id => $txt) {
         $lists['filter_status'] .= '<option value="' . $id . '"' . (in_array($id, $groups) ? ' selected="selected"' : '') . '>' . $txt . '</option>';
     }
     $lists['filter_status'] .= '</select>';
     $group_selection = array();
     $group_selection[] = JHTML::_('select.option', '', JText::_('Set Status'));
     $group_selection[] = JHTML::_('select.option', 'now', JText::_('EXPIRE_NOW'));
     $group_selection[] = JHTML::_('select.option', 'exclude', JText::_('EXPIRE_EXCLUDE'));
     $group_selection[] = JHTML::_('select.option', 'lifetime', JText::_('AEC_CMN_LIFETIME'));
     $group_selection[] = JHTML::_('select.option', 'include', JText::_('EXPIRE_INCLUDE'));
     $group_selection[] = JHTML::_('select.option', 'close', JText::_('EXPIRE_CLOSE'));
     $group_selection[] = JHTML::_('select.option', 'hold', JText::_('EXPIRE_HOLD'));
     $lists['set_status'] = JHTML::_('select.genericlist', $group_selection, 'set_status', 'class="form-control inputbox" size="1"', 'value', 'text', "");
     $group_selection = array();
     $group_selection[] = JHTML::_('select.option', 'add', JText::_('Add'));
     $group_selection[] = JHTML::_('select.option', 'set', JText::_('Set'));
     $lists['add_or_set_expiration'] = JHTML::_('select.genericlist', $group_selection, 'add_or_set_expiration', 'class="form-control inputbox" size="1"', 'value', 'text', "");
     // make the select list for first trial period units
     $perunit[] = JHTML::_('select.option', 'D', JText::_('PAYPLAN_PERUNIT1'));
     $perunit[] = JHTML::_('select.option', 'W', JText::_('PAYPLAN_PERUNIT2'));
     $perunit[] = JHTML::_('select.option', 'M', JText::_('PAYPLAN_PERUNIT3'));
     $perunit[] = JHTML::_('select.option', 'Y', JText::_('PAYPLAN_PERUNIT4'));
     $lists['set_time_unit'] = JHTML::_('select.genericlist', $perunit, 'set_time_unit', 'class="form-control inputbox" size="1"', 'value', 'text');
     HTML_AcctExp::listSubscriptions($rows, $nav, $this->state, $lists, $subscriptionid, $action);
 }
예제 #6
0
 public function beat()
 {
     $this->processors = array();
     $this->proc_prepare = array();
     $this->result = array('fail_expired' => 0, 'fallback' => 0, 'skipped' => 0, 'expired' => 0, 'pre_expired' => 0, 'pre_exp_actions' => 0);
     // Some cleanup
     $this->deleteTempTokens();
     // Receive maximum pre expiration time
     $pre_expiration = microIntegrationHandler::getMaxPreExpirationTime();
     $subscription_list = $this->getSubscribers($pre_expiration);
     // Efficient way to check for expired users without checking on each one
     if (empty($subscription_list)) {
         return $this->endBeat();
     }
     foreach ($subscription_list as $sid => $sub_id) {
         $subscription = new Subscription();
         $subscription->load($sub_id);
         if (!aecUserHelper::UserExists($subscription->userid)) {
             unset($subscription_list[$sid]);
             continue;
         }
         // Check whether this user really is expired
         // If this check fails, the following subscriptions might still be pre-expiration events
         if ($subscription->isExpired()) {
             // If we don't have any validation response, expire
             $validate = $this->processorValidation($subscription, $subscription_list);
             if ($validate === false) {
                 // There was some kind of fatal error, return.
                 return false;
             } elseif ($validate !== true) {
                 $expire = $subscription->expire();
                 if ($expire) {
                     $this->result['expired']++;
                 } elseif ($expire === false) {
                     $this->result['fail_expired']++;
                 } elseif (is_null($expire)) {
                     $this->result['fallback']++;
                 } else {
                     $this->result['skipped']++;
                 }
             }
             unset($subscription_list[$sid]);
         } elseif (!$subscription->recurring) {
             break;
         }
     }
     // Only go for pre expiration action if we have at least one user for it
     if (empty($pre_expiration) || empty($subscription_list)) {
         return $this->endBeat();
     }
     // Get all the MIs which have a pre expiration check
     $mi_pexp = microIntegrationHandler::getPreExpIntegrations();
     // Find plans which have the MIs assigned
     $expmi_plans = microIntegrationHandler::getPlansbyMI($mi_pexp);
     // Filter out the users which dont have the correct plan
     $query = 'SELECT `id`, `userid`' . ' FROM #__acctexp_subscr' . ' WHERE `id` IN (' . implode(',', $subscription_list) . ')' . ' AND `plan` IN (' . implode(',', $expmi_plans) . ')';
     $this->_db->setQuery($query);
     $sub_list = $this->_db->loadObjectList();
     if (!empty($sub_list)) {
         foreach ($sub_list as $sl) {
             $metaUser = new metaUser($sl->userid);
             $metaUser->moveFocus($sl->id);
             $res = $metaUser->focusSubscription->triggerPreExpiration($metaUser, $mi_pexp);
             if ($res) {
                 $this->result['pre_exp_actions'] += $res;
                 $this->result['pre_expired']++;
             }
         }
     }
     return $this->endBeat();
 }
 /**
  * @param Subscription $subscription_id
  */
 public function validateSubscription($subscription_id)
 {
     if (empty($this->settings)) {
         $this->getSettings();
     }
     if (method_exists($this->processor, 'validateSubscription')) {
         $subscription = new Subscription();
         $subscription->load($subscription_id);
         $allowed = array("Trial", "Active");
         if (!in_array($subscription->status, $allowed)) {
             return null;
         }
         $invoice = new Invoice();
         $invoice->loadbySubscriptionId($subscription_id);
         if (empty($invoice->id)) {
             return null;
         }
         $iFactory = new InvoiceFactory(null, null, null, $this->processor_name);
         $iFactory->userid = $subscription->userid;
         $iFactory->usage = $invoice->usage;
         $iFactory->processor = $this->processor_name;
         $iFactory->loadMetaUser();
         $iFactory->touchInvoice($invoice->invoice_number);
         $iFactory->puffer();
         $iFactory->loadItems();
         $iFactory->loadItemTotal();
         foreach ($iFactory->items->itemlist as $item) {
             $this->exchangeSettingsByPlan($item['obj']);
         }
         $result = $this->processor->validateSubscription($iFactory, $subscription);
         $resp = array();
         if (!empty($result['raw'])) {
             if (is_array($result['raw'])) {
                 $resp = $result['raw'];
             } else {
                 $resp['response'] = $result['raw'];
             }
         }
         $iFactory->invoice->processorResponse($iFactory, $result, $resp, true);
         if (!empty($result['valid'])) {
             return true;
         } elseif (empty($result['error'])) {
             return null;
         }
     } else {
         return null;
     }
 }