Hi guys,

I want to set up 4 flat rate shipping modules, and assign each one to a zone (2 flat fees for UK (Express and Standard), another for Europe, another for the rest of the world). I've created the appropriate zones and now need to clone the flat.php module 4 times and assign a zone to each one. I did so, following the tutorials and it doesn't work.

Here is an example (my flat_uk_express.php module):

File: /includes/modules/shipping/flat_uk_express.php
Code:
<?php
//
// +----------------------------------------------------------------------+
// |zen-cart Open Source E-commerce                                       |
// +----------------------------------------------------------------------+
// | Copyright (c) 2004 The zen-cart developers                           |
// |                                                                      |
// | http://www.zen-cart.com/index.php                                    |
// |                                                                      |
// | Portions Copyright (c) 2003 osCommerce                               |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.0 of the GPL license,       |
// | that is bundled with this package in the file LICENSE, and is        |
// | available through the world-wide-web at the following url:           |
// | http://www.zen-cart.com/license/2_0.txt.                             |
// | If you did not receive a copy of the zen-cart license and are unable |
// | to obtain it through the world-wide-web, please send a note to       |
// | [email protected] so we can mail you a copy immediately.          |
// +----------------------------------------------------------------------+
// $Id: flat_uk_express.php 1969 2005-09-13 06:57:21Z drbyte $
//

  class flat_uk_express {
    var $code, $title, $description, $icon, $enabled;

// class constructor
    function flat_uk_express() {
      global $order, $db;

      $this->code = 'flat_uk_express';
      $this->title = MODULE_SHIPPING_FLAT_UK_EXPRESS_TEXT_TITLE;
      $this->description = MODULE_SHIPPING_FLAT_UK_EXPRESS_TEXT_DESCRIPTION;
      $this->sort_order = MODULE_SHIPPING_FLAT_UK_EXPRESS_SORT_ORDER;
      $this->icon = '';
      $this->tax_class = MODULE_SHIPPING_FLAT_UK_EXPRESS_TAX_CLASS;
      $this->tax_basis = MODULE_SHIPPING_FLAT_UK_EXPRESS_TAX_BASIS;

      // disable only when entire cart is free shipping
      if (zen_get_shipping_enabled($this->code)) {
        $this->enabled = ((MODULE_SHIPPING_FLAT_UK_EXPRESS_STATUS == 'True') ? true : false);
      }

      if ( ($this->enabled == true) && ((int)MODULE_SHIPPING_FLAT_UK_EXPRESS_ZONE > 0) ) {
        $check_flag = false;
        $check = $db->Execute("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_SHIPPING_FLAT_UK_EXPRESS_ZONE . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id");
        while (!$check->EOF) {
          if ($check->fields['zone_id'] < 1) {
            $check_flag = true;
            break;
          } elseif ($check->fields['zone_id'] == $order->delivery['zone_id']) {
            $check_flag = true;
            break;
          }
          $check->MoveNext();
        }

        if ($check_flag == false) {
          $this->enabled = false;
        }
      }
    }

// class methods
    function quote($method = '') {
      global $order;

      $this->quotes = array('id' => $this->code,
                            'module' => MODULE_SHIPPING_FLAT_UK_EXPRESS_TEXT_TITLE,
                            'methods' => array(array('id' => $this->code,
                                                     'title' => MODULE_SHIPPING_FLAT_UK_EXPRESS_TEXT_WAY,
                                                     'cost' => MODULE_SHIPPING_FLAT_UK_EXPRESS_COST)));
      if ($this->tax_class > 0) {
        $this->quotes['tax'] = zen_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
      }

      if (zen_not_null($this->icon)) $this->quotes['icon'] = zen_image($this->icon, $this->title);

      return $this->quotes;
    }

    function check() {
      global $db;
      if (!isset($this->_check)) {
        $check_query = $db->Execute("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_FLAT_UK_EXPRESS_STATUS'");
        $this->_check = $check_query->RecordCount();
      }
      return $this->_check;
    }

    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 ('Enable Flat Shipping', 'MODULE_SHIPPING_FLAT_UK_EXPRESS_STATUS', 'True', 'Do you want to offer flat_uk_express rate shipping?', '6', '0', '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, date_added) values ('Shipping Cost', 'MODULE_SHIPPING_FLAT_UK_EXPRESS_COST', '5.00', 'The shipping cost for all orders using this shipping method.', '6', '0', now())");
      $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Tax Class', 'MODULE_SHIPPING_FLAT_UK_EXPRESS_TAX_CLASS', '0', 'Use the following tax class on the shipping fee.', '6', '0', 'zen_get_tax_class_title', 'zen_cfg_pull_down_tax_classes(', 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 ('Tax Basis', 'MODULE_SHIPPING_FLAT_UK_EXPRESS_TAX_BASIS', 'Shipping', 'On what basis is Shipping Tax calculated. Options are<br />Shipping - Based on customers Shipping Address<br />Billing Based on customers Billing address<br />Store - Based on Store address if Billing/Shipping Zone equals Store zone', '6', '0', 'zen_cfg_select_option(array(\'Shipping\', \'Billing\', \'Store\'), ', now())");
      $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Shipping Zone', 'MODULE_SHIPPING_FLAT_UK_EXPRESS_ZONE', '0', 'If a zone is selected, only enable this shipping method for that zone.', '6', '0', 'zen_get_zone_class_title', 'zen_cfg_pull_down_zone_classes(', 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_SHIPPING_FLAT_UK_EXPRESS_SORT_ORDER', '0', 'Sort order of display.', '6', '0', now())");
    }

    function remove() {
      global $db;
      $db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");
    }

    function keys() {
      return array('MODULE_SHIPPING_FLAT_UK_EXPRESS_STATUS', 'MODULE_SHIPPING_FLAT_UK_EXPRESS_COST', 'MODULE_SHIPPING_FLAT_UK_EXPRESS_TAX_CLASS', 'MODULE_SHIPPING_FLAT_UK_EXPRESS_TAX_BASIS', 'MODULE_SHIPPING_FLAT_UK_EXPRESS_ZONE', 'MODULE_SHIPPING_FLAT_UK_EXPRESS_SORT_ORDER');
    }
  }
?>
/includs/languages/english/module/shipping/flat_uk_express.php:

Code:
<?php
//
// +----------------------------------------------------------------------+
// |zen-cart Open Source E-commerce                                       |
// +----------------------------------------------------------------------+
// | Copyright (c) 2003 The zen-cart developers                           |
// |                                                                      |   
// | http://www.zen-cart.com/index.php                                    |   
// |                                                                      |   
// | Portions Copyright (c) 2003 osCommerce                               |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.0 of the GPL license,       |
// | that is bundled with this package in the file LICENSE, and is        |
// | available through the world-wide-web at the following url:           |
// | http://www.zen-cart.com/license/2_0.txt.                             |
// | If you did not receive a copy of the zen-cart license and are unable |
// | to obtain it through the world-wide-web, please send a note to       |
// | [email protected] so we can mail you a copy immediately.          |
// +----------------------------------------------------------------------+
// $Id: flat_uk_express.php 1969 2005-09-13 06:57:21Z drbyte $
//


define('MODULE_SHIPPING_FLAT_UK_EXPRESS_TEXT_TITLE', 'Express shipping within UK');
define('MODULE_SHIPPING_FLAT_UK_EXPRESS_TEXT_DESCRIPTION', 'Express UK Flat Rate');
define('MODULE_SHIPPING_FLAT_UK_EXPRESS_TEXT_WAY', 'Total Shipping Cost');
?>
Now, when I enable it in my shipping module config, the status icon goes green, but when I purchase something and choose "Express UK Flat Rate" on "Step 1 of 3 - Delivery options", it just submits back to the same page (Step 1 of 3 - Delivery options). If I then assign a zone to this shipping module, the status icon goes to orange and it still doesn't work.

I have tried just the standard flat shipping rate module and it works fine, but none of these cloned ones seem to work. Have I done something wrong?

Please ask questions if anything from my situation is unclear.

Thanks again for your help!