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'); }
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'); }
/** * 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']); } }
/** * 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; } }