You are here

function uc_shipping_zones_admin_validate in Ubercart Global Quote 6

Same name and namespace in other branches
  1. 7 uc_shipping_zones/uc_shipping_zones_admin.inc \uc_shipping_zones_admin_validate()

File

uc_shipping_zones/uc_shipping_zones_admin.inc, line 152
Administration pages for uc_shipping_zones

Code

function uc_shipping_zones_admin_validate($form, &$form_state) {
  $values = $form_state['values'];
  if (!is_array($values['zones']) || !array_search(array(
    'delete' => 1,
  ), $values['zones'])) {
    if (!$values['zone']['name']) {
      form_set_error('name', t('Enter a name for the zone'));
    }
    if (!is_array($values['zone']['country']) || count($values['zone']['country']) < 1) {
      form_set_error('country', t('You must select a country for your zone'));
    }
    else {

      // Check overlapping zones.
      $zones = uc_shipping_zones_get();
      $cerror = array();
      $rerror = array();
      if (isset($values['zone']['region'][''])) {
        $values['zone']['region'] = NULL;
      }
      foreach ($zones as $zone) {

        // Not the same outdated zone
        if (!$values['zone']['zid'] || $values['zone']['zid'] != $zone->zid) {
          $check_regions = FALSE;

          // Check for overlapping countries
          foreach ($values['zone']['country'] as $vc) {

            // Country defined in another zone
            if (in_array($vc, explode('|', $zone->countries))) {

              // all regions
              if ($values['zone']['region'] == NULL || $values['zone']['region'] == NULL) {
                $cerror[] = $vc;
              }
              else {
                $check_regions = TRUE;
              }
            }
          }

          // Check for region overlapping
          if ($check_regions) {
            foreach ($values['zone']['region'] as $vr) {
              if (in_array($vr, explode('|', $zone->regions))) {
                $rerror[] = $vr;
              }
            }
          }
        }
      }
      if (count($cerror)) {
        form_set_error('country', t('The following countries are selected in other zones: %list', array(
          '%list' => implode(', ', $cerror),
        )));
      }
      if (count($rerror)) {
        form_set_error('region', t('The following regions are selected in other zones: %list', array(
          '%list' => implode(', ', $rerror),
        )));
      }
    }
  }
}