diff --git a/admin-dev/tabs/AdminShipping.php b/admin-dev/tabs/AdminShipping.php deleted file mode 100644 index 43eedcbec..000000000 --- a/admin-dev/tabs/AdminShipping.php +++ /dev/null @@ -1,310 +0,0 @@ - -* @copyright 2007-2011 PrestaShop SA -* @version Release: $Revision: 6844 $ -* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) -* International Registered Trademark & Property of PrestaShop SA -*/ - -class AdminShipping extends AdminTab -{ - private $_fieldsHandling; - - public function __construct() - { - $this->context = Context::getContext(); - $this->table = 'delivery'; - $this->_fieldsHandling = array( - 'PS_SHIPPING_HANDLING' => array('title' => $this->l('Handling charges'), 'suffix' => $this->context->currency, 'validation' => 'isPrice', 'cast' => 'floatval'), - 'PS_SHIPPING_FREE_PRICE' => array('title' => $this->l('Free shipping starts at'), 'suffix' => $this->context->currency, 'validation' => 'isPrice', 'cast' => 'floatval'), - 'PS_SHIPPING_FREE_WEIGHT' => array('title' => $this->l('Free shipping starts at'), 'suffix' => Configuration::get('PS_WEIGHT_UNIT'), 'validation' => 'isUnsignedFloat', 'cast' => 'floatval'), - 'PS_SHIPPING_METHOD' => array('title' => $this->l('Billing'), 'validation' => 'isBool', 'cast' => 'intval')); - - parent::__construct(); - } - - public function postProcess() - { - /* Handling settings */ - if (Tools::isSubmit('submitHandling'.$this->table)) - { - if ($this->tabAccess['edit'] === '1') - { - /* Check required fields */ - foreach ($this->_fieldsHandling AS $field => $values) - if (($value = Tools::getValue($field)) == false AND (string)$value != '0') - $this->_errors[] = Tools::displayError('field').' '.$values['title'].' '.Tools::displayError('is required.'); - - /* Check field validity */ - foreach ($this->_fieldsHandling AS $field => $values) - if (Tools::getValue($field)) - { - $function = $values['validation']; - if (!Validate::$function(Tools::getValue($field))) - $this->_errors[] = Tools::displayError('field').' '.$values['title'].' '.Tools::displayError('is invalid.'); - } - - /* Update configuration values */ - if (!sizeof($this->_errors)) - { - foreach ($this->_fieldsHandling AS $field => $values) - { - $function = $values['cast']; - Configuration::updateValue($field, call_user_func($function, Tools::getValue($field))); - } - - Tools::redirectAdmin(self::$currentIndex.'&conf=6'.'&token='.$this->token); - } - } - else - $this->_errors[] = Tools::displayError('You do not have permission to edit here.'); - } - - /* Shipping fees */ - elseif (Tools::isSubmit('submitFees'.$this->table)) - { - if ($this->tabAccess['edit'] === '1') - { - if (($id_carrier = (int)(Tools::getValue('id_carrier'))) AND $id_carrier == ($id_carrier2 = (int)(Tools::getValue('id_carrier2')))) - { - $carrier = new Carrier($id_carrier); - if (Validate::isLoadedObject($carrier)) - { - /* Get configuration values */ - $shipping_method = $carrier->getShippingMethod(); - $rangeTable = $carrier->getRangeTable(); - - $carrier->deleteDeliveryPrice($rangeTable); - $currentList = Carrier::getDeliveryPriceByRanges($rangeTable, $id_carrier); - - /* Build prices list */ - $priceList = array(); - foreach ($_POST AS $key => $value) - if (strstr($key, 'fees_')) - { - $tmpArray = explode('_', $key); - - $price = number_format(abs(str_replace(',', '.', $value)), 6, '.', ''); - $current = 0; - foreach ($currentList as $item) - if ($item['id_zone'] == $tmpArray[1] && $item['id_'.$rangeTable] == $tmpArray[2]) - $current = $item; - if ($current && $price == $current['price']) - continue; - - $priceList[] = array( - 'id_range_price' => ($shipping_method == Carrier::SHIPPING_METHOD_PRICE) ? (int)$tmpArray[2] : null, - 'id_range_weight' => ($shipping_method == Carrier::SHIPPING_METHOD_WEIGHT) ? (int)$tmpArray[2] : null, - 'id_carrier' => (int)$carrier->id, - 'id_zone' => (int)$tmpArray[1], - 'price' => $price, - ); - } - /* Update delivery prices */ - $carrier->addDeliveryPrice($priceList); - Tools::redirectAdmin(self::$currentIndex.'&conf=6&id_carrier='.$carrier->id.'&token='.$this->token); - } - else - $this->_errors[] = Tools::displayError('An error occurred while updating fees (cannot load carrier object).'); - } - elseif (isset($id_carrier2)) - { - $_POST['id_carrier'] = $id_carrier2; - } - else - $this->_errors[] = Tools::displayError('An error occurred while updating fees (cannot load carrier object).'); - } - else - $this->_errors[] = Tools::displayError('You do not have permission to edit here.'); - } - } - - public function display() - { - $this->displayFormHandling(); - $this->displayFormFees(); - } - - public function displayFormHandling() - { - $confKeys = $this->_fieldsHandling; - foreach ($confKeys AS $key => $confKey) - $getConf[] = $key; - $confValues = Configuration::getMultiple($getConf); - unset($confKeys['PS_SHIPPING_METHOD']); - - echo ' -
-
- '.$this->l('Handling').''; - - foreach ($confKeys AS $key => $confKey) - { - $postValue = Tools::getValue($key); - $sign_left = (is_object($confKey['suffix']) ? $confKey['suffix']->getSign('left') : ''); - $sign_right = (is_object($confKey['suffix']) ? $confKey['suffix']->getSign('right') : (is_string($confKey['suffix']) ? ' '.$confKey['suffix'] : '')); - echo ' - -
'; - echo $sign_left; - echo ''; - echo $sign_right.' '.($key == 'PS_SHIPPING_HANDLING' ? $this->l('(tax excl.)') : ''); - echo '
'; - } - echo ' -
- -
-

'.$this->l('Tips:').'

- -
-
-
- '.$this->l('Billing').' - -
- -
- - -
-
- -
-
-
'; - } - - public function displayFormFees() - { - $carrierArray = array(); - $id_carrier = Tools::getValue('id_carrier'); - - $carriers = Carrier::getCarriers(Configuration::get('PS_LANG_DEFAULT'), true , false,false, NULL, Carrier::PS_CARRIERS_AND_CARRIER_MODULES_NEED_RANGE); - foreach ($carriers AS $carrier) - if (!$carrier['is_free']) - $carrierArray[] = array( - 'id' => $carrier['id_carrier'], - 'display' => '' - ); - if (count($carrierArray)) - { - if (!$id_carrier) - $id_carrier = (int)$carrierArray[0]['id']; - $carrierSelected = new Carrier($id_carrier); - } - - echo '

-

'.$this->l('Fees by carrier, geographical zone, and ranges').'

-
-
- '.$this->l('Fees').''; - - if (!count($carrierArray)) - echo $this->l('You only have free carriers, there is no need to configure your delivery prices.'); - else - { - echo ''.$this->l('Carrier:').' -
- - - '; - - $currency = $this->context->currency; - $rangeObj = $carrierSelected->getRangeObject(); - $rangeTable = $carrierSelected->getRangeTable(); - $suffix = $carrierSelected->getRangeSuffix(); - - $rangeIdentifier = 'id_'.$rangeTable; - $ranges = $rangeObj->getRanges($id_carrier); - $delivery = Carrier::getDeliveryPriceByRanges($rangeTable, $id_carrier); - foreach ($delivery AS $deliv) - $deliveryArray[$deliv['id_zone']][$deliv['id_carrier']][$deliv[$rangeIdentifier]] = $deliv['price']; - if (!$carrierSelected->is_free) - foreach ($ranges AS $range) - echo ''; - echo ''; - - $zones = $carrierSelected->getZones(); - if (sizeof($ranges) && !$carrierSelected->is_free) - { - if(sizeof($zones) > 1) - { - echo ' - - '; - foreach ($ranges AS $range) - echo ''; - echo ''; - } - - foreach ($zones AS $zone) - { - echo ' - - '; - foreach ($ranges AS $range) - { - if (isset($deliveryArray[$zone['id_zone']][$id_carrier][$range[$rangeIdentifier]])) - $price = $deliveryArray[$zone['id_zone']][$id_carrier][$range[$rangeIdentifier]]; - else - $price = '0.00'; - echo ''; - } - echo ' - '; - } - } - - echo ' - - '; - echo ' -
'.$this->l('Zone / Range').''.(float)($range['delimiter1']).$suffix.' '.$this->l('to').' '.(float)($range['delimiter2']).$suffix.'
'.$this->l('All').''.$currency->getSign('left').''.$currency->getSign('right').'
'.$zone['name'].''.$currency->getSign('left').''.$currency->getSign('right').'
- '; - if (sizeof($ranges) && !$carrierSelected->is_free) - echo ' '; - else if($carrierSelected->is_free) - echo $this->l('This is a free carrier'); - else - echo $this->l('No ranges set for this carrier'); - echo ' -
-

'.$this->l('Prices do not include tax.').'

'; - } - echo ' -
- -
'; - } -} - - diff --git a/admin-dev/themes/template/helper/options/options.tpl b/admin-dev/themes/template/helper/options/options.tpl index ce1ab1c1c..73ee1ebba 100644 --- a/admin-dev/themes/template/helper/options/options.tpl +++ b/admin-dev/themes/template/helper/options/options.tpl @@ -26,7 +26,11 @@ -
+ {foreach $option_list AS $category => $categoryData} {if isset($categoryData['top'])}{$categoryData['top']}{/if}
@@ -38,7 +42,7 @@ {* Category description *} {if (isset($categoryData['description']) && $categoryData['description'])} -

{$categoryData['description']}

+
{$categoryData['description']}
{/if} {* Category info *} {if (isset($categoryData['info']) && $categoryData['info'])} @@ -62,11 +66,15 @@
{/block} {if $field['type'] == 'select'} - + {if $field['list']} + + {else if isset($input.empty_message)} + {$input.empty_message} + {/if} {elseif $field['type'] == 'bool'} @@ -89,10 +97,10 @@ *} {elseif $field['type'] == 'text'} - {if isset($field['next'])} {$field['next']|strval}{/if} + {if isset($field['suffix'])} {$field['suffix']|strval}{/if} {elseif $field['type'] == 'password'} - {if isset($field['next'])} {$field['next']|strval}{/if} + {if isset($field['suffix'])} {$field['suffix']|strval}{/if} {elseif $field['type'] == 'textarea'} {elseif $field['type'] == 'file'} diff --git a/admin-dev/themes/template/shipping/content.tpl b/admin-dev/themes/template/shipping/content.tpl new file mode 100644 index 000000000..7d0de5f79 --- /dev/null +++ b/admin-dev/themes/template/shipping/content.tpl @@ -0,0 +1,107 @@ +{* +* 2007-2011 PrestaShop +* +* NOTICE OF LICENSE +* +* This source file is subject to the Academic Free License (AFL 3.0) +* that is bundled with this package in the file LICENSE.txt. +* It is also available through the world-wide-web at this URL: +* http://opensource.org/licenses/afl-3.0.php +* If you did not receive a copy of the license and are unable to +* obtain it through the world-wide-web, please send an email +* to license@prestashop.com so we can send you a copy immediately. +* +* DISCLAIMER +* +* Do not edit or add to this file if you wish to upgrade PrestaShop to newer +* versions in the future. If you wish to customize PrestaShop for your +* needs please refer to http://www.prestashop.com for more information. +* +* @author PrestaShop SA +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision$ +* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*} + +{$content} +

+

{l s='Fees by carrier, geographical zone, and ranges'}

+ +
+ {l s='Fees'} + {if empty($carriers)} + {l s='You only have free carriers, there is no need to configure your delivery prices.'} + {else} + {l s='Carrier:'} +
+ + + + + {if !$carrierSelected->is_free} + {foreach $ranges AS $range} + + {/foreach} + {/if} + + {if sizeof($ranges) && !$carrierSelected->is_free} + {if sizeof($zones) > 1} + + + {foreach $ranges AS $range} + + {/foreach} + + {/if} + + {foreach $zones AS $zone} + + + {foreach $ranges AS $range} + {if isset($deliveryArray[$zone['id_zone']][$id_carrier][$range[$rangeIdentifier]])} + {$price = $deliveryArray[$zone['id_zone']][$id_carrier][$range[$rangeIdentifier]]} + {else} + {$price = '0.00'} + {/if} + + {/foreach} + + {/foreach} + {/if} + + + +
{l s='Zone / Range'}{$range['delimiter1']|floatval}{$suffix} {l s='to'} {$range['delimiter2']|floatval}{$suffix}
{l s='All'} + {$currency->getSign('left')} + + {$currency->getSign('right')} +
{$zone['name']} + {$currency->getSign('left')} + + {$currency->getSign('right')} +
+ + {if sizeof($ranges) && !$carrierSelected->is_free} + + {else if $carrierSelected->is_free} + {l s='This is a free carrier'} + {else} + {l s='No ranges set for this carrier'} + {/if} +
+

{l s='Prices do not include tax.'}

+ {/if} + +
+ diff --git a/admin-dev/themes/template/stores/options.tpl b/admin-dev/themes/template/stores/options.tpl index 254a6bf02..791ef8ba2 100644 --- a/admin-dev/themes/template/stores/options.tpl +++ b/admin-dev/themes/template/stores/options.tpl @@ -37,7 +37,7 @@ {* Category description *} {if (isset($categoryData['description']) && $categoryData['description'])} -

{$categoryData['description']}

+
{$categoryData['description']}
{/if} {foreach $categoryData['fields'] AS $key => $field} @@ -79,10 +79,10 @@ *} {elseif $field['type'] == 'text'} - {if isset($field['next'])} {$field['next']|strval}{/if} + {if isset($field['suffix'])} {$field['suffix']|strval}{/if} {elseif $field['type'] == 'password'} - {if isset($field['next'])} {$field['next']|strval}{/if} + {if isset($field['suffix'])} {$field['suffix']|strval}{/if} {elseif $field['type'] == 'textarea'} {elseif $field['type'] == 'file'} diff --git a/classes/AdminController.php b/classes/AdminController.php index e698cd76f..60d79df25 100644 --- a/classes/AdminController.php +++ b/classes/AdminController.php @@ -244,6 +244,8 @@ class AdminControllerCore extends Controller // Get the name of the folder containing the custom tpl files $this->tpl_folder = strtolower($controller[5]).substr($controller, 6); $this->tpl_folder = Tools::toUnderscoreCase($this->tpl_folder).'/'; + + $this->context->currency = new Currency(Configuration::get('PS_CURRENCY_DEFAULT')); } /** @@ -726,7 +728,7 @@ class AdminControllerCore extends Controller break; default: // list $this->toolbar_btn['new'] = array( - 'href' => self::$currentIndex.'&add'.$this->table.'&token='.$this->token, + 'href' => self::$currentIndex.'&add'.$this->table.'&token='.$this->token, 'desc' => $this->l('Add new') ); } @@ -1329,7 +1331,6 @@ class AdminControllerCore extends Controller $this->display_footer = false; $this->content_only = true; } - $this->context->currency = new Currency(Configuration::get('PS_CURRENCY_DEFAULT')); // Change shop context ? if (Shop::isFeatureActive() && Tools::getValue('setShopContext') !== false) diff --git a/controllers/admin/AdminShippingController.php b/controllers/admin/AdminShippingController.php new file mode 100644 index 000000000..2fe88931d --- /dev/null +++ b/controllers/admin/AdminShippingController.php @@ -0,0 +1,201 @@ + +* @copyright 2007-2011 PrestaShop SA +* @version Release: $Revision: 6844 $ +* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) +* International Registered Trademark & Property of PrestaShop SA +*/ + +class AdminShippingControllerCore extends AdminController +{ + private $_fieldsHandling; + + public function __construct() + { + parent::__construct(); + $this->table = 'delivery'; + + $carriers = Carrier::getCarriers($this->context->language->id, true , false, false, NULL, Carrier::PS_CARRIERS_AND_CARRIER_MODULES_NEED_RANGE); + foreach ($carriers AS $key => $carrier) + if ($carrier['is_free']) + unset($carriers[$key]); + + $this->options = array( + 'handling' => array( + 'title' => $this->l('Handling'), + 'icon' => 'delivery', + 'fields' => array( + 'PS_SHIPPING_HANDLING' => array( + 'title' => $this->l('Handling charges'), + 'suffix' => $this->context->currency->getSign().' '.$this->l('(tax excl.)'), + 'cast' => 'floatval', + 'type' => 'text', + 'validation' => 'isPrice'), + 'PS_SHIPPING_FREE_PRICE' => array( + 'title' => $this->l('Free shipping starts at'), + 'suffix' => $this->context->currency->getSign(), + 'cast' => 'floatval', + 'type' => 'text', + 'validation' => 'isPrice'), + 'PS_SHIPPING_FREE_WEIGHT' => array( + 'title' => $this->l('Free shipping starts at'), + 'suffix' => Configuration::get('PS_WEIGHT_UNIT'), + 'cast' => 'floatval', + 'type' => 'text', + 'validation' => 'isUnsignedFloat'), + ), + 'description' => + '
    +
  • '.$this->l('If you set these parameters to 0, they will be disabled').'
  • +
  • '.$this->l('Coupons are not taken into account when calculating free shipping').'
  • +
', + 'submit' => array() + ), + 'billing' => array( + 'title' => $this->l('Billing'), + 'icon' => 'money', + 'fields' => array( + 'PS_SHIPPING_METHOD' => array( + 'title' => $this->l('Billing'), + 'cast' => 'intval', + 'type' => 'radio', + 'choices' => array( + 0 => $this->l('According to total price'), + 1 => $this->l('According to total weight') + ), + 'validation' => 'isBool' + ), + ), + 'submit' => array() + ), + ); + } + + public function initContent() + { + $carriers = Carrier::getCarriers($this->context->language->id, true , false, false, NULL, Carrier::PS_CARRIERS_AND_CARRIER_MODULES_NEED_RANGE); + foreach ($carriers AS $key => $carrier) + if ($carrier['is_free']) + unset($carriers[$key]); + + $id_carrier = Tools::getValue('id_carrier'); + + if (count($carriers)) + { + if (!$id_carrier) + $id_carrier = (int)$carriers[0]['id_carrier']; + $carrierSelected = new Carrier($id_carrier); + } + + $currency = $this->context->currency; + $rangeObj = $carrierSelected->getRangeObject(); + $rangeTable = $carrierSelected->getRangeTable(); + $suffix = $carrierSelected->getRangeSuffix(); + + $rangeIdentifier = 'id_'.$rangeTable; + $ranges = $rangeObj->getRanges($id_carrier); + $delivery = Carrier::getDeliveryPriceByRanges($rangeTable, $id_carrier); + $deliveryArray = array(); + foreach ($delivery AS $deliv) + $deliveryArray[$deliv['id_zone']][$deliv['id_carrier']][$deliv[$rangeIdentifier]] = $deliv['price']; + + $this->context->smarty->assign(array( + 'zones' => $carrierSelected->getZones(), + 'carriers' => $carriers, + 'ranges' => $ranges, + 'currency' => $currency, + 'deliveryArray' => $deliveryArray, + 'carrierSelected' => $carrierSelected, + 'id_carrier' => $id_carrier, + 'suffix' => $suffix, + 'rangeIdentifier' => $rangeIdentifier, + 'action_fees' => self::$currentIndex.'&token='.$this->token + )); + + parent::initContent(); + } + + public function postProcess() + { + /* Shipping fees */ + if (Tools::isSubmit('submitFees'.$this->table)) + { + if ($this->tabAccess['edit'] === '1') + { + if (($id_carrier = (int)(Tools::getValue('id_carrier'))) AND $id_carrier == ($id_carrier2 = (int)(Tools::getValue('id_carrier2')))) + { + $carrier = new Carrier($id_carrier); + if (Validate::isLoadedObject($carrier)) + { + /* Get configuration values */ + $shipping_method = $carrier->getShippingMethod(); + $rangeTable = $carrier->getRangeTable(); + + $carrier->deleteDeliveryPrice($rangeTable); + $currentList = Carrier::getDeliveryPriceByRanges($rangeTable, $id_carrier); + + /* Build prices list */ + $priceList = array(); + foreach ($_POST AS $key => $value) + if (strstr($key, 'fees_')) + { + $tmpArray = explode('_', $key); + + $price = number_format(abs(str_replace(',', '.', $value)), 6, '.', ''); + $current = 0; + foreach ($currentList as $item) + if ($item['id_zone'] == $tmpArray[1] && $item['id_'.$rangeTable] == $tmpArray[2]) + $current = $item; + if ($current && $price == $current['price']) + continue; + + $priceList[] = array( + 'id_range_price' => ($shipping_method == Carrier::SHIPPING_METHOD_PRICE) ? (int)$tmpArray[2] : null, + 'id_range_weight' => ($shipping_method == Carrier::SHIPPING_METHOD_WEIGHT) ? (int)$tmpArray[2] : null, + 'id_carrier' => (int)$carrier->id, + 'id_zone' => (int)$tmpArray[1], + 'price' => $price, + ); + } + /* Update delivery prices */ + $carrier->addDeliveryPrice($priceList); + Tools::redirectAdmin(self::$currentIndex.'&conf=6&id_carrier='.$carrier->id.'&token='.$this->token); + } + else + $this->_errors[] = Tools::displayError('An error occurred while updating fees (cannot load carrier object).'); + } + elseif (isset($id_carrier2)) + { + $_POST['id_carrier'] = $id_carrier2; + } + else + $this->_errors[] = Tools::displayError('An error occurred while updating fees (cannot load carrier object).'); + } + else + $this->_errors[] = Tools::displayError('You do not have permission to edit here.'); + } + else + parent::postProcess(); + } +} + +