示例#1
0
 public function Action()
 {
     if (empty($_POST['delete'])) {
         return '<p>Please select a processor to remove.</p>';
     }
     if (empty($_POST['replace'])) {
         return '<p>Please select a processor to replace the removed processor with.</p>';
     }
     $db = JFactory::getDBO();
     $replacepp = new PaymentProcessor();
     $replacepp->loadName($_POST['replace']);
     $deletepp = new PaymentProcessor();
     $deletepp->loadName($_POST['delete']);
     $query = 'UPDATE #__acctexp_invoices' . ' SET `method` = \'' . $replacepp->processor_name . '\'' . ' WHERE `method` = \'' . $deletepp->processor_name . '\'';
     $db->setQuery($query);
     $db->query();
     $query = 'UPDATE #__acctexp_subscr' . ' SET `type` = \'' . $replacepp->processor_name . '\'' . ' WHERE `type` = \'' . $deletepp->processor_name . '\'';
     $db->setQuery($query);
     $db->query();
     $query = 'UPDATE #__acctexp_log_history' . ' SET `proc_id` = \'' . $replacepp->id . '\', `proc_name` = \'' . $replacepp->processor_name . '\'' . ' WHERE `proc_name` = \'' . $replacepp->processor_name . '\'';
     $db->setQuery($query);
     $db->query();
     $planlist = SubscriptionPlanHandler::getPlanList();
     foreach ($planlist as $planid) {
         $plan = new SubscriptionPlan();
         $plan->load($planid);
         if (empty($plan->params['processors'])) {
             continue;
         }
         if (in_array($deletepp->id, $plan->params['processors'])) {
             unset($plan->params['processors'][array_search($deletepp->id, $plan->params['processors'])]);
             if (!in_array($replacepp->id, $plan->params['processors'])) {
                 $plan->params['processors'][] = $replacepp->id;
             }
             $plan->check();
             $plan->store();
         }
     }
     $query = 'DELETE FROM #__acctexp_config_processors' . ' WHERE `id` = \'' . $deletepp->id . '\'';
     $db->setQuery($query);
     $db->query();
     return "<p>Alright, replaced and deleted!</p>";
 }
 public function capture($data)
 {
     $extradata = isset($data['ExtraData']) ? $data['ExtraData'] : false;
     if ($extradata) {
         unset($data['ExtraData']);
     }
     $this->payment->AccountPaymentNumber = isset($extradata['AccountPaymentNumber']) ? $extradata['AccountPaymentNumber'] : null;
     parent::capture($data);
     // Do redirection
     $this->doRedirect();
 }
 /**
  * tests the DirectTransaction with same amount
  *
  * should create a transaction instead of preauth & capture
  */
 public function testDirectTransaction()
 {
     $this->assertTrue($this->ProcessPayment());
     $this->assertNull($this->_paymentProcessor->getPreauthId());
     $transactionId = $this->_paymentProcessor->getTransactionId();
     $result = $this->_transactionObject->getOne($transactionId);
     $this->assertInternalType('array', $result);
     $this->assertEquals('20000', $result['response_code']);
     $this->assertEquals($transactionId, $result['id']);
     $this->assertArrayHasKey('preauthorization', $result);
     $this->assertNull($result['preauthorization']);
 }
 /**
  * Show the "choose payment method" form
  */
 function ProcessForm()
 {
     $fields = new FieldList();
     // Create a dropdown select field for choosing gateway
     $supported_methods = PaymentProcessor::get_supported_methods();
     $source = array();
     foreach ($supported_methods as $methodName) {
         $methodConfig = PaymentFactory::get_factory_config($methodName);
         $source[$methodName] = $methodConfig['title'];
     }
     $fields->push(new DropDownField('PaymentMethod', 'Select Payment Method', $source));
     $actions = new FieldList(new FormAction('proceed', 'Proceed'));
     $processForm = new Form($this, 'ProcessForm', $fields, $actions);
     $processForm->disableSecurityToken();
     return $processForm;
 }
示例#5
0
 public function createFields()
 {
     $order = $this->order;
     $member = $this->customer;
     //Payment fields
     $supported_methods = PaymentProcessor::get_supported_methods();
     $source = array();
     foreach ($supported_methods as $methodName) {
         $methodConfig = PaymentFactory::get_factory_config($methodName);
         $source[$methodName] = $methodConfig['title'];
     }
     $outstanding = $order->TotalOutstanding()->Nice();
     $paymentFields = CompositeField::create(new HeaderField(_t('CheckoutPage.PAYMENT', "Payment"), 3), LiteralField::create('RepayLit', "<p>Process a payment for the oustanding amount: {$outstanding}</p>"), DropDownField::create('PaymentMethod', 'Select Payment Method', $source)->setCustomValidationMessage(_t('CheckoutPage.SELECT_PAYMENT_METHOD', "Please select a payment method.")))->setName('PaymentFields');
     $fields = FieldList::create($paymentFields);
     $this->extend('updateFields', $fields);
     $fields->setForm($this);
     return $fields;
 }
 public function capture($data)
 {
     parent::capture($data);
     // Set the return link
     $this->gateway->returnURL = Director::absoluteURL(Controller::join_links($this->link(), 'complete', $this->methodName, $this->payment->ID));
     // Authorise the payment and get token
     $result = $this->gateway->authorise($this->paymentData);
     if ($result && !$result->isSuccess()) {
         $this->payment->updateStatus($result);
         $this->doRedirect();
         return;
     }
     // Save the token for good measure
     $this->payment->Token = $this->gateway->tokenID;
     $this->payment->write();
     // Process payment
     $result = $this->gateway->process($this->paymentData);
     // Processing may not get to here if all goes smoothly, customer will be at the 3rd party gateway
     if ($result && !$result->isSuccess()) {
         $this->payment->updateStatus($result);
         $this->doRedirect();
         return;
     }
 }
示例#7
0
 public function createFields()
 {
     $order = $this->order;
     $member = $this->customer;
     //Personal details fields
     if (!$member->ID || $member->Password == '') {
         $link = $this->controller->Link();
         $note = _t('CheckoutPage.NOTE', 'NOTE:');
         $passwd = _t('CheckoutPage.PLEASE_CHOOSE_PASSWORD', 'Please choose a password, so you can login and check your order history in the future.');
         $mber = sprintf(_t('CheckoutPage.ALREADY_MEMBER', 'If you are already a member please %s log in. %s'), "<a href=\"Security/login?BackURL={$link}\">", '</a>');
         $personalFields = CompositeField::create(new HeaderField(_t('CheckoutPage.ACCOUNT', "Account"), 3), new CompositeField(EmailField::create('Email', _t('CheckoutPage.EMAIL', 'Email'))->setCustomValidationMessage(_t('CheckoutPage.PLEASE_ENTER_EMAIL_ADDRESS', "Please enter your email address."))), new CompositeField(new FieldGroup(new ConfirmedPasswordField('Password', _t('CheckoutPage.PASSWORD', "Password")))), new CompositeField(new LiteralField('AccountInfo', "\r\n\t\t\t\t\t\t<p class=\"alert alert-info\">\r\n\t\t\t\t\t\t\t<strong class=\"alert-heading\">{$note}</strong>\r\n\t\t\t\t\t\t\t{$passwd} <br /><br />\r\n\t\t\t\t\t\t\t{$mber}\r\n\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t")))->setID('PersonalDetails')->setName('PersonaDetails');
     }
     //Order item fields
     $items = $order->Items();
     $itemFields = CompositeField::create()->setName('ItemsFields');
     if ($items) {
         foreach ($items as $item) {
             $itemFields->push(new OrderForm_ItemField($item));
         }
     }
     //Order modifications fields
     $subTotalModsFields = CompositeField::create()->setName('SubTotalModificationsFields');
     $subTotalMods = $order->SubTotalModifications();
     if ($subTotalMods && $subTotalMods->exists()) {
         foreach ($subTotalMods as $modification) {
             $modFields = $modification->getFormFields();
             foreach ($modFields as $field) {
                 $subTotalModsFields->push($field);
             }
         }
     }
     $totalModsFields = CompositeField::create()->setName('TotalModificationsFields');
     $totalMods = $order->TotalModifications();
     if ($totalMods && $totalMods->exists()) {
         foreach ($totalMods as $modification) {
             $modFields = $modification->getFormFields();
             foreach ($modFields as $field) {
                 $totalModsFields->push($field);
             }
         }
     }
     //Payment fields
     $supported_methods = PaymentProcessor::get_supported_methods();
     $source = array();
     foreach ($supported_methods as $methodName) {
         $methodConfig = PaymentFactory::get_factory_config($methodName);
         $source[$methodName] = $methodConfig['title'];
     }
     $paymentFields = CompositeField::create(new HeaderField(_t('CheckoutPage.PAYMENT', "Payment"), 3), DropDownField::create('PaymentMethod', 'Select Payment Method', $source)->setCustomValidationMessage(_t('CheckoutPage.SELECT_PAYMENT_METHOD', "Please select a payment method.")))->setName('PaymentFields');
     $fields = FieldList::create($itemFields, $subTotalModsFields, $totalModsFields, $notesFields = CompositeField::create(TextareaField::create('Notes', _t('CheckoutPage.NOTES_ABOUT_ORDER', "Notes about this order")))->setName('NotesFields'), $paymentFields);
     if (isset($personalFields)) {
         $fields->push($personalFields);
     }
     $this->extend('updateFields', $fields);
     $fields->setForm($this);
     return $fields;
 }
示例#8
0
 function export($type, $cmd = null)
 {
     $db = JFactory::getDBO();
     $cmd_save = strcmp('save', $cmd) === 0;
     $cmd_apply = strcmp('apply', $cmd) === 0;
     $cmd_load = strcmp('load', $cmd) === 0;
     $cmd_export = strcmp('export', $cmd) === 0;
     $use_original = 0;
     $system_values = array();
     $filter_values = array();
     $options_values = array();
     $params_values = array();
     if ($type == 'sales') {
         $getpost = array('system' => array('selected_export', 'delete', 'save', 'save_name'), 'filter' => array('date_start', 'date_end', 'method', 'planid', 'groupid', 'status', 'orderby'), 'options' => array('collate', 'breakdown', 'breakdown_custom'), 'params' => array('export_method'));
         $pf = 8;
     } else {
         $getpost = array('system' => array('selected_export', 'delete', 'save', 'save_name'), 'filter' => array('planid', 'groupid', 'status', 'orderby'), 'options' => array('rewrite_rule'), 'params' => array('export_method'));
         $pf = 5;
     }
     $postfields = 0;
     foreach ($getpost as $name => $array) {
         $field = $name . '_values';
         foreach ($array as $vname) {
             $vvalue = aecGetParam($vname, '');
             if (!empty($vvalue)) {
                 ${$field}[$vname] = $vvalue;
                 $postfields++;
             }
         }
     }
     if (!empty($params_values['export_method'])) {
         $is_test = $params_values['export_method'] == 'test';
     } else {
         $is_test = false;
     }
     $lists = array();
     $pname = "";
     if (!empty($system_values['selected_export']) || $cmd_save || $cmd_apply || $is_test) {
         $row = new aecExport($type == 'sales');
         if (isset($system_values['selected_export'])) {
             $row->load($system_values['selected_export']);
             $pname = $row->name;
         } else {
             $row->load(0);
         }
         if (!empty($system_values['delete'])) {
             // User wants to delete the entry
             $row->delete();
         } elseif (($cmd_save || $cmd_apply) && (!empty($system_values['selected_export']) || !empty($system_values['save_name']))) {
             // User wants to save an entry
             if (!empty($system_values['save'])) {
                 // But as a copy of another entry
                 $row->load(0);
             }
             $row->saveComplex($system_values['save_name'], $filter_values, $options_values, $params_values);
             if (!empty($system_values['save'])) {
                 $system_values['selected_export'] = $row->getMax();
             }
         } elseif (($cmd_save || $cmd_apply) && (empty($system_values['selected_export']) && !empty($system_values['save_name']) && $system_values['save']) && !$is_test) {
             // User wants to save a new entry
             $row->saveComplex($system_values['save_name'], $filter_values, $options_values, $params_values);
         } elseif ($cmd_load || count($postfields) && $postfields <= $pf && ($cmd_export || $is_test)) {
             if ($row->id) {
                 // User wants to load an entry
                 $filter_values = $row->filter;
                 $options_values = $row->options;
                 $params_values = $row->params;
                 $pname = $row->name;
                 $use_original = 1;
             }
         }
     }
     // Always store the last ten calls, but only if something is happening
     if ($cmd_save || $cmd_apply || $cmd_export) {
         $autorow = new aecExport($type == 'sales');
         $autorow->load(0);
         $autorow->saveComplex('Autosave', $filter_values, $options_values, $params_values, true);
         if (isset($row)) {
             if ($autorow->filter == $row->filter && $autorow->options == $row->options && $autorow->params == $row->params) {
                 $use_original = 1;
             }
         }
     }
     $filters = array('planid', 'groupid', 'status');
     foreach ($filters as $filter) {
         if (!isset($filter_values[$filter])) {
             $filter_values[$filter] = array();
             continue;
         }
         if (!is_array($filter_values[$filter])) {
             if (!empty($filter_values[$filter])) {
                 $filter_values[$filter] = array($filter_values[$filter]);
             } else {
                 $filter_values[$filter] = array();
             }
         }
     }
     if ($is_test) {
         $row->params['export_method'] = 'test';
     }
     // Create Parameters
     $params[] = array('userinfobox', 5);
     if ($type == 'members') {
         $params[] = array('section_paper', 'Compose Export');
         $params['params_remap'] = array('subarea_change', 'params');
         $params[] = array('div', '<div class="alert alert-info">');
         $params[] = array('p', '<p>Take users that fit these criteria:</p>');
         $params['groupid'] = array('list', '');
         $params['planid'] = array('list', '');
         $params['status'] = array('list', '');
         $params[] = array('div_end', '');
         $params[] = array('div', '<div class="alert alert-warning">');
         $params[] = array('p', '<p>Order them like this:</p>');
         $params['orderby'] = array('list', '');
         $params[] = array('div_end', '');
         $params[] = array('div', '<div class="alert alert-success">');
         $params[] = array('p', '<p>And use these details for each line of the export:</p>');
         $params['rewrite_rule'] = array('inputD', '[[user_id]];[[user_username]];[[subscription_expiration_date]]');
         $params[] = array('div_end', '');
         $params[] = array('section_end', '');
     } else {
         $monthago = (int) gmdate('U') - 60 * 60 * 24 * 31;
         $params[] = array('section_paper', 'Compose Export');
         $params['params_remap'] = array('subarea_change', 'params');
         $params[] = array('div', '<div class="alert alert-info">');
         $params[] = array('p', '<p>Collect Sales Data from this range:</p>');
         $params['date_start'] = array('list_date', date('Y-m-d', $monthago));
         $params['date_end'] = array('list_date', date('Y-m-d'));
         $params['method'] = array('list', '');
         $params['planid'] = array('list', '');
         $params['groupid'] = array('list', '');
         $params[] = array('div_end', '');
         $params[] = array('div', '<div class="alert alert-warning">');
         $params[] = array('p', '<p>Collate it like this:</p>');
         $params['collate'] = array('list', 'day');
         $params[] = array('div_end', '');
         $params[] = array('div', '<div class="alert alert-success">');
         $params[] = array('p', '<p>Break down the data in each line like so:</p>');
         $params['breakdown'] = array('list', 'month');
         $params['breakdown_custom'] = array('inputD', '');
         $params[] = array('div_end', '');
         $params[] = array('section_end', '');
     }
     if ($type == 'members') {
         $params[] = array('userinfobox', 5);
         $params[] = array('section_paper');
         $rewriteswitches = array('cms', 'user', 'subscription', 'plan', 'invoice');
         $params = AECToolbox::rewriteEngineInfo($rewriteswitches, $params);
         $params[] = array('section_end', '');
         $params[] = array('2div_end', '');
     }
     $params[] = array('2div_end', '');
     $params[] = array('userinfobox', 5);
     $params[] = array('section_paper', 'Save or Load Export Presets');
     $params[] = array('div', '<div class="form-wide">');
     $params['selected_export'] = array('list', '');
     $params['delete'] = array('checkbox');
     $params['save'] = array('checkbox');
     $params['save_name'] = array('inputC', $pname);
     $params[] = array('div_end', '');
     $params[] = array('div', '<div class="right-btns">');
     $params[] = array('p', '<a class="btn btn-primary" onclick="javascript: submitbutton(\'loadExport' . $type . '\')" href="#">' . aecHTML::Icon('upload') . '&nbsp;Load Preset</a>');
     $params[] = array('p', '<a class="btn btn-success" onclick="javascript: submitbutton(\'applyExport' . $type . '\')" href="#">' . aecHTML::Icon('download') . '&nbsp;Save Preset</a>');
     $params[] = array('p', '<a class="btn danger" onclick="javascript: submitbutton(\'saveExport' . $type . '\')" href="#">' . aecHTML::Icon('download-alt') . '&nbsp;Save Preset &amp; Exit</a>');
     $params[] = array('div_end', '');
     $params[] = array('section_end', '');
     $params[] = array('2div_end', '');
     $params[] = array('userinfobox', 5);
     $params[] = array('section_paper', 'Export');
     $params['export_method'] = array('list', '');
     $params[] = array('p', '<div class="right-btns"><div class="btn-group">');
     $params[] = array('p', '<a class="btn btn-info" id="testexport" href="#export-result">' . aecHTML::Icon('eye-open') . '&nbsp;Test Export</a>');
     $params[] = array('p', '<a class="btn btn-success" onclick="javascript: submitbutton(\'exportExport' . $type . '\')" href="#">' . aecHTML::Icon('file') . '&nbsp;Export Now</a>');
     $params[] = array('2div_end', '');
     $params[] = array('section_end', '');
     $params[] = array('2div_end', '');
     $params[] = array('userinfobox', 5);
     $params[] = array('div', '<div class="aec-settings-container" id="export-result">');
     $params[] = array('h4', '<h4>Preview</h4>');
     $params[] = array('2div_end', '');
     // Create a list of export options
     // First, only the non-autosaved entries
     $query = 'SELECT `id`, `name`, `created_date`, `lastused_date`' . ' FROM #__acctexp_export' . ($type == 'sales' ? '_sales' : '') . ' WHERE `system` = \'';
     $db->setQuery($query . '0\'');
     $user_exports = $db->loadObjectList();
     // Then the autosaved entries
     $db->setQuery($query . '1\'');
     $system_exports = $db->loadObjectList();
     $entries = count($user_exports) + count($system_exports);
     $m = 0;
     if ($entries > 0) {
         $listitems = array();
         $listitems[] = JHTML::_('select.option', 0, " --- Your Exports --- ");
         $user = false;
         for ($i = 0; $i < $entries; $i++) {
             if ($i >= count($user_exports) && $user === false) {
                 $user = $i;
                 $listitems[] = JHTML::_('select.option', 0, " --- Autosaves --- ");
             }
             if ($user === false) {
                 if (!empty($user_exports[$i]->name)) {
                     $used_date = $user_exports[$i]->lastused_date == '0000-00-00 00:00:00' ? 'never' : $user_exports[$i]->lastused_date;
                     $listitems[] = JHTML::_('select.option', $user_exports[$i]->id, substr($user_exports[$i]->name, 0, 64) . ' - ' . 'last used: ' . $used_date . ', created: ' . $user_exports[$i]->created_date);
                 } else {
                     $m--;
                 }
             } else {
                 $ix = $i - $user;
                 $used_date = $system_exports[$ix]->lastused_date == '0000-00-00 00:00:00' ? 'never' : $system_exports[$ix]->lastused_date;
                 $listitems[] = JHTML::_('select.option', $system_exports[$ix]->id, substr($system_exports[$ix]->name, 0, 64) . ' - ' . 'last used: ' . $used_date . ', created: ' . $system_exports[$ix]->created_date);
             }
         }
     } else {
         $listitems[] = JHTML::_('select.option', 0, " --- No saved Preset available --- ");
         $listitems[] = JHTML::_('select.option', 0, " --- Your Exports --- ", 'value', 'text', true);
         $listitems[] = JHTML::_('select.option', 0, " --- Autosaves --- ", 'value', 'text', true);
     }
     $lists['selected_export'] = JHTML::_('select.genericlist', $listitems, 'selected_export', 'size="' . max(10, min(20, $entries + $m + 2)) . '" class="col-sm-7"', 'value', 'text', arrayValueDefault($system_values, 'selected_export', ''));
     // Get list of plans for filter
     $query = 'SELECT `id`, `name`' . ' FROM #__acctexp_plans' . ' ORDER BY `ordering`';
     $db->setQuery($query);
     $db_plans = $db->loadObjectList();
     $lists['planid'] = '<select id="plan-filter-select" class="col-sm-3" name="planid[]" multiple="multiple" size="5">';
     foreach ($db_plans as $plan) {
         $lists['planid'] .= '<option value="' . $plan->id . '"' . (in_array($plan->id, $filter_values['planid']) ? ' selected="selected"' : '') . '>' . $plan->name . '</option>';
     }
     $lists['planid'] .= '</select>';
     $grouplist = ItemGroupHandler::getTree();
     $lists['groupid'] = '<select id="group-filter-select" class="col-sm-3" name="groupid[]" multiple="multiple" size="5">';
     foreach ($grouplist as $glisti) {
         if (defined('JPATH_MANIFESTS')) {
             $lists['groupid'] .= '<option value="' . $glisti[0] . '"' . (in_array($glisti[0], $filter_values['groupid']) ? ' selected="selected"' : '') . '>' . str_replace('&nbsp;', ' ', $glisti[1]) . '</option>';
         } else {
             $lists['groupid'] .= '<option value="' . $glisti[0] . '"' . (in_array($glisti[0], $filter_values['groupid']) ? ' selected="selected"' : '') . '>' . $glisti[1] . '</option>';
         }
     }
     $lists['groupid'] .= '</select>';
     if ($type == 'members') {
         $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['status'] = '<select id="status-group-select" name="status[]" multiple="multiple" size="5">';
         foreach ($status as $id => $txt) {
             $lists['status'] .= '<option value="' . $id . '"' . (in_array($id, $filter_values['status']) ? ' selected="selected"' : '') . '>' . $txt . '</option>';
         }
         $lists['status'] .= '</select>';
         // Ordering
         $sel = array();
         $sel[] = JHTML::_('select.option', 'expiration ASC', JText::_('EXP_ASC'));
         $sel[] = JHTML::_('select.option', 'expiration DESC', JText::_('EXP_DESC'));
         $sel[] = JHTML::_('select.option', 'name ASC', JText::_('NAME_ASC'));
         $sel[] = JHTML::_('select.option', 'name DESC', JText::_('NAME_DESC'));
         $sel[] = JHTML::_('select.option', 'username ASC', JText::_('LOGIN_ASC'));
         $sel[] = JHTML::_('select.option', 'username DESC', JText::_('LOGIN_DESC'));
         $sel[] = JHTML::_('select.option', 'signup_date ASC', JText::_('SIGNUP_ASC'));
         $sel[] = JHTML::_('select.option', 'signup_date DESC', JText::_('SIGNUP_DESC'));
         $sel[] = JHTML::_('select.option', 'lastpay_date ASC', JText::_('LASTPAY_ASC'));
         $sel[] = JHTML::_('select.option', 'lastpay_date DESC', JText::_('LASTPAY_DESC'));
         $sel[] = JHTML::_('select.option', 'plan_name ASC', JText::_('PLAN_ASC'));
         $sel[] = JHTML::_('select.option', 'plan_name DESC', JText::_('PLAN_DESC'));
         $sel[] = JHTML::_('select.option', 'status ASC', JText::_('STATUS_ASC'));
         $sel[] = JHTML::_('select.option', 'status DESC', JText::_('STATUS_DESC'));
         $sel[] = JHTML::_('select.option', 'type ASC', JText::_('TYPE_ASC'));
         $sel[] = JHTML::_('select.option', 'type DESC', JText::_('TYPE_DESC'));
         $lists['orderby'] = JHTML::_('select.genericlist', $sel, 'orderby', 'class="inputbox" size="1"', 'value', 'text', arrayValueDefault($filter_values, 'orderby', ''));
     } else {
         $collate_selection = array();
         $collate_selection[] = JHTML::_('select.option', 'day', JText::_('Day'));
         $collate_selection[] = JHTML::_('select.option', 'week', JText::_('Week'));
         $collate_selection[] = JHTML::_('select.option', 'month', JText::_('Month'));
         $collate_selection[] = JHTML::_('select.option', 'year', JText::_('Year'));
         $selected_collate = 0;
         if (!empty($options_values['collate'])) {
             $selected_collate = $options_values['collate'];
         } else {
             $selected_collate = 'day';
         }
         $lists['collate'] = JHTML::_('select.genericlist', $collate_selection, 'collate', 'size="1"', 'value', 'text', $selected_collate);
         $breakdown_selection = array();
         $breakdown_selection[] = JHTML::_('select.option', '0', JText::_('None'));
         $breakdown_selection[] = JHTML::_('select.option', 'plan', JText::_('Plan'));
         $breakdown_selection[] = JHTML::_('select.option', 'group', JText::_('Group'));
         $selected_breakdown = 0;
         if (!empty($options_values['breakdown'])) {
             $selected_breakdown = $options_values['breakdown'];
         }
         $lists['breakdown'] = JHTML::_('select.genericlist', $breakdown_selection, 'breakdown', 'size="1"', 'value', 'text', $selected_breakdown);
         $processors = PaymentProcessorHandler::getInstalledObjectList();
         $proc_list = array();
         $selected_proc = array();
         foreach ($processors as $proc) {
             $pp = new PaymentProcessor();
             $pp->loadName($proc->name);
             $pp->getInfo();
             $proc_list[] = JHTML::_('select.option', $pp->id, $pp->info['longname']);
             if (!empty($filter_values['method'])) {
                 foreach ($filter_values['method'] as $id) {
                     if ($id == $pp->id) {
                         $selected_proc[] = JHTML::_('select.option', $id, $pp->info['longname']);
                     }
                 }
             }
         }
         $lists['method'] = JHTML::_('select.genericlist', $proc_list, 'method[]', 'size="8" multiple="multiple"', 'value', 'text', $selected_proc);
     }
     // Export Method
     $list = xJUtility::getFileArray(JPATH_SITE . '/components/com_acctexp/lib/export', 'php', false, true);
     $sel = array();
     foreach ($list as $ltype) {
         $ltype = str_replace('.php', '', $ltype);
         if ($ltype != 'test') {
             $sel[] = JHTML::_('select.option', $ltype, $ltype);
         }
     }
     if (empty($params_values['export_method'])) {
         $params_values['export_method'] = 'csv';
     }
     $lists['export_method'] = JHTML::_('select.genericlist', $sel, 'export_method', 'class="inputbox" size="1"', 'value', 'text', $params_values['export_method']);
     $settings = new aecSettings('export', 'general');
     // Repackage the objects as array
     foreach ($getpost as $name => $array) {
         $field = $name . '_values';
         foreach ($array as $vname) {
             if (!empty(${$field}->{$name})) {
                 $settingsparams[$name] = ${$field}->{$name};
             } else {
                 $settingsparams[$name] = "";
             }
         }
     }
     if (empty($params_values['rewrite_rule'])) {
         //$params_values['rewrite_rule'] = '[[user_id]];[[user_username]];[[subscription_expiration_date]]';
     }
     $settingsparams = array_merge($filter_values, $options_values, $params_values);
     $settings->fullSettingsArray($params, $settingsparams, $lists);
     // Call HTML Class
     $aecHTML = new aecHTML($settings->settings, $settings->lists);
     if ($cmd_export && !empty($params_values['export_method'])) {
         if ($use_original) {
             $row->useExport();
         } else {
             $autorow->useExport();
         }
     }
     if ($cmd_save) {
         aecRedirect('index.php?option=com_acctexp&task=showCentral');
     } else {
         HTML_AcctExp::export($type, $aecHTML);
     }
 }
示例#9
0
 public function touchProcessors()
 {
     // Make sure settings & info are updated
     $pplist = PaymentProcessorHandler::getInstalledNameList();
     foreach ($pplist as $ppname) {
         $pp = new PaymentProcessor();
         if (!$pp->loadName($ppname)) {
             continue;
         }
         $pp->copyAssets();
         $pp->fullInit();
         // Infos often change, so we protect the name and description and so on, but replace everything else
         $original = $pp->processor->info();
         $protect = array('name', 'longname', 'statement', 'description');
         foreach ($original as $name => $var) {
             if (!in_array($name, $protect)) {
                 $pp->info[$name] = $var;
             }
         }
         $pp->processor->storeload();
     }
 }
示例#10
0
 $db->setQuery("SELECT * FROM #__acctexp_config_" . $legacy_processors_db[$n]);
 $old_cfg = $db->loadObject();
 $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;
示例#11
0
 /**
  * Process a gateway-hosted payment. Users will be redirected to
  * the external gateway to enter payment info. Redirect back to
  * our site when the payment is completed.
  *
  * @see PaymentProcessor::capture()
  * @param Array $data
  */
 public function capture($data)
 {
     parent::capture($data);
     // Set the return link
     $this->gateway->returnURL = Director::absoluteURL(Controller::join_links($this->link(), 'complete', $this->methodName, $this->payment->ID));
     // Set the cancel link
     $this->gateway->cancelURL = Director::absoluteURL(Controller::join_links($this->link(), 'cancel', $this->methodName, $this->payment->ID));
     // Send a request to the gateway
     $result = $this->gateway->process($this->paymentData);
     // Processing may not get to here if all goes smoothly, customer will be at the 3rd party gateway
     if ($result && !$result->isSuccess()) {
         // Gateway did not respond or responded with error
         // Need to save the gateway response and save HTTP Status, errors etc. to Payment
         $this->payment->updateStatus($result);
         // Payment has failed - redirect to confirmation page
         // Developers can get the failure data from the database to show
         // the proper errors to users
         $this->doRedirect();
     }
 }
示例#12
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;
 }
示例#13
0
文件: acctexp.php 项目: Ibrahim1/aec
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 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;
 }
 function __construct()
 {
     parent::__construct($this->processorId);
 }
 public static function getSelectList($selection = "", $installed = false)
 {
     $pplist = self::getProcessorList();
     $pp_installed_list = self::getInstalledObjectList(false, true);
     asort($pplist);
     $pp_list_html = array();
     foreach ($pplist as $ppname) {
         if (in_array($ppname, $pp_installed_list) && !$installed) {
             continue;
         } elseif (!in_array($ppname, $pp_installed_list) && $installed) {
             continue;
         }
         // Load Payment Processor
         $pp = new PaymentProcessor();
         if ($pp->loadName($ppname)) {
             xJLanguageHandler::loadList(array('com_acctexp.processors.' . $ppname => JPATH_SITE . '/components/com_acctexp/processors/' . $ppname));
             $pp->getInfo();
             if (!empty($pp->info['longname'])) {
                 $name = $pp->info['longname'];
             } else {
                 $name = ucwords(str_replace('_', ' ', strtolower($ppname)));
             }
             // Add to general PP List
             $pp_list_html[] = JHTML::_('select.option', $ppname, $name);
         }
     }
     $size = $installed ? 1 : max(min(count($pplist), 24), 2);
     return JHTML::_('select.genericlist', $pp_list_html, 'processor', 'size="' . $size . '"', 'value', 'text', $selection);
 }
示例#17
0
 /**
  * Factory function to create payment processor object with associated
  * Payment and PaymentGateway injected into it.
  *
  * @param String $methodName
  * @return PaymentProcessor
  */
 public static function factory($methodName)
 {
     $supported_methods = PaymentProcessor::get_supported_methods();
     if (!in_array($methodName, $supported_methods)) {
         throw new Exception("The method {$methodName} is not supported");
     }
     $methodConfig = self::get_factory_config($methodName);
     if (isset($methodConfig['processor'])) {
         $processorClass = $methodConfig['processor'];
         $processor = new $processorClass();
         $processor->setMethodName($methodName);
         // Set the dependencies
         $processor->gateway = self::get_gateway($methodName);
         $processor->payment = self::get_payment_model($methodName);
         return $processor;
     } else {
         throw new Exception("No processor is defined for the method {$methodName}");
     }
 }
示例#18
0
 public function verify($metaUser = false)
 {
     global $aecConfig;
     $expired = $this->isExpired();
     if ($expired) {
         $pp = new PaymentProcessor();
         if ($pp->loadName($this->type)) {
             $expired = !$pp->validateSubscription($this);
         }
     }
     $block = false;
     if ($metaUser !== false) {
         if (!empty($metaUser->cmsUser->block)) {
             $block = $metaUser->cmsUser->block;
         }
     }
     if (($expired || $this->isClosed()) && $aecConfig->cfg['require_subscription']) {
         if ($metaUser !== false) {
             $metaUser->setTempAuth();
         }
         if (!$expired) {
             $this->expire();
         }
         return 'expired';
     } elseif ($this->isPending()) {
         return 'pending';
     } elseif ($this->isHold()) {
         return 'hold';
     } elseif (!empty($block)) {
         return 'block';
     }
     return true;
 }
示例#19
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;
 }
示例#20
0
 public function postPayment(Payment $payment)
 {
     //Payment is used to create account entries
     //from buyer in sale
     //post tx to sales/income revenue and paypal/mpesa/cash in hand account
     $receipt = PaymentProcessor::ProcessPayment($this, $payment);
     if ($receipt) {
         //payment has gone trough;
         #status 0 - awaiting payment, 1- partially paid, 2-overdue, 3-paid
         $this->payments[] = $payment;
         if ($payment->amount->amount > $this->balance) {
             //$this->balance = $this->balance - $payment->amount->amount;
             $this->balance = 0.0;
             $this->status = 3;
         } else {
             if ($payment->amount->amount == $this->balance) {
                 $this->balance = 0.0;
                 $this->status = 3;
             } else {
                 $this->balance = $this->balance - $payment->amount->amount;
                 $this->status = 1;
             }
         }
         $this->updateInvoice();
         return $receipt;
     } else {
         return false;
     }
 }
示例#21
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];
 }
示例#22
0
 public function readProcessors()
 {
     $lang = JFactory::getLanguage();
     $readout = array();
     $r = array();
     $r['head'] = "Processors";
     $processors = PaymentProcessorHandler::getInstalledNameList();
     foreach ($processors as $procname) {
         $pp = null;
         $pp = new PaymentProcessor();
         if (!$pp->loadName($procname)) {
             continue;
         }
         $pp->fullInit();
         $readout[] = $r;
         $r = array();
         $r['head'] = $pp->info['longname'];
         $r['type'] = "table";
         $r['sub'] = true;
         $r['def'] = array("ID" => array('id'), "Published" => array('active', 'bool'));
         foreach ($pp->info as $iname => $ic) {
             if (empty($iname)) {
                 continue;
             }
             $cname = 'CFG_' . strtoupper($procname) . '_' . strtoupper($iname) . '_NAME';
             $gname = 'CFG_PROCESSOR_' . strtoupper($iname) . '_NAME';
             if ($lang->hasKey($cname)) {
                 $tname = JText::_($cname);
             } elseif ($lang->hasKey($gname)) {
                 $tname = JText::_($gname);
             } else {
                 $tname = $iname;
             }
             $r['def'][$tname] = array(array('info', $iname), 'smartlimit');
         }
         $bsettings = $pp->getBackendSettings();
         foreach ($bsettings as $psname => $sc) {
             if (empty($psname) || is_numeric($psname) || $psname == 'lists') {
                 continue;
             }
             $cname = 'CFG_' . strtoupper($procname) . '_' . strtoupper($psname) . '_NAME';
             $gname = 'CFG_PROCESSOR_' . strtoupper($psname) . '_NAME';
             if ($lang->hasKey($cname)) {
                 $tname = JText::_($cname);
             } elseif ($lang->hasKey($gname)) {
                 $tname = JText::_($gname);
             } else {
                 $tname = $psname;
             }
             if ($sc[0] == 'list_yesno') {
                 $stype = 'bool';
             } else {
                 $stype = 'smartlimit';
             }
             $r['def'][$tname] = array(array('settings', $psname), $stype);
         }
         $ps = array();
         foreach ($r['def'] as $nn => $def) {
             $ps = array_merge($ps, $this->conversionHelper($def, $pp));
         }
         $r['set'] = array(0 => $ps);
     }
     $readout[] = $r;
     return $readout;
 }