Пример #1
0
 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('&nbsp;', ' ', $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('#', '&nbsp;', 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);
 }
Пример #2
0
 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 = '&nbsp;(' . $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 = '&nbsp;(' . $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' . '&nbsp;( ' . $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 . '&nbsp;' . $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;
 }
Пример #3
0
 $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;
 }
Пример #5
0
 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;
 }
Пример #6
0
 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];
 }
Пример #7
0
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;
 }