Exemple #1
0
 public static function getAllZonesByAddress(UserAddress $address, $type = 0)
 {
     if (!$address->isLoaded()) {
         $address->load();
     }
     $zones = array();
     // get zones by state
     if ($address->state->get()) {
         $f = new ARSelectFilter(new EqualsCond(new ARFieldHandle('DeliveryZone', 'isEnabled'), true));
         $f->mergeCondition(new EqualsCond(new ARFieldHandle('DeliveryZoneState', 'stateID'), $address->state->get()->getID()));
         $f->mergeCondition(new InCond(new ARFieldHandle('DeliveryZone', 'type'), array(DeliveryZone::BOTH_RATES, $type)));
         $s = ActiveRecordModel::getRecordSet('DeliveryZoneState', $f, ActiveRecordModel::LOAD_REFERENCES);
         foreach ($s as $zoneState) {
             $zones[] = $zoneState->deliveryZone->get();
         }
     }
     // get zones by country
     if (!$zones) {
         $f = new ARSelectFilter(new EqualsCond(new ARFieldHandle('DeliveryZone', 'isEnabled'), true));
         $f->mergeCondition(new EqualsCond(new ARFieldHandle('DeliveryZoneCountry', 'countryCode'), $address->countryID->get()));
         $f->mergeCondition(new InCond(new ARFieldHandle('DeliveryZone', 'type'), array(DeliveryZone::BOTH_RATES, $type)));
         $s = ActiveRecordModel::getRecordSet('DeliveryZoneCountry', $f, array('DeliveryZone'));
         foreach ($s as $zone) {
             $zones[] = $zone->deliveryZone->get();
         }
     }
     $maskPoints = array();
     // leave zones that match masks
     foreach ($zones as $key => $zone) {
         $match = $zone->getMaskMatch($address);
         if (!$match) {
             unset($zones[$key]);
         } else {
             $maskPoints[$key] = $match;
         }
     }
     if ($maskPoints) {
         arsort($maskPoints);
         // this should really be a one-liner, but not today
         $ret = array();
         foreach (array_keys($maskPoints) as $key) {
             $ret[] = $zones[$key];
         }
         return $ret;
     }
     return $zones;
 }