You are here

function uc_shipping_zones_get in Ubercart Global Quote 7

Same name and namespace in other branches
  1. 6 uc_shipping_zones/uc_shipping_zones.module \uc_shipping_zones_get()

Get shipping zones

Parameters

$country: country name or code (optional)

$region: region name or id (optional)

Return value

an array containing the shipping zones.

2 calls to uc_shipping_zones_get()
uc_global_quote_quote in ./uc_global_quote.module
Standard callback to return a shipping rate via the flat rate method.
uc_shipping_zones_admin_validate in uc_shipping_zones/uc_shipping_zones_admin.inc

File

uc_shipping_zones/uc_shipping_zones.module, line 52
Provides zone definitions for uc_global_quote

Code

function uc_shipping_zones_get($country = NULL, $region = NULL) {
  if (!$country) {
    $r = db_query("SELECT * FROM {uc_shipping_zones} ORDER BY name")
      ->fetchAll();
  }
  else {

    // Get country name or id
    $c = new stdClass();
    if (is_int($country)) {
      $c->name = uc_country_get_by_id($country);
      $c->id = $country;
    }
    else {
      $c->name = $country;
      $c->id = db_query("SELECT country_id FROM {uc_countries} WHERE country_name = :country", array(
        ':country' => $country,
      ))
        ->fetchObject()->country_id;
    }

    // Get region name or id
    if (is_int($region)) {
      $r = new stdClass();
      $r->name = uc_zone_get_by_id($region);
      $r->id = $region;
    }
    else {
      $r->name = $region;
      $r->id = db_query("SELECT zone_id FROM {uc_zones} WHERE zone_name = :region", array(
        ':region' => $region,
      ))
        ->fetchObject()->zone_id;
    }

    // Name + id
    $cnid = '%' . $c->name . ',' . $c->id . '%';
    $rnid = '%' . $r->name . ',' . $r->id . '%';

    // Willcard countries without regions
    if ($region < 1 && !db_query("SELECT zone_id FROM {uc_zones} WHERE zone_country_id = :cid", array(
      ':cid' => $c->id,
    ))
      ->rowCount()) {
      $row = db_query("SELECT * FROM {uc_shipping_zones} WHERE countries LIKE :cnid", array(
        ':cnid' => $cnid,
      ))
        ->fetchObject();
    }
    else {
      $row = db_query("SELECT * FROM {uc_shipping_zones} WHERE countries LIKE :cnid AND (regions LIKE :rnid OR (regions IS NULL OR regions = ''))\n                             ORDER BY name", array(
        ':cnid' => $cnid,
        ':rnid' => $rnid,
      ))
        ->fetchObject();
    }
    return $row;
  }
  return $r;
}