Example #1
0
 public function screen()
 {
     $shipcarriers = Lookup::shipcarriers();
     $serviceareas = array('*', ShoppBaseLocale()->code());
     foreach ($shipcarriers as $c => $record) {
         if (!in_array($record->areas, $serviceareas)) {
             continue;
         }
         $carriers[$c] = $record->name;
     }
     unset($shipcarriers);
     $shipping_carriers = shopp_setting('shipping_carriers');
     if (empty($shipping_carriers)) {
         $shipping_carriers = array_keys($carriers);
     }
     $imperial = 'imperial' == ShoppBaseLocale()->units();
     $weights = $imperial ? array('oz' => Shopp::__('ounces (oz)'), 'lb' => Shopp::__('pounds (lbs)')) : array('g' => Shopp::__('gram (g)'), 'kg' => Shopp::__('kilogram (kg)'));
     $weightsmenu = menuoptions($weights, shopp_setting('weight_unit'), true);
     $dimensions = $imperial ? array('in' => Shopp::__('inches (in)'), 'ft' => Shopp::__('feet (ft)')) : array('cm' => Shopp::__('centimeters (cm)'), 'm' => Shopp::__('meters (m)'));
     $dimsmenu = menuoptions($dimensions, shopp_setting('dimension_unit'), true);
     $rates = shopp_setting('shipping_rates');
     if (!empty($rates)) {
         ksort($rates);
     }
     $Shopp = Shopp::object();
     $Shipping = $Shopp->Shipping;
     $Shipping->settings();
     // Load all installed shipping modules for settings UIs
     $methods = $Shopp->Shipping->methods;
     $edit = false;
     if (isset($_REQUEST['id'])) {
         $edit = (int) $_REQUEST['id'];
     }
     $active = shopp_setting('active_shipping');
     if (!$active) {
         $active = array();
     }
     if (isset($_POST['module'])) {
         $setting = false;
         $module = isset($_POST['module']) ? $_POST['module'] : false;
         $id = isset($_POST['id']) ? $_POST['id'] : false;
         if ($id == $module) {
             if (isset($_POST['settings'])) {
                 shopp_set_formsettings();
             }
             /** Save shipping service settings **/
             $active[$module] = true;
             shopp_set_setting('active_shipping', $active);
             $updated = __('Shipping settings saved.', 'Shopp');
             // Cancel editing if saving
             if (isset($_POST['save'])) {
                 unset($_REQUEST['id']);
             }
             $Errors = ShoppErrors();
             do_action('shopp_verify_shipping_services');
             if ($Errors->exist()) {
                 // Get all addon related errors
                 $failures = $Errors->level(SHOPP_ADDON_ERR);
                 if (!empty($failures)) {
                     $updated = __('Shipping settings saved but there were errors: ', 'Shopp');
                     foreach ($failures as $error) {
                         $updated .= '<p>' . $error->message(true, true) . '</p>';
                     }
                 }
             }
         } else {
             /** Save shipping calculator settings **/
             $setting = $_POST['id'];
             if (empty($setting)) {
                 // Determine next available setting ID
                 $index = 0;
                 if (is_array($active[$module])) {
                     $index = count($active[$module]);
                 }
                 $setting = "{$module}-{$index}";
             }
             // Cancel editing if saving
             if (isset($_POST['save'])) {
                 unset($_REQUEST['id']);
             }
             $setting_module = $setting;
             $id = 0;
             if (false !== strpos($setting, '-')) {
                 list($setting_module, $id) = explode('-', $setting);
             }
             // Prevent fishy stuff from happening
             if ($module != $setting_module) {
                 $module = false;
             }
             // Save shipping calculator settings
             $Shipper = $Shipping->get($module);
             if ($Shipper && isset($_POST[$module])) {
                 $Shipper->setting($id);
                 $_POST[$module]['label'] = stripslashes($_POST[$module]['label']);
                 // Sterilize $values
                 foreach ($_POST[$module]['table'] as $i => &$row) {
                     if (isset($row['rate'])) {
                         $row['rate'] = Shopp::floatval($row['rate']);
                     }
                     if (!isset($row['tiers'])) {
                         continue;
                     }
                     foreach ($row['tiers'] as &$tier) {
                         if (isset($tier['rate'])) {
                             $tier['rate'] = Shopp::floatval($tier['rate']);
                         }
                     }
                 }
                 // Delivery estimates: ensure max equals or exceeds min
                 ShippingFramework::sensibleestimates($_POST[$module]['mindelivery'], $_POST[$module]['maxdelivery']);
                 shopp_set_setting($Shipper->setting, $_POST[$module]);
                 if (!array_key_exists($module, $active)) {
                     $active[$module] = array();
                 }
                 $active[$module][(int) $id] = true;
                 shopp_set_setting('active_shipping', $active);
                 $this->notice(Shopp::__('Shipping settings saved.'));
             }
         }
     }
     $postcodes = ShoppLookup::postcodes();
     foreach ($postcodes as &$postcode) {
         $postcode = !empty($postcode);
     }
     $lookup = array('regions' => array_merge(array('*' => Shopp::__('Anywhere')), ShoppLookup::regions()), 'regionmap' => ShoppLookup::regions('id'), 'countries' => ShoppLookup::countries(), 'areas' => ShoppLookup::country_areas(), 'zones' => ShoppLookup::country_zones(), 'postcodes' => $postcodes);
     $ShippingTemplates = new TemplateShippingUI();
     add_action('shopp_shipping_module_settings', array($Shipping, 'templates'));
     $Table = $this->table;
     $Table->prepare_items();
     include $this->ui('shipping.php');
 }
Example #2
0
 public function shiprates()
 {
     if (!current_user_can('shopp_settings_shipping')) {
         wp_die(__('You do not have sufficient permissions to access this page.'));
     }
     $Shopp = Shopp::object();
     $Shipping = $Shopp->Shipping;
     $Shipping->settings();
     // Load all installed shipping modules for settings UIs
     $methods = $Shopp->Shipping->methods;
     $edit = false;
     if (isset($_REQUEST['id'])) {
         $edit = (int) $_REQUEST['id'];
     }
     $active = shopp_setting('active_shipping');
     if (!$active) {
         $active = array();
     }
     if (!empty($_GET['delete'])) {
         check_admin_referer('shopp_delete_shiprate');
         $delete = $_GET['delete'];
         $index = false;
         if (strpos($delete, '-') !== false) {
             list($delete, $index) = explode('-', $delete);
         }
         if (array_key_exists($delete, $active)) {
             if (is_array($active[$delete])) {
                 if (array_key_exists($index, $active[$delete])) {
                     unset($active[$delete][$index]);
                     if (empty($active[$delete])) {
                         unset($active[$delete]);
                     }
                 }
             } else {
                 unset($active[$delete]);
             }
             $updated = __('Shipping method setting removed.', 'Shopp');
             shopp_set_setting('active_shipping', $active);
         }
     }
     if (isset($_POST['module'])) {
         check_admin_referer('shopp-settings-shiprate');
         $setting = false;
         $module = isset($_POST['module']) ? $_POST['module'] : false;
         $id = isset($_POST['id']) ? $_POST['id'] : false;
         if ($id == $module) {
             if (isset($_POST['settings'])) {
                 shopp_set_formsettings();
             }
             /** Save shipping service settings **/
             $active[$module] = true;
             shopp_set_setting('active_shipping', $active);
             $updated = __('Shipping settings saved.', 'Shopp');
             // Cancel editing if saving
             if (isset($_POST['save'])) {
                 unset($_REQUEST['id']);
             }
             $Errors = ShoppErrors();
             do_action('shopp_verify_shipping_services');
             if ($Errors->exist()) {
                 // Get all addon related errors
                 $failures = $Errors->level(SHOPP_ADDON_ERR);
                 if (!empty($failures)) {
                     $updated = __('Shipping settings saved but there were errors: ', 'Shopp');
                     foreach ($failures as $error) {
                         $updated .= '<p>' . $error->message(true, true) . '</p>';
                     }
                 }
             }
         } else {
             /** Save shipping calculator settings **/
             $setting = $_POST['id'];
             if (empty($setting)) {
                 // Determine next available setting ID
                 $index = 0;
                 if (is_array($active[$module])) {
                     $index = count($active[$module]);
                 }
                 $setting = "{$module}-{$index}";
             }
             // Cancel editing if saving
             if (isset($_POST['save'])) {
                 unset($_REQUEST['id']);
             }
             $setting_module = $setting;
             $id = 0;
             if (false !== strpos($setting, '-')) {
                 list($setting_module, $id) = explode('-', $setting);
             }
             // Prevent fishy stuff from happening
             if ($module != $setting_module) {
                 $module = false;
             }
             // Save shipping calculator settings
             $Shipper = $Shipping->get($module);
             if ($Shipper && isset($_POST[$module])) {
                 $Shipper->setting($id);
                 $_POST[$module]['label'] = stripslashes($_POST[$module]['label']);
                 // Sterilize $values
                 foreach ($_POST[$module]['table'] as $i => &$row) {
                     if (isset($row['rate'])) {
                         $row['rate'] = Shopp::floatval($row['rate']);
                     }
                     if (!isset($row['tiers'])) {
                         continue;
                     }
                     foreach ($row['tiers'] as &$tier) {
                         if (isset($tier['rate'])) {
                             $tier['rate'] = Shopp::floatval($tier['rate']);
                         }
                     }
                 }
                 // Delivery estimates: ensure max equals or exceeds min
                 ShippingFramework::sensibleestimates($_POST[$module]['mindelivery'], $_POST[$module]['maxdelivery']);
                 shopp_set_setting($Shipper->setting, $_POST[$module]);
                 if (!array_key_exists($module, $active)) {
                     $active[$module] = array();
                 }
                 $active[$module][(int) $id] = true;
                 shopp_set_setting('active_shipping', $active);
                 $this->notice(Shopp::__('Shipping settings saved.'));
             }
         }
     }
     $Shipping->settings();
     // Load all installed shipping modules for settings UIs
     $Shipping->ui();
     // Setup setting UIs
     $installed = array();
     $shiprates = array();
     // Registry for activated shipping rate modules
     $settings = array();
     // Registry of loaded settings for table-based shipping rates for JS
     foreach ($Shipping->active as $name => $module) {
         if (version_compare($Shipping->modules[$name]->since, '1.2') == -1) {
             continue;
         }
         // Skip 1.1 modules, they are incompatible
         $default_name = strtolower($name);
         $fullname = $module->methods();
         $installed[$name] = $fullname;
         if ($module->ui->tables) {
             $defaults[$default_name] = $module->ui->settings();
             $defaults[$default_name]['name'] = $fullname;
             $defaults[$default_name]['label'] = __('Shipping Method', 'Shopp');
         }
         if (array_key_exists($name, $active)) {
             $ModuleSetting = $active[$name];
         } else {
             continue;
         }
         // Not an activated shipping module, go to the next one
         // Setup shipping service shipping rate entries and settings
         if (!is_array($ModuleSetting)) {
             $shiprates[$name] = $name;
             continue;
         }
         // Setup shipping calcualtor shipping rate entries and settings
         foreach ($ModuleSetting as $id => $m) {
             $setting = "{$name}-{$id}";
             $shiprates[$setting] = $name;
             $settings[$setting] = shopp_setting($setting);
             $settings[$setting]['id'] = $setting;
             $settings[$setting] = array_merge($defaults[$default_name], $settings[$setting]);
             if (isset($settings[$setting]['table'])) {
                 usort($settings[$setting]['table'], array('ShippingFramework', '_sorttier'));
                 foreach ($settings[$setting]['table'] as &$r) {
                     if (isset($r['tiers'])) {
                         usort($r['tiers'], array('ShippingFramework', '_sorttier'));
                     }
                 }
             }
         }
     }
     if (isset($_REQUEST['id'])) {
         $edit = $_REQUEST['id'];
         $id = false;
         if (strpos($edit, '-') !== false) {
             list($module, $id) = explode('-', $edit);
         } else {
             $module = $edit;
         }
         if (isset($Shipping->active[$module])) {
             $Shipper = $Shipping->get($module);
             if (!$Shipper->singular) {
                 $Shipper->setting($id);
                 $Shipper->initui($Shipping->modules[$module]->name);
                 // Re-init setting UI with loaded settings
             }
             $editor = $Shipper->ui();
         }
     }
     asort($installed);
     $countrydata = Lookup::countries();
     $countries = $regionmap = $postcodes = array();
     $postcodedata = Lookup::postcodes();
     foreach ($countrydata as $code => $country) {
         $countries[$code] = $country['name'];
         if (!isset($regionmap[$country['region']])) {
             $regionmap[$country['region']] = array();
         }
         $regionmap[$country['region']][] = $code;
         if (isset($postcodedata[$code])) {
             if (!isset($postcodes[$code])) {
                 $postcodes[$code] = array();
             }
             $postcodes[$code] = true;
         }
     }
     unset($countrydata);
     unset($postcodedata);
     $lookup = array('regions' => array_merge(array('*' => __('Anywhere', 'Shopp')), Lookup::regions()), 'regionmap' => $regionmap, 'countries' => $countries, 'areas' => Lookup::country_areas(), 'zones' => Lookup::country_zones(), 'postcodes' => $postcodes);
     $ShippingTemplates = new TemplateShippingUI();
     add_action('shopp_shipping_module_settings', array($Shipping, 'templates'));
     include $this->ui('shiprates.php');
 }
Example #3
0
 /**
  * Recalculates order processing time minimum and maximums across all items
  *
  * @author Jonathan Davis
  * @since 1.3
  *
  * @return void
  **/
 public function processtime(ShoppCartItem $Item)
 {
     if (isset($Item->processing['min'])) {
         $this->processing['min'] = ShippingFramework::daytimes($this->processing['min'], $Item->processing['min']);
     }
     if (isset($Item->processing['max'])) {
         $this->processing['max'] = ShippingFramework::daytimes($this->processing['max'], $Item->processing['max']);
     }
 }
Example #4
0
 /**
  * If the minimum delivery time exceeds the maximum it is changed to be equal instead.
  *
  * @param &$min
  * @param &$max
  */
 public static function sensibleestimates(&$min, &$max)
 {
     $minval = (int) str_replace('d', '', ShippingFramework::daytimes($min));
     $maxval = (int) str_replace('d', '', ShippingFramework::daytimes($max));
     if ($minval > $maxval) {
         $min = $max;
     }
 }