Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Keine Übersetzung für Variable free_free

  1. #1
    Padawan Stufe I Avatar von mh254
    Registriert seit
    09.06.2015
    Beiträge
    42
    Themen
    12
    DANKE
    17
    Erhaltene Danke: 3

    Standard Keine Übersetzung für Variable free_free

    Hallo zusammen,

    ich habe mal wieder ein Problem mit meinem Shop. Ich verwende das Winchester Responsive Template. Bei virtuellen Artikeln ohne Versandkosten wird immer nur free_free angezeigt anstatt der Text "Versandkostenfrei". Hier zwei Screenshots um das Problem zu verdeutlichen.

    2016-01-24_13h27_21.jpg

    2016-01-24_13h47_47.png

    Über die Suche habe ich leider nichts finden können. Ich wär für jede Hilfe sehr dankbar.
    Mein Shop verwendet: --== Zencart 1.5.5 ==--

  2. #2
    Padawan Stufe I Avatar von mh254
    Registriert seit
    09.06.2015
    Beiträge
    42
    Themen
    12
    DANKE
    17
    Erhaltene Danke: 3
    Erstellt von

    Standard

    Keiner eine Idee? Ich habe die letzten Tage damit verbracht nach der Variablen free_free in sämtlichen Dateien des Shops zu suchen, aber ich konnte leider bisher noch nicht herausfinden, wo hier der Fehler liegt
    Mein Shop verwendet: --== Zencart 1.5.5 ==--

  3. #3
    Jedi-Ritter Avatar von webchills
    Registriert seit
    30.10.2004
    Ort
    Österreich
    Beiträge
    6.846
    Themen
    94
    DANKE
    3
    Erhaltene Danke: 1.188

    Standard

    free_free ist der Name der Session.
    Mit dem Winchester hat es sicher nichts zu tun, kann das in 1.5.4 mit Winchester nicht nachstellen

    Ändere mal in includes/modules/pages/checkout:shipping/header.php ca. Zeile 89 von

    Code:
    // if the order contains only virtual products, forward the customer to the billing page as
    // a shipping address is not needed
      if ($order->content_type == 'virtual') {
        $_SESSION['shipping']['id'] = 'free_free';
        $_SESSION['shipping']['title'] = 'free_free';
        $_SESSION['sendto'] = false;
        zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));
      }
    auf

    Code:
    // if the order contains only virtual products, forward the customer to the billing page as
    // a shipping address is not needed
    if ($order->content_type == 'virtual') {
      $_SESSION['shipping'] = array();
      $_SESSION['shipping']['id'] = 'free_free';
      $_SESSION['shipping']['title'] = 'free_free';
      $_SESSION['shipping']['cost'] = 0;
      $_SESSION['sendto'] = false;
      zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));
    }
    Wenn das nichts ändert, dann müsstest Du genauer posten, welche Versandmodule Du genau aktiv hast und welche anderen Erweiterungen Du in diesem Shop integriert hast
    !!! kostenloser Support ausschließlich im Forum - Nicht per Email, nicht per Telefon und nicht per PM !!!

  4. #4
    Padawan Stufe I Avatar von mh254
    Registriert seit
    09.06.2015
    Beiträge
    42
    Themen
    12
    DANKE
    17
    Erhaltene Danke: 3
    Erstellt von

    Standard

    Hat leider nichts gebracht. Hier mal die Liste mit Versandmodulen und Erweiterungen:

    Versandmodule:
    Immer Versandkostenfrei (freeshipper)
    Selbstabholung (storepickup)
    Versandkosten (nach Zonen)


    Erweiterungen:
    Google Merchant Center Deutschland 3.4 für Zen Cart 1.5.4 deutsch
    Paket Tracking 2.5 für Zen Cart 1.5.4 deutsch
    pdf Rechnung 3.4 für Zen Cart 1.5.4 deutsch
    Admin Login als Kunde 2.6 für Zen Cart 1.5.4 und 1.5.3 deutsch
    Rabatt für Zahlungsart 1.1 für Zen Cart 1.5.4 und 1.5.3 deutsch
    Ultimate SEO URLs 2.5 für Zen Cart 1.5.4 deutsch
    Bestellen ohne Kundenkonto (COWOA) 3.3 für Zen Cart 1.5.4 deutsch
    UID 2.4 für Zen Cart 1.5.4 deutsch
    Dynamic Slide Up Button für Zen Cart 1.5.4 und 1.5.3 deutsch
    Aktionskupon via URL einlösen 1.0 für Zen Cart 1.5.4 und 1.5.3 deutsch
    Cross Sell Advanced 1.3 für Zen Cart 1.5.4 und 1.5.3 deutsch

    Das Problem ist, dass ich Anfangs keine virtuellen Artikel im Shop hatte und bei den normalen Artikeln funktioniert alles wie es soll. Nur bei den virtuellen Artikeln, die ja immer versandkostenfrei sind, kommt der Text free_free. Bei Misch-Käufen mit normalen Artikeln und Virtuellen werden die Versandkosten immer korrekt angezeigt.
    Mein Shop verwendet: --== Zencart 1.5.5 ==--

  5. #5
    Padawan Stufe I Avatar von mh254
    Registriert seit
    09.06.2015
    Beiträge
    42
    Themen
    12
    DANKE
    17
    Erhaltene Danke: 3
    Erstellt von

    Standard

    In der Übersicht der Bestellungen steht es übrigens auch:

    2016-02-02_21h52_16.png
    Mein Shop verwendet: --== Zencart 1.5.5 ==--

  6. #6
    Jedi-Ritter Avatar von webchills
    Registriert seit
    30.10.2004
    Ort
    Österreich
    Beiträge
    6.846
    Themen
    94
    DANKE
    3
    Erhaltene Danke: 1.188

    Standard

    Im Warenkorb gibt es den Versandkostenrechner (shipping estimator)
    Wenn ein virtueller Artikel im Warenkorb liegt, wird dann bei voraussichtliche Versandkosten kostenloser Versand angezeigt?
    !!! kostenloser Support ausschließlich im Forum - Nicht per Email, nicht per Telefon und nicht per PM !!!

  7. #7
    Padawan Stufe I Avatar von mh254
    Registriert seit
    09.06.2015
    Beiträge
    42
    Themen
    12
    DANKE
    17
    Erhaltene Danke: 3
    Erstellt von

    Standard

    Ja, da wird kostenloser Versand angezeigt.
    Mein Shop verwendet: --== Zencart 1.5.5 ==--

  8. #8
    Jedi-Ritter Avatar von webchills
    Registriert seit
    30.10.2004
    Ort
    Österreich
    Beiträge
    6.846
    Themen
    94
    DANKE
    3
    Erhaltene Danke: 1.188

    Standard

    Dann poste mal den Inhalt folgender Dateien (Code Schaltfläche # im Editor verwenden)

    includes/classes/order.php

    includes/modules/order_total/ot_shipping.php

    includes/modules/pages/checkout_confirmation/header_php.php
    !!! kostenloser Support ausschließlich im Forum - Nicht per Email, nicht per Telefon und nicht per PM !!!

  9. #9
    Padawan Stufe I Avatar von mh254
    Registriert seit
    09.06.2015
    Beiträge
    42
    Themen
    12
    DANKE
    17
    Erhaltene Danke: 3
    Erstellt von

    Standard

    includes/classes/order.php

    Code:
    <?php/**
     * File contains the order-processing class ("order")
     *
     * @package classes
     * @copyright Copyright 2003-2015 Zen Cart Development Team
     * @license http://www.zen-cart-pro.at/license/2_0.txt GNU Public License V2.0
     * @version $Id: order.php for pdf rechnung 3.4 2015-06-20 10:26:25Z webchills $
     */
    /**
     * order class
     *
     * Handles all order-processing functions
     *
     * @package classes
     */
    if (!defined('IS_ADMIN_FLAG')) {
      die('Illegal Access');
    }
    class order extends base {
      var $info, $totals, $products, $customer, $delivery, $content_type, $email_low_stock, $products_ordered_attributes,
      $products_ordered, $products_ordered_email, $attachArray;
    
    
      function __construct($order_id = '') {
        $this->info = array();
        $this->totals = array();
        $this->products = array();
        $this->customer = array();
        $this->delivery = array();
    
    
        $this->notify('NOTIFY_ORDER_INSTANTIATE', array(), $order_id);
        if (zen_not_null($order_id)) {
          $this->query($order_id);
        } else {
          $this->cart();
        }
      }
    
    
      function query($order_id) {
        global $db;
    
    
        $order_id = zen_db_prepare_input($order_id);
        $this->queryReturnFlag = NULL;
        $this->notify('NOTIFY_ORDER_BEFORE_QUERY', array(), $order_id);
        if ($this->queryReturnFlag === TRUE) return;
    
    
        $order_query = "select customers_id, customers_name, customers_company,
                             customers_street_address, customers_suburb, customers_city,
                             customers_postcode, customers_state, customers_country,
                             customers_telephone, customers_email_address, customers_address_format_id,
                             delivery_name, delivery_company, delivery_street_address, delivery_suburb,
                             delivery_city, delivery_postcode, delivery_state, delivery_country,
                             delivery_address_format_id, billing_name, billing_company, billing_tva_intracom,
                             billing_street_address, billing_suburb, billing_city, billing_postcode,
                             billing_state, billing_country, billing_address_format_id,
                             payment_method, payment_module_code, shipping_method, shipping_module_code,
                             coupon_code, cc_type, cc_owner, cc_number, cc_expires, currency, currency_value,
                             date_purchased, orders_status, last_modified, order_total, order_tax, ip_address ,COWOA_order
                            from " . TABLE_ORDERS . "
                            where orders_id = '" . (int)$order_id . "'"; // TVA_INTRACOM
    
    
        $order = $db->Execute($order_query);
    
    
        $totals_query = "select title, text, class
                             from " . TABLE_ORDERS_TOTAL . "
                             where orders_id = '" . (int)$order_id . "'
                             order by sort_order";
    
    
        $totals = $db->Execute($totals_query);
    
    
        while (!$totals->EOF) {
    
    
    
    
          if ($totals->fields['class'] == 'ot_coupon') {
            $coupon_link_query = "SELECT coupon_id
                    from " . TABLE_COUPONS . "
                    where coupon_code ='" . $order->fields['coupon_code'] . "'";
            $coupon_link = $db->Execute($coupon_link_query);
            $zc_coupon_link = '<a href="javascript:couponpopupWindow(\'' . zen_href_link(FILENAME_POPUP_COUPON_HELP, 'cID=' . $coupon_link->fields['coupon_id']) . '\')">';
          }
          $this->totals[] = array('title' => ($totals->fields['class'] == 'ot_coupon' ? $zc_coupon_link . $totals->fields['title'] . '</a>' : $totals->fields['title']),
                                  'text' => $totals->fields['text'],
                                  'class' => $totals->fields['class']);
          $totals->MoveNext();
        }
    
    
        $order_total_query = "select text, value
                                 from " . TABLE_ORDERS_TOTAL . "
                                 where orders_id = '" . (int)$order_id . "'
                                 and class = 'ot_total'";
    
    
    
    
        $order_total = $db->Execute($order_total_query);
    
    
    
    
        $shipping_method_query = "select title, value
                                    from " . TABLE_ORDERS_TOTAL . "
                                    where orders_id = '" . (int)$order_id . "'
                                    and class = 'ot_shipping'";
    
    
    
    
        $shipping_method = $db->Execute($shipping_method_query);
    
    
        $order_status_query = "select orders_status_name
                                 from " . TABLE_ORDERS_STATUS . "
                                 where orders_status_id = '" . $order->fields['orders_status'] . "'
                                 and language_id = '" . (int)$_SESSION['languages_id'] . "'";
    
    
        $order_status = $db->Execute($order_status_query);
        
    // TVA_INTRACOM BEGIN 
        switch (STORE_PRODUCT_TAX_BASIS) {
          case 'Shipping':
    
    
          $tax_address_query = "select ab.entry_country_id, ab.entry_zone_id
                                  from " . TABLE_ADDRESS_BOOK . " ab
                                  left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id)
                                  where ab.customers_id = '" . (int)$_SESSION['customer_id'] . "'
                                  and ab.address_book_id = '" . (int)($this->content_type == 'virtual' ? $_SESSION['billto'] : $_SESSION['sendto']) . "'";
          $tax_address = $db->Execute($tax_address_query);
          break;
          case 'Billing':
    
    
          $tax_address_query = "select ab.entry_country_id, ab.entry_zone_id
                                  from " . TABLE_ADDRESS_BOOK . " ab
                                  left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id)
                                  where ab.customers_id = '" . (int)$_SESSION['customer_id'] . "'
                                  and ab.address_book_id = '" . (int)$_SESSION['billto'] . "'";
          $tax_address = $db->Execute($tax_address_query);
          break;
          case 'Store':
          if ($billing_address->fields['entry_zone_id'] == STORE_ZONE) {
    
    
            $tax_address_query = "select ab.entry_country_id, ab.entry_zone_id
                                    from " . TABLE_ADDRESS_BOOK . " ab
                                    left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id)
                                    where ab.customers_id = '" . (int)$_SESSION['customer_id'] . "'
                                    and ab.address_book_id = '" . (int)$_SESSION['billto'] . "'";
          } else {
            $tax_address_query = "select ab.entry_country_id, ab.entry_zone_id
                                    from " . TABLE_ADDRESS_BOOK . " ab
                                    left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id)
                                    where ab.customers_id = '" . (int)$_SESSION['customer_id'] . "'
                                    and ab.address_book_id = '" . (int)($this->content_type == 'virtual' ? $_SESSION['billto'] : $_SESSION['sendto']) . "'";
          }
          $tax_address = $db->Execute($tax_address_query);
        }
    // TVA_INTRACOM END
    
    
        $this->info = array('currency' => $order->fields['currency'],
                            'currency_value' => $order->fields['currency_value'],
                            'payment_method' => $order->fields['payment_method'],
                            'payment_module_code' => $order->fields['payment_module_code'],
                            'shipping_method' => $order->fields['shipping_method'],
                            'shipping_module_code' => $order->fields['shipping_module_code'],
                            'coupon_code' => $order->fields['coupon_code'],
                            'cc_type' => $order->fields['cc_type'],
                            'cc_owner' => $order->fields['cc_owner'],
                            'cc_number' => $order->fields['cc_number'],
                            'cc_expires' => $order->fields['cc_expires'],
                            'date_purchased' => $order->fields['date_purchased'],
                            'orders_status' => $order_status->fields['orders_status_name'],
                            'last_modified' => $order->fields['last_modified'],
                            'total' => $order->fields['order_total'],
                            'tax' => $order->fields['order_tax'],
                            'ip_address' => $order->fields['ip_address']
                            );
    
    
        $this->customer = array('id' => $order->fields['customers_id'],
                                'name' => $order->fields['customers_name'],
                                'company' => $order->fields['customers_company'],
    //TVA_INTRACOM BEGIN
    							'tva_intracom' => $order->fields['billing_tva_intracom'],
    							'tva_intracom_tax' => $this->zen_tva_geo_tax($tax_address->fields['entry_country_id'], $order->fields['billing_company'], $order->fields['billing_tva_intracom']),
    //TVA_INTRACOM END
                                'street_address' => $order->fields['customers_street_address'],
                                'suburb' => $order->fields['customers_suburb'],
                                'city' => $order->fields['customers_city'],
                                'postcode' => $order->fields['customers_postcode'],
                                'state' => $order->fields['customers_state'],
                                'country' => $order->fields['customers_country'],
                                'format_id' => $order->fields['customers_address_format_id'],
                                'telephone' => $order->fields['customers_telephone'],
                                'email_address' => $order->fields['customers_email_address']);
    
    
        $this->delivery = array('name' => $order->fields['delivery_name'],
                                'company' => $order->fields['delivery_company'],
                                'street_address' => $order->fields['delivery_street_address'],
                                'suburb' => $order->fields['delivery_suburb'],
                                'city' => $order->fields['delivery_city'],
                                'postcode' => $order->fields['delivery_postcode'],
                                'state' => $order->fields['delivery_state'],
                                'country' => $order->fields['delivery_country'],
                                'format_id' => $order->fields['delivery_address_format_id']);
    
    
        if (empty($this->delivery['name']) && empty($this->delivery['street_address'])) {
          $this->delivery = false;
        }
    
    
        $this->billing = array('name' => $order->fields['billing_name'],
                               'company' => $order->fields['billing_company'],
    //TVA_INTRACOM BEGIN
    						   'tva_intracom' => $order->fields['billing_tva_intracom'],
    						   'tva_intracom_tax' => $this->zen_tva_geo_tax($tax_address->fields['entry_country_id'], $order->fields['billing_company'], $order->fields['billing_tva_intracom']),
    //TVA_INTRACOM END
                               'street_address' => $order->fields['billing_street_address'],
                               'suburb' => $order->fields['billing_suburb'],
                               'city' => $order->fields['billing_city'],
                               'postcode' => $order->fields['billing_postcode'],
                               'state' => $order->fields['billing_state'],
                               'country' => $order->fields['billing_country'],
                               'format_id' => $order->fields['billing_address_format_id']);
    
    
        $index = 0;
        $orders_products_query = "select orders_products_id, products_id, products_name,
                                     products_model, products_price, products_tax,
                                     products_quantity, final_price,
                                     onetime_charges,
                                     products_priced_by_attribute, product_is_free, products_discount_type,
                                     products_discount_type_from
                                      from " . TABLE_ORDERS_PRODUCTS . "
                                      where orders_id = '" . (int)$order_id . "'
                                      order by orders_products_id";
    
    
        $orders_products = $db->Execute($orders_products_query);
    
    
        while (!$orders_products->EOF) {
          // convert quantity to proper decimals - account history
          if (QUANTITY_DECIMALS != 0) {
            $fix_qty = $orders_products->fields['products_quantity'];
            switch (true) {
              case (!strstr($fix_qty, '.')):
              $new_qty = $fix_qty;
              break;
              default:
              $new_qty = preg_replace('/[0]+$/', '', $orders_products->fields['products_quantity']);
              break;
            }
          } else {
            $new_qty = $orders_products->fields['products_quantity'];
          }
    
    
          $new_qty = round($new_qty, QUANTITY_DECIMALS);
    
    
          if ($new_qty == (int)$new_qty) {
            $new_qty = (int)$new_qty;
          }
    
    
          $this->products[$index] = array('qty' => $new_qty,
                                          'id' => $orders_products->fields['products_id'],
                                          'name' => $orders_products->fields['products_name'],
                                          'model' => $orders_products->fields['products_model'],
                                          'tax' => $orders_products->fields['products_tax'],
                                          'price' => $orders_products->fields['products_price'],
                                          'final_price' => $orders_products->fields['final_price'],
                                          'onetime_charges' => $orders_products->fields['onetime_charges'],
                                          'products_priced_by_attribute' => $orders_products->fields['products_priced_by_attribute'],
                                          'product_is_free' => $orders_products->fields['product_is_free'],
                                          'products_discount_type' => $orders_products->fields['products_discount_type'],
                                          'products_discount_type_from' => $orders_products->fields['products_discount_type_from']);
    
    
          $subindex = 0;
          $attributes_query = "select products_options_id, products_options_values_id, products_options, products_options_values,
                                  options_values_price, price_prefix from " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . "
                                   where orders_id = '" . (int)$order_id . "'
                                   and orders_products_id = '" . (int)$orders_products->fields['orders_products_id'] . "'";
    
    
          $attributes = $db->Execute($attributes_query);
          if ($attributes->RecordCount()) {
            while (!$attributes->EOF) {
              $this->products[$index]['attributes'][$subindex] = array('option' => $attributes->fields['products_options'],
                                                                       'value' => $attributes->fields['products_options_values'],
                                                                       'option_id' => $attributes->fields['products_options_id'],
                                                                       'value_id' => $attributes->fields['products_options_values_id'],
                                                                       'prefix' => $attributes->fields['price_prefix'],
                                                                       'price' => $attributes->fields['options_values_price']);
    
    
              $subindex++;
              $attributes->MoveNext();
            }
          }
    
    
          $this->info['tax_groups']["{$this->products[$index]['tax']}"] = '1';
    
    
          $index++;
          $orders_products->MoveNext();
        }
        $this->notify('NOTIFY_ORDER_AFTER_QUERY', array(), $order_id);
      }
    
    
      function cart() {
        global $db, $currencies;
    
    
        $decimals = $currencies->get_decimal_places($_SESSION['currency']);
        
        $this->content_type = $_SESSION['cart']->get_content_type();
    
    
        $customer_address_query = "select c.customers_gender, c.customers_firstname, c.customers_lastname, c.customers_telephone,
                                        c.customers_email_address, ab.entry_company, ab.entry_tva_intracom, ab.entry_street_address,
                                        ab.entry_suburb, ab.entry_postcode, ab.entry_city, ab.entry_zone_id,
                                        z.zone_name, co.countries_id, co.countries_name,
                                        co.countries_iso_code_2, co.countries_iso_code_3,
                                        co.address_format_id, ab.entry_state
                                       from (" . TABLE_CUSTOMERS . " c, " . TABLE_ADDRESS_BOOK . " ab )
                                       left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id)
                                       left join " . TABLE_COUNTRIES . " co on (ab.entry_country_id = co.countries_id)
                                       where c.customers_id = '" . (int)$_SESSION['customer_id'] . "'
                                       and ab.customers_id = '" . (int)$_SESSION['customer_id'] . "'
                                       and c.customers_default_address_id = ab.address_book_id"; // TVA_INTRACOM
    
    
        $customer_address = $db->Execute($customer_address_query);
    
    
        $shipping_address_query = "select ab.entry_firstname, ab.entry_lastname, ab.entry_company,
                                        ab.entry_street_address, ab.entry_suburb, ab.entry_postcode,
                                        ab.entry_city, ab.entry_zone_id, z.zone_name, ab.entry_country_id,
                                        c.countries_id, c.countries_name, c.countries_iso_code_2,
                                        c.countries_iso_code_3, c.address_format_id, ab.entry_state
                                       from " . TABLE_ADDRESS_BOOK . " ab
                                       left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id)
                                       left join " . TABLE_COUNTRIES . " c on (ab.entry_country_id = c.countries_id)
                                       where ab.customers_id = '" . (int)$_SESSION['customer_id'] . "'
                                       and ab.address_book_id = '" . (int)$_SESSION['sendto'] . "'";
    
    
        $shipping_address = $db->Execute($shipping_address_query);
    
    
        $billing_address_query = "select ab.entry_firstname, ab.entry_lastname, ab.entry_company, ab.entry_tva_intracom,
                                       ab.entry_street_address, ab.entry_suburb, ab.entry_postcode,
                                       ab.entry_city, ab.entry_zone_id, z.zone_name, ab.entry_country_id,
                                       c.countries_id, c.countries_name, c.countries_iso_code_2,
                                       c.countries_iso_code_3, c.address_format_id, ab.entry_state
                                      from " . TABLE_ADDRESS_BOOK . " ab
                                      left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id)
                                      left join " . TABLE_COUNTRIES . " c on (ab.entry_country_id = c.countries_id)
                                      where ab.customers_id = '" . (int)$_SESSION['customer_id'] . "'
                                      and ab.address_book_id = '" . (int)$_SESSION['billto'] . "'"; // TVA_INTRACOM
    
    
        $billing_address = $db->Execute($billing_address_query);
    
    
        // set default tax calculation for not-logged-in visitors
        $taxCountryId = $taxZoneId = -1;
    
    
        $tax_address_query = '';
        switch (STORE_PRODUCT_TAX_BASIS) {
          case 'Shipping':
    
    
          $tax_address_query = "select ab.entry_country_id, ab.entry_zone_id
                                  from " . TABLE_ADDRESS_BOOK . " ab
                                  left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id)
                                  where ab.customers_id = '" . (int)$_SESSION['customer_id'] . "'
                                  and ab.address_book_id = '" . (int)($this->content_type == 'virtual' ? $_SESSION['billto'] : $_SESSION['sendto']) . "'";
          break;
          case 'Billing':
    
    
          $tax_address_query = "select ab.entry_country_id, ab.entry_zone_id
                                  from " . TABLE_ADDRESS_BOOK . " ab
                                  left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id)
                                  where ab.customers_id = '" . (int)$_SESSION['customer_id'] . "'
                                  and ab.address_book_id = '" . (int)$_SESSION['billto'] . "'";
          break;
          case 'Store':
          if ($billing_address->fields['entry_zone_id'] == STORE_ZONE) {
    
    
            $tax_address_query = "select ab.entry_country_id, ab.entry_zone_id
                                    from " . TABLE_ADDRESS_BOOK . " ab
                                    left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id)
                                    where ab.customers_id = '" . (int)$_SESSION['customer_id'] . "'
                                    and ab.address_book_id = '" . (int)$_SESSION['billto'] . "'";
          } else {
            $tax_address_query = "select ab.entry_country_id, ab.entry_zone_id
                                    from " . TABLE_ADDRESS_BOOK . " ab
                                    left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id)
                                    where ab.customers_id = '" . (int)$_SESSION['customer_id'] . "'
                                    and ab.address_book_id = '" . (int)($this->content_type == 'virtual' ? $_SESSION['billto'] : $_SESSION['sendto']) . "'";
          }
        }
        if ($tax_address_query != '') {
          $tax_address = $db->Execute($tax_address_query);
          if ($tax_address->recordCount() > 0) {
            $taxCountryId = $tax_address->fields['entry_country_id'];
            $taxZoneId = $tax_address->fields['entry_zone_id'];
          }
        }
    
    
        $class =& $_SESSION['payment'];
    
    
        if (isset($_SESSION['cc_id'])) {
          $coupon_code_query = "select coupon_code
                                  from " . TABLE_COUPONS . "
                                  where coupon_id = '" . (int)$_SESSION['cc_id'] . "'";
    
    
          $coupon_code = $db->Execute($coupon_code_query);
    
    
    
    
        }
    
    
        $this->info = array('order_status' => DEFAULT_ORDERS_STATUS_ID,
                            'currency' => $_SESSION['currency'],
                            'currency_value' => $currencies->currencies[$_SESSION['currency']]['value'],
                            'payment_method' => $GLOBALS[$class]->title,
                            'payment_module_code' => $GLOBALS[$class]->code,
                            'coupon_code' => $coupon_code->fields['coupon_code'],
        //                          'cc_type' => (isset($GLOBALS['cc_type']) ? $GLOBALS['cc_type'] : ''),
        //                          'cc_owner' => (isset($GLOBALS['cc_owner']) ? $GLOBALS['cc_owner'] : ''),
        //                          'cc_number' => (isset($GLOBALS['cc_number']) ? $GLOBALS['cc_number'] : ''),
        //                          'cc_expires' => (isset($GLOBALS['cc_expires']) ? $GLOBALS['cc_expires'] : ''),
        //                          'cc_cvv' => (isset($GLOBALS['cc_cvv']) ? $GLOBALS['cc_cvv'] : ''),
                            'shipping_method' => (isset($_SESSION['shipping']['title'])) ? $_SESSION['shipping']['title'] : '',
                            'shipping_module_code' => (isset($_SESSION['shipping']['id']) && strpos($_SESSION['shipping']['id'], '_') > 0 ? $_SESSION['shipping']['id'] : $_SESSION['shipping']),
                            'shipping_cost' => isset($_SESSION['shipping']['cost']) ? $_SESSION['shipping']['cost'] : 0,
                            'subtotal' => 0,
                            'shipping_tax' => 0,
                            'tax' => 0,
                            'total' => 0,
                            'tax_groups' => array(),
                            'comments' => (isset($_SESSION['comments']) ? $_SESSION['comments'] : ''),
                            'ip_address' => $_SESSION['customers_ip_address'] . ' - ' . $_SERVER['REMOTE_ADDR']
                            );
    
    
        //print_r($GLOBALS[$class]);
        //echo $class;
        //print_r($GLOBALS);
        //echo $_SESSION['payment'];
        /*
        // this is set above to the module filename it should be set to the module title like Checks/Money Order rather than moneyorder
        if (isset($$_SESSION['payment']) && is_object($$_SESSION['payment'])) {
        $this->info['payment_method'] = $$_SESSION['payment']->title;
        }
        */
    
    
    /*
    // bof: move below calculations
        if ($this->info['total'] == 0) {
          if (DEFAULT_ZERO_BALANCE_ORDERS_STATUS_ID == 0) {
            $this->info['order_status'] = DEFAULT_ORDERS_STATUS_ID;
          } else {
            $this->info['order_status'] = DEFAULT_ZERO_BALANCE_ORDERS_STATUS_ID;
          }
        }
        if (isset($GLOBALS[$class]) && is_object($GLOBALS[$class])) {
          if ( isset($GLOBALS[$class]->order_status) && is_numeric($GLOBALS[$class]->order_status) && ($GLOBALS[$class]->order_status > 0) ) {
            $this->info['order_status'] = $GLOBALS[$class]->order_status;
          }
        }
    // eof: move below calculations
    */
        $this->customer = array('gender' => $customer_address->fields['customers_gender'],
        						'firstname' => $customer_address->fields['customers_firstname'],
                                'lastname' => $customer_address->fields['customers_lastname'],
                                'company' => $customer_address->fields['entry_company'],
    // TVA_INTRACOM BEGIN
                                'tva_intracom' => $billing_address->fields['entry_tva_intracom'], // ->fields !?
                                'tva_intracom_tax' => $this->zen_tva_geo_tax($tax_address->fields['entry_country_id'], $billing_address->fields['entry_company'], $billing_address->fields['entry_tva_intracom']),
    // TVA_INTRACOM END
                                'street_address' => $customer_address->fields['entry_street_address'],
                                'suburb' => $customer_address->fields['entry_suburb'],
                                'city' => $customer_address->fields['entry_city'],
                                'postcode' => $customer_address->fields['entry_postcode'],
                                'state' => ((zen_not_null($customer_address->fields['entry_state'])) ? $customer_address->fields['entry_state'] : $customer_address->fields['zone_name']),
                                'zone_id' => $customer_address->fields['entry_zone_id'],
                                'country' => array('id' => $customer_address->fields['countries_id'], 'title' => $customer_address->fields['countries_name'], 'iso_code_2' => $customer_address->fields['countries_iso_code_2'], 'iso_code_3' => $customer_address->fields['countries_iso_code_3']),
                                'format_id' => (int)$customer_address->fields['address_format_id'],
                                'telephone' => $customer_address->fields['customers_telephone'],
                                'email_address' => $customer_address->fields['customers_email_address']);
    
    
        $this->delivery = array('firstname' => $shipping_address->fields['entry_firstname'],
                                'lastname' => $shipping_address->fields['entry_lastname'],
                                'company' => $shipping_address->fields['entry_company'],
                                'street_address' => $shipping_address->fields['entry_street_address'],
                                'suburb' => $shipping_address->fields['entry_suburb'],
                                'city' => $shipping_address->fields['entry_city'],
                                'postcode' => $shipping_address->fields['entry_postcode'],
                                'state' => ((zen_not_null($shipping_address->fields['entry_state'])) ? $shipping_address->fields['entry_state'] : $shipping_address->fields['zone_name']),
                                'zone_id' => $shipping_address->fields['entry_zone_id'],
                                'country' => array('id' => $shipping_address->fields['countries_id'], 'title' => $shipping_address->fields['countries_name'], 'iso_code_2' => $shipping_address->fields['countries_iso_code_2'], 'iso_code_3' => $shipping_address->fields['countries_iso_code_3']),
                                'country_id' => $shipping_address->fields['entry_country_id'],
                                'format_id' => (int)$shipping_address->fields['address_format_id']);
    
    
        $this->billing = array('firstname' => $billing_address->fields['entry_firstname'],
                               'lastname' => $billing_address->fields['entry_lastname'],
                               'company' => $billing_address->fields['entry_company'],
    // TVA_INTRACOM BEGIN
                               'tva_intracom' => $billing_address->fields['entry_tva_intracom'],
                               'tva_intracom_tax' => $this->zen_tva_geo_tax($tax_address->fields['entry_country_id'], $billing_address->fields['entry_company'], $billing_address->fields['entry_tva_intracom']),
    // TVA_INTRACOM END
                               'street_address' => $billing_address->fields['entry_street_address'],
                               'suburb' => $billing_address->fields['entry_suburb'],
                               'city' => $billing_address->fields['entry_city'],
                               'postcode' => $billing_address->fields['entry_postcode'],
                               'state' => ((zen_not_null($billing_address->fields['entry_state'])) ? $billing_address->fields['entry_state'] : $billing_address->fields['zone_name']),
                               'zone_id' => $billing_address->fields['entry_zone_id'],
                               'country' => array('id' => $billing_address->fields['countries_id'], 'title' => $billing_address->fields['countries_name'], 'iso_code_2' => $billing_address->fields['countries_iso_code_2'], 'iso_code_3' => $billing_address->fields['countries_iso_code_3']),
                               'country_id' => $billing_address->fields['entry_country_id'],
                               'format_id' => (int)$billing_address->fields['address_format_id']);
    
    
        $index = 0;
        $products = $_SESSION['cart']->get_products();
        for ($i=0, $n=sizeof($products); $i<$n; $i++) {
    // TVA_INTRACOM BEGIN
          $tva_geo_tax = $this->billing['tva_intracom_tax'];
          $tva_tax = $tva_geo_tax? zen_get_tax_rate ($products[$i]['tax_class_id'], $tax_address->fields['entry_country_id'], $tax_address->fields['entry_zone_id']): 0;
          $tva_tax_description = $tva_geo_tax? zen_get_tax_description($products[$i]['tax_class_id'], $tax_address->fields['entry_country_id'], $tax_address->fields['entry_zone_id']): 0;
    // TVA_INTRACOM END
          if (($i/2) == floor($i/2)) {
            $rowClass="rowEven";
          } else {
            $rowClass="rowOdd";
          }
          $taxRates = zen_get_multiple_tax_rates($products[$i]['tax_class_id'], $taxCountryId, $taxZoneId);
          $this->products[$index] = array('qty' => $products[$i]['quantity'],
                                          'name' => $products[$i]['name'],
                                          'merkmale' => $products[$i]['merkmale'],
                                          'model' => $products[$i]['model'],
                                          'image' => $products[$i]['image'], 
                                          'tax' => zen_get_tax_rate($products[$i]['tax_class_id'], $taxCountryId, $taxZoneId),
                                          'tax_groups'=>$taxRates,
                                          'tax_description' => zen_get_tax_description($products[$i]['tax_class_id'], $taxCountryId, $taxZoneId),
    // TVA_INTRACOM REPLACE BEGIN
                                          'tax' => $tva_tax,
                                          'tax_description' => $tva_tax_description,
    // TVA_INTRACOM REPLACE END
                                          'price' => $products[$i]['price'],
                                          'final_price' => $products[$i]['price'] + $_SESSION['cart']->attributes_price($products[$i]['id']),
                                          'onetime_charges' => $_SESSION['cart']->attributes_price_onetime_charges($products[$i]['id'], $products[$i]['quantity']),
                                          'weight' => $products[$i]['weight'],
                                          'products_priced_by_attribute' => $products[$i]['products_priced_by_attribute'],
                                          'product_is_free' => $products[$i]['product_is_free'],
                                          'products_discount_type' => $products[$i]['products_discount_type'],
                                          'products_discount_type_from' => $products[$i]['products_discount_type_from'],
                                          'id' => $products[$i]['id'],
                                          'rowClass' => $rowClass);
          if (STORE_PRODUCT_TAX_BASIS == 'Shipping' && stristr($_SESSION['shipping']['id'], 'storepickup') == TRUE) 
          {
            $taxRates = zen_get_multiple_tax_rates($products[$i]['tax_class_id'], STORE_COUNTRY, STORE_ZONE);
            $this->products[$index]['tax'] = zen_get_tax_rate($products[$i]['tax_class_id'], STORE_COUNTRY, STORE_ZONE);
          } else 
          {
            $taxRates = zen_get_multiple_tax_rates($products[$i]['tax_class_id'], $tax_address->fields['entry_country_id'], $tax_address->fields['entry_zone_id']);
            $this->products[$index]['tax'] = zen_get_tax_rate($products[$i]['tax_class_id'], $tax_address->fields['entry_country_id'], $tax_address->fields['entry_zone_id']);
          }
          $this->notify('NOTIFY_ORDER_CART_ADD_PRODUCT_LIST', array('index'=>$index, 'products'=>$products[$i]));
          if ($products[$i]['attributes']) {
            $subindex = 0;
            reset($products[$i]['attributes']);
            while (list($option, $value) = each($products[$i]['attributes'])) {
              /*
              //clr 030714 Determine if attribute is a text attribute and change products array if it is.
              if ($value == PRODUCTS_OPTIONS_VALUES_TEXT_ID){
              $attr_value = $products[$i]['attributes_values'][$option];
              } else {
              $attr_value = $attributes->fields['products_options_values_name'];
              }
              */
    
    
              $attributes_query = "select popt.products_options_name, poval.products_options_values_name,
                                              pa.options_values_price, pa.price_prefix
                                       from " . TABLE_PRODUCTS_OPTIONS . " popt,
                                            " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval,
                                            " . TABLE_PRODUCTS_ATTRIBUTES . " pa
                                       where pa.products_id = '" . (int)$products[$i]['id'] . "'
                                       and pa.options_id = '" . (int)$option . "'
                                       and pa.options_id = popt.products_options_id
                                       and pa.options_values_id = '" . (int)$value . "'
                                       and pa.options_values_id = poval.products_options_values_id
                                       and popt.language_id = '" . (int)$_SESSION['languages_id'] . "'
                                       and poval.language_id = '" . (int)$_SESSION['languages_id'] . "'";
    
    
              $attributes = $db->Execute($attributes_query);
    
    
              //clr 030714 Determine if attribute is a text attribute and change products array if it is.
              if ($value == PRODUCTS_OPTIONS_VALUES_TEXT_ID){
                $attr_value = $products[$i]['attributes_values'][$option];
              } else {
                $attr_value = $attributes->fields['products_options_values_name'];
              }
    
    
              $this->products[$index]['attributes'][$subindex] = array('option' => $attributes->fields['products_options_name'],
                                                                       'value' => $attr_value,
                                                                       'option_id' => $option,
                                                                       'value_id' => $value,
                                                                       'prefix' => $attributes->fields['price_prefix'],
                                                                       'price' => $attributes->fields['options_values_price']);
    
    
              $this->notify('NOTIFY_ORDER_CART_ADD_ATTRIBUTE_LIST', array('index'=>$index, 'subindex'=>$subindex, 'products'=>$products[$i], 'attributes'=>$attributes));
              $subindex++;
            }
          }
    
    
          // add onetime charges here
          //$_SESSION['cart']->attributes_price_onetime_charges($products[$i]['id'], $products[$i]['quantity'])
    
    
          /*********************************************
           * Calculate taxes for this product
           *********************************************/
    /*      $shown_price = (zen_add_tax($this->products[$index]['final_price'] * $this->products[$index]['qty'], $this->products[$index]['tax']))
          + zen_add_tax($this->products[$index]['onetime_charges'], $this->products[$index]['tax']);
          $this->info['subtotal'] += $shown_price;
          $this->notify('NOTIFIY_ORDER_CART_SUBTOTAL_CALCULATE', array('shown_price'=>$shown_price));
          // find product's tax rate and description
          $products_tax = $this->products[$index]['tax'];
          $products_tax_description = $this->products[$index]['tax_description'];
          $this->info['subtotal'] += $shown_price;
          $totalTaxAdd = 0;
          foreach ($taxRates as $taxDescription=>$taxRate)
          {
            $taxAdd = 0;
            if ($taxDescription == $products_tax_description)
            {
              if (DISPLAY_PRICE_WITH_TAX == 'true')
              {
                $taxAdd = zen_round($shown_price / (100 + $this->products[$index]['tax']) * $this->products[$index]['tax'], $decimals);
              } else 
              {
                  $taxAdd = zen_calculate_tax($this->products[$index]['final_price'], $this->products[$index]['tax']) * $this->products[$index]['qty'];
                          +  zen_round(zen_calculate_tax($this->products[$index]['onetime_charges'], $this->products[$index]['tax']), $decimals);
              }
              if (isset($this->info['tax_groups'][$taxDescription]))
              {
                $this->info['tax_groups'][$taxDescription] += $taxAdd;
              } else
              {
                $this->info['tax_groups'][$taxDescription] = $taxAdd;
              }
            }
            $totalTaxAdd += $taxAdd;
          }
          $this->info['tax'] += $totalTaxAdd;
    */
    // TVA_INTRACOM REPLACE BEGIN
          $tva_tax = $this->customer['tva_intracom_tax'];
          if (!$tva_tax) {
            $vat_tax = 0;
            $vat_tax_description = TEXT_NO_TAX;
          } else {
            $vat_tax = $this->products[$index]['tax'];
            $vat_tax_description = $this->products[$index]['tax_description'];
          }
    
    
          $shown_price = (zen_add_tax($this->products[$index]['final_price'], $vat_tax) * $this->products[$index]['qty'])
    + zen_add_tax($this->products[$index]['onetime_charges'], $vat_tax);
          $this->info['subtotal'] += $shown_price;
    
    
          // find product's tax rate and description
          $products_tax = $vat_tax;
          $products_tax_description = $vat_tax_description;
    
    
          if (DISPLAY_PRICE_WITH_TAX == 'true') {
            // calculate the amount of tax "inc"luded in price (used if tax-in pricing is enabled)
            $tax_add = $shown_price - ($shown_price / (($products_tax < 10) ? "1.0" . str_replace('.', '', $products_tax) : "1." . str_replace('.', '', $products_tax)));
          } else {
            // calculate the amount of tax for this product (assuming tax is NOT included in the price)
    //        $tax_add = zen_round(($products_tax / 100) * $shown_price, $currencies->currencies[$this->info['currency']]['decimal_places']);
            $tax_add = ($products_tax/100) * $shown_price;
          }
          $this->info['tax'] += $tax_add;
          foreach ($taxRates as $taxDescription=>$taxRate)
          {
            $taxAdd = zen_calculate_tax($this->products[$index]['final_price']*$this->products[$index]['qty'], $taxRate)
                    +  zen_calculate_tax($this->products[$index]['onetime_charges'], $taxRate);
            if (isset($this->info['tax_groups'][$taxDescription]))
            {
              $this->info['tax_groups'][$taxDescription] += $taxAdd;
            } else
            {
              $this->info['tax_groups'][$taxDescription] = $taxAdd;
            }
          }
          /*********************************************
           * END: Calculate taxes for this product
           *********************************************/
          $index++;
        }
    
    
        // Update the final total to include tax if not already tax-inc
        if (DISPLAY_PRICE_WITH_TAX == 'true') {
          $this->info['total'] = $this->info['subtotal'] + $this->info['shipping_cost'];
        } else {
          $this->info['total'] = $this->info['subtotal'] + $this->info['tax'] + $this->info['shipping_cost'];
        }
    
    
    /*
    // moved to function create
        if ($this->info['total'] == 0) {
          if (DEFAULT_ZERO_BALANCE_ORDERS_STATUS_ID == 0) {
            $this->info['order_status'] = DEFAULT_ORDERS_STATUS_ID;
          } else {
            $this->info['order_status'] = DEFAULT_ZERO_BALANCE_ORDERS_STATUS_ID;
          }
        }
    */
        if (isset($GLOBALS[$class]) && is_object($GLOBALS[$class])) {
          if ( isset($GLOBALS[$class]->order_status) && is_numeric($GLOBALS[$class]->order_status) && ($GLOBALS[$class]->order_status > 0) ) {
            $this->info['order_status'] = $GLOBALS[$class]->order_status;
          }
        }
        $this->notify('NOTIFY_ORDER_CART_FINISHED');
      }
    
    
      function create($zf_ot_modules, $zf_mode = 2) {
        global $db;
    
    
        $this->notify('NOTIFY_ORDER_CART_EXTERNAL_TAX_DURING_ORDER_CREATE', array(), $zf_ot_modules);
    
    
        if ($this->info['total'] == 0) {
          if (DEFAULT_ZERO_BALANCE_ORDERS_STATUS_ID == 0) {
            $this->info['order_status'] = (int)DEFAULT_ORDERS_STATUS_ID;
          } else {
            if ($_SESSION['payment'] != 'freecharger') {
              $this->info['order_status'] = (int)DEFAULT_ZERO_BALANCE_ORDERS_STATUS_ID;
            }
          }
        }
        $this->notify('NOTIFY_ORDER_CART_ORDERSTATUS');
    
    
        if ($_SESSION['shipping']['id'] == 'free_free') {
          $this->info['shipping_module_code'] = $_SESSION['shipping']['id'];
        }
    
    
        // Sanitize cc-num if present, using maximum 10 chars, with middle chars stripped out with XX
        if (strlen($this->info['cc_number']) > 10) {
          $cEnd = substr($this->info['cc_number'], -4);
          $cOffset = strlen($this->info['cc_number']) -4;
          $cStart = substr($this->info['cc_number'], 0, ($cOffset > 4 ? 4 : (int)$cOffset));
          $this->info['cc_number'] = str_pad($cStart, 6, 'X') . $cEnd;
        };
    
    
        $sql_data_array = array('customers_id' => $_SESSION['customer_id'],
                                'customers_name' => $this->customer['firstname'] . ' ' . $this->customer['lastname'],
                                'customers_company' => $this->customer['company'],
    // TVA_INTRACOM BEGIN
                                'billing_tva_intracom' => $this->billing['tva_intracom'],
    // TVA_INTRACOM END
                                'customers_street_address' => $this->customer['street_address'],
                                'customers_suburb' => $this->customer['suburb'],
                                'customers_city' => $this->customer['city'],
                                'customers_postcode' => $this->customer['postcode'],
                                'customers_state' => $this->customer['state'],
                                'customers_country' => $this->customer['country']['title'],
                                'customers_telephone' => $this->customer['telephone'],
                                'customers_email_address' => $this->customer['email_address'],
                                'customers_address_format_id' => $this->customer['format_id'],
                                'delivery_name' => $this->delivery['firstname'] . ' ' . $this->delivery['lastname'],
                                'delivery_company' => $this->delivery['company'],
                                'delivery_street_address' => $this->delivery['street_address'],
                                'delivery_suburb' => $this->delivery['suburb'],
                                'delivery_city' => $this->delivery['city'],
                                'delivery_postcode' => $this->delivery['postcode'],
                                'delivery_state' => $this->delivery['state'],
                                'delivery_country' => $this->delivery['country']['title'],
                                'delivery_address_format_id' => $this->delivery['format_id'],
                                'billing_name' => $this->billing['firstname'] . ' ' . $this->billing['lastname'],
                                'billing_company' => $this->billing['company'],
                                'billing_street_address' => $this->billing['street_address'],
                                'billing_suburb' => $this->billing['suburb'],
                                'billing_city' => $this->billing['city'],
                                'billing_postcode' => $this->billing['postcode'],
                                'billing_state' => $this->billing['state'],
                                'billing_country' => $this->billing['country']['title'],
                                'billing_address_format_id' => $this->billing['format_id'],
                                'payment_method' => (($this->info['payment_module_code'] == '' and $this->info['payment_method'] == '') ? PAYMENT_METHOD_GV : $this->info['payment_method']),
                                'payment_module_code' => (($this->info['payment_module_code'] == '' and $this->info['payment_method'] == '') ? PAYMENT_MODULE_GV : $this->info['payment_module_code']),
                                'shipping_method' => $this->info['shipping_method'],
                                'shipping_module_code' => (strpos($this->info['shipping_module_code'], '_') > 0 ? substr($this->info['shipping_module_code'], 0, strpos($this->info['shipping_module_code'], '_')) : $this->info['shipping_module_code']),
                                'coupon_code' => $this->info['coupon_code'],
                                'cc_type' => $this->info['cc_type'],
                                'cc_owner' => $this->info['cc_owner'],
                                'cc_number' => $this->info['cc_number'],
                                'cc_expires' => $this->info['cc_expires'],
                                'date_purchased' => 'now()',
                                'orders_status' => $this->info['order_status'],
                                'order_total' => $this->info['total'],
                                'order_tax' => $this->info['tax'],
                                'currency' => $this->info['currency'],
                                'currency_value' => $this->info['currency_value'],
                                'ip_address' => $_SESSION['customers_ip_address'] . ' - ' . $_SERVER['REMOTE_ADDR']
                                );
    
    
        if ($_SESSION['COWOA']) $sql_data_array[COWOA_order] = 1;
    
    
        zen_db_perform(TABLE_ORDERS, $sql_data_array);
    
    
        $insert_id = $db->Insert_ID();
    
    
        $this->notify('NOTIFY_ORDER_DURING_CREATE_ADDED_ORDER_HEADER', array_merge(array('orders_id' => $insert_id, 'shipping_weight' => $_SESSION['cart']->weight), $sql_data_array));
    
    
        for ($i=0, $n=sizeof($zf_ot_modules); $i<$n; $i++) {
          $sql_data_array = array('orders_id' => $insert_id,
                                  'title' => $zf_ot_modules[$i]['title'],
                                  'text' => $zf_ot_modules[$i]['text'],
                                  'value' => (is_numeric($zf_ot_modules[$i]['value'])) ? $zf_ot_modules[$i]['value'] : '0',
                                  'class' => $zf_ot_modules[$i]['code'],
                                  'sort_order' => $zf_ot_modules[$i]['sort_order']);
    
    
          zen_db_perform(TABLE_ORDERS_TOTAL, $sql_data_array);
    
    
          $this->notify('NOTIFY_ORDER_DURING_CREATE_ADDED_ORDERTOTAL_LINE_ITEM', $sql_data_array);
        }
    
    
        $customer_notification = (SEND_EMAILS == 'true') ? '1' : '0';
        $sql_data_array = array('orders_id' => $insert_id,
                                'orders_status_id' => $this->info['order_status'],
                                'date_added' => 'now()',
                                'customer_notified' => $customer_notification,
                                'comments' => $this->info['comments']);
    
    
        zen_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
    
    
        $this->notify('NOTIFY_ORDER_DURING_CREATE_ADDED_ORDER_COMMENT', $sql_data_array);
    
    
        return $insert_id;
    
    
      }
    
    
    
    
      function create_add_products($zf_insert_id, $zf_mode = false) {
        global $db, $currencies, $order_total_modules, $order_totals;
    
    
        // initialized for the email confirmation
    
    
        $this->products_ordered = '';
        $this->products_ordered_html = '';
        $this->subtotal = 0;
        $this->total_tax = 0;
    
    
        // lowstock email report
        $this->email_low_stock='';
    
    
        for ($i=0, $n=sizeof($this->products); $i<$n; $i++) {
          $custom_insertable_text = '';
    
    
          $this->doStockDecrement = (STOCK_LIMITED == 'true');
          $this->notify('NOTIFY_ORDER_PROCESSING_STOCK_DECREMENT_INIT', array(), $this->products[$i], $i);
          // Stock Update - Joao Correia
          if ($this->doStockDecrement) {
            if (DOWNLOAD_ENABLED == 'true') {
              $stock_query_raw = "select p.products_quantity, pad.products_attributes_filename, p.product_is_always_free_shipping
                                  from " . TABLE_PRODUCTS . " p
                                  left join " . TABLE_PRODUCTS_ATTRIBUTES . " pa
                                   on p.products_id=pa.products_id
                                  left join " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
                                   on pa.products_attributes_id=pad.products_attributes_id
                                  WHERE p.products_id = '" . zen_get_prid($this->products[$i]['id']) . "'";
    
    
              // Will work with only one option for downloadable products
              // otherwise, we have to build the query dynamically with a loop
              $products_attributes = $this->products[$i]['attributes'];
              if (is_array($products_attributes)) {
                $stock_query_raw .= " AND pa.options_id = '" . $products_attributes[0]['option_id'] . "' AND pa.options_values_id = '" . $products_attributes[0]['value_id'] . "'";
              }
              $stock_values = $db->Execute($stock_query_raw, false, false, 0, true);
            } else {
              $stock_values = $db->Execute("select * from " . TABLE_PRODUCTS . " where products_id = '" . zen_get_prid($this->products[$i]['id']) . "'", false, false, 0, true);
            }
    
    
            $this->notify('NOTIFY_ORDER_PROCESSING_STOCK_DECREMENT_BEGIN', $i, $stock_values);
    
    
            if ($stock_values->RecordCount() > 0) {
              // do not decrement quantities if products_attributes_filename exists
              if ((DOWNLOAD_ENABLED != 'true') || $stock_values->fields['product_is_always_free_shipping'] == 2 || (!$stock_values->fields['products_attributes_filename']) ) {
                $stock_left = $stock_values->fields['products_quantity'] - $this->products[$i]['qty'];
                $this->products[$i]['stock_reduce'] = $this->products[$i]['qty'];
              } else {
                $stock_left = $stock_values->fields['products_quantity'];
              }
    
    
              //            $this->products[$i]['stock_value'] = $stock_values->fields['products_quantity'];
    
    
              $db->Execute("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . zen_get_prid($this->products[$i]['id']) . "'");
              //        if ( ($stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false') ) {
              if ($stock_left <= 0) {
                // only set status to off when not displaying sold out
                if (SHOW_PRODUCTS_SOLD_OUT == '0') {
                  $db->Execute("update " . TABLE_PRODUCTS . " set products_status = 0 where products_id = '" . zen_get_prid($this->products[$i]['id']) . "'");
                }
              }
    
    
              // for low stock email
              if ( $stock_left <= STOCK_REORDER_LEVEL ) {
                // WebMakers.com Added: add to low stock email
                $this->email_low_stock .=  'ID# ' . zen_get_prid($this->products[$i]['id']) . "\t\t" . $this->products[$i]['model'] . "\t\t" . $this->products[$i]['name'] . "\t\t" . ' Qty Left: ' . $stock_left . "\n";
              }
            }
          }
    
    
          // Update products_ordered (for bestsellers list)
          $this->bestSellersUpdate = TRUE;
          $this->notify('NOTIFY_ORDER_PROCESSING_BESTSELLERS_UPDATE', array(), $this->products[$i], $i);
          if ($this->bestSellersUpdate) {
            $db->Execute("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%f', $this->products[$i]['qty']) . " where products_id = '" . zen_get_prid($this->products[$i]['id']) . "'");
          }
    
    
          $this->notify('NOTIFY_ORDER_PROCESSING_STOCK_DECREMENT_END', $i);
    
    
          $sql_data_array = array('orders_id' => $zf_insert_id,
                                  'products_id' => zen_get_prid($this->products[$i]['id']),
                                  'products_model' => $this->products[$i]['model'],
                                  'products_name' => $this->products[$i]['name'],
                                  'products_price' => $this->products[$i]['price'],
                                  'final_price' => $this->products[$i]['final_price'],
                                  'onetime_charges' => $this->products[$i]['onetime_charges'],
                                  'products_tax' => $this->products[$i]['tax'],
                                  'products_quantity' => $this->products[$i]['qty'],
                                  'products_priced_by_attribute' => $this->products[$i]['products_priced_by_attribute'],
                                  'product_is_free' => $this->products[$i]['product_is_free'],
                                  'products_discount_type' => $this->products[$i]['products_discount_type'],
                                  'products_discount_type_from' => $this->products[$i]['products_discount_type_from'],
                                  'products_prid' => $this->products[$i]['id']);
          zen_db_perform(TABLE_ORDERS_PRODUCTS, $sql_data_array);
    
    
          $order_products_id = $db->Insert_ID();
    
    
          $this->notify('NOTIFY_ORDER_DURING_CREATE_ADDED_PRODUCT_LINE_ITEM', array_merge(array('orders_products_id' => $order_products_id), $sql_data_array));
    
    
          $this->notify('NOTIFY_ORDER_PROCESSING_CREDIT_ACCOUNT_UPDATE_BEGIN');
          $order_total_modules->update_credit_account($i);//ICW ADDED FOR CREDIT CLASS SYSTEM
    
    
          $this->notify('NOTIFY_ORDER_PROCESSING_ATTRIBUTES_BEGIN');
    
    
          //------ bof: insert customer-chosen options to order--------
          $attributes_exist = '0';
          $this->products_ordered_attributes = '';
          if (isset($this->products[$i]['attributes'])) {
            $attributes_exist = '1';
            for ($j=0, $n2=sizeof($this->products[$i]['attributes']); $j<$n2; $j++) {
              if (DOWNLOAD_ENABLED == 'true') {
                $attributes_query = "select popt.products_options_name, poval.products_options_values_name,
                                     pa.options_values_price, pa.price_prefix,
                                     pa.product_attribute_is_free, pa.products_attributes_weight, pa.products_attributes_weight_prefix,
                                     pa.attributes_discounted, pa.attributes_price_base_included, pa.attributes_price_onetime,
                                     pa.attributes_price_factor, pa.attributes_price_factor_offset,
                                     pa.attributes_price_factor_onetime, pa.attributes_price_factor_onetime_offset,
                                     pa.attributes_qty_prices, pa.attributes_qty_prices_onetime,
                                     pa.attributes_price_words, pa.attributes_price_words_free,
                                     pa.attributes_price_letters, pa.attributes_price_letters_free,
                                     pad.products_attributes_maxdays, pad.products_attributes_maxcount, pad.products_attributes_filename
                                     from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " .
                TABLE_PRODUCTS_ATTRIBUTES . " pa
                                      left join " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad
                                      on pa.products_attributes_id=pad.products_attributes_id
                                     where pa.products_id = '" . zen_db_input($this->products[$i]['id']) . "'
                                      and pa.options_id = '" . $this->products[$i]['attributes'][$j]['option_id'] . "'
                                      and pa.options_id = popt.products_options_id
                                      and pa.options_values_id = '" . $this->products[$i]['attributes'][$j]['value_id'] . "'
                                      and pa.options_values_id = poval.products_options_values_id
                                      and popt.language_id = '" . $_SESSION['languages_id'] . "'
                                      and poval.language_id = '" . $_SESSION['languages_id'] . "'";
    
    
                $attributes_values = $db->Execute($attributes_query);
              } else {
                $attributes_values = $db->Execute("select popt.products_options_name, poval.products_options_values_name,
                                     pa.options_values_price, pa.price_prefix,
                                     pa.product_attribute_is_free, pa.products_attributes_weight, pa.products_attributes_weight_prefix,
                                     pa.attributes_discounted, pa.attributes_price_base_included, pa.attributes_price_onetime,
                                     pa.attributes_price_factor, pa.attributes_price_factor_offset,
                                     pa.attributes_price_factor_onetime, pa.attributes_price_factor_onetime_offset,
                                     pa.attributes_qty_prices, pa.attributes_qty_prices_onetime,
                                     pa.attributes_price_words, pa.attributes_price_words_free,
                                     pa.attributes_price_letters, pa.attributes_price_letters_free
                                     from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa
                                     where pa.products_id = '" . $this->products[$i]['id'] . "' and pa.options_id = '" . (int)$this->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . (int)$this->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $_SESSION['languages_id'] . "' and poval.language_id = '" . $_SESSION['languages_id'] . "'");
              }
    
    
              //clr 030714 update insert query.  changing to use values form $order->products for products_options_values.
              $sql_data_array = array('orders_id' => $zf_insert_id,
                                      'orders_products_id' => $order_products_id,
                                      'products_options' => $attributes_values->fields['products_options_name'],
    
    
              //                                 'products_options_values' => $attributes_values->fields['products_options_values_name'],
                                      'products_options_values' => $this->products[$i]['attributes'][$j]['value'],
                                      'options_values_price' => $attributes_values->fields['options_values_price'],
                                      'price_prefix' => $attributes_values->fields['price_prefix'],
                                      'product_attribute_is_free' => $attributes_values->fields['product_attribute_is_free'],
                                      'products_attributes_weight' => $attributes_values->fields['products_attributes_weight'],
                                      'products_attributes_weight_prefix' => $attributes_values->fields['products_attributes_weight_prefix'],
                                      'attributes_discounted' => $attributes_values->fields['attributes_discounted'],
                                      'attributes_price_base_included' => $attributes_values->fields['attributes_price_base_included'],
                                      'attributes_price_onetime' => $attributes_values->fields['attributes_price_onetime'],
                                      'attributes_price_factor' => $attributes_values->fields['attributes_price_factor'],
                                      'attributes_price_factor_offset' => $attributes_values->fields['attributes_price_factor_offset'],
                                      'attributes_price_factor_onetime' => $attributes_values->fields['attributes_price_factor_onetime'],
                                      'attributes_price_factor_onetime_offset' => $attributes_values->fields['attributes_price_factor_onetime_offset'],
                                      'attributes_qty_prices' => $attributes_values->fields['attributes_qty_prices'],
                                      'attributes_qty_prices_onetime' => $attributes_values->fields['attributes_qty_prices_onetime'],
                                      'attributes_price_words' => $attributes_values->fields['attributes_price_words'],
                                      'attributes_price_words_free' => $attributes_values->fields['attributes_price_words_free'],
                                      'attributes_price_letters' => $attributes_values->fields['attributes_price_letters'],
                                      'attributes_price_letters_free' => $attributes_values->fields['attributes_price_letters_free'],
                                      'products_options_id' => (int)$this->products[$i]['attributes'][$j]['option_id'],
                                      'products_options_values_id' => (int)$this->products[$i]['attributes'][$j]['value_id'],
                                      'products_prid' => $this->products[$i]['id']
                                      );
    
    
    
    
              zen_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array);
    
    
              $this->notify('NOTIFY_ORDER_DURING_CREATE_ADDED_ATTRIBUTE_LINE_ITEM', $sql_data_array);
    
    
              if ((DOWNLOAD_ENABLED == 'true') && isset($attributes_values->fields['products_attributes_filename']) && zen_not_null($attributes_values->fields['products_attributes_filename'])) {
                $sql_data_array = array('orders_id' => $zf_insert_id,
                                        'orders_products_id' => $order_products_id,
                                        'orders_products_filename' => $attributes_values->fields['products_attributes_filename'],
                                        'download_maxdays' => $attributes_values->fields['products_attributes_maxdays'],
                                        'download_count' => $attributes_values->fields['products_attributes_maxcount'],
                                        'products_prid' => $this->products[$i]['id']
                                        );
    
    
                zen_db_perform(TABLE_ORDERS_PRODUCTS_DOWNLOAD, $sql_data_array);
    
    
                $this->notify('NOTIFY_ORDER_DURING_CREATE_ADDED_ATTRIBUTE_DOWNLOAD_LINE_ITEM', $sql_data_array);
              }
              $this->products_ordered_attributes .= "\n\t" . $attributes_values->fields['products_options_name'] . ' ' . zen_decode_specialchars($this->products[$i]['attributes'][$j]['value']);
            }
          }
          //------eof: insert customer-chosen options ----
        $this->notify('NOTIFY_ORDER_PROCESSING_ATTRIBUTES_EXIST', $attributes_exist);
    
    
        $this->notify('NOTIFY_ORDER_DURING_CREATE_ADD_PRODUCTS', $i, $custom_insertable_text);
    
    
    /* START: ADD MY CUSTOM DETAILS
     * 1. calculate/prepare custom information to be added to this product entry in order-confirmation, perhaps as a function call to custom code to build a serial number etc:
     *   Possible parameters to pass to custom functions at this point:
     *     Product ID ordered (for this line item): $this->products[$i]['id']
     *     Quantity ordered (of this line-item): $this->products[$i]['qty']
     *     Order number: $zf_insert_id
     *     Attribute Option Name ID: (int)$this->products[$i]['attributes'][$j]['option_id']
     *     Attribute Option Value ID: (int)$this->products[$i]['attributes'][$j]['value_id']
     *     Attribute Filename: $attributes_values->fields['products_attributes_filename']
     *
     * 2. Add that data to the $this->products_ordered_attributes variable, using this sort of format:
     *      $this->products_ordered_attributes .=  {INSERT CUSTOM INFORMATION HERE};
     */
    
    
        $this->products_ordered_attributes .= $custom_insertable_text;
    
    
    /* END: ADD MY CUSTOM DETAILS */
    
    
          // update totals counters
          $this->total_weight += ($this->products[$i]['qty'] * $this->products[$i]['weight']);
          $this->total_tax += zen_calculate_tax($total_products_price * $this->products[$i]['qty'], $products_tax);
          $this->total_cost += $total_products_price;
    
    
          $this->notify('NOTIFY_ORDER_PROCESSING_ONE_TIME_CHARGES_BEGIN', $i);
    
    
          // build output for email notification
          $this->products_ordered .=  $this->products[$i]['qty'] . ' x ' . $this->products[$i]['name'] . ($this->products[$i]['model'] != '' ? ' (' . $this->products[$i]['model'] . ') ' : '') . ' = ' .
          $currencies->display_price($this->products[$i]['final_price'], $this->products[$i]['tax'], $this->products[$i]['qty']) .
          ($this->products[$i]['onetime_charges'] !=0 ? "\n" . TEXT_ONETIME_CHARGES_EMAIL . $currencies->display_price($this->products[$i]['onetime_charges'], $this->products[$i]['tax'], 1) : '') .
          $this->products_ordered_attributes . "\n";
          $this->products_ordered_html .=
          '<tr>' . "\n" .
          '<td class="product-details" align="right" valign="top" width="30">' . $this->products[$i]['qty'] . '&nbsp;x</td>' . "\n" .
          '<td class="product-details" valign="top">' . nl2br($this->products[$i]['name']) . ($this->products[$i]['model'] != '' ? ' (' . nl2br($this->products[$i]['model']) . ') ' : '') . "\n" .
          '<nobr>' .
          '<small><em> '. nl2br($this->products_ordered_attributes) .'</em></small>' .
          '</nobr>' .
          '</td>' . "\n" .
          '<td class="product-details-num" valign="top" align="right">' .
          $currencies->display_price($this->products[$i]['final_price'], $this->products[$i]['tax'], $this->products[$i]['qty']) .
          ($this->products[$i]['onetime_charges'] !=0 ?
          '</td></tr>' . "\n" . '<tr><td class="product-details">' . nl2br(TEXT_ONETIME_CHARGES_EMAIL) . '</td>' . "\n" .
          '<td>' . $currencies->display_price($this->products[$i]['onetime_charges'], $this->products[$i]['tax'], 1) : '') .
          '</td></tr>' . "\n";
        }
    
    
        $order_total_modules->apply_credit();//ICW ADDED FOR CREDIT CLASS SYSTEM
        $this->notify('NOTIFY_ORDER_AFTER_ORDER_CREATE_ADD_PRODUCTS');
      }
    
    
    
    
      function send_order_email($zf_insert_id, $zf_mode = FALSE) {
        global $currencies, $order_totals;
        $this->notify('NOTIFY_ORDER_SEND_EMAIL_INITIALIZE', array(), $zf_insert_id, $order_totals, $zf_mode);
        if (!defined('ORDER_EMAIL_DATE_FORMAT')) define('ORDER_EMAIL_DATE_FORMAT', 'M-d-Y h:iA');
    
    
        $this->send_low_stock_emails = TRUE;
        $this->notify('NOTIFY_ORDER_SEND_LOW_STOCK_EMAILS');
        if ($this->send_low_stock_emails && $this->email_low_stock != ''  && SEND_LOWSTOCK_EMAIL=='1') {
          $email_low_stock = SEND_EXTRA_LOW_STOCK_EMAIL_TITLE . "\n\n" . $this->email_low_stock;
          zen_mail('', SEND_EXTRA_LOW_STOCK_EMAILS_TO, EMAIL_TEXT_SUBJECT_LOWSTOCK, $email_low_stock, STORE_OWNER, EMAIL_FROM, array('EMAIL_MESSAGE_HTML' => nl2br($email_low_stock)),'low_stock');
        }
    
    
        // lets start with the email confirmation
        // make an array to store the html version
        $html_msg=array();
    
    
        if ($_SESSION['COWOA'] && (COWOA_ORDER_STATUS == 'true'))  {
        $htmlInvoiceURL=EMAIL_TEXT_INVOICE_URL_CLICK;;
        $htmlInvoiceValue=zen_href_link(FILENAME_ORDER_STATUS, 'order_id=' . $zf_insert_id, 'SSL', false);
        $email_order = EMAIL_TEXT_HEADER . EMAIL_TEXT_FROM . STORE_NAME . "\n\n";
    	   if ($this->customer['gender'] == "m") {
          $email_order .= EMAIL_GREETING_MR .' ' ;
         } else {
          $email_order .= EMAIL_GREETING_MS .' ' ;
        }
        $email_order .= $this->customer['firstname'] . ' ' . $this->customer['lastname'] . "\n\n" .
        EMAIL_THANKS_FOR_SHOPPING . "\n" . EMAIL_DETAILS_FOLLOW . "\n" .
        EMAIL_SEPARATOR . "\n" .
        EMAIL_TEXT_ORDER_NUMBER . ' ' . $zf_insert_id . "\n" .
        EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n" .
        EMAIL_TEXT_INVOICE_URL . ' ' . zen_href_link(FILENAME_ORDER_STATUS, 'order_id=' . $zf_insert_id, 'SSL', false) . "\n\n";
        $html_msg['EMAIL_TEXT_HEADER']     = EMAIL_TEXT_HEADER;
        $html_msg['EMAIL_TEXT_FROM']       = EMAIL_TEXT_FROM;
        $html_msg['INTRO_STORE_NAME']      = STORE_NAME;
        $html_msg['EMAIL_THANKS_FOR_SHOPPING'] = EMAIL_THANKS_FOR_SHOPPING;
        $html_msg['EMAIL_DETAILS_FOLLOW']  = EMAIL_DETAILS_FOLLOW;
        $html_msg['INTRO_ORDER_NUM_TITLE'] = EMAIL_TEXT_ORDER_NUMBER;
        $html_msg['INTRO_ORDER_NUMBER']    = $zf_insert_id;
        $html_msg['INTRO_DATE_TITLE']      = EMAIL_TEXT_DATE_ORDERED;
        $html_msg['INTRO_DATE_ORDERED']    = strftime(DATE_FORMAT_LONG);
        $html_msg['INTRO_URL_TEXT']        = EMAIL_TEXT_INVOICE_URL_CLICK;
        $html_msg['INTRO_URL_VALUE']       = zen_href_link(FILENAME_ORDER_STATUS, 'order_id=' . $zf_insert_id, 'SSL', false);
        }
        
    // COWOA:If COWOA but Send Order Status is False
        if ($_SESSION['COWOA'] && (COWOA_ORDER_STATUS == 'false')){
        $htmlInvoiceURL='';
        $htmlInvoiceValue='';
       $email_order = EMAIL_TEXT_HEADER . EMAIL_TEXT_FROM . STORE_NAME . "\n\n";
    	   if ($this->customer['gender'] == "m") {
          $email_order .= EMAIL_GREETING_MR .' ' ;
         } else {
          $email_order .= EMAIL_GREETING_MS .' ' ;
        }
        $email_order .= $this->customer['firstname'] . ' ' . $this->customer['lastname'] . "\n\n" .
        EMAIL_THANKS_FOR_SHOPPING . "\n" . EMAIL_DETAILS_FOLLOW . "\n" .
        EMAIL_SEPARATOR . "\n" .
        EMAIL_TEXT_ORDER_NUMBER . ' ' . $zf_insert_id . "\n" .
        EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n\n";
        $html_msg['EMAIL_TEXT_HEADER']     = EMAIL_TEXT_HEADER;
        $html_msg['EMAIL_TEXT_FROM']       = EMAIL_TEXT_FROM;
        $html_msg['INTRO_STORE_NAME']      = STORE_NAME;
        $html_msg['EMAIL_THANKS_FOR_SHOPPING'] = EMAIL_THANKS_FOR_SHOPPING;
        $html_msg['EMAIL_DETAILS_FOLLOW']  = EMAIL_DETAILS_FOLLOW;
        $html_msg['INTRO_ORDER_NUM_TITLE'] = EMAIL_TEXT_ORDER_NUMBER;
        $html_msg['INTRO_ORDER_NUMBER']    = $zf_insert_id;
        $html_msg['INTRO_DATE_TITLE']      = EMAIL_TEXT_DATE_ORDERED;
        $html_msg['INTRO_DATE_ORDERED']    = strftime(DATE_FORMAT_LONG);
        $html_msg['INTRO_URL_TEXT']        = '';
        $html_msg['INTRO_URL_VALUE']       = '';
        }
        // NO COWOA, so lets set up the Text and HTML E-mail Information for the Order History Info
     if (!$_SESSION['COWOA']){  
          $invoiceInfo=EMAIL_TEXT_INVOICE_URL . ' ' . zen_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $zf_insert_id, 'SSL', false) . "\n\n";
          $htmlInvoiceURL=EMAIL_TEXT_INVOICE_URL_CLICK;;
          $htmlInvoiceValue=zen_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $zf_insert_id, 'SSL', false);
       
        $email_order = EMAIL_TEXT_HEADER . EMAIL_TEXT_FROM . STORE_NAME . "\n\n" ;
    	   if ($this->customer['gender'] == "m") {
          $email_order .= EMAIL_GREETING_MR .' ' ;
         } else {
          $email_order .= EMAIL_GREETING_MS .' ' ;
          }
        $email_order .= $this->customer['firstname'] . ' ' . $this->customer['lastname'] . "\n\n" .
        EMAIL_THANKS_FOR_SHOPPING . "\n" . EMAIL_DETAILS_FOLLOW . "\n" .
        EMAIL_SEPARATOR . "\n" .
        EMAIL_TEXT_ORDER_NUMBER . ' ' . $zf_insert_id . "\n" .
        EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n" .
        EMAIL_TEXT_INVOICE_URL . ' ' . zen_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $zf_insert_id, 'SSL', false) . "\n\n";
        $html_msg['EMAIL_TEXT_HEADER']     = EMAIL_TEXT_HEADER;
        $html_msg['EMAIL_TEXT_FROM']       = EMAIL_TEXT_FROM;
        $html_msg['INTRO_STORE_NAME']      = STORE_NAME;
        $html_msg['EMAIL_THANKS_FOR_SHOPPING'] = EMAIL_THANKS_FOR_SHOPPING;
        $html_msg['EMAIL_DETAILS_FOLLOW']  = EMAIL_DETAILS_FOLLOW;
        $html_msg['INTRO_ORDER_NUM_TITLE'] = EMAIL_TEXT_ORDER_NUMBER;
        $html_msg['INTRO_ORDER_NUMBER']    = $zf_insert_id;
        $html_msg['INTRO_DATE_TITLE']      = EMAIL_TEXT_DATE_ORDERED;
        $html_msg['INTRO_DATE_ORDERED']    = strftime(DATE_FORMAT_LONG);
        $html_msg['INTRO_URL_TEXT']        = EMAIL_TEXT_INVOICE_URL_CLICK;
        $html_msg['INTRO_URL_VALUE']       = zen_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $zf_insert_id, 'SSL', false);
    
    
        $html_msg['EMAIL_CUSTOMER_PHONE']  = $this->customer['telephone'];
        $html_msg['EMAIL_ORDER_DATE']      = date(ORDER_EMAIL_DATE_FORMAT);
    
    
          $invoiceInfo=EMAIL_TEXT_INVOICE_URL . ' ' . zen_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $zf_insert_id, 'SSL', false) . "\n\n";
          $htmlInvoiceURL=EMAIL_TEXT_INVOICE_URL_CLICK;
          $htmlInvoiceValue=zen_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $zf_insert_id, 'SSL', false);
         $email_order = EMAIL_TEXT_HEADER . EMAIL_TEXT_FROM . STORE_NAME . "\n\n" ;
    	   if ($this->customer['gender'] == "m") {
          $email_order .= EMAIL_GREETING_MR .' ' ;
         } else {
          $email_order .= EMAIL_GREETING_MS .' ' ;
          }
        $email_order .= $this->customer['firstname'] . ' ' . $this->customer['lastname'] . "\n\n" .
          EMAIL_THANKS_FOR_SHOPPING . "\n" . EMAIL_DETAILS_FOLLOW . "\n" .
          EMAIL_SEPARATOR . "\n" .
          EMAIL_TEXT_ORDER_NUMBER . ' ' . $zf_insert_id . "\n" .
          EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n" .
          EMAIL_TEXT_INVOICE_URL . ' ' . zen_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $zf_insert_id, 'SSL', false) . "\n\n";
    }
        //comments area
        if ($this->info['comments']) {
          $email_order .= zen_db_output($this->info['comments']) . "\n\n";
          $html_msg['ORDER_COMMENTS'] = nl2br(zen_db_output($this->info['comments']));
        } else {
          $html_msg['ORDER_COMMENTS'] = '';
        }
    
    
        //products area
        $email_order .= EMAIL_TEXT_PRODUCTS . "\n" .
        EMAIL_SEPARATOR . "\n" .
        $this->products_ordered .
        EMAIL_SEPARATOR . "\n";
        $html_msg['PRODUCTS_TITLE'] = EMAIL_TEXT_PRODUCTS;
        $html_msg['PRODUCTS_DETAIL']='<table class="product-details" border="0" width="100%" cellspacing="0" cellpadding="2">' . $this->products_ordered_html . '</table>';
    
    
        //order totals area
        $html_ot = '<tr><td class="order-totals-text" align="right" width="100%">' . '&nbsp;' . '</td> ' . "\n" . '<td class="order-totals-num" align="right" nowrap="nowrap">' . '---------' .'</td> </tr>' . "\n";
        for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) {
          $email_order .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "\n";
          $html_ot .= '<tr><td class="order-totals-text" align="right" width="100%">' . $order_totals[$i]['title'] . '</td> ' . "\n" . '<td class="order-totals-num" align="right" nowrap="nowrap">' .($order_totals[$i]['text']) .'</td> </tr>' . "\n";
        }
        $html_msg['ORDER_TOTALS'] = '<table border="0" width="100%" cellspacing="0" cellpadding="2"> ' . $html_ot . ' </table>';
    
    
        //addresses area: Delivery
        $html_msg['HEADING_ADDRESS_INFORMATION']= HEADING_ADDRESS_INFORMATION;
        $html_msg['ADDRESS_DELIVERY_TITLE']     = EMAIL_TEXT_DELIVERY_ADDRESS;
        $html_msg['ADDRESS_DELIVERY_DETAIL']    = ($this->content_type != 'virtual') ? zen_address_label($_SESSION['customer_id'], $_SESSION['sendto'], true, '', "<br />") : 'n/a';
        $html_msg['SHIPPING_METHOD_TITLE']      = HEADING_SHIPPING_METHOD;
        $html_msg['SHIPPING_METHOD_DETAIL']     = (zen_not_null($this->info['shipping_method'])) ? $this->info['shipping_method'] : 'n/a';
    
    
        if ($this->content_type != 'virtual') {
          $email_order .= "\n" . EMAIL_TEXT_DELIVERY_ADDRESS . "\n" .
          EMAIL_SEPARATOR . "\n" .
          zen_address_label($_SESSION['customer_id'], $_SESSION['sendto'], 0, '', "\n") . "\n";
        }
    
    
        //addresses area: For COWOA - Billing info sent if the Cart has a dollar value otherwise, do not show the billing address
        if ($_SESSION['cart']->show_total() != 0) {
        $email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" .
        EMAIL_SEPARATOR . "\n" .
        zen_address_label($_SESSION['customer_id'], $_SESSION['billto'], 0, '', "\n") . "\n\n";
        $html_msg['ADDRESS_BILLING_TITLE']   = EMAIL_TEXT_BILLING_ADDRESS;
        $html_msg['ADDRESS_BILLING_DETAIL']  = zen_address_label($_SESSION['customer_id'], $_SESSION['billto'], true, '', "<br />");
        } else{
        $html_msg['ADDRESS_BILLING_TITLE']   = '';
        $html_msg['ADDRESS_BILLING_DETAIL']  = ' <br />';    
        }
    
    
        if (is_object($GLOBALS[$_SESSION['payment']])) {
          $cc_num_display = (isset($this->info['cc_number']) && $this->info['cc_number'] != '') ? /*substr($this->info['cc_number'], 0, 4) . */ str_repeat('X', (strlen($this->info['cc_number']) - 8)) . substr($this->info['cc_number'], -4) . "\n\n" : '';
          $email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
          EMAIL_SEPARATOR . "\n";
          $payment_class = $_SESSION['payment'];
          $email_order .= $GLOBALS[$payment_class]->title . "\n\n";
          $email_order .= (isset($this->info['cc_type']) && $this->info['cc_type'] != '') ? $this->info['cc_type'] . ' ' . $cc_num_display . "\n\n" : '';
          $email_order .= ($GLOBALS[$payment_class]->email_footer) ? $GLOBALS[$payment_class]->email_footer . "\n\n" : '';
        } else {
          $email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" .
          EMAIL_SEPARATOR . "\n";
          $email_order .= PAYMENT_METHOD_GV . "\n\n";
        }
        $html_msg['PAYMENT_METHOD_TITLE']  = EMAIL_TEXT_PAYMENT_METHOD;
        $html_msg['PAYMENT_METHOD_DETAIL'] = (is_object($GLOBALS[$_SESSION['payment']]) ? $GLOBALS[$payment_class]->title : PAYMENT_METHOD_GV );
        $html_msg['PAYMENT_METHOD_FOOTER'] = (is_object($GLOBALS[$_SESSION['payment']]) && $GLOBALS[$payment_class]->email_footer != '') ? nl2br($GLOBALS[$payment_class]->email_footer) : (isset($this->info['cc_type']) && $this->info['cc_type'] != '' ? $this->info['cc_type'] . ' ' . $cc_num_display . "\n\n" : '');
    
    
        // include disclaimer
        if (defined('EMAIL_DISCLAIMER') && EMAIL_DISCLAIMER != '') $email_order .= "\n-----\n" . sprintf(EMAIL_DISCLAIMER, STORE_OWNER_EMAIL_ADDRESS) . "\n\n";
        // include copyright
        if (defined('EMAIL_FOOTER_COPYRIGHT')) $email_order .= "\n-----\n" . EMAIL_FOOTER_COPYRIGHT . "\n\n";
    
    
        while (strstr($email_order, '&nbsp;')) $email_order = str_replace('&nbsp;', ' ', $email_order);
    
    
        if ($this->customer['gender'] == "m") {
    		$html_msg['EMAIL_GREETING'] = EMAIL_GREETING_MR;
    	} else {
    		$html_msg['EMAIL_GREETING'] = EMAIL_GREETING_MS;
    	}
        $html_msg['EMAIL_FIRST_NAME'] = $this->customer['firstname'];
        $html_msg['EMAIL_LAST_NAME'] = $this->customer['lastname'];
        //  $html_msg['EMAIL_TEXT_HEADER'] = EMAIL_TEXT_HEADER;
        $html_msg['EXTRA_INFO'] = '';
        $this->notify('NOTIFY_ORDER_INVOICE_CONTENT_READY_TO_SEND', array('zf_insert_id' => $zf_insert_id, 'text_email' => $email_order, 'html_email' => $html_msg), $email_order, $html_msg);
    
    
        // BOF rl_invoice3
        $this->attachArray = array();
        if(RL_INVOICE3_SEND_PDF=='1'){
            if(!(0==$this->info['total'] && RL_INVOICE3_NOT_NULL_INVOICE==0)){     
                if( (defined('RL_INVOICE3_ORDERSTATUS')) && ($this->info['order_status'] >= RL_INVOICE3_ORDERSTATUS)) {
                    require_once(DIR_WS_INCLUDES . 'classes/class.rl_invoice3.php');
                    
                    $pdfT = new rl_invoice3($zf_insert_id, $paper['orientation'], $paper['unit'], $paper['format']);
                    $pdfT -> createPdfFile(true);
                    $this->attachArray = $pdfT->getPDFAttachments();
                    #$this->attachArray[] = array('file'=>$x, 'mime_type'=>'pdf');
                }
            }
        }
        zen_mail($this->customer['firstname'] . ' ' . $this->customer['lastname'], $this->customer['email_address'], EMAIL_TEXT_SUBJECT . EMAIL_ORDER_NUMBER_SUBJECT . $zf_insert_id, $email_order, STORE_NAME, EMAIL_FROM, $html_msg, 'checkout', $this->attachArray);
        // EOF rl_invoice3
        
        // send additional emails
        if (SEND_EXTRA_ORDER_EMAILS_TO != '') {
          $extra_info=email_collect_extra_info('','', $this->customer['firstname'] . ' ' . $this->customer['lastname'], $this->customer['email_address'], $this->customer['telephone']);
          $html_msg['EXTRA_INFO'] = $extra_info['HTML'];
    
    
          // include authcode and transaction id in admin-copy of email
          if ($GLOBALS[$_SESSION['payment']]->auth_code || $GLOBALS[$_SESSION['payment']]->transaction_id) {
            $pmt_details = ($GLOBALS[$_SESSION['payment']]->auth_code != '' ? 'AuthCode: ' . $GLOBALS[$_SESSION['payment']]->auth_code . '  ' : '') . ($GLOBALS[$_SESSION['payment']]->transaction_id != '' ?  'TransID: ' . $GLOBALS[$_SESSION['payment']]->transaction_id : '') . "\n\n";
            $email_order = $pmt_details . $email_order;
            $html_msg['EMAIL_TEXT_HEADER'] = nl2br($pmt_details) . $html_msg['EMAIL_TEXT_HEADER'];
          }
    
    
          // Add extra heading stuff via observer class
          $this->extra_header_text = '';
          $this->notify('NOTIFY_ORDER_INVOICE_CONTENT_FOR_ADDITIONAL_EMAILS', array('zf_insert_id' => $zf_insert_id, 'text_email' => $email_order, 'html_email' => $html_msg));
          $email_order = $this->extra_header_text . $email_order;
          $html_msg['EMAIL_TEXT_HEADER'] = nl2br($this->extra_header_text) . $html_msg['EMAIL_TEXT_HEADER'];
          if(method_exists($pdfT, "getPDFAttachments")){
            $this->attachArray = $pdfT->getPDFAttachments('NO');
          }
          zen_mail('', SEND_EXTRA_ORDER_EMAILS_TO, SEND_EXTRA_NEW_ORDERS_EMAILS_TO_SUBJECT . ' ' . EMAIL_TEXT_SUBJECT . EMAIL_ORDER_NUMBER_SUBJECT . $zf_insert_id,
          $email_order . $extra_info['TEXT'], STORE_NAME, EMAIL_FROM, $html_msg, 'checkout_extra', $this->attachArray, $this->customer['firstname'] . ' ' . $this->customer['lastname'], $this->customer['email_address']);
        }
        $this->notify('NOTIFY_ORDER_AFTER_SEND_ORDER_EMAIL', array($zf_insert_id, $email_order, $extra_info, $html_msg));
      }
    
    
    // TVA_INTRACOM BEGIN
    function zen_get_country_geo_zone_id($country_id){
      global $db;
      $country_geo_zone_query = "select geo_zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where zone_country_id = '" . (int)$country_id . "' limit 1";
      $country_geo_zone_id = $db->Execute($country_geo_zone_query);
    return $country_geo_zone_id->fields['geo_zone_id'];
    }
    
    
    function zen_tva_geo_tax($tax_country_id, $billing_company, $billing_tva_intracom){
      $tax_geo_zone_id = $this->zen_get_country_geo_zone_id($tax_country_id);
      if($tax_country_id == STORE_COUNTRY ) return true; // store
      if($tax_geo_zone_id == 0) return true; // no geo-zone
      if($tax_geo_zone_id != 0 && !$billing_tva_intracom) return true; // geo-zone & no vat
      elseif(!$billing_company && !$billing_tva_intracom) return false; // no vat
      else return false;
    }
    // TVA_INTRACOM END
    }


    includes/modules/order_total/ot_shipping.php

    Code:
    <?php/**
     * ot_shipping order-total module
     *
     * @package orderTotal
     * @copyright Copyright 2003-2015 Zen Cart Development Team
     * @copyright Portions Copyright 2003 osCommerce
     * @license http://www.zen-cart-pro.at/license/2_0.txt GNU Public License V2.0
     * @version $Id: ot_shipping.php for UID 2.4 2015-06-16 08:05:25Z webchills $
     */
    
    
      class ot_shipping {
        var $title, $output;
    
    
        function ot_shipping() {
          global $order, $currencies;
          $this->code = 'ot_shipping';
          $this->title = MODULE_ORDER_TOTAL_SHIPPING_TITLE;
          $this->description = MODULE_ORDER_TOTAL_SHIPPING_DESCRIPTION;
          $this->sort_order = MODULE_ORDER_TOTAL_SHIPPING_SORT_ORDER;
          unset($_SESSION['shipping_tax_description']);
          $this->output = array();
          if (MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING == 'true') {
            switch (MODULE_ORDER_TOTAL_SHIPPING_DESTINATION) {
              case 'national':
                if ($order->delivery['country_id'] == STORE_COUNTRY) $pass = true; break;
              case 'international':
                if ($order->delivery['country_id'] != STORE_COUNTRY) $pass = true; break;
              case 'both':
                $pass = true; break;
              default:
                $pass = false; break;
            }
    
    
            if ( ($pass == true) && ( ($order->info['total'] - $order->info['shipping_cost']) >= MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER) ) {
              $order->info['shipping_method'] = $this->title;
              $order->info['total'] -= $order->info['shipping_cost'];
              $order->info['shipping_cost'] = 0;
            }
          }
          $module = (isset($_SESSION['shipping']) && isset($_SESSION['shipping']['id'])) ? substr($_SESSION['shipping']['id'], 0, strpos($_SESSION['shipping']['id'], '_')) : '';
          if (is_object(($order)) && zen_not_null($order->info['shipping_method'])) {
    // TVA_INTRACOM REPLACE BEGIN
    //if ($GLOBALS[$module]->tax_class > 0) {
    $tva_tax = $order->customer['tva_intracom_tax'];
    if (!$tva_tax) {
    $shipping_tax = 0;
    $shipping_tax_description = TEXT_NO_TAX;
    } else {
    $shipping_tax = zen_get_tax_rate($GLOBALS[$module]->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
    $shipping_tax_description = zen_get_tax_description($GLOBALS[$module]->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
    // TVA_INTRACOM REPLACE END
              if (!isset($GLOBALS[$module]->tax_basis)) {
                $shipping_tax_basis = STORE_SHIPPING_TAX_BASIS;
              } else {
                $shipping_tax_basis = $GLOBALS[$module]->tax_basis;
              }
                
              if ($shipping_tax_basis == 'Billing') {
                $shipping_tax = zen_get_tax_rate($GLOBALS[$module]->tax_class, $order->billing['country']['id'], $order->billing['zone_id']);
                $shipping_tax_description = zen_get_tax_description($GLOBALS[$module]->tax_class, $order->billing['country']['id'], $order->billing['zone_id']);
              } elseif ($shipping_tax_basis == 'Shipping') {
                $shipping_tax = zen_get_tax_rate($GLOBALS[$module]->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
                $shipping_tax_description = zen_get_tax_description($GLOBALS[$module]->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
              } else {
                if (STORE_ZONE == $order->billing['zone_id']) {
                  $shipping_tax = zen_get_tax_rate($GLOBALS[$module]->tax_class, $order->billing['country']['id'], $order->billing['zone_id']);
                  $shipping_tax_description = zen_get_tax_description($GLOBALS[$module]->tax_class, $order->billing['country']['id'], $order->billing['zone_id']);
                } elseif (STORE_ZONE == $order->delivery['zone_id']) {
                  $shipping_tax = zen_get_tax_rate($GLOBALS[$module]->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
                  $shipping_tax_description = zen_get_tax_description($GLOBALS[$module]->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
                } else {
                  $shipping_tax = 0;
                }
            if ($_SESSION['shipping'] == 'free_free') {
              $order->info['shipping_method'] = FREE_SHIPPING_TITLE;
              $order->info['shipping_cost'] = 0;
            }
    
    
    // TVA_INTRACOM REPLACE BEGIN
    }
    }
    $calculated_tax = zen_calculate_tax($order->info['shipping_cost'], $shipping_tax);
    if($tva_tax){
    $order->info['tax'] += $calculated_tax;
    $order->info['tax_groups']["$shipping_tax_description"] += $calculated_tax;
    $order->info['total'] += $calculated_tax;
    }
              if (DISPLAY_PRICE_WITH_TAX == 'true') $order->info['shipping_cost'] += zen_calculate_tax($order->info['shipping_cost'], $shipping_tax);
            //}
    // UID REPLACE END
    
    
            if ($_SESSION['shipping'] == 'free_free') $order->info['shipping_method'] = FREE_SHIPPING_TITLE;
    
    
          }
        }
    
    
        function process() {
          global $order, $currencies;
    
    
            $this->output[] = array('title' => $order->info['shipping_method'] . ':',
                                    'text' => $currencies->format($order->info['shipping_cost'], true, $order->info['currency'], $order->info['currency_value']),
                                    'value' => $order->info['shipping_cost']);
        }
    
    
        function check() {
    	  global $db;
          if (!isset($this->_check)) {
            $check_query = $db->Execute("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_ORDER_TOTAL_SHIPPING_STATUS'");
            $this->_check = $check_query->RecordCount();
          }
    
    
          return $this->_check;
        }
    
    
        function keys() {
          return array('MODULE_ORDER_TOTAL_SHIPPING_STATUS', 'MODULE_ORDER_TOTAL_SHIPPING_SORT_ORDER', 'MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING', 'MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER', 'MODULE_ORDER_TOTAL_SHIPPING_DESTINATION');
        }
    
    
        function install() {
    	  global $db;
          $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('This module is installed', 'MODULE_ORDER_TOTAL_SHIPPING_STATUS', 'true', '', '6', '1','zen_cfg_select_option(array(\'true\'), ', now())");
          $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort Order', 'MODULE_ORDER_TOTAL_SHIPPING_SORT_ORDER', '200', 'Sort order of display.', '6', '2', now())");
          $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Allow Free Shipping', 'MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING', 'false', 'Do you want to allow free shipping?', '6', '3', 'zen_cfg_select_option(array(\'true\', \'false\'), ', now())");
          $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, date_added) values ('Free Shipping For Orders Over', 'MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER', '50', 'Provide free shipping for orders over the set amount.', '6', '4', 'currencies->format', now())");
          $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Provide Free Shipping For Orders Made', 'MODULE_ORDER_TOTAL_SHIPPING_DESTINATION', 'national', 'Provide free shipping for orders sent to the set destination.', '6', '5', 'zen_cfg_select_option(array(\'national\', \'international\', \'both\'), ', now())");
        }
    
    
        function remove() {
    	  global $db;
          $db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
        }
      }


    includes/modules/pages/checkout_confirmation/header_php.php

    Code:
    <?php/**
     * checkout_confirmation header_php.php
     *
     * @package page
     * @copyright Copyright 2003-2015 Zen Cart Development Team
     * @copyright Portions Copyright 2003 osCommerce
     * @license http://www.zen-cart-pro.at/license/2_0.txt GNU Public License V2.0
     * @version $Id: header_php.php 732 2015-11-27 14:29:16Z webchills $
     */
    
    
    // This should be first line of the script:
    $zco_notifier->notify('NOTIFY_HEADER_START_CHECKOUT_CONFIRMATION');
    if ($_SESSION['widerruf_downloads'] == 'notaccepted'){
     $messageStack->add('checkout_confirmation', ERROR_DOWNLOADS_REVOCATION_NOT_ACCEPTED, 'error');
    }
    
    
    // if there is nothing in the customers cart, redirect them to the shopping cart page
    if ($_SESSION['cart']->count_contents() <= 0) {
        zen_redirect(zen_href_link(FILENAME_TIME_OUT));
    }
    
    
    // if the customer is not logged on, redirect them to the login page
      if (!$_SESSION['customer_id']) {
        $_SESSION['navigation']->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT_PAYMENT));
        zen_redirect(zen_href_link(FILENAME_LOGIN, '', 'SSL'));
      } else {
        // validate customer
        if (zen_get_customer_validate_session($_SESSION['customer_id']) == false) {
          $_SESSION['navigation']->set_snapshot();
          zen_redirect(zen_href_link(FILENAME_LOGIN, '', 'SSL'));
        }
      }
    
    
    // avoid hack attempts during the checkout procedure by checking the internal cartID
    if (isset($_SESSION['cart']->cartID) && $_SESSION['cartID']) {
      if ($_SESSION['cart']->cartID != $_SESSION['cartID']) {
        zen_redirect(zen_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
      }
    }
    
    
    // if no shipping method has been selected, redirect the customer to the shipping method selection page
    if (!isset($_SESSION['shipping'])) {
      zen_redirect(zen_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
    }
    if (isset($_SESSION['shipping']['id']) && $_SESSION['shipping']['id'] == 'free_free' && $_SESSION['cart']->get_content_type() != 'virtual' && defined('MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING') && MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING == 'true' && defined('MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER') && $_SESSION['cart']->show_total() < MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER) {
      zen_redirect(zen_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
    }
    
    
    if (isset($_POST['payment'])) $_SESSION['payment'] = $_POST['payment'];
    $_SESSION['comments'] = zen_output_string_protected($_POST['comments']);
    
    
    //'checkout_payment_discounts'
    //zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));
    
    
    
    
    if ((DISPLAY_CONDITIONS_ON_CHECKOUT == 'true') && ($_SESSION['widerruf_downloads'] != 'notaccepted')){ 
      if (!isset($_POST['conditions']) || ($_POST['conditions'] != '1')) {
        $messageStack->add_session('checkout_payment', ERROR_CONDITIONS_NOT_ACCEPTED, 'error');
      }
    }
    //echo $messageStack->size('checkout_payment');
    
    
    require(DIR_WS_CLASSES . 'order.php');
    $order = new order;
    // load the selected shipping module
    require(DIR_WS_CLASSES . 'shipping.php');
    $shipping_modules = new shipping($_SESSION['shipping']);
    
    
    
    
    require(DIR_WS_CLASSES . 'order_total.php');
    $order_total_modules = new order_total;
    $order_total_modules->collect_posts();
    $order_total_modules->pre_confirmation_check();
    
    
    // load the selected payment module
    require(DIR_WS_CLASSES . 'payment.php');
    
    
    if (!isset($credit_covers)) $credit_covers = FALSE;
    
    
    //echo 'credit covers'.$credit_covers;
    
    
    if ($credit_covers) {
      unset($_SESSION['payment']);
      $_SESSION['payment'] = '';
    }
    
    
    //@debug echo ($credit_covers == true) ? 'TRUE' : 'FALSE';
    
    
    $payment_modules = new payment($_SESSION['payment']);
    $payment_modules->update_status();
    if ( ($_SESSION['payment'] == '' || !is_object($$_SESSION['payment']) ) && $credit_covers === FALSE) {
      $messageStack->add_session('checkout_payment', ERROR_NO_PAYMENT_MODULE_SELECTED, 'error');
    }
    
    
    if (is_array($payment_modules->modules)) {
      $payment_modules->pre_confirmation_check();
    }
    
    
    if ($messageStack->size('checkout_payment') > 0) {
      zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));
    }
    //echo $messageStack->size('checkout_payment');
    //die('here');
    
    
    // Stock Check
    $flagAnyOutOfStock = false;
    $stock_check = array();
    if (STOCK_CHECK == 'true') {
      for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
        if ($stock_check[$i] = zen_check_stock($order->products[$i]['id'], $order->products[$i]['qty'])) {
          $flagAnyOutOfStock = true;
        }
      }
      // Out of Stock
      if ( (STOCK_ALLOW_CHECKOUT != 'true') && ($flagAnyOutOfStock == true) ) {
        zen_redirect(zen_href_link(FILENAME_SHOPPING_CART));
      }
    }
    
    
    // update customers_referral with $_SESSION['gv_id']
    if ($_SESSION['cc_id']) {
      $discount_coupon_query = "SELECT coupon_code
                                FROM " . TABLE_COUPONS . "
                                WHERE coupon_id = :couponID";
    
    
      $discount_coupon_query = $db->bindVars($discount_coupon_query, ':couponID', $_SESSION['cc_id'], 'integer');
      $discount_coupon = $db->Execute($discount_coupon_query);
    
    
      $customers_referral_query = "SELECT customers_referral
                                   FROM " . TABLE_CUSTOMERS . "
                                   WHERE customers_id = :customersID";
    
    
      $customers_referral_query = $db->bindVars($customers_referral_query, ':customersID', $_SESSION['customer_id'], 'integer');
      $customers_referral = $db->Execute($customers_referral_query);
    
    
      // only use discount coupon if set by coupon
      if ($customers_referral->fields['customers_referral'] == '' and CUSTOMERS_REFERRAL_STATUS == 1) {
        $sql = "UPDATE " . TABLE_CUSTOMERS . "
                SET customers_referral = :customersReferral
                WHERE customers_id = :customersID";
    
    
        $sql = $db->bindVars($sql, ':customersID', $_SESSION['customer_id'], 'integer');
        $sql = $db->bindVars($sql, ':customersReferral', $discount_coupon->fields['coupon_code'], 'string');
        $db->Execute($sql);
      } else {
        // do not update referral was added before
      }
    }
    
    
    if (isset($$_SESSION['payment']->form_action_url)) {
      $form_action_url = $$_SESSION['payment']->form_action_url;
    } else {
      $form_action_url = zen_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL');
    }
    
    
    // if shipping-edit button should be overridden, do so
    $editShippingButtonLink = zen_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL');
    if (method_exists($$_SESSION['payment'], 'alterShippingEditButton')) {
      $theLink = $$_SESSION['payment']->alterShippingEditButton();
      if ($theLink) $editShippingButtonLink = $theLink;
    }
    // deal with billing address edit button
    $flagDisablePaymentAddressChange = false;
    if (isset($$_SESSION['payment']->flagDisablePaymentAddressChange)) {
      $flagDisablePaymentAddressChange = $$_SESSION['payment']->flagDisablePaymentAddressChange;
    }
    
    
    
    
    require(DIR_WS_MODULES . zen_get_module_directory('require_languages.php'));
    $breadcrumb->add(NAVBAR_TITLE_1, zen_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
    $breadcrumb->add(NAVBAR_TITLE_2);
    
    
    // This should be last line of the script:
    $zco_notifier->notify('NOTIFY_HEADER_END_CHECKOUT_CONFIRMATION');
    
    ?>

    Mein Shop verwendet: --== Zencart 1.5.5 ==--

  10. #10
    Jedi-Ritter Avatar von webchills
    Registriert seit
    30.10.2004
    Ort
    Österreich
    Beiträge
    6.846
    Themen
    94
    DANKE
    3
    Erhaltene Danke: 1.188

    Standard

    Der Fehler kommt vom UID Modul, das im aktuellen Download einen Bug in der geänderten Datei includes/modules/order_total/ot_shipping.php hat

    Ändere in includes/modules/order_total/ot_shipping.php

    ca. Zeile 75

    von

    Code:
    if ($_SESSION['shipping'] == 'free_free') {
    auf

    Code:
    if ($_SESSION['shipping']['id'] == 'free_free') {
    ca. Zeile 93

    von

    Code:
    if ($_SESSION['shipping'] == 'free_free') $order->info['shipping_method'] = FREE_SHIPPING_TITLE;
    auf

    Code:
    if ($_SESSION['shipping']['id'] == 'free_free') $order->info['shipping_method'] = FREE_SHIPPING_TITLE;
    !!! kostenloser Support ausschließlich im Forum - Nicht per Email, nicht per Telefon und nicht per PM !!!

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Versandpauschale + Gewicht nach Zonen (fixe+variable Versandkosten)
    Von wemiat im Forum Archivierte Beiträge Zen-Cart Support
    Antworten: 1
    Letzter Beitrag: 29.12.2009, 16:21
  2. 1193 Unknown system variable 'NAMES' ????
    Von farocker im Forum Archivierte Beiträge Zen-Cart Support
    Antworten: 13
    Letzter Beitrag: 08.06.2009, 17:07
  3. Suche Variable für Preis
    Von berliner im Forum Archivierte Beiträge Zen-Cart Support
    Antworten: 1
    Letzter Beitrag: 30.04.2009, 15:08
  4. Fehlermeldung "1193 Unknown system variable 'NAMES'&quo
    Von Chipsli im Forum Archivierte Beiträge Zen-Cart Support
    Antworten: 6
    Letzter Beitrag: 09.07.2008, 16:02
  5. Übersetzung Ver. 1.2.6d
    Von nicohal im Forum Archivierte Beiträge Zen-Cart Support
    Antworten: 16
    Letzter Beitrag: 01.02.2006, 22:05

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
zen-cart-pro.at
Zen Cart ist eine kostenlose unter der GPL-Lizenz veröffentlichte Open-Source Shopsoftware. Das System wird in den USA entwickelt, die amerikanische Website dazu ist www.zen-cart.com

Die deutsche Zen-Cart Version, um die es hier auf zen-cart-pro.at geht, ist eine Anpassung der amerikanischen Version an die Bedürfnisse von Onlineshopbetreibern im deutschsprachigen Raum.
Die amerikanische Zen-Cart Version berücksichtigt viele rechtliche Erfordernisse nicht, denen ein Onlineshop im deutschsprachigen Raum unterworfen ist. Daher wurde die deutsche Zen-Cart Version nicht nur bloß ins Deutsche übersetzt, sondern auch funktional auf die Anforderungen, die an Onlineshops in Deutschland, Österreich und der Schweiz gestellt werden, angepasst.

Die amerikanische Version ist extrem abgespeckt und stellt weiterführende Funktionalitäten durch zusätzliche Module bereit, die erst mühsam manuell installiert werden müssen. Zahlreiche häufig genutzte Erweiterungen und eigene Entwicklungen sind in der deutschen Zen Cart Version bereits vorinstalliert.
Die deutsche Zen-Cart Version bietet außerdem einen völlig multilingualen Adminbereich. Weitere für die deutsche Zen Cart Version angepasste Erweiterungen stehen in unserem Downloadbereich zur Verfügung.

Die deutsche Zen Cart Version wird seit 15 Jahren von einem Team von Entwicklern in Österreich und Deutschland betreut, weiterentwickelt und supportet und steht kostenlos in unserem Downloadbereich zur Verfügung.

[mehr]
Follow Us
  • zen-cart-pro-at auf Twitter
  • zen-cart-pro-at auf Github
  • zen-cart-pro-at auf SourceForge
Aktuelle Version
Zen Cart 1.5.6c deutsch
vom 01.09.2019
[Download]

unterstützen
Unterstütze die Weiterentwicklung der deutschen Zen Cart Version mit einer Spende!

Spende für die Weiterentwicklung der deutschen Zen Cart Version