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; }
/** * @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; }
public function delete() { $subids = $this->getAllSubscriptions(); foreach ($subids as $id) { $subscription = new Subscription(); $subscription->load($id); $subscription->delete(); } $this->meta->delete(); }
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(' ', ' ', $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); }
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; } }