public function screen() { if (!current_user_can('shopp_settings')) { wp_die(__('You do not have sufficient permissions to access this page.')); } // Welcome screen handling if (!empty($_POST['setup'])) { shopp_set_setting('display_welcome', 'off'); } $countries = ShoppLookup::countries(); $basecountry = ShoppBaseLocale()->country(); $countrymenu = Shopp::menuoptions($countries, $basecountry, true); $basestates = ShoppLookup::country_zones(array($basecountry)); $statesmenu = ''; if (!empty($basestates)) { $statesmenu = Shopp::menuoptions($basestates[$basecountry], ShoppBaseLocale()->state(), true); } $targets = shopp_setting('target_markets'); if (is_array($targets)) { $targets = array_map('stripslashes', $targets); } if (!$targets) { $targets = array(); } $zones_ajaxurl = wp_nonce_url(admin_url('admin-ajax.php'), 'wp_ajax_shopp_country_zones'); include $this->ui('setup.php'); }
public function updates() { $form = $this->form(); if (empty($form)) { return; } do_action('shopp_save_payment_settings'); $Gateways = Shopp::object()->Gateways; $gateways = array_keys($Gateways->activated()); $gateway = key($form); // Handle Multi-instance payment systems $indexed = false; if (preg_match('/\\[(\\d+)\\]/', $gateway, $matched)) { $indexed = '-' . $matched[1]; $gateway = str_replace($matched[0], '', $gateway); } // Merge the existing gateway settings with the newly updated settings if (isset($Gateways->active[$gateway])) { $Gateway = $Gateways->active[$gateway]; // Cannot use array_merge() because it adds numeric index values instead of overwriting them $this->form[$gateway] = (array) $this->form[$gateway] + (array) $Gateway->settings; } // Add newly activated gateways if (!in_array($gateway . $indexed, $gateways)) { $gateways[] = $gateway . $indexed; shopp_set_setting('active_gateways', join(',', $gateways)); } // Save the gateway settings shopp_set_formsettings(); $this->notice(Shopp::__('Shopp payments settings saved.')); Shopp::redirect(add_query_arg()); }
public function welcome() { $Shopp = Shopp::object(); include $this->ui('welcome.php'); // Displayed the welcome, turn display_welcome flag off shopp_set_setting('display_welcome', 'off'); return true; }
public function __construct() { $this->purchase_cols = ShoppPurchase::exportcolumns(); $this->purchased_cols = ShoppPurchased::exportcolumns(); $this->defined = array_merge($this->purchase_cols, $this->purchased_cols); $this->sitename = get_bloginfo('name'); $this->headings = shopp_setting('purchaselog_headers') == "on"; $this->selected = shopp_setting('purchaselog_columns'); $this->date_format = get_option('date_format'); $this->time_format = get_option('time_format'); shopp_set_setting('purchaselog_lastexport', current_time('timestamp')); }
/** * Displays the General Settings screen and processes updates * * @author Jonathan Davis * @since 1.0 * * @return void **/ public function setup() { if (!current_user_can('shopp_settings')) { wp_die(__('You do not have sufficient permissions to access this page.')); } // Welcome screen handling if (!empty($_POST['setup'])) { $_POST['settings']['display_welcome'] = 'off'; shopp_set_formsettings(); } $country = isset($_POST['settings']) && isset($_POST['settings']['base_operations']) ? $_POST['settings']['base_operations']['country'] : ''; $countries = array(); $countrydata = Lookup::countries(); $country_zones = Lookup::country_zones(); foreach ($countrydata as $iso => $c) { if ($country == $iso) { $base_region = $c['region']; } $countries[$iso] = $c['name']; } // Save settings if (!empty($_POST['save']) && isset($_POST['settings'])) { check_admin_referer('shopp-setup'); if (isset($_POST['settings']['base_operations'])) { $baseop =& $_POST['settings']['base_operations']; $zone = isset($baseop['zone']) && isset($country_zones[$country]) && isset($country_zones[$country][$baseop['zone']]) ? $baseop['zone'] : false; if (isset($countrydata[$country])) { $baseop = $countrydata[$country]; } $baseop['country'] = $country; $baseop['zone'] = $zone; $baseop['currency']['format'] = scan_money_format($baseop['currency']['format']); if (is_array($baseop['currency']['format'])) { $fields = array_keys($baseop['currency']['format']); foreach ($fields as $field) { if (isset($baseop['currency'][$field])) { $baseop['currency']['format'][$field] = $baseop['currency'][$field]; } } } shopp_set_setting('tax_inclusive', in_array($country, Lookup::country_inclusive_taxes()) ? 'on' : 'off'); } if (!isset($_POST['settings']['target_markets'])) { asort($_POST['settings']['target_markets']); } shopp_set_formsettings(); $updated = __('Shopp settings saved.', 'Shopp'); } $operations = shopp_setting('base_operations'); if (isset($country_zones[$operations['country']])) { $zones = $country_zones[$operations['country']]; } $targets = shopp_setting('target_markets'); if (is_array($targets)) { $targets = array_map('stripslashes', $targets); } if (!$targets) { $targets = array(); } include $this->ui('setup.php'); }
/** * Setup the module for runtime * * Auto-loads settings for the module and setups defaults * * @author Jonathan Davis * @since 1.1 * * @return void **/ public function __construct() { $this->module = get_class($this); $this->session = ShoppShopping()->session; $this->Order = ShoppOrder(); if ('ShoppFreeOrder' != $this->module) { // There are no settings for ShoppFreeOrder $this->settings = shopp_setting($this->module); // @todo Remove legacy gateway settings migrations // Attempt to copy old settings if this is a new prefixed gateway class if (empty($this->settings) && false !== strpos($this->module, 'Shopp')) { $legacy = substr($this->module, 5); $this->settings = shopp_setting($legacy); if (!empty($this->settings)) { shopp_set_setting($this->module, $this->settings); } } } if (!isset($this->settings['label']) && $this->cards) { $this->settings['label'] = __('Credit Card', 'Shopp'); } $this->baseop = ShoppBaseLocale()->settings(); $this->currency = ShoppBaseCurrency()->code(); $this->precision = ShoppBaseCurrency()->precision(); $this->_loadcards(); $gateway = GatewayModules::hookname($this->module); add_action('shopp_init', array($this, 'myactions'), 30); add_action('shopp_' . $gateway . '_refunded', array($this, 'cancelorder')); if ($this->authonly) { add_filter('shopp_purchase_order_' . $gateway . '_processing', create_function('', 'return "auth";')); } elseif ($this->saleonly) { add_filter('shopp_purchase_order_' . $gateway . '_processing', create_function('', 'return "sale";')); } }
protected function uninstalled($module) { if (($detected = shopp_setting(self::MODULES_SETTING)) === false) { return; } if (isset($detected[$module])) { unset($detected[$module]); shopp_set_setting(self::MODULES_SETTING, $detected); } }
public function advanced() { if (!current_user_can('shopp_settings_system')) { wp_die(__('You do not have sufficient permissions to access this page.')); } if (!empty($_POST['save'])) { check_admin_referer('shopp-system-advanced'); if (!isset($_POST['settings']['error_notifications'])) { $_POST['settings']['error_notifications'] = array(); } shopp_set_formsettings(); // Reinitialize Error System ShoppErrors()->reporting((int) shopp_setting('error_logging')); ShoppErrorLogging()->loglevel((int) shopp_setting('error_logging')); ShoppErrorNotification()->setup(); if (isset($_POST['shopp_services_plugins']) && $this->helper_installed()) { add_option('shopp_services_plugins'); // Add if it doesn't exist update_option('shopp_services_plugins', $_POST['shopp_services_plugins']); } $this->notice(Shopp::__('Advanced settings saved.')); } elseif (!empty($_POST['rebuild'])) { check_admin_referer('shopp-system-advanced'); $assets = ShoppDatabaseObject::tablename(ProductImage::$table); $query = "DELETE FROM {$assets} WHERE context='image' AND type='image'"; if (sDB::query($query)) { $this->notice(Shopp::__('All cached images have been cleared.')); } } elseif (!empty($_POST['resum'])) { check_admin_referer('shopp-system-advanced'); $summaries = ShoppDatabaseObject::tablename(ProductSummary::$table); $query = "UPDATE {$summaries} SET modified='" . ProductSummary::RECALCULATE . "'"; if (sDB::query($query)) { $this->notice(Shopp::__('Product summaries are set to recalculate.')); } } elseif (isset($_POST['shopp_services_helper'])) { check_admin_referer('shopp-system-advanced'); $plugin = 'ShoppServices.php'; $source = SHOPP_PATH . "/core/library/{$plugin}"; $install = WPMU_PLUGIN_DIR . '/' . $plugin; if (false === ($creds = request_filesystem_credentials($this->url, '', false, false, null))) { return true; } // stop the normal page form from displaying if (!WP_Filesystem($creds)) { // credentials were no good, ask for them again request_filesystem_credentials($this->url, '', false, false, null); return true; } global $wp_filesystem; if ('install' == $_POST['shopp_services_helper']) { if (!$wp_filesystem->exists($install)) { if ($wp_filesystem->exists(WPMU_PLUGIN_DIR) || $wp_filesystem->mkdir(WPMU_PLUGIN_DIR, FS_CHMOD_DIR)) { // Install the mu-plugin helper $wp_filesystem->copy($source, $install, true, FS_CHMOD_FILE); } else { $this->notice(Shopp::_mi('The services helper could not be installed because the `mu-plugins` directory could not be created. Check the file permissions of the `%s` directory on the web aserver.', WP_CONTENT_DIR), 'error'); } } if ($wp_filesystem->exists($install)) { shopp_set_setting('shopp_services_helper', 'on'); $this->notice(Shopp::__('Services helper installed.')); } else { $this->notice(Shopp::__('The services helper failed to install.'), 'error'); } } elseif ('remove' == $_POST['shopp_services_helper']) { global $wp_filesystem; if ($wp_filesystem->exists($install)) { $wp_filesystem->delete($install); } if (!$wp_filesystem->exists($install)) { shopp_set_setting('shopp_services_helper', 'off'); $this->notice(Shopp::__('Services helper uninstalled.')); } else { $this->notice(Shopp::__('Services helper could not be uninstalled.'), 'error'); } } } $notifications = shopp_setting('error_notifications'); if (empty($notifications)) { $notifications = array(); } $notification_errors = array(SHOPP_TRXN_ERR => Shopp::__('Transaction Errors'), SHOPP_AUTH_ERR => Shopp::__('Login Errors'), SHOPP_ADDON_ERR => Shopp::__('Add-on Errors'), SHOPP_COMM_ERR => Shopp::__('Communication Errors'), SHOPP_STOCK_ERR => Shopp::__('Inventory Warnings')); $errorlog_levels = array(0 => Shopp::__('Disabled'), SHOPP_ERR => Shopp::__('General Shopp Errors'), SHOPP_TRXN_ERR => Shopp::__('Transaction Errors'), SHOPP_AUTH_ERR => Shopp::__('Login Errors'), SHOPP_ADDON_ERR => Shopp::__('Add-on Errors'), SHOPP_COMM_ERR => Shopp::__('Communication Errors'), SHOPP_STOCK_ERR => Shopp::__('Inventory Warnings'), SHOPP_ADMIN_ERR => Shopp::__('Admin Errors'), SHOPP_DB_ERR => Shopp::__('Database Errors'), SHOPP_PHP_ERR => Shopp::__('PHP Errors'), SHOPP_ALL_ERR => Shopp::__('All Errors'), SHOPP_DEBUG_ERR => Shopp::__('Debugging Messages')); $plugins = get_plugins(); $service_plugins = get_option('shopp_services_plugins'); include $this->ui('advanced.php'); }
public function __construct() { $this->customer_cols = ShoppCustomer::exportcolumns(); $this->billing_cols = BillingAddress::exportcolumns(); $this->shipping_cols = ShippingAddress::exportcolumns(); $this->defined = array_merge($this->customer_cols, $this->billing_cols, $this->shipping_cols); $this->sitename = get_bloginfo('name'); $this->headings = shopp_setting('customerexport_headers') == "on"; $this->selected = shopp_setting('customerexport_columns'); shopp_set_setting('customerexport_lastexport', current_time('timestamp')); }
/** * Handles maintenance mode messages **/ private function maintenance() { if (ShoppLoader::is_activating() || Shopp::upgradedb()) { return; } if (isset($_POST['settings']) && wp_verify_nonce($_REQUEST['_wpnonce'], 'shopp-setup')) { if (isset($_POST['settings']['maintenance'])) { shopp_set_setting('maintenance', $_POST['settings']['maintenance']); } } if (Shopp::maintenance()) { if (isset($_GET['_wpnonce']) && wp_verify_nonce($_GET['_wpnonce'], 'shopp_disable_maintenance')) { shopp_set_setting('maintenance', 'off'); } else { $url = wp_nonce_url(add_query_arg('page', $this->Admin->pagename('setup'), admin_url('admin.php')), 'shopp_disable_maintenance'); $this->notice(Shopp::__('Shopp is currently in maintenance mode. %sDisable Maintenance Mode%s', '<a href="' . $url . '" class="button">', '</a>'), 'error', 1); } } }
public function save($country, $state = '') { $this->country = $country; $this->state = $state; shopp_set_setting('base_locale', array($country, $state)); shopp_set_setting('tax_inclusive', in_array($country, ShoppLookup::country_inclusive_taxes()) ? 'on' : 'off'); $this->lookup($country); }
/** * Initializes a shipping module * * Grabs settings that most shipping modules will needs and establishes * the event listeners to trigger module functionality. * * @author Jonathan Davis * @since 1.1 * * @return void **/ public function __construct() { $Order = ShoppOrder(); $this->module = get_class($this); if ($this->singular) { // @todo Remove legacy gateway settings migrations // Attempt to copy old settings if this is a new prefixed gateway class $this->settings = shopp_setting($this->module); if (empty($this->settings) && false !== strpos($this->module, 'Shopp')) { $legacy = substr($this->module, 5); $this->settings = shopp_setting($legacy); if (!empty($this->settings)) { shopp_set_setting($this->module, $this->settings); shopp_rmv_setting($legacy); // Clean up legacy setting } } } else { $active = shopp_setting('active_shipping'); if (isset($active[$this->module]) && is_array($active[$this->module])) { $this->methods = array(); $this->fallbacks = array(); foreach ($active[$this->module] as $index => $set) { $setting = shopp_setting("{$this->module}-{$index}"); if (isset($setting['fallback']) && 'on' == $setting['fallback']) { $this->fallbacks["{$this->module}-{$index}"] = $setting; } else { $this->methods["{$this->module}-{$index}"] = $setting; } } } } $this->base = shopp_setting('base_operations'); $this->units = shopp_setting('weight_unit'); // Setup default packaging for shipping module $this->settings['shipping_packaging'] = shopp_setting('shipping_packaging'); // Shipping module can override the default behavior and the global setting by specifying the local packaging property if (isset($this->packaging) && $this->packaging != $this->settings['shipping_packaging']) { $this->settings['shipping_packaging'] = $this->packaging; } $this->packager = apply_filters('shopp_' . strtolower($this->module) . '_packager', new ShippingPackager(array('type' => $this->settings['shipping_packaging']), $this->module)); $this->destinations = __('Service provider markets', 'Shopp'); add_action('shopp_calculate_shipping_init', array(&$this, 'init')); add_action('shopp_calculate_item_shipping', array(&$this, 'calcitem'), 10, 2); add_action('shopp_calculate_shipping', array(&$this, 'calculate'), 10, 2); if (isset($this->fallbacks) && !empty($this->fallbacks)) { add_action('shopp_calculate_fallback_shipping_init', array(&$this, 'fallbacks')); add_action('shopp_calculate_fallback_shipping', array(&$this, 'calculate')); add_action('shopp_calculate_fallback_shipping', array(&$this, 'reset'), 20); } }
/** * Adds a maintenance mode notice to every admin screen * * @since 1.3 * * @return void **/ public function maintenance() { if (ShoppLoader::is_activating() || Shopp::upgradedb()) { return; } $setting = isset($_POST['settings']['maintenance']) ? $_POST['settings']['maintenance'] : false; $nonce = isset($_POST['_wpnonce']) ? $_POST['_wpnonce'] : false; if (false !== $setting && wp_verify_nonce($nonce, 'shopp-setup')) { shopp_set_setting('maintenance', $setting); } if (!Shopp::maintenance()) { return; } if (wp_verify_nonce($this->request('_wpnonce'), 'shopp_disable_maintenance')) { shopp_set_setting('maintenance', 'off'); } else { $url = wp_nonce_url(add_query_arg('page', ShoppAdmin::pagename('settings'), admin_url('admin.php')), 'shopp_disable_maintenance'); $this->Screen->notice(Shopp::__('Shopp is currently in maintenance mode. %sDisable Maintenance Mode%s', '<a href="' . $url . '" class="button">', '</a>'), 'error', 1); } }
/** * Update the stored path to the activated theme * * Automatically updates the Shopp theme path setting when the * a new theme is activated. * * @author Jonathan Davis * @since 1.1 * * @return void **/ public function themepath() { shopp_set_setting('theme_templates', addslashes(sanitize_path(STYLESHEETPATH . '/' . "shopp"))); }
public function upgrade_130() { global $wpdb; $db_version = ShoppSettings::dbversion(); if ($db_version < 1201) { // 1.3 schema changes $this->upschema(); // All existing sessions must be cleared and restarted, 1.3 & 1.3.6 sessions are not compatible with any prior version of Shopp ShoppShopping()->reset(); $sessions_table = ShoppDatabaseObject::tablename('shopping'); sDB::query("DELETE FROM {$sessions_table}"); // Remove all the temporary PHP native session data from the options table sDB::query("DELETE FROM from {$wpdb->options} WHERE option_name LIKE '__php_session_*'"); } if ($db_version < 1200) { $meta_table = ShoppDatabaseObject::tablename('meta'); sDB::query("UPDATE {$meta_table} SET value='on' WHERE name='theme_templates' AND (value != '' AND value != 'off')"); sDB::query("DELETE FROM {$meta_table} WHERE type='image' AND value LIKE '%O:10:\"ShoppError\"%'"); // clean up garbage from legacy bug sDB::query("DELETE FROM {$meta_table} WHERE CONCAT('', name *1) = name AND context = 'category' AND type = 'meta'"); // clean up bad category meta // Update purchase gateway values to match new prefixed class names $gateways = array('PayPalStandard' => 'ShoppPayPalStandard', '_2Checkout' => 'Shopp2Checkout', 'OfflinePayment' => 'ShoppOfflinePayment', 'TestMode' => 'ShoppTestMode', 'FreeOrder' => 'ShoppFreeOrder'); foreach ($gateways as $name => $classname) { sDB::query("UPDATE {$purchase_table} SET gateway='{$classname}' WHERE gateway='{$name}'"); } $activegateways = explode(',', shopp_setting('active_gateways')); foreach ($activegateways as &$setting) { if (false === strpos($setting, 'Shopp')) { $setting = str_replace(array_keys($gateways), $gateways, $setting); } } shopp_set_setting('active_gateways', join(',', $activegateways)); } if ($db_version < 1200 && shopp_setting_enabled('tax_inclusive')) { $price_table = ShoppDatabaseObject::tablename('price'); $taxrates = shopp_setting('taxrates'); $baseop = shopp_setting('base_operations'); $taxtaxes = array(); // Capture taxonomy condition tax rates $basetaxes = array(); // Capture base of operations rate(s) foreach ($taxrates as $rate) { if (!($baseop['country'] == $rate['country'] || ShoppTax::ALL == $rate['country'])) { continue; } if (!empty($rate['zone']) && $baseop['zone'] != $rate['zone']) { continue; } if (!empty($rate['rules']) && $rate['logic'] == 'any') { // Capture taxonomy conditional rates foreach ($rate['rules'] as $raterule) { if ('product-category' == $raterule['p']) { $taxname = ProductCategory::$taxon . '::' . $raterule['v']; } elseif ('product-tags' == $raterule['p']) { $taxname = ProductTag::$taxon . '::' . $raterule['v']; } $taxtaxes[$taxname] = Shopp::floatval($rate['rate']) / 100; } } else { $basetaxes[] = Shopp::floatval($rate['rate']) / 100; } } // Find products by in each taxonomy termno $done = array(); // Capture each set into the "done" list foreach ($taxtaxes as $taxterm => $taxrate) { list($taxonomy, $name) = explode('::', $taxterm); $Collection = new ProductCollection(); $Collection->load(array('ids' => true, 'taxquery' => array(array('taxonomy' => $taxonomy, 'field' => 'name', 'terms' => $name)))); $query = "UPDATE {$price_table} SET price=price+(price*{$taxrate}) WHERE tax='on' AND product IN (" . join(',', $Collection->products) . ")"; sDB::query($query); $done = array_merge($done, $Collection->products); } // Update the rest of the prices (skipping those we've already done) with the tax rate that matches the base of operations $taxrate = array_sum($basetaxes); // Merge all the base taxes into a single rate $done = empty($done) ? '' : " AND product NOT IN (" . join(',', $done) . ")"; $query = "UPDATE {$price_table} SET price=price+(price*{$taxrate}) WHERE tax='on'{$done}"; sDB::query($query); } }
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 upload() { if (!isset($_FILES['ratefile'])) { return false; } $upload = $_FILES['ratefile']; $filename = $upload['tmp_name']; if (empty($filename) && empty($upload['name']) && !isset($_POST['upload'])) { return false; } $error = false; if ($upload['error'] != 0) { return $this->notice(ShoppLookup::errors('uploads', $upload['error'])); } if (!is_readable($filename)) { return $this->notice(ShoppLookup::errors('uploadsecurity', 'is_readable')); } if (empty($upload['size'])) { return $this->notice(ShoppLookup::errors('uploadsecurity', 'is_empty')); } if ($upload['size'] != filesize($filename)) { return $this->notice(ShoppLookup::errors('uploadsecurity', 'filesize_mismatch')); } if (!is_uploaded_file($filename)) { return $this->notice(ShoppLookup::errors('uploadsecurity', 'is_uploaded_file')); } $data = file_get_contents($upload['tmp_name']); $cr = array("\r\n", "\r"); $formats = array(0 => false, 3 => 'xml', 4 => 'tab', 5 => 'csv'); preg_match('/((<[^>]+>.+?<\\/[^>]+>)|(.+?\\t.+?[\\n|\\r])|(.+?,.+?[\\n|\\r]))/', $data, $_); $format = $formats[count($_)]; if (!$format) { return $this->notice(Shopp::__('The uploaded file is not properly formatted as an XML, CSV or tab-delimmited file.')); } $_ = array(); switch ($format) { case 'xml': /* Example XML import file: <localtaxrates> <taxrate name="Kent">1</taxrate> <taxrate name="New Castle">0.25</taxrate> <taxrate name="Sussex">1.4</taxrate> </localtaxrates> Taxrate record format: <taxrate name="(Name of locality)">(Percentage of the supplemental tax)</taxrate> Tax rate percentages should be represented as percentage numbers, not decimal percentages: 1.25 = 1.25% (0.0125) 10 = 10% (0.1) */ $XML = new xmlQuery($data); $taxrates = $XML->tag('taxrate'); while ($rate = $taxrates->each()) { $name = $rate->attr(false, 'name'); $value = $rate->content(); $_[$name] = $value; } break; case 'csv': ini_set('auto_detect_line_endings', true); if (($csv = fopen($upload['tmp_name'], 'r')) === false) { return $this->notice(ShoppLookup::errors('uploadsecurity', 'is_readable')); } while (($data = fgetcsv($csv, 1000)) !== false) { $_[$data[0]] = !empty($data[1]) ? $data[1] : 0; } fclose($csv); ini_set('auto_detect_line_endings', false); break; case 'tab': default: $data = str_replace($cr, "\n", $data); $lines = explode("\n", $data); foreach ($lines as $line) { list($key, $value) = explode("\t", $line); $_[$key] = $value; } } if (empty($_)) { return $this->notice(Shopp::__('No useable tax rates could be found. The uploaded file may not be properly formatted.')); } $id = $_POST['id']; $rates = shopp_setting('taxrates'); $rates[$id]['locals'] = apply_filters('shopp_local_taxrates_upload', $_); shopp_set_setting('taxrates', $rates); }
/** * Displays the General Settings screen and processes updates * * @author Jonathan Davis * @since 1.0 * * @return void **/ public function setup() { if (!current_user_can('shopp_settings')) { wp_die(__('You do not have sufficient permissions to access this page.')); } // Welcome screen handling if (!empty($_POST['setup'])) { shopp_set_setting('display_welcome', 'off'); } $countries = ShoppLookup::countries(); $states = array(); // Save settings if (!empty($_POST['save']) && isset($_POST['settings'])) { check_admin_referer('shopp-setup'); if (!isset($_POST['settings']['target_markets'])) { asort($_POST['settings']['target_markets']); } shopp_set_formsettings(); if (isset($_POST['settings']['base_locale'])) { $baseop =& $_POST['settings']['base_locale']; if (isset($countries[strtoupper($baseop['country'])])) { // Validate country $country = strtoupper($baseop['country']); $state = ''; if (!empty($baseop['state'])) { // Valid state $states = ShoppLookup::country_zones(array($country)); if (isset($states[$country][strtoupper($baseop['state'])])) { $state = strtoupper($baseop['state']); } } ShoppBaseLocale()->save($country, $state); } shopp_set_setting('tax_inclusive', in_array($country, Lookup::country_inclusive_taxes()) ? 'on' : 'off'); } $updated = __('Shopp settings saved.', 'Shopp'); } $basecountry = ShoppBaseLocale()->country(); $countrymenu = Shopp::menuoptions($countries, $basecountry, true); $basestates = ShoppLookup::country_zones(array($basecountry)); $statesmenu = Shopp::menuoptions($basestates[$basecountry], ShoppBaseLocale()->state(), true); $targets = shopp_setting('target_markets'); if (is_array($targets)) { $targets = array_map('stripslashes', $targets); } if (!$targets) { $targets = array(); } include $this->ui('setup.php'); }