modules = explode(';', MODULE_ORDER_TOTAL_INSTALLED); $sLanguage = isset($_SESSION['language']) ? $_SESSION['language'] : DEFAULT_LANGUAGE; reset($this->modules); foreach ($this->modules as $value) { include_once MYOOS_INCLUDE_PATH . '/includes/languages/' . $sLanguage . '/modules/order_total/' . $value; include_once MYOOS_INCLUDE_PATH . '/includes/modules/order_total/' . $value; $class = substr($value, 0, strrpos($value, '.')); $GLOBALS[$class] = new $class; } } } public function process() { $order_total_array = array(); if (is_array($this->modules)) { reset($this->modules); foreach ($this->modules as $value) { $class = substr($value, 0, strrpos($value, '.')); if ($GLOBALS[$class]->enabled) { $GLOBALS[$class]->output = array(); $GLOBALS[$class]->process(); for ($i=0, $n=sizeof($GLOBALS[$class]->output); $i<$n; $i++) { if (oos_is_not_null($GLOBALS[$class]->output[$i]['title']) && oos_is_not_null($GLOBALS[$class]->output[$i]['text'])) { $order_total_array[] = array('code' => $GLOBALS[$class]->code, 'title' => $GLOBALS[$class]->output[$i]['title'], 'text' => $GLOBALS[$class]->output[$i]['text'], 'value' => $GLOBALS[$class]->output[$i]['value'], 'sort_order' => $GLOBALS[$class]->sort_order); } } } } } return $order_total_array; } public function output() { $output_string = NULL; if (is_array($this->modules)) { reset($this->modules); foreach ($this->modules as $value) { $class = substr($value, 0, strrpos($value, '.')); if ($GLOBALS[$class]->enabled) { $size = count($GLOBALS[$class]->output); for ($i=0; $i<$size; $i++) { $output_string .= ' ' . "\n" . ' ' . $GLOBALS[$class]->output[$i]['title'] . '' . "\n" . ' ' . $GLOBALS[$class]->output[$i]['text'] . '' . "\n" . ' '; } } } } return $output_string; } /** * This public function is called in checkout payment after display of payment methods. It actually calls * two credit class public functions. * * use_credit_amount() is normally a checkbox used to decide whether the credit amount should be applied to reduce * the order total. Whether this is a Gift Voucher, or discount coupon or reward points etc. * * The second public function called is credit_selection(). This in the credit classes already made is usually a redeem box. * for entering a Gift Voucher number. Note credit classes can decide whether this part is displayed depending on * E.g. a setting in the admin section. */ public function credit_selection() { global $aLang; $selection_string = ''; $close_string = ''; $credit_class_string = ''; if ( (MODULE_ORDER_TOTAL_GV_STATUS == 'true') || (MODULE_ORDER_TOTAL_COUPON_STATUS == 'true') ) { $header_string = '' . "\n"; $header_string .= ' ' . "\n"; $header_string .= ' ' . "\n"; $header_string .= ' ' . "\n"; $header_string .= ' ' . "\n"; $header_string .= '
' . $aLang['table_heading_credit'] . '
' . "\n"; $header_string .= ' ' . "\n"; $header_string .= '' . "\n"; $header_string .= ' ' . "\n"; $header_string .= '
' ."\n"; $header_string .= ' ' . "\n"; $header_string .= ' '; $close_string .= ''; $close_string .= '
' . "\n"; $close_string = '
'; $close_string .= ''; reset($this->modules); $output_string = ''; foreach ($this->modules as $value) { $class = substr($value, 0, strrpos($value, '.')); if ($GLOBALS[$class]->enabled) { if ($GLOBALS[$class]->credit_class) { if ($selection_string =='') $selection_string = $GLOBALS[$class]->credit_selection(); $use_credit_string = $GLOBALS[$class]->use_credit_amount(); $output_string .= ''; $output_string .= ' ' . "\n" . ' '; if ( ($use_credit_string !='' ) && (MODULE_ORDER_TOTAL_GV_STATUS == 'true') ) { $output_string .= ' ' . $use_credit_string; } elseif ( (MODULE_ORDER_TOTAL_GV_STATUS == 'true') && (MODULE_ORDER_TOTAL_COUPON_STATUS == 'true') ) { $output_string .= ' '; } else { $output_string .= ' ' . $GLOBALS[$class]->header . ''; } $output_string .= ''; $output_string .= ' ' . "\n"; } } } if ($output_string != '') { $output_string = $header_string . $output_string . $selection_string; $output_string .= $close_string; } } return $output_string; } /** * update_credit_account is called in checkout process on a per product basis. It's purpose * is to decide whether each product in the cart should add something to a credit account. * e.g. for the Gift Voucher it checks whether the product is a Gift voucher and then adds the amount * to the Gift Voucher account. * Another use would be to check if the product would give reward points and add these to the points/reward account. */ public function update_credit_account($i) { if (MODULE_ORDER_TOTAL_INSTALLED) { reset($this->modules); foreach ($this->modules as $value) { $class = substr($value, 0, strrpos($value, '.')); if ( ($GLOBALS[$class]->enabled && $GLOBALS[$class]->credit_class) ) { $GLOBALS[$class]->update_credit_account($i); } } } } /** * This public function is called in checkout confirmation. * It's main use is for credit classes that use the credit_selection() method. This is usually for * entering redeem codes(Gift Vouchers/Discount Coupons). This public function is used to validate these codes. * If they are valid then the necessary actions are taken, if not valid we are returned to checkout payment * with an error */ public function collect_posts() { if (MODULE_ORDER_TOTAL_INSTALLED) { reset($this->modules); foreach ($this->modules as $value) { $class = substr($value, 0, strrpos($value, '.')); if ( ($GLOBALS[$class]->enabled && $GLOBALS[$class]->credit_class) ) { $post_var = 'c' . $GLOBALS[$class]->code; if ($_POST[$post_var]) $_SESSION[$post_var] = oos_var_prep_for_os($_POST[$post_var]); $GLOBALS[$class]->collect_posts(); } } } } /** * pre_confirmation_check is called on checkout confirmation. It's public function is to decide whether the * credits available are greater than the order total. If they are then a variable (credit_covers) is set to * true. This is used to bypass the payment method. In other words if the Gift Voucher is more than the order * total, we don't want to go to paypal etc. */ public function pre_confirmation_check() { global $payment, $oOrder, $credit_covers; $credit_covers = FALSE; if (MODULE_ORDER_TOTAL_INSTALLED) { $total_deductions = 0; reset($this->modules); $order_total = $oOrder->info['total']; foreach ($this->modules as $value) { $class = substr($value, 0, strrpos($value, '.')); if ( ($GLOBALS[$class]->enabled && $GLOBALS[$class]->credit_class) ) { $total_deductions += $GLOBALS[$class]->pre_confirmation_check($order_total); } } if ($oOrder->info['total'] - $total_deductions <= 0 ) { $credit_covers = TRUE; } } return $credit_covers; } /** * this public function is called in checkout process. it tests whether a decision was made at checkout payment to use * the credit amount be applied aginst the order. If so some action is taken. E.g. for a Gift voucher the account * is reduced the order total amount. */ public function apply_credit() { if (MODULE_ORDER_TOTAL_INSTALLED) { reset($this->modules); foreach ($this->modules as $value) { $class = substr($value, 0, strrpos($value, '.')); if ( ($GLOBALS[$class]->enabled && $GLOBALS[$class]->credit_class) ) { $GLOBALS[$class]->apply_credit(); } } } } /** * Called in checkout process to clear session variables created by each credit class module. */ public function clear_posts() { if (MODULE_ORDER_TOTAL_INSTALLED) { reset($this->modules); foreach ($this->modules as $value) { $class = substr($value, 0, strrpos($value, '.')); if ( ($GLOBALS[$class]->enabled && $GLOBALS[$class]->credit_class) ) { $_SESSION[$post_var] = 'c' . $GLOBALS[$class]->code; } } } } /** * Called at various times. This public function calulates the total value of the order that the * credit will be appled aginst. This varies depending on whether the credit class applies * to shipping & tax */ public function get_order_total_main($class, $order_total) { global $credit, $oOrder; if ($GLOBALS[$class]->include_tax == 'false') $order_total=$order_total-$oOrder->info['tax']; if ($GLOBALS[$class]->include_shipping == 'false') $order_total=$order_total-$oOrder->info['shipping_cost']; return $order_total; } }