public function edit($id) { global $aecConfig; $lists = array(); $params_values = array(); $restrictions_values = array(); $customparams_values = array(); $customparamsarray = new stdClass(); $row = new SubscriptionPlan(); $row->load($id); $restrictionHelper = new aecRestrictionHelper(); if (!$row->id) { $row->ordering = 9999; $hasrecusers = false; $params_values['active'] = 1; $params_values['visible'] = 0; $params_values['processors'] = 0; $restrictions_values['gid_enabled'] = 1; if (defined('JPATH_MANIFESTS')) { $restrictions_values['gid'] = 2; } else { $restrictions_values['gid'] = 18; } } else { $params_values = $row->params; $restrictions_values = $row->restrictions; if (empty($restrictions_values)) { $restrictions_values = array(); } // Clean up custom params if (!empty($row->customparams)) { foreach ($row->customparams as $n => $v) { if (isset($params_values[$n]) || isset($restrictions_values[$n])) { unset($row->customparams[$n]); } } } $customparams_values = $row->custom_params; // We need to convert the values that are set as object properties $params_values['active'] = $row->active; $params_values['visible'] = $row->visible; $params_values['email_desc'] = $row->getProperty('email_desc'); $params_values['name'] = $row->getProperty('name'); $params_values['desc'] = $row->getProperty('desc'); $params_values['micro_integrations'] = $row->micro_integrations; $params_values['processors'] = $row->params['processors']; // Checking if there is already a user, which disables certain actions $query = 'SELECT count(*)' . ' FROM #__users AS a' . ' LEFT JOIN #__acctexp_subscr AS b ON a.id = b.userid' . ' WHERE b.plan = ' . $row->id . ' AND (b.status = \'Active\' OR b.status = \'Trial\')' . ' AND b.recurring =\'1\''; $this->db->setQuery($query); $hasrecusers = $this->db->loadResult() > 0 ? true : false; } $stdformat = '{aecjson}{"cmd":"condition","vars":[{"cmd":"data","vars":"payment.freetrial"},' . '{"cmd":"concat","vars":[{"cmd":"jtext","vars":"CONFIRM_FREETRIAL"}," ",{"cmd":"data","vars":"payment.method_name"}]},' . '{"cmd":"concat","vars":[{"cmd":"data","vars":"payment.amount"},{"cmd":"data","vars":"payment.currency_symbol"}," ",{"cmd":"data","vars":"payment.method_name"}]}' . ']}{/aecjson}'; // params and their type values $params['active'] = array('toggle', 1); $params['visible'] = array('toggle', 1); $params['name'] = array('inputC', ''); $params['desc'] = array('editor', ''); $params['customamountformat'] = array('inputD', $stdformat); $params['customthanks'] = array('inputC', ''); $params['customtext_thanks_keeporiginal'] = array('toggle', 1); $params['customtext_thanks'] = array('editor', ''); $params['email_desc'] = array('inputD', ''); $params['meta'] = array('inputD', ''); $params['micro_integrations_inherited'] = array('list', ''); $params['micro_integrations'] = array('list', ''); $params['micro_integrations_plan'] = array('list', ''); $params['params_remap'] = array('subarea_change', 'groups'); $groups = ItemGroupHandler::parentGroups($row->id, 'item'); if (!empty($groups)) { $gs = array(); foreach ($groups as $groupid) { $group = new ItemGroup(); $group->load($groupid); $g = array(); $g['id'] = $group->id; $g['name'] = $group->getProperty('name'); $g['color'] = $group->params['color']; $g['group'] = '<strong>' . $groupid . '</strong>'; $gs[$groupid] = $g; } $customparamsarray->groups = $gs; } else { $customparamsarray->groups = null; } $grouplist = ItemGroupHandler::getTree(); $glist = array(); $glist[] = JHTML::_('select.option', 0, '- - - - - -'); $groupids = array(); foreach ($grouplist as $id => $glisti) { if (defined('JPATH_MANIFESTS')) { $glist[] = JHTML::_('select.option', $glisti[0], str_replace(' ', ' ', $glisti[1]), 'value', 'text', in_array($glisti[0], $groups)); } else { $glist[] = JHTML::_('select.option', $glisti[0], $glisti[1], 'value', 'text', in_array($glisti[0], $groups)); } $groupids[$glisti[0]] = ItemGroupHandler::groupColor($glisti[0]); } $lists['add_group'] = JHTML::_('select.genericlist', $glist, 'add_group', 'size="1"', 'value', 'text', $row->id ? 0 : 1); $params['add_group'] = array('list', '', '', $row->id ? 0 : 1); $params['params_remap'] = array('subarea_change', 'params'); $params['override_activation'] = array('toggle', 0); $params['override_regmail'] = array('toggle', 0); $params['full_free'] = array('toggle', ''); $params['full_amount'] = array('inputA', ''); $params['full_period'] = array('inputA', ''); $params['full_periodunit'] = array('list', 'D'); $params['trial_free'] = array('toggle', ''); $params['trial_amount'] = array('inputA', ''); $params['trial_period'] = array('inputA', ''); $params['trial_periodunit'] = array('list', 'D'); $params['gid_enabled'] = array('toggle', 1); $params['gid'] = array('list', defined('JPATH_MANIFESTS') ? 2 : 18); $params['lifetime'] = array('toggle', 0); $params['processors'] = array('list', ''); $params['processor_selectmode'] = array('list', ''); $params['standard_parent'] = array('list', ''); $params['fallback'] = array('list', ''); $params['fallback_req_parent'] = array('toggle', 0); $params['make_active'] = array('toggle', 1); $params['make_primary'] = array('toggle', 1); $params['update_existing'] = array('toggle', 1); $params['similarplans'] = array('list', ''); $params['equalplans'] = array('list', ''); $params['notauth_redirect'] = array('inputC', ''); $params['fixed_redirect'] = array('inputC', ''); $params['hide_duration_checkout'] = array('toggle', 0); $params['cart_behavior'] = array('list', 0); $params['addtocart_redirect'] = array('inputC', ''); $params['addtocart_max'] = array('inputA', ''); $params['notes'] = array('textarea', ''); $params['restr_remap'] = array('subarea_change', 'restrictions'); $params['inventory_amount_enabled'] = array('toggle', 0); $params['inventory_amount'] = array('inputB', 0); $params['inventory_amount_used'] = array('inputB', 0); $params = array_merge($params, $restrictionHelper->getParams()); $rewriteswitches = array('cms', 'user'); $params['rewriteInfo'] = array('fieldset', '', AECToolbox::rewriteEngineInfo($rewriteswitches)); // 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['trial_periodunit'] = JHTML::_('select.genericlist', $perunit, 'trial_periodunit', 'size="4"', 'value', 'text', arrayValueDefault($params_values, 'trial_periodunit', "D")); $lists['full_periodunit'] = JHTML::_('select.genericlist', $perunit, 'full_periodunit', 'size="4"', 'value', 'text', arrayValueDefault($params_values, 'full_periodunit', "D")); // make the select list for first trial period units $selectmode[] = JHTML::_('select.option', '0', JText::_('PAYPLAN_PROCESSOR_SELECTMODE_LIST')); $selectmode[] = JHTML::_('select.option', '1', JText::_('PAYPLAN_PROCESSOR_SELECTMODE_CONFIRMATION')); $selectmode[] = JHTML::_('select.option', '2', JText::_('PAYPLAN_PROCESSOR_SELECTMODE_BOTH')); $lists['processor_selectmode'] = JHTML::_('select.genericlist', $selectmode, 'processor_selectmode', 'size="3"', 'value', 'text', arrayValueDefault($params_values, 'processor_selectmode', "0")); $params['processors_remap'] = array("subarea_change", "plan_params"); $pps = PaymentProcessorHandler::getInstalledObjectList(1); if (empty($params_values['processors'])) { $plan_procs = array(); } else { $plan_procs = $params_values['processors']; } if (!empty($plan_procs)) { foreach ($plan_procs as $proc) { foreach ($pps as $pk => $ppo) { if ($ppo->id == $proc) { $pps[] = $ppo; unset($pps[$pk]); } } } } $custompar = array(); foreach ($pps as $ppobj) { if (!$ppobj->active) { continue; } $pp = new PaymentProcessor(); if (!$pp->loadName($ppobj->name)) { continue; } $pp->init(); $pp->getInfo(); $custompar[$pp->id] = array(); $custompar[$pp->id]['handle'] = $ppobj->name; $custompar[$pp->id]['name'] = $pp->info['longname']; $custompar[$pp->id]['params'] = array(); $params['processor_' . $pp->id] = array('toggle', JText::_('PAYPLAN_PROCESSORS_ACTIVATE_NAME'), JText::_('PAYPLAN_PROCESSORS_ACTIVATE_DESC')); $custompar[$pp->id]['params'][] = 'processor_' . $pp->id; $params[$pp->id . '_aec_overwrite_settings'] = array('toggle', JText::_('PAYPLAN_PROCESSORS_OVERWRITE_SETTINGS_NAME'), JText::_('PAYPLAN_PROCESSORS_OVERWRITE_SETTINGS_DESC')); $custompar[$pp->id]['params'][] = $pp->id . '_aec_overwrite_settings'; $customparams = $pp->getCustomPlanParams(); if (is_array($customparams)) { foreach ($customparams as $customparam => $cpcontent) { $naming = array($pp->getParamLang($customparam . '_NAME'), $pp->getParamLang($customparam . '_DESC')); $shortname = $pp->id . "_" . $customparam; $params[$shortname] = array_merge($cpcontent, $naming); $custompar[$pp->id]['params'][] = $shortname; } } if (empty($plan_procs)) { continue; } if (!in_array($pp->id, $plan_procs)) { continue; } $params_values['processor_' . $pp->id] = 1; if (isset($customparams_values[$pp->id . '_aec_overwrite_settings'])) { if (!$customparams_values[$pp->id . '_aec_overwrite_settings']) { continue; } } else { continue; } $settings_array = $pp->getBackendSettings(); if (isset($settings_array['lists'])) { foreach ($settings_array['lists'] as $listname => $listcontent) { $lists[$pp->id . '_' . $listname] = $listcontent; } unset($settings_array['lists']); } // Iterate through settings form to... foreach ($settings_array as $name => $values) { $setting_name = $pp->id . '_' . $name; if (isset($params[$setting_name])) { continue; } if (isset($customparams_values[$setting_name])) { $value = $customparams_values[$setting_name]; } elseif (isset($pp->settings[$name])) { $value = $pp->settings[$name]; } else { $value = ''; } // ...assign new list fields switch ($settings_array[$name][0]) { case 'list_yesno': $arr = array(JHTML::_('select.option', 0, JText::_('no')), JHTML::_('select.option', 1, JText::_('yes'))); $lists[$setting_name] = JHTML::_('select.genericlist', $arr, $setting_name, '', 'value', 'text', (int) $value); $settings_array[$name][0] = 'list'; break; case 'list_currency': // Get currency list $currency_array = explode(',', $pp->info['currencies']); // Transform currencies into OptionArray $currency_code_list = array(); foreach ($currency_array as $currency) { if ($this->lang->hasKey('CURRENCY_' . $currency)) { $currency_code_list[] = JHTML::_('select.option', $currency, JText::_('CURRENCY_' . $currency)); } } // Create list $lists[$setting_name] = JHTML::_('select.genericlist', $currency_code_list, $setting_name, 'size="10"', 'value', 'text', $value); $settings_array[$name][0] = 'list'; break; case 'list_language': // Get language list if (!is_array($pp->info['languages'])) { $this->language_array = explode(',', $pp->info['languages']); } else { $this->language_array = $pp->info['languages']; } // Transform languages into OptionArray $this->language_code_list = array(); foreach ($this->language_array as $this->language) { $this->language_code_list[] = JHTML::_('select.option', $this->language, $this->lang->hasKey('LANGUAGECODE_' . $this->language) ? JText::_('LANGUAGECODE_' . $this->language) : $this->language); } // Create list $lists[$setting_name] = JHTML::_('select.genericlist', $this->language_code_list, $setting_name, 'size="10"', 'value', 'text', $value); $settings_array[$name][0] = 'list'; break; case 'list_plan': unset($settings_array[$name]); break; default: break; } // ...put in missing language fields if (!isset($settings_array[$name][1])) { $settings_array[$name][1] = $pp->getParamLang($name . '_NAME'); $settings_array[$name][2] = $pp->getParamLang($name . '_DESC'); } $params[$setting_name] = $settings_array[$name]; $custompar[$pp->id]['params'][] = $setting_name; } } $customparamsarray->pp = $custompar; // get available active plans $fallback_plans = array(JHTML::_('select.option', '0', JText::_('PAYPLAN_NOFALLBACKPLAN'))); $parent_plans = array(JHTML::_('select.option', '0', JText::_('PAYPLAN_NOPARENTPLAN'))); $query = 'SELECT `id` AS value, `name` AS text' . ' FROM #__acctexp_plans' . ' WHERE `active` = 1' . ' AND `id` != \'' . $row->id . '\''; $this->db->setQuery($query); $payment_plans = $this->db->loadObjectList(); if (is_array($payment_plans)) { $fallback_plans = array_merge($fallback_plans, $payment_plans); $parent_plans = array_merge($parent_plans, $payment_plans); } $lists['fallback'] = JHTML::_('select.genericlist', $fallback_plans, 'fallback', 'size="1"', 'value', 'text', arrayValueDefault($params_values, 'fallback', 0)); $lists['standard_parent'] = JHTML::_('select.genericlist', $parent_plans, 'standard_parent', 'size="1"', 'value', 'text', arrayValueDefault($params_values, 'standard_parent', 0)); // get similar plans if (!empty($params_values['similarplans'])) { $query = 'SELECT `id` AS value, `name` As text' . ' FROM #__acctexp_plans' . ' WHERE `id` IN (' . implode(',', $params_values['similarplans']) . ')'; $this->db->setQuery($query); $sel_similar_plans = $this->db->loadObjectList(); } else { $sel_similar_plans = 0; } $lists['similarplans'] = JHTML::_('select.genericlist', $payment_plans, 'similarplans[]', 'size="1" multiple="multiple"', 'value', 'text', $sel_similar_plans); // get equal plans if (!empty($params_values['equalplans'])) { $query = 'SELECT `id` AS value, `name` AS text' . ' FROM #__acctexp_plans' . ' WHERE `id` IN (' . implode(',', $params_values['equalplans']) . ')'; $this->db->setQuery($query); $sel_equal_plans = $this->db->loadObjectList(); } else { $sel_equal_plans = 0; } $lists['equalplans'] = JHTML::_('select.genericlist', $payment_plans, 'equalplans[]', 'size="1" multiple="multiple"', 'value', 'text', $sel_equal_plans); $lists = array_merge($lists, $restrictionHelper->getLists($params_values, $restrictions_values)); // make the select list for first trial period units $cartmode[] = JHTML::_('select.option', '0', JText::_('PAYPLAN_CARTMODE_INHERIT')); $cartmode[] = JHTML::_('select.option', '1', JText::_('PAYPLAN_CARTMODE_FORCE_CART')); $cartmode[] = JHTML::_('select.option', '2', JText::_('PAYPLAN_CARTMODE_FORCE_DIRECT')); $lists['cart_behavior'] = JHTML::_('select.genericlist', $cartmode, 'cart_behavior', 'size="1"', 'value', 'text', arrayValueDefault($params_values, 'cart_behavior', "0")); $mi_list = microIntegrationHandler::getDetailedList(); $mi_settings = array('inherited' => array(), 'attached' => array(), 'custom' => array()); $attached_mis = $row->getMicroIntegrationsSeparate(true); foreach ($mi_list as $mi_details) { $mi_details->inherited = false; if (!empty($attached_mis['inherited']) && in_array($mi_details->id, $attached_mis['inherited'])) { $mi_details->inherited = true; $mi_settings['inherited'][] = $mi_details; } $mi_details->attached = false; if (!empty($attached_mis['plan']) && in_array($mi_details->id, $attached_mis['plan'])) { $mi_details->attached = true; } $mi_settings['attached'][] = $mi_details; } $mi_handler = new microIntegrationHandler(); $mi_list = $mi_handler->getIntegrationList(); $mi_htmllist = array(); $mi_htmllist[] = JHTML::_('select.option', '', JText::_('AEC_CMN_NONE_SELECTED')); foreach ($mi_list as $name) { $mi = new microIntegration(); $mi->class_name = 'mi_' . $name; if ($mi->callIntegration()) { $len = 30 - AECToolbox::visualstrlen(trim($mi->name)); $fullname = str_replace('#', ' ', str_pad($mi->name, $len, '#')) . ' - ' . substr($mi->desc, 0, 120); $mi_htmllist[] = JHTML::_('select.option', $name, $fullname); } } if (!empty($row->micro_integrations) && is_array($row->micro_integrations)) { $query = 'SELECT `id`' . ' FROM #__acctexp_microintegrations' . ' WHERE `id` IN (' . implode(',', $row->micro_integrations) . ')' . ' AND `hidden` = \'1\''; $this->db->setQuery($query); $hidden_mi = $this->db->loadObjectList(); } else { $hidden_mi = array(); } $customparamsarray->hasperplanmi = false; if (!empty($aecConfig->cfg['per_plan_mis']) || !empty($hidden_mi)) { $customparamsarray->hasperplanmi = true; $lists['micro_integrations_plan'] = JHTML::_('select.genericlist', $mi_htmllist, 'micro_integrations_plan[]', 'size="' . min(count($mi_list) + 1, 25) . '" multiple="multiple"', 'value', 'text', array()); $custompar = array(); $hidden_mi_list = array(); if (!empty($hidden_mi)) { foreach ($hidden_mi as $miobj) { $hidden_mi_list[] = $miobj->id; } } $params['micro_integrations_hidden'] = array('hidden', ''); $params_values['micro_integrations_hidden'] = $hidden_mi_list; if (!empty($hidden_mi)) { foreach ($hidden_mi as $miobj) { $mi = new microIntegration(); if (!$mi->load($miobj->id)) { continue; } if (!$mi->callIntegration(1)) { continue; } $custompar[$mi->id] = array(); $custompar[$mi->id]['name'] = $mi->name; $custompar[$mi->id]['params'] = array(); $prefix = 'MI_' . $mi->id . '_'; $params[] = array('area_change', 'MI'); $params[] = array('subarea_change', 'E'); $params[] = array('add_prefix', $prefix); $params[] = array('section_paper', JText::_('MI_E_TITLE')); $generalsettings = $mi->getGeneralSettings(); foreach ($generalsettings as $name => $value) { $params[$prefix . $name] = $value; $custompar[$mi->id]['params'][] = $prefix . $name; if (isset($mi->{$name})) { $params_values[$prefix . $name] = $mi->{$name}; } else { $params_values[$prefix . $name] = ''; } } $params[] = array('section_end', 0); $misettings = $mi->getSettings(); if (isset($misettings['lists'])) { foreach ($misettings['lists'] as $listname => $listcontent) { $lists[$prefix . $listname] = str_replace('name="', 'name="' . $prefix, $listcontent); } unset($misettings['lists']); } $params[] = array('area_change', 'MI'); $params[] = array('subarea_change', $mi->class_name); $params[] = array('add_prefix', $prefix); $params[] = array('section_paper', JText::_('MI_E_SETTINGS')); foreach ($misettings as $name => $value) { $params[$prefix . $name] = $value; $custompar[$mi->id]['params'][] = $prefix . $name; } $params[] = array('section_end', 0); } } if (!empty($custompar)) { $mi_settings['custom'] = $custompar; } } $customparamsarray->mi = $mi_settings; $settings = new aecSettings('payplan', 'general'); if (is_array($customparams_values)) { $settingsparams = array_merge($params_values, $customparams_values, $restrictions_values); } else { $settingsparams = array_merge($params_values, $restrictions_values); } $settings->fullSettingsArray($params, $settingsparams, $lists); // Call HTML Class $aecHTML = new aecHTML($settings->settings, $settings->lists); if (!empty($customparamsarray)) { $aecHTML->customparams = $customparamsarray; } HTML_AcctExp::editSubscriptionPlan($aecHTML, $row, $hasrecusers); }
public function getPrintout($InvoiceFactory, $forcecleared = false, $forcecounter = null) { global $aecConfig; if (is_null($forcecounter)) { $this->counter = $forcecounter; } if ($this->transaction_date == '0000-00-00 00:00:00' && $forcecleared) { $this->transaction_date = date('Y-m-d H:i:s', (int) gmdate('U')); } $data = $this->getWorkingData($InvoiceFactory); $data['invoice_id'] = $this->id; $data['invoice_number'] = $this->invoice_number; $data['invoice_date'] = aecTemplate::date($InvoiceFactory->invoice->created_date); $data['itemlist'] = array(); foreach ($InvoiceFactory->items->itemlist as $iid => $item) { if (isset($item['obj'])) { $amt = $item['terms']->nextterm->cost[0]->cost['amount']; $data['itemlist'][] = '<tr id="invoice_content_item">' . '<td>' . $item['name'] . '</td>' . '<td>' . AECToolbox::formatAmount($amt, $InvoiceFactory->invoice->currency) . '</td>' . '<td>' . $item['quantity'] . '</td>' . '<td>' . AECToolbox::formatAmount($amt * $item['quantity'], $InvoiceFactory->invoice->currency) . '</td>' . '</tr>'; foreach ($item['terms']->nextterm->cost as $cid => $cost) { if ($cid != 0) { if ($cost->type == 'discount') { if (!empty($cost->cost['details'])) { $ta = ' (' . $cost->cost['details'] . ')'; } else { $ta = ""; } $data['itemlist'][] = '<tr id="invoice_content_item">' . '<td>' . JText::_('AEC_CHECKOUT_DISCOUNT') . $ta . '</td>' . '<td></td>' . '<td></td>' . '<td>' . AECToolbox::formatAmount($cost->cost['amount'], $InvoiceFactory->invoice->currency) . '</td>' . '</tr>'; } elseif ($cost->type == 'cost') { if (!empty($cost->cost['details'])) { $ta = ' (' . $cost->cost['details'] . ')'; } else { $ta = ""; } $data['itemlist'][] = '<tr id="invoice_content_item">' . '<td>' . $ta . '</td>' . '<td></td>' . '<td></td>' . '<td>' . AECToolbox::formatAmount($cost->cost['amount'], $InvoiceFactory->invoice->currency) . '</td>' . '</tr>'; } } } } } $data['totallist'][] = '<tr id="invoice_content_item_separator">' . '<td colspan="4"></td>' . '</tr>'; if (isset($InvoiceFactory->items->tax)) { if (isset($InvoiceFactory->items->total)) { $data['totallist'][] = '<tr id="invoice_content_item_total">' . '<td>' . JText::_('INVOICEPRINT_TOTAL') . '</td>' . '<td></td>' . '<td></td>' . '<td>' . AECToolbox::formatAmount($InvoiceFactory->items->total->cost['amount'], $InvoiceFactory->invoice->currency) . '</td>' . '</tr>'; } foreach ($InvoiceFactory->items->tax as $item) { $details = null; foreach ($item['terms']->terms[0]->cost as $citem) { if ($citem->type == 'tax') { $details = $citem->cost['details']; } } $data['totallist'][] = '<tr id="invoice_content_item_tax">' . '<td>Tax' . ' ( ' . $details . ' )' . '</td>' . '<td></td>' . '<td></td>' . '<td>' . AECToolbox::formatAmount($item['cost'], $InvoiceFactory->invoice->currency) . '</td>' . '</tr>'; } } if (isset($InvoiceFactory->items->grand_total)) { $data['totallist'][] = '<tr id="invoice_content_item_total">' . '<td>' . JText::_('INVOICEPRINT_GRAND_TOTAL') . '</td>' . '<td></td>' . '<td></td>' . '<td>' . AECToolbox::formatAmount($InvoiceFactory->items->grand_total->cost['amount'], $InvoiceFactory->invoice->currency) . '</td>' . '</tr>'; } if ($this->transaction_date == '0000-00-00 00:00:00') { if (!$this->active) { $data['paidstatus'] = JText::_('INVOICEPRINT_PAIDSTATUS_CANCEL'); } else { $data['paidstatus'] = JText::_('INVOICEPRINT_PAIDSTATUS_UNPAID'); } } else { if (!$this->active) { $data['paidstatus'] = JText::_('INVOICEPRINT_PAIDSTATUS_CANCEL'); } else { $date = AECToolbox::formatDate($this->transaction_date); $data['paidstatus'] = sprintf(JText::_('INVOICEPRINT_PAIDSTATUS_PAID'), $date); } } $pplist = array(); if ($this->method != 'none') { $pp = new PaymentProcessor(); if ($pp->loadName($this->method)) { $pp->init(); $pp->getInfo(); if (!empty($InvoiceFactory->plan->id)) { $pp->exchangeSettingsByPlan($InvoiceFactory->plan->id, $InvoiceFactory->plan->params); } } } else { $pp = null; } $pplist[$this->method] = $pp; $recurring = false; if (!empty($pp)) { $recurring = $pplist[$this->method]->is_recurring(); } $data['recurringstatus'] = ""; if ($recurring) { $data['recurringstatus'] = JText::_('INVOICEPRINT_RECURRINGSTATUS_RECURRING'); } elseif (!empty($InvoiceFactory->plan->id)) { if (!empty($InvoiceFactory->plan->params['trial_amount']) && $InvoiceFactory->plan->params['trial_period']) { $data['recurringstatus'] = JText::_('INVOICEPRINT_RECURRINGSTATUS_ONCE'); } } $data['invoice_billing_history'] = ""; if (!empty($this->transactions)) { if (count($this->transactions) > 0 && !empty($data['recurringstatus']) && $this->method != 'none') { $data['paidstatus'] = sprintf(JText::_('INVOICEPRINT_PAIDSTATUS_PAID'), ""); foreach ($this->transactions as $transaction) { if (!isset($pplist[$transaction->processor])) { $pp = new PaymentProcessor(); if ($pp->loadName($transaction->processor)) { $pp->getInfo(); $pplist[$transaction->processor] = $pp; } } $data['invoice_billing_history'] .= '<tr><td>' . AECToolbox::formatDate($transaction->timestamp) . '</td><td>' . $transaction->amount . ' ' . $transaction->currency . '</td><td>' . $pplist[$transaction->processor]->info['longname'] . '</td></tr>'; } } } $s = array("before_header", "header", "after_header", "address", "before_content", "after_content", "before_footer", "footer", "after_footer"); foreach ($s as $k) { if (empty($data[$k])) { $data[$k] = ""; } } return $data; }
$pp = new PaymentProcessor(); $pp->loadName($legacy_processors_name[$n]); $pp->init(); switch ($legacy_processors_name[$n]) { case 'paypal': $pp->settings['business'] = $old_cfg->business; $pp->settings['testmode'] = $old_cfg->testmode; $pp->settings['tax'] = $old_cfg->tax; $pp->settings['currency'] = $old_cfg->currency_code; $pp->settings['checkbusiness'] = $old_cfg->checkbusiness; $pp->settings['lc'] = $old_cfg->lc; $pp->settings['altipnurl'] = $old_cfg->altipnurl; $pp->setSettings(); $pp = new PaymentProcessor(); $pp->loadName("paypal_subscription"); $pp->init(); $pp->settings['business'] = $old_cfg->business; $pp->settings['testmode'] = $old_cfg->testmode; $pp->settings['tax'] = $old_cfg->tax; $pp->settings['currency'] = $old_cfg->currency_code; $pp->settings['checkbusiness'] = $old_cfg->checkbusiness; $pp->settings['lc'] = $old_cfg->lc; $pp->settings['altipnurl'] = $old_cfg->altipnurl; break; case 'viaklix': $pp->settings['accountid'] = $old_cfg->accountid; $pp->settings['userid'] = $old_cfg->userid; $pp->settings['pin'] = $old_cfg->pin; $pp->settings['testmode'] = $old_cfg->testmode; break; case 'authorize':
public function applyPlan($user, $processor = 'none', $silent = 0, $multiplicator = 1, $invoice = null, $tempparams = null) { global $aecConfig; $forcelifetime = false; if (is_string($multiplicator)) { if (strcmp($multiplicator, 'lifetime') === 0) { $forcelifetime = true; } } elseif (is_int($multiplicator) && $multiplicator < 1) { $multiplicator = 1; } if (empty($user)) { return false; } if (is_object($user)) { if (is_a($user, 'metaUser')) { $metaUser = $user; } elseif (is_a($user, 'Subscription')) { $metaUser = new metaUser($user->userid); $metaUser->focusSubscription = $user; } } else { $metaUser = new metaUser($user); } if (!isset($this->params['make_primary'])) { $this->params['make_primary'] = 1; } $fstatus = $metaUser->establishFocus($this, $processor, false); // TODO: Figure out why $status returns 'existing' - even on a completely fresh subscr if ($fstatus != 'existing') { $is_pending = $metaUser->focusSubscription->isPending(); $is_trial = $metaUser->focusSubscription->isTrial(); } else { $is_pending = false; $is_trial = $metaUser->focusSubscription->isTrial(); } $comparison = $this->doPlanComparison($metaUser->focusSubscription); $renew = $metaUser->is_renewing(); $lifetime = $metaUser->focusSubscription->lifetime; if ($comparison['total_comparison'] === false || $is_pending) { // If user is using global trial period he still can use the trial period of a plan if ($this->params['trial_period'] > 0 && !$is_trial) { $trial = true; $value = $this->params['trial_period']; $perunit = $this->params['trial_periodunit']; $this->params['lifetime'] = 0; // We are entering the trial period. The lifetime will come at the renew. $amount = $this->params['trial_amount']; } else { $trial = false; $value = $this->params['full_period']; $perunit = $this->params['full_periodunit']; $amount = $this->params['full_amount']; } } elseif (!$is_pending) { $trial = false; $value = $this->params['full_period']; $perunit = $this->params['full_periodunit']; $amount = $this->params['full_amount']; } else { return false; } if ($this->params['lifetime'] || $forcelifetime) { $metaUser->focusSubscription->expiration = '9999-12-31 00:00:00'; $metaUser->focusSubscription->lifetime = 1; } else { $metaUser->focusSubscription->lifetime = 0; $value *= $multiplicator; if ($comparison['comparison'] == 2 && !$lifetime) { $metaUser->focusSubscription->setExpiration($perunit, $value, 1); } else { $metaUser->focusSubscription->setExpiration($perunit, $value, 0); } } if ($is_pending) { // Is new = set signup date $metaUser->focusSubscription->signup_date = date('Y-m-d H:i:s', (int) gmdate('U')); if ($this->params['trial_period'] > 0 && !$is_trial) { $status = 'Trial'; } else { if ($this->params['full_period'] || $this->params['lifetime']) { if (!isset($this->params['make_active'])) { $status = 'Active'; } else { $status = $this->params['make_active'] ? 'Active' : 'Pending'; } } else { // This should not happen $status = 'Pending'; } } } else { // Renew subscription - Do NOT set signup_date if (!isset($this->params['make_active'])) { $status = $trial ? 'Trial' : 'Active'; } else { $status = $this->params['make_active'] ? $trial ? 'Trial' : 'Active' : 'Pending'; } } $metaUser->focusSubscription->status = $status; $metaUser->focusSubscription->plan = $this->id; $metaUser->temporaryRFIX(); $metaUser->focusSubscription->lastpay_date = date('Y-m-d H:i:s', (int) gmdate('U')); $metaUser->focusSubscription->type = $processor; if (is_object($invoice)) { if (!empty($invoice->params)) { $tempparam = array(); if (!empty($invoice->params['creator_ip'])) { $tempparam['creator_ip'] = $invoice->params['creator_ip']; } if (!empty($tempparam)) { $metaUser->focusSubscription->addParams($tempparam, 'params', false); $metaUser->focusSubscription->storeload(); } } } $pp = new PaymentProcessor(); if ($pp->loadName(strtolower($processor))) { $pp->init(); $pp->getInfo(); $recurring_choice = null; if (is_object($invoice)) { if (!empty($invoice->params)) { if (isset($invoice->params["userselect_recurring"])) { $recurring_choice = $invoice->params["userselect_recurring"]; } } } // Check whether we have a custome choice set if (!is_null($recurring_choice)) { $metaUser->focusSubscription->recurring = $pp->is_recurring($recurring_choice); } else { $metaUser->focusSubscription->recurring = $pp->is_recurring(); } } else { $metaUser->focusSubscription->recurring = 0; } $metaUser->focusSubscription->storeload(); if (empty($invoice->id)) { $invoice = new stdClass(); $invoice->amount = $amount; } $exchange = $add = null; $result = $this->triggerMIs('action', $metaUser, $exchange, $invoice, $add, $silent); if ($result === false) { return false; } elseif ($result === true) { // MIs might have changed the subscription. Reload it. $metaUser->focusSubscription->reload(); } if ($this->params['gid_enabled']) { $metaUser->instantGIDchange($this->params['gid']); } $metaUser->focusSubscription->storeload(); if (!($silent || $aecConfig->cfg['noemails']) || $aecConfig->cfg['noemails_adminoverride']) { $adminonly = $this->id == $aecConfig->cfg['entry_plan'] || $aecConfig->cfg['noemails'] && $aecConfig->cfg['noemails_adminoverride']; $metaUser->focusSubscription->sendEmailRegistered($renew, $adminonly, $invoice); } $metaUser->meta->addPlanID($this->id); $result = $this->triggerMIs('afteraction', $metaUser, $exchange, $invoice, $add, $silent); if ($result === false) { return false; } $this->incrementInventory(); return $renew; }
static function getCartProcessorGroups($cart, $recurring = false) { $pgroups = array(); foreach ($cart->content as $cid => $c) { $cartitem = aecCartHelper::getCartItemObject($cart, $cid); $pplist = array(); $pplist_names = array(); if (!empty($cartitem->params['processors'])) { foreach ($cartitem->params['processors'] as $n) { $pp = new PaymentProcessor(); if (!$pp->loadId($n)) { continue; } $pp->init(); $pp->getInfo(); $pp->exchangeSettingsByPlan($cartitem); if (isset($recurring)) { $recurring = $pp->is_recurring($recurring); } else { $recurring = $pp->is_recurring(); } if ($recurring > 1) { $pplist[] = $pp->id; $pplist_names[] = $pp->info['longname']; if (!$cartitem->params['lifetime']) { $pplist[] = $pp->id . '_recurring'; $pplist_names[] = $pp->info['longname']; } } elseif (!$cartitem->params['lifetime'] && $recurring) { $pplist[] = $pp->id . '_recurring'; $pplist_names[] = $pp->info['longname']; } else { $pplist[] = $pp->id; $pplist_names[] = $pp->info['longname']; } } } if (empty($pplist)) { continue; } if (empty($pgroups)) { $pg = array(); $pg['members'] = array($cid); $pg['processors'] = $pplist; $pg['processor_names'] = $pplist_names; $pgroups[] = $pg; } else { $create = true; foreach ($pgroups as $pgid => $pgroup) { $pg = array(); if (count($pplist) == count($pgroup['processors'])) { $a = true; foreach ($pplist as $k => $v) { if ($pgroup['processors'][$k] != $v) { $a = false; } } if ($a) { $pgroups[$pgid]['members'][] = $cid; $create = false; } } } if ($create) { $pg['members'] = array($cid); $pg['processors'] = $pplist; $pg['processor_names'] = $pplist_names; $pgroups[] = $pg; } } } return $pgroups; }
public function getProcessor($name) { if (!isset($this->processors[$name])) { $processor = new PaymentProcessor(); if ($processor->loadName($name)) { $processor->init(); $this->processors[$name] = $processor; } else { // Processor does not exist $this->processors[$name] = false; } } return $this->processors[$name]; }
function processNotification($option, $processor) { global $aecConfig; // Legacy naming support switch ($processor) { case 'vklix': $processor = 'viaklix'; break; case 'auth': $processor = 'authorize'; break; case '2co': $processor = '2checkout'; break; case 'eps': $processor = 'epsnetpay'; break; } if (!empty($aecConfig->cfg['debug_processor_notifications'])) { aecDebug("ResponseFunction:processNotification"); aecDebug($_GET); aecDebug($_POST); aecDebug($_REQUEST); aecDebug(file_get_contents("php://input")); } $response = array(); $response['fullresponse'] = aecPostParamClear($_POST); // parse processor notification $pp = new PaymentProcessor(); if ($pp->loadName($processor)) { $pp->init(); $response = array_merge($response, $pp->parseNotification($response['fullresponse'])); } else { $eventlog = new eventLog(); $eventlog->issue('processor loading failure', 'processor,loading,error', 'When receiving payment notification, tried to load processor: ' . $processor, 128); return; } // Get Invoice record if (!empty($response['invoice'])) { $id = aecInvoiceHelper::InvoiceIDfromNumber($response['invoice']); } else { $id = false; $response['invoice'] = 'empty'; } if (!$id) { $short = JText::_('AEC_MSG_PROC_INVOICE_FAILED_SH'); $event = ''; $tags = ''; if (isset($response['null'])) { if (isset($response['explanation'])) { $short = JText::_('AEC_MSG_PROC_INVOICE_ACTION_SH'); $event .= $response['explanation']; } else { $event .= JText::_('AEC_MSG_PROC_INVOICE_ACTION_EV_NULL'); } $tags .= 'invoice,processor,payment,null'; } else { $event = sprintf(JText::_('AEC_MSG_PROC_INVOICE_FAILED_EV'), $processor, $response['invoice']); $tags = 'invoice,processor,payment,error'; } $params = array(); $eventlog = new eventLog(); if (isset($response['null'])) { if (isset($response['error'])) { $eventlog->issue($short, $tags, $response['error'], 128, $params); } else { $eventlog->issue($short, $tags, $event, 8, $params); } } else { $eventlog->issue($short, $tags, $event, 128, $params); $error = 'Invoice Number not found. Invoice number provided: "' . $response['invoice'] . '"'; $pp->notificationError($response, $error); } return; } else { $iFactory = new InvoiceFactory(null, null, null, null, $response['invoice']); $iFactory->processorResponse($response); } }
public static function getObjectList($array, $getinfo = false, $getsettings = false) { $excluded = array('free', 'none', 'transfer'); $list = array(); foreach ($array as $ppname) { if (empty($ppname) || in_array($ppname, $excluded)) { continue; } $pp = new PaymentProcessor(); if ($pp->loadName($ppname)) { $pp->init(false); if ($getinfo) { $pp->getInfo(); } if ($getsettings) { $pp->getSettings(); } } $list[$ppname] = $pp; } return $list; }