// Retrocompatibility with carriers modules

git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@12614 b9a71923-0436-4b27-9f14-aed3839534dd
This commit is contained in:
mDeflotte
2012-01-23 15:50:50 +00:00
parent 2227bdc63f
commit 441f643fda
10 changed files with 186 additions and 66 deletions

View File

@@ -1717,7 +1717,7 @@ class CartCore extends ObjectModel
'carrier_list' => $best_price_carrier,
'is_best_price' => true,
'is_best_grade' => false,
'unique_carrier' => false
'unique_carrier' => (count($best_price_carrier) <= 1)
);
$best_grade_carrier = array();
@@ -1742,7 +1742,7 @@ class CartCore extends ObjectModel
$delivery_option_list[$id_address][$key] = array(
'carrier_list' => $best_grade_carrier,
'is_best_price' => false,
'unique_carrier' => false
'unique_carrier' => (count($best_grade_carrier) <= 1)
);
$delivery_option_list[$id_address][$key]['is_best_grade'] = true;
@@ -1769,7 +1769,7 @@ class CartCore extends ObjectModel
$delivery_option_list[$id_address][$key] = array(
'is_best_price' => false,
'is_best_grade' => false,
'unique_carrier' => false,
'unique_carrier' => true,
'carrier_list' => array(
$id_carrier => array(
'price_with_tax' => $price_with_tax,
@@ -1780,7 +1780,7 @@ class CartCore extends ObjectModel
)
);
else
$delivery_option_list[$id_address][$key]['unique_carrier'] = true;
$delivery_option_list[$id_address][$key]['unique_carrier'] = (count($delivery_option_list[$id_address][$key]['carrier_list']) <= 1);
}
foreach ($delivery_option_list as $id_address => $delivery_option)
@@ -1810,6 +1810,23 @@ class CartCore extends ObjectModel
$cache = $delivery_option_list;
return $delivery_option_list;
}
public function carrierIsSelected($id_carrier, $id_address)
{
$delivery_option = $this->getDeliveryOption();
$delivery_option_list = $this->getDeliveryOptionList();
if (!isset($delivery_option[$id_address]))
return false;
if (!isset($delivery_option_list[$id_address][$delivery_option[$id_address]]))
return false;
if (!in_array($id_carrier, array_keys($delivery_option_list[$id_address][$delivery_option[$id_address]]['carrier_list'])))
return false;
return true;
}
/**
* Get all deliveries options available for the current cart formated like Carriers::getCarriersForOrder
@@ -3137,4 +3154,33 @@ class CartCore extends ObjectModel
}
return true;
}
/**
*
* Execute hook displayCarrierList (extraCarrier) and merge theme to the $array
* @param array $array
*/
public static function addExtraCarriers(&$array)
{
$first = true;
$hook_extracarrier_addr = array();
foreach (Context::getContext()->cart->getAddressCollection() as $address)
{
$hook = Hook::exec('displayCarrierList', array('address' => $address));
$hook_extracarrier_addr[$address->id] = $hook;
if ($first)
{
$array = array_merge(
$array,
array('HOOK_EXTRACARRIER' => $hook)
);
$first = false;
}
$array = array_merge(
$array,
array('HOOK_EXTRACARRIER_ADDR' => $hook_extracarrier_addr)
);
}
}
}

View File

@@ -268,7 +268,7 @@ class CartControllerCore extends FrontController
$deliveryAddress = new Address($this->context->cart->id_address_delivery);
$id_country = (isset($deliveryAddress) && $deliveryAddress->id) ? $deliveryAddress->id_country : Configuration::get('PS_COUNTRY_DEFAULT');
$result['HOOK_EXTRACARRIER'] = Hook::exec('displayCarrierList', array('address' => (isset($deliveryAddress) && (int)$deliveryAddress->id) ? $deliveryAddress : null));
Cart::addExtraCarriers($result);
}
$result['summary'] = $this->context->cart->getSummaryDetails();
$result['customizedDatas'] = Product::getAllCustomizedDatas($this->context->cart->id, null, true);

View File

@@ -92,6 +92,23 @@ class OrderControllerCore extends ParentOrderController
{
global $isVirtualCart;
if (Tools::isSubmit('ajax') && Tools::getValue('method') == 'updateExtraCarrier')
{
// Change virtualy the currents delivery options
$delivery_option = $this->context->cart->getDeliveryOption();
$delivery_option[(int)Tools::getValue('id_address')] = Tools::getValue('id_delivery_option');
$this->context->cart->setDeliveryOption($delivery_option);
$return = array(
'content' => Hook::exec(
'displayCarrierList',
array(
'address' => new Address((int)Tools::getValue('id_address'))
)
)
);
die(Tools::jsonEncode($return));
}
if ($this->nbProducts)
$this->context->smarty->assign('virtual_cart', $isVirtualCart);

View File

@@ -68,12 +68,16 @@ class OrderOpcControllerCore extends ParentOrderController
{
if ($this->_processCarrier())
{
$carriers = $this->context->cart->simulateCarriersOutput();
$address_delivery = new Address($this->context->cart->id_address_delivery);
$return = array(
'summary' => $this->context->cart->getSummaryDetails(),
'HOOK_TOP_PAYMENT' => Hook::exec('displayPaymentTop'),
'HOOK_PAYMENT' => $this->_getPaymentMethods(),
'carrier_data' => $this->_getCarrierList(),
'HOOK_BEFORECARRIER' => Hook::exec('displayBeforeCarrier', array('carriers' => $carriers))
);
Cart::addExtraCarriers($return);
die(Tools::jsonEncode($return));
}
else
@@ -436,8 +440,7 @@ class OrderOpcControllerCore extends ParentOrderController
$link_conditions .= '&content_only=1';
$carriers = $this->context->cart->simulateCarriersOutput();
$this->context->smarty->assign(array(
$vars = array(
'checkedTOS' => (int)($this->context->cookie->checkedTOS),
'recyclablePackAllowed' => (int)(Configuration::get('PS_RECYCLABLE_PACK')),
'giftAllowed' => (int)(Configuration::get('PS_GIFT_WRAPPING')),
@@ -451,7 +454,17 @@ class OrderOpcControllerCore extends ParentOrderController
'checked' => $this->context->cart->simulateCarrierSelectedOutput(),
'delivery_option' => $this->context->cart->getDeliveryOption(),
'address_collection' => $this->context->cart->getAddressCollection(),
'opc' => true));
'opc' => true,
'HOOK_BEFORECARRIER' => Hook::exec('displayBeforeCarrier', array(
'carriers' => $carriers,
'delivery_option_list' => $this->context->cart->getDeliveryOptionList(),
'delivery_option' => $this->context->cart->getDeliveryOption()
))
);
Cart::addExtraCarriers($vars);
$this->context->smarty->assign($vars);
if ($this->context->customer->id)
$groups = $this->context->customer->getGroups();
@@ -469,9 +482,9 @@ class OrderOpcControllerCore extends ParentOrderController
'delivery_option_list' => $this->context->cart->getDeliveryOptionList(),
'delivery_option' => $this->context->cart->getDeliveryOption()
)),
'carrier_block' => $this->context->smarty->fetch(_PS_THEME_DIR_.'order-carrier.tpl'),
'HOOK_EXTRACARRIER' => Hook::exec('displayCarrierList', array('address' => $address_delivery))
'carrier_block' => $this->context->smarty->fetch(_PS_THEME_DIR_.'order-carrier.tpl')
);
Cart::addExtraCarriers($result);
return $result;
}
if (sizeof($this->errors))

View File

@@ -406,15 +406,19 @@ class ParentOrderControllerCore extends FrontController
'checked' => $checked,
'delivery_option' => $this->context->cart->getDeliveryOption()
));
$this->context->smarty->assign(array(
'HOOK_EXTRACARRIER' => Hook::exec('displayCarrierList', array('address' => $address)),
$vars = array(
'HOOK_BEFORECARRIER' => Hook::exec('displayBeforeCarrier', array(
'carriers' => $carriers,
'checked' => $checked,
'delivery_option_list' => $delivery_option_list,
'delivery_option' => $this->context->cart->getDeliveryOption()
))
));
);
Cart::addExtraCarriers($vars);
$this->context->smarty->assign($vars);
}
protected function _assignWrappingAndTOS()

View File

@@ -860,7 +860,7 @@ table#cart_summary .cart_total_price .total_price_container {
color:#666
}
#orderopc #login_form_content label {
#order-opc #login_form_content label {
display:block;
margin:0 0 10px 0
}
@@ -889,7 +889,7 @@ table#cart_summary .cart_total_price .total_price_container {
}
.lost_password a {color:#666}
#orderopc .lost_password {
#order-opc .lost_password {
display:block;
float:none;
margin:5px 0 10px;
@@ -962,12 +962,12 @@ table#cart_summary .cart_total_price .total_price_container {
/* step 4 - paiement ************************************************************************** */
/* #################### CSS MAXENCE ########################
#order .delivery_options_address, #orderopc .delivery_options_address {
#order .delivery_options_address, #order-opc .delivery_options_address {
width: 541px;
margin-left: 7px;
}
*/
#order .delivery_options_address h3, #orderopc .delivery_options_address h3 {
#order .delivery_options_address h3, #order-opc .delivery_options_address h3 {
/*background: url("../img/table_header.gif") no-repeat;
color: #374853;
font-weight: bold;
@@ -981,51 +981,51 @@ margin: 10px 0 0 0;*/
text-transform: uppercase;
background: none repeat scroll 0 0 #383838;
}
#order .delivery_option_radio, #orderopc .delivery_option_radio {
#order .delivery_option_radio, #order-opc .delivery_option_radio {
float: left;
margin: 12px;
}
#order .delivery_option label, #orderopc .delivery_option label {
#order .delivery_option label, #order-opc .delivery_option label {
display: block;
padding-bottom: 5px;
}
#order .delivery_option label > table.resume, #orderopc .delivery_option label > table.resume {
#order .delivery_option label > table.resume, #order-opc .delivery_option label > table.resume {
height: 40px;
width: 685px;
}
#order .delivery_option.item, #orderopc .delivery_option.item {
#order .delivery_option.item, #order-opc .delivery_option.item {
background: #fafafa;
}
#order .delivery_option.alternate_item, #orderopc .delivery_option.alternate_item {
#order .delivery_option.alternate_item, #order-opc .delivery_option.alternate_item {
border-top: 1px solid #bdc2c9;
background: #f1f2f4;
border-bottom: 1px solid #bdc2c9;
}
#order .delivery_option label > table.resume td, #orderopc .delivery_option label > table.resume td {
#order .delivery_option label > table.resume td, #order-opc .delivery_option label > table.resume td {
padding: 0 8px;
}
#order .delivery_option label > table.resume td + td, #orderopc .delivery_option label > table.resume td + td {
#order .delivery_option label > table.resume td + td, #order-opc .delivery_option label > table.resume td + td {
width: 300px;
}
#order .delivery_option label > table.resume td + td + td, #orderopc .delivery_option label > table.resume td + td + td {
#order .delivery_option label > table.resume td + td + td, #order-opc .delivery_option label > table.resume td + td + td {
width: 100px;
text-align: right;
}
#order .delivery_option_carrier td {width:200px}
#order .delivery_option_carrier td + td {width:280px;}
#order .delivery_option_carrier td + td + td {width:200px}
#order .delivery_options_address .delivery_option_logo, #order .delivery_option_carrier .delivery_option_logo, #orderopc .delivery_options_address .delivery_option_logo {
#order .delivery_options_address .delivery_option_logo, #order .delivery_option_carrier .delivery_option_logo, #order-opc .delivery_options_address .delivery_option_logo {
padding-left:10px;
width: 160px;
}
#order .delivery_options_address .delivery_option_logo img, #orderopc .delivery_options_address .delivery_option_logo img { /*height: 40px;*/ }
#orderopc .delivery_option_carrier {
#order .delivery_options_address .delivery_option_logo img, #order-opc .delivery_options_address .delivery_option_logo img { /*height: 40px;*/ }
#order-opc .delivery_option_carrier {
margin: 0 0 0 45px;
padding: 5px;
width: 680px;
background: white;
}
#order .delivery_option_carrier .first_item {
#order .delivery_option_carrier .first_item, #order-opc .delivery_option_carrier .first_item {
padding:0 0 0 5px;
background:url(../img/arrow_right_2.png) no-repeat 0 2px
}
@@ -1060,11 +1060,11 @@ margin: 10px 0 0 0;*/
#carrierTable th {
padding:0 15px;
height: 29px;
font-weight: bold;
line-height:29px;
color:#fff;
font-weight: bold;
line-height:29px;
color:#fff;
text-transform:uppercase;
background:url(../img/bg_address_title.png) repeat-x 0 0 #989898
background:url(../img/bg_address_title.png) repeat-x 0 0 #989898
}
#carrierTable td {
padding:15px;
@@ -1129,56 +1129,60 @@ a.iframe {font-weight:bold}
/* ************************************************************************************************
PAGE ORDER-OPC
************************************************************************************************ */
#orderopc #left_column {display:none}
#orderopc #center_column{width:757px}
#order-opc #left_column {display:none}
#order-opc #center_column{width:757px}
#orderopc h2 {}
#orderopc h2 span {
#order-opc h2 {}
#order-opc h2 span {
display:inline-block;
padding:5px 7px;
color:#fff;
background:#333;
}
#orderopc #login_form fieldset {
#order-opc #login_form fieldset {
background: none repeat scroll 0 0 #FFFFE0;
border: 1px solid #E6DB55;
font-size: 13px;
margin: 0 0 10px;
padding: 10px;
border: 1px solid #E6DB55;
font-size: 13px;
margin: 0 0 10px;
padding: 10px;
}
#orderopc #login_form fieldset p {padding:0}
#orderopc #login_form fieldset p a {padding:0}
#order-opc #login_form fieldset p {padding:0}
#order-opc #login_form fieldset p a {padding:0}
#orderopc #new_account_form p.submit {
#order-opc #new_account_form p.submit {
margin-right: 120px;
text-align:right
}
#orderopc #new_account_form p.opc-required {margin-left:20px}
#order-opc #new_account_form p.opc-required {margin-left:20px}
#orderopc .addresses {margin-bottom:20px}
#order-opc .addresses {margin-bottom:20px}
#orderopc #opc_delivery_methods h3 {margin-top:20px;}
#orderopc #opc_delivery_methods textarea {
#order-opc #opc_delivery_methods h3 {margin-top:20px;}
#order-opc #opc_delivery_methods textarea {
height:60px;
width:755px;
border:1px solid #ccc
}
#orderopc #opc_payment_methods {margin-bottom:20px}
#orderopc #opc_payment_methods #opc_payment_methods-content p{margin:0}
#order-opc #opc_payment_methods {margin-bottom:20px}
#order-opc #opc_payment_methods #opc_payment_methods-content p{margin:0}
#orderopc .delivery_option_carrier td {width:200px}
#orderopc .delivery_option_carrier td + td {width:280px;}
#orderopc .delivery_option_carrier td + td + td {width:200px}
#orderopc .delivery_option_carrier {
#order-opc .delivery_option_carrier td {width:200px}
#order-opc .delivery_option_carrier td + td {width:280px;}
#order-opc .delivery_option_carrier td + td + td {width:200px}
#order-opc .delivery_option_carrier {
margin: 0 0 0 45px;
padding: 5px;
width: 680px;
background: white;
display: none;
}
#orderopc .delivery_option_carrier .first_item {padding:0 0 0 5px}
#order-opc .delivery_option_carrier.selected {
display: table;
}
#order-opc .delivery_option_carrier .first_item {padding:0 0 0 5px}
/* ************************************************************************************************

View File

@@ -615,7 +615,15 @@ function refreshDeliveryOptions()
{
$.each($('.delivery_option_radio'), function() {
if ($(this).attr('checked'))
{
$(this).parent().find('.delivery_option_carrier').show();
var carrier_id_list = $(this).val().split(',');
carrier_id_list.pop();
var it = this;
$(carrier_id_list).each(function() {
$(it).parent().find('input[value="'+this.toString()+'"]').change();
});
}
else
$(this).parent().find('.delivery_option_carrier').hide();
});
@@ -658,3 +666,25 @@ $(document).ready(function() {
}
);
});
function updateExtraCarrier(id_delivery_option, id_address)
{
if(typeof(orderOpcUrl) != 'undefined')
var url = orderOpcUrl;
else
var url = orderUrl;
$.ajax({
type: 'POST',
url: url,
async: true,
cache: false,
dataType : "json",
data: 'ajax=true&method=updateExtraCarrier&id_address='+id_address+'&id_delivery_option='+id_delivery_option+'&token=' + static_token,
success: function(jsonData)
{
console.log(jsonData);
$('#HOOK_EXTRACARRIER_'+id_address).html(jsonData['content']);
}
});
}

View File

@@ -28,8 +28,9 @@ function updateCarrierList(json)
{
var html = json.carrier_block;
if (json.HOOK_EXTRACARRIER !== null && json.HOOK_EXTRACARRIER != undefined)
html += json.HOOK_EXTRACARRIER;
// @todo check with theme 1.4
//if ($('#HOOK_EXTRACARRIER').length == 0 && json.HOOK_EXTRACARRIER !== null && json.HOOK_EXTRACARRIER != undefined)
// html += json.HOOK_EXTRACARRIER;
$('#carrier_area').replaceWith(html);
@@ -181,7 +182,7 @@ function updateCarrierSelectionAndGift()
$('#opc_payment_methods-overlay').fadeOut('slow');
$('#opc_delivery_methods-overlay').fadeOut('slow');
}
});
});
}
function confirmFreeOrder()

View File

@@ -25,9 +25,9 @@
*}
<p>{l s='Choose the delivery addresses:'}</p>
<script type="text/javascript">
CloseTxt = '{l s='Submit'}';
QtyChanged = '{l s='Some product quantities has changed, please check them.'}';
ShipToAnOtherAddress = '{l s='Ship to multiple addresses'}';
CloseTxt = '{l s='Submit' js=1}';
QtyChanged = '{l s='Some product quantities has changed, please check them.' js=1}';
ShipToAnOtherAddress = '{l s='Ship to multiple addresses' js=1}';
</script>
<div id="order-detail-content" class="table_block">
<table id="cart_summary" class="std">

View File

@@ -34,6 +34,7 @@
var currencyBlank = '{$currencyBlank|intval}';
var txtProduct = "{l s='product'}";
var txtProducts = "{l s='products'}";
var orderUrl = '{$link->getPageLink("order", true)}';
var msg = "{l s='You must agree to the terms of service before continuing.' js=1}";
{literal}
@@ -117,7 +118,7 @@
<div class="delivery_options">
{foreach $option_list as $key => $option}
<div class="delivery_option {if ($option@index % 2)}alternate_{/if}item">
<input class="delivery_option_radio" type="radio" name="delivery_option[{$id_address}]" {if $opc}onclick="updateCarrierSelectionAndGift();"{/if} id="delivery_option_{$id_address}_{$option@index}" value="{$key}" {if $delivery_option[$id_address] == $key}checked="checked"{/if} />
<input class="delivery_option_radio" type="radio" name="delivery_option[{$id_address}]" onclick="{if $opc}updateCarrierSelectionAndGift();{else}updateExtraCarrier('{$key}', {$id_address});{/if}" id="delivery_option_{$id_address}_{$option@index}" value="{$key}" {if $delivery_option[$id_address] == $key}checked="checked"{/if} />
<label for="delivery_option_{$id_address}_{$option@index}">
<table class="resume">
<tr>
@@ -132,7 +133,6 @@
{/foreach}
</td>
<td>
{if $option.unique_carrier}
{foreach $option.carrier_list as $carrier}
{$carrier.instance->name}
@@ -167,18 +167,22 @@
</td>
</tr>
</table>
<table class="delivery_option_carrier">
<table class="delivery_option_carrier {if $delivery_option[$id_address] == $key}selected{/if}">
{foreach $option.carrier_list as $carrier}
<tr>
{if !$option.unique_carrier}
<td class="first_item">
<input type="hidden" value="{$carrier.instance->id}" name="id_carrier" />
{if $carrier.logo}
<img src="{$carrier.logo}" alt="{$carrier.instance->name}"/>
{/if}
</td>
<td>{$carrier.instance->name}</td>
<td>
{$carrier.instance->name}
</td>
{/if}
<td {if $option.unique_carrier}class="first_item" colspan="2"{/if}>
<input type="hidden" value="{$carrier.instance->id}" name="id_carrier" />
{if isset($carrier.instance->delay[$cookie->id_lang])}
{$carrier.instance->delay[$cookie->id_lang]}
{/if}
@@ -190,6 +194,7 @@
</div>
{/foreach}
</div>
<div id="HOOK_EXTRACARRIER_{$id_address}">{$HOOK_EXTRACARRIER_ADDR.$id_address}</div>
{foreachelse}
<p class="warning" id="noCarrierWarning">
{if $cart->isMultiAddressDelivery()}