// Manual merge PS 1.5.6.0

This commit is contained in:
Francois Gaillard
2013-10-07 18:22:55 +02:00
270 changed files with 7787 additions and 640 deletions

View File

@@ -16,13 +16,14 @@
- bMancone
- bumbu
- Burhan
- Cédric Mouleyre
- Caleydon Media
- cam.lafit
- Captain FLAM
- Captain-FLAM
- ccauw
- Cédric Mouleyre
- ChristopheBoucaut
- CINS
- cippest
- cmouleyre
- Corentin Delcourt
@@ -34,42 +35,50 @@
- David Gasperoni
- Davy Rolink
- djfm
- dlage
- dMetzger
- (d)oekia
- Dragan Skrbic
- DrÿSs'
- dreammeup
- DrySs
- DrÿSs
- DrÿSs'
- dSevere
- Edouard Gaulué
- emily-d
- Fabio Chelly
- fBrignoli
- fram
- Francois Gaillard
- François Gaillard
- Fran?s Gaillard
- fSerny
- Gabriel Schwardy
- gBrunier
- gCharmes
- gPoulain
- gr4devel
- Grégoire Bélorgey
- Gregory Roussac
- gRoussac
- Guillaume DELOINCE
- ha99y
- hAitmansour
- Ha!*!*y
- indesign47
- inem0o
- ivancasasempere
- Jérôme Nadaud
- jBreux
- jeckyl
- jeromenadaud
- Jerome Nadaud
- Jérôme Nadaud
- jessylenne
- jmCollin
- jObregon
- Jonathan Danse
- joseantgv
- Julien
- Kevin Granger
- kpodemski
- Krystian Podemski
@@ -77,8 +86,11 @@
- lCherifi
- ldecoker
- lLefevre
- LOIC ROSSET ltd
- makk1ntosh
- marcinsz101
- Marco Cervellin
- matiasiglesias
- Mats Rynge
- MatthieuB
- Maxence
@@ -101,32 +113,39 @@
- PhpMadman
- Pierre
- Piotr Kaczor
- Piotr Moćko
- Piotr Mocko
- PrestaEdit
- prestarocket
- Prestaspirit
- pxls
- Rémi Gaillard
- Raphaël Malié
- raulgundin
- Rémi Gaillard
- rGaillard
- Rimas Kudelis
- rMalie
- rMontagne
- romainberger
- root
- runningz
- Sébastien
- Sébastien Bocahu
- sagaradonis
- Samy Rabih
- Sarah Lorenzini
- Seb
- Sébastien
- Sébastien Bocahu
- Seynaeve
- Shagshag
- sjousse
- sLorenzini
- smartdatasoft
- soufyan
- soware
- Staging
- sThiebaut
- Sylvain WITMEYER
- tDidierjean
- unknown
- vAugagneur
- vChabot
- Vincent Augagneur
@@ -138,3 +157,5 @@
- Xavier
- Xavier POITAU
- Yoozio
- zimmi1

View File

@@ -27,6 +27,9 @@
$timer_start = microtime(true);
define('_PS_ADMIN_DIR_', getcwd());
if (!defined('PS_ADMIN_DIR'))
define('PS_ADMIN_DIR', _PS_ADMIN_DIR_);
require(_PS_ADMIN_DIR_.'/../config/config.inc.php');
require(_PS_ADMIN_DIR_.'/functions.php');

View File

@@ -49,9 +49,12 @@ try
AdminTab::$currentIndex = $currentIndex;
$iso = $context->language->iso_code;
include(_PS_TRANSLATIONS_DIR_.$iso.'/errors.php');
include(_PS_TRANSLATIONS_DIR_.$iso.'/fields.php');
include(_PS_TRANSLATIONS_DIR_.$iso.'/admin.php');
if (file_exists(_PS_TRANSLATIONS_DIR_.$iso.'/errors.php'))
include(_PS_TRANSLATIONS_DIR_.$iso.'/errors.php');
if (file_exists(_PS_TRANSLATIONS_DIR_.$iso.'/fields.php'))
include(_PS_TRANSLATIONS_DIR_.$iso.'/fields.php');
if (file_exists(_PS_TRANSLATIONS_DIR_.$iso.'/admin.php'))
include(_PS_TRANSLATIONS_DIR_.$iso.'/admin.php');
/* Server Params */
$protocol_link = (Configuration::get('PS_SSL_ENABLED')) ? 'https://' : 'http://';

View File

@@ -58,7 +58,7 @@
</ul>
</fieldset>
<h2>{l s='Members of this customer group'}</h2>
<p>{l s='Limited to the 100th first customers.'} {l s='Please use filters to narrow your search.'}</p>
<p>{l s='Limited to the first 100 customers.'} {l s='Please use filters to narrow your search.'}</p>
{$customerList}
{/block}
{/block}

View File

@@ -59,7 +59,7 @@
{if count($files_to_import)}
<select name="csv">
{foreach $files_to_import AS $filename}
<option value="{$filename}"{if $csv_selected == $filename} selected="selected"{/if}>{$filename}</option>
<option value="{$filename}"{if $csv_selected == $filename} selected="selected"{/if}>{$filename|escape:'htmlall':'UTF-8'}</option>
{/foreach}
</select>
{/if}
@@ -67,20 +67,31 @@
<a href="#upload_file_import" id="upload_file_import_link" class="button"><img src="../img/admin/add.gif" alt="Uplaod" title="Upload" />{l s='Upload'}</a>
</div>
<div style="width:50%; margin: 0 auto;">
<a href="#" onclick="$('#sample_files_import').slideToggle(); return false;">{l s='Click to view our sample import csv files.'}</a>
<ul id="sample_files_import" style="display:none">
<li><a href="../docs/csv_import/categories_import.csv">{l s='Sample Categories file'}</a></li>
<li><a href="../docs/csv_import/products_import.csv">{l s='Sample Products file'}</a></li>
<li><a href="../docs/csv_import/combinations_import.csv">{l s='Sample Combinations file'}</a></li>
<li><a href="../docs/csv_import/customers_import.csv">{l s='Sample Customers file'}</a></li>
<li><a href="../docs/csv_import/addresses_import.csv">{l s='Sample Addresses file'}</a></li>
<li><a href="../docs/csv_import/manufacturers_import.csv">{l s='Sample Manufacturers file'}</a></li>
<li><a href="../docs/csv_import/suppliers_import.csv">{l s='Sample Suppliers file'}</a></li>
{if $PS_ADVANCED_STOCK_MANAGEMENT}
<li><a href="../docs/csv_import/supply_orders_import.csv">{l s='Supply Orders sample file'}</a></li>
<li><a href="../docs/csv_import/supply_orders_details_import.csv">{l s='Supply Orders Details sample file'}</a></li>
{/if}
</ul>
<div style="width:50%; display: inline-block; float :left;">
<a href="#" onclick="$('#sample_files_import').slideToggle(); return false;">{l s='Click to view our sample import csv files.'}</a>
<ul id="sample_files_import" style="display:none;">
<li><a class="_blank" href="../docs/csv_import/categories_import.csv">{l s='Sample Categories file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/products_import.csv">{l s='Sample Products file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/combinations_import.csv">{l s='Sample Combinations file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/customers_import.csv">{l s='Sample Customers file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/addresses_import.csv">{l s='Sample Addresses file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/manufacturers_import.csv">{l s='Sample Manufacturers file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/suppliers_import.csv">{l s='Sample Suppliers file'}</a></li>
{if $PS_ADVANCED_STOCK_MANAGEMENT}
<li><a class="_blank" href="../docs/csv_import/supply_orders_import.csv">{l s='Supply Orders sample file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/supply_orders_details_import.csv">{l s='Supply Orders Details sample file'}</a></li>
{/if}
</ul>
</div>
<div style="width:50%; float:left;">
<a href="#" onclick="$('#csv_files_import').slideToggle(); return false;">{l s='Click to view your csv files.'}</a>
<ul id="csv_files_import" style="display:none;">
{foreach $files_to_import AS $filename}
<li><a href="{$current}&token={$token}&csvfilename={$filename|@base64_encode}">{$filename}</a>&nbsp;&nbsp;
<a href="{$current}&token={$token}&csvfilename={$filename|@base64_encode}&delete=1"><img src="../img/admin/delete.gif" /></a></li>
{/foreach}
</ul>
</div>
<div class="clear">&nbsp;</div>
</div>
<label class="clear">{l s='What kind of entity would you like to import?'} </label>
@@ -108,12 +119,12 @@
</div>
<label class="clear">{l s='Field separator'} </label>
<div class="margin-form">
<input type="text" size="2" value=";" name="separator"/>
<input type="text" size="2" value="{if isset($separator_selected)}{$separator_selected|escape:'htmlall':'UTF-8'}{else};{/if}" name="separator"/>
{l s='e.g. '}"1<span class="bold" style="color: red">;</span>Ipod<span class="bold" style="color: red">;</span>129.90<span class="bold" style="color: red">;</span>5"
</div>
<label class="clear">{l s='Multiple value separator'} </label>
<div class="margin-form">
<input type="text" size="2" value="," name="multiple_value_separator"/>
<input type="text" size="2" value="{if isset($multiple_value_separator_selected)}{$multiple_value_separator_selected|escape:'htmlall':'UTF-8'}{else},{/if}" name="multiple_value_separator"/>
{l s='e.g. '}"Ipod;red.jpg<span class="bold" style="color: red">,</span>blue.jpg<span class="bold" style="color: red">,</span>green.jpg;129.90"
</div>
<label for="truncate" class="clear">{l s='Delete all'} <span id="entitie">{l s='categories'}</span> {l s='before import?'} </label>
@@ -205,7 +216,7 @@
else
{
$(".import_supply_orders_details").hide();
$('input[name=multiple_value_separator]').val(',');
$('input[name=multiple_value_separator]').val('{if isset($multiple_value_separator_selected)}{$multiple_value_separator_selected}{else},{/if}');
}
if ($("#entity > option:selected").val() == 1)
$("label[for=match_ref], #match_ref, label[for=regenerate], #regenerate").show();

View File

@@ -25,7 +25,7 @@
{extends file="helpers/view/view.tpl"}
{block name="override_tpl"}
<script type="text/javascript">
var errorEmpty = '{l s='Please name your matching configuration to save.' js='1'}';
var errorEmpty = '{l s='Please name your matching configuration to save.' js=1}';
var token = '{$token}';
var current = 0;
function showTable(nb)
@@ -126,4 +126,4 @@
</table>
</form>
</div>
{/block}
{/block}

View File

@@ -38,6 +38,11 @@
var defaults_order_state = new Array();
var customization_errors = false;
var pic_dir = '{$pic_dir}';
var currency_format = 5;
var currency_sign = '';
var currency_blank = false;
var priceDisplayPrecision = 2;
{foreach from=$defaults_order_state key='module' item='id_order_state'}
defaults_order_state['{$module}'] = '{$id_order_state}';
{/foreach}
@@ -505,7 +510,6 @@
}
displaySummary(res);
resetBind();
updateCurrencySign();
}
});
}
@@ -652,11 +656,12 @@
var id_product = Number(this.id_product);
var id_product_attribute = Number(this.id_product_attribute);
cart_quantity[Number(this.id_product)+'_'+Number(this.id_product_attribute)+'_'+Number(this.id_customization)] = this.cart_quantity;
cart_content += '<tr><td><img src="'+this.image_link+'" title="'+this.name+'" /></td><td>'+this.name+'<br />'+this.attributes_small+'</td><td>'+this.reference+'</td><td><input type="text" size="7" rel="'+this.id_product+'_'+this.id_product_attribute+'" class="product_unit_price" value="'+this.price+'" />&nbsp;<span class="currency_sign"></span></td><td>';
cart_content += '<tr><td><img src="'+this.image_link+'" title="'+this.name+'" /></td><td>'+this.name+'<br />'+this.attributes_small+'</td><td>'+this.reference+'</td><td><input type="text" size="7" rel="'+this.id_product+'_'+this.id_product_attribute+'" class="product_unit_price" value="' + formatCurrency(parseFloat(this.price.replace(',', '.')), currency_format, currency_sign, currency_blank) + '" /></td><td>';
cart_content += (!this.id_customization ? '<div style="float:left;"><a href="#" class="increaseqty_product" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" ><img src="../img/admin/up.gif" /></a><br /><a href="#" class="decreaseqty_product" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'"><img src="../img/admin/down.gif" /></a></div>' : '');
cart_content += (!this.id_customization ? '<div style="float:left;"><input type="text" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" class="cart_quantity" size="2" value="'+this.cart_quantity+'" />' : '');
cart_content += (!this.id_customization ? '<a href="#" class="delete_product" rel="delete_'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" ><img src="../img/admin/delete.gif" /></a></div>' : '');
cart_content += '</td><td>'+this.total+'&nbsp;<span class="currency_sign"></span></td></tr>';
cart_content += '</td><td>' + formatCurrency(parseFloat(this.total.replace(',', '.')), currency_format, currency_sign, currency_blank) + '</td></tr>';
if (this.id_customization && this.id_customization != 0)
{
$.each(this.customized_datas[this.id_product][this.id_product_attribute][id_address_delivery], function() {
@@ -712,6 +717,11 @@
function displaySummary(jsonSummary)
{
currency_format = jsonSummary.currency.format;
currency_sign = jsonSummary.currency.sign;
currency_blank = jsonSummary.currency.blank;
priceDisplayPrecision = jsonSummary.currency.decimals ? 2 : 0;
updateCartProducts(jsonSummary.summary.products, jsonSummary.summary.gift_products, jsonSummary.cart.id_address_delivery);
updateCartVouchers(jsonSummary.summary.discounts);
updateAddressesList(jsonSummary.addresses, jsonSummary.cart.id_address_delivery, jsonSummary.cart.id_address_invoice);
@@ -737,20 +747,19 @@
$('#free_shipping').removeAttr('checked');
$('#gift_message').html(jsonSummary.cart.gift_message);
if(!changed_shipping_price)
$('#shipping_price').html('<b>'+jsonSummary.summary.total_shipping+'</b>');
if (!changed_shipping_price)
$('#shipping_price').html('<b>' + formatCurrency(parseFloat(jsonSummary.summary.total_shipping), currency_format, currency_sign, currency_blank) + '</b>');
shipping_price_selected_carrier = jsonSummary.summary.total_shipping;
$('#total_vouchers').html(jsonSummary.summary.total_discounts_tax_exc);
$('#total_shipping').html(jsonSummary.summary.total_shipping_tax_exc);
$('#total_taxes').html(jsonSummary.summary.total_tax);
$('#total_without_taxes').html(jsonSummary.summary.total_price_without_tax);
$('#total_with_taxes').html(jsonSummary.summary.total_price);
$('#total_products').html(jsonSummary.summary.total_products);
$('#total_vouchers').html(formatCurrency(parseFloat(jsonSummary.summary.total_discounts_tax_exc.replace(',', '.')), currency_format, currency_sign, currency_blank));
$('#total_shipping').html(formatCurrency(parseFloat(jsonSummary.summary.total_shipping_tax_exc.replace(',', '.')), currency_format, currency_sign, currency_blank));
$('#total_taxes').html(formatCurrency(parseFloat(jsonSummary.summary.total_tax.replace(',', '.')), currency_format, currency_sign, currency_blank));
$('#total_without_taxes').html(formatCurrency(parseFloat(jsonSummary.summary.total_price_without_tax.replace(',', '.')), currency_format, currency_sign, currency_blank));
$('#total_with_taxes').html(formatCurrency(parseFloat(jsonSummary.summary.total_price.replace(',', '.')), currency_format, currency_sign, currency_blank));
$('#total_products').html(formatCurrency(parseFloat(jsonSummary.summary.total_products.replace(',', '.')), currency_format, currency_sign, currency_blank));
id_currency = jsonSummary.cart.id_currency;
$('#id_currency option').removeAttr('selected');
$('#id_currency option[value="'+id_currency+'"]').attr('selected', true);
updateCurrencySign();
id_lang = jsonSummary.cart.id_lang;
$('#id_lang option').removeAttr('selected');
$('#id_lang option[value="'+id_lang+'"]').attr('selected', true);
@@ -778,21 +787,21 @@
qty: qty,
id_customer: id_customer,
id_cart: id_cart,
},
},
success : function(res)
{
displaySummary(res);
var errors = '';
if(res.errors.length)
{
$.each(res.errors, function() {
errors += this+'<br />';
});
$('#products_err').show();
}
else
$('#products_err').hide();
$('#products_err').html(errors);
displaySummary(res);
var errors = '';
if (res.errors.length)
{
$.each(res.errors, function() {
errors += this + '<br />';
});
$('#products_err').show();
}
else
$('#products_err').hide();
$('#products_err').html(errors);
}
});
}
@@ -888,11 +897,6 @@
});
}
function updateCurrencySign()
{
$('.currency_sign').html(currencies[id_currency]);
}
function sendMailToCustomer()
{
$.ajax({
@@ -1008,7 +1012,7 @@
<label>{l s='Search customers'}</label>
<div class="margin-form">
<input type="text" id="customer" value="" />
<p>{l s='Search a customer by tapping the first letters of his/her name'}</p>
<p>{l s='Search a customer by typing the first letters of his/her name'}</p>
<a class="fancybox button" href="{$link->getAdminLink('AdminCustomers')|escape:'htmlall':'UTF-8'}&addcustomer&liteDisplaying=1&submitFormAjax=1#">
<img src="../img/admin/add.gif" title="new"/><span>{l s='Add new customer'}</span>
</a>
@@ -1023,7 +1027,7 @@
<div class="margin-form">
<input type="hidden" value="" id="id_cart" name="id_cart" />
<input type="text" id="product" value="" />
<p>{l s='Search a product by tapping the first letters of his/her name.'}</p>
<p>{l s='Search a product by typing the first letters of his/her name.'}</p>
</div>
<div id="products_found">
<div id="product_list">
@@ -1208,7 +1212,7 @@
</select>
</p>
<p>
<label for="shipping_price">{l s='Shipping price'}</label> <span id="shipping_price" name="shipping_price"></span>&nbsp;<span class="currency_sign"></span>&nbsp;
<label for="shipping_price">{l s='Shipping price'}</label> <span id="shipping_price" name="shipping_price"></span>
</p>
<p>
<label for="free_shipping">{l s='Free shipping'}</label>
@@ -1232,12 +1236,12 @@
<div id="send_email_feedback"></div>
<div id="cart_summary" style="clear:both;float:left;">
<ul>
<li><span class="total_cart">{l s='Total products'}</span><span id="total_products"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total vouchers'}</span><span id="total_vouchers"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total shipping'}</span><span id="total_shipping"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total taxes'}</span><span id="total_taxes"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total without taxes'}</span><span id="total_without_taxes"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total with taxes'}</span><span id="total_with_taxes"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total products'}</span><span id="total_products"></span></li>
<li><span class="total_cart">{l s='Total vouchers'}</span><span id="total_vouchers"></span></li>
<li><span class="total_cart">{l s='Total shipping'}</span><span id="total_shipping"></span></li>
<li><span class="total_cart">{l s='Total taxes'}</span><span id="total_taxes"></span></li>
<li><span class="total_cart">{l s='Total without taxes'}</span><span id="total_without_taxes"></span></li>
<li><span class="total_cart">{l s='Total with taxes'}</span><span id="total_with_taxes"></span></li>
</ul>
</div>
<div class="order_message_right">

View File

@@ -41,7 +41,7 @@
<div class="margin-form">
<select id="id_category" name="id_category">
{foreach from=$categories item='category'}
<option value="{$category.id_category}">{$category.name}</option>
<option value="{$category.id_category|intval}">({$category.id_category|intval}) {$category.name}</option>
{/foreach}
</select>
<a class="button bt-icon" href="#" id="add_condition_category">

View File

@@ -54,7 +54,7 @@ $(document).ready(function() {
</div>
<div class="margin-form">
<input type="submit" id="_form_submit_btn" value="{l s='Save'}" name="submitChangestate" class="button" style="display: none;">
<input type="submit" id="{$table}_form_submit_btn" value="{l s='Save'}" name="submitChangestate" class="button" style="display: none;">
</div>
{/if}
{/block}

View File

@@ -192,7 +192,7 @@
{/if}
{elseif $input.type == 'radio'}
{foreach $input.values as $value}
<input type="radio" name="{$input.name}"id="{$value.id}" value="{$value.value|escape:'htmlall':'UTF-8'}"
<input type="radio" name="{$input.name}" id="{$value.id}" value="{$value.value|escape:'htmlall':'UTF-8'}"
{if $fields_value[$input.name] == $value.value}checked="checked"{/if}
{if isset($input.disabled) && $input.disabled}disabled="disabled"{/if} />
<label {if isset($input.class)}class="{$input.class}"{/if} for="{$value.id}">

View File

@@ -430,7 +430,7 @@ class CartCore extends ObjectModel
product_shop.`available_for_order`, product_shop.`price`, product_shop.`active`, product_shop.`unity`, product_shop.`unit_price_ratio`,
stock.`quantity` AS quantity_available, p.`width`, p.`height`, p.`depth`, stock.`out_of_stock`, p.`weight`,
p.`date_add`, p.`date_upd`, IFNULL(stock.quantity, 0) as quantity, pl.`link_rewrite`, cl.`link_rewrite` AS category,
CONCAT(cp.`id_product`, IFNULL(cp.`id_product_attribute`, 0), IFNULL(cp.`id_address_delivery`, 0)) AS unique_id, cp.id_address_delivery,
CONCAT(LPAD(cp.`id_product`, 10, 0), LPAD(IFNULL(cp.`id_product_attribute`, 0), 10, 0), IFNULL(cp.`id_address_delivery`, 0)) AS unique_id, cp.id_address_delivery,
product_shop.`wholesale_price`, product_shop.advanced_stock_management, ps.product_supplier_reference supplier_reference');
// Build FROM
@@ -1677,6 +1677,7 @@ class CartCore extends ObjectModel
$warehouse_count_by_address[$product['id_address_delivery']][$warehouse['id_warehouse']]++;
}
}
unset($product);
arsort($warehouse_count_by_address);
@@ -1694,9 +1695,12 @@ class CartCore extends ObjectModel
$id_warehouse = 0;
foreach ($warehouse_count_by_address[$product['id_address_delivery']] as $id_war => $val)
{
$product['carrier_list'] = array_merge($product['carrier_list'], Carrier::getAvailableCarrierList(new Product($product['id_product']), $id_war, $product['id_address_delivery'], null, $this));
if (in_array((int)$id_war, $product['warehouse_list']) && $id_warehouse == 0)
$id_warehouse = (int)$id_war;
if (in_array((int)$id_war, $product['warehouse_list']))
{
$product['carrier_list'] = array_merge($product['carrier_list'], Carrier::getAvailableCarrierList(new Product($product['id_product']), $id_war, $product['id_address_delivery'], null, $this));
if (!$id_warehouse)
$id_warehouse = (int)$id_war;
}
}
if (!isset($grouped_by_warehouse[$product['id_address_delivery']]['in_stock'][$id_warehouse]))
@@ -1715,6 +1719,7 @@ class CartCore extends ObjectModel
$grouped_by_warehouse[$product['id_address_delivery']][$key][$id_warehouse][] = $product;
}
unset($product);
// Step 3 : grouped product from grouped_by_warehouse by available carriers
$grouped_by_carriers = array();
@@ -1733,7 +1738,6 @@ class CartCore extends ObjectModel
{
if (!isset($grouped_by_carriers[$id_address_delivery][$key][$id_warehouse]))
$grouped_by_carriers[$id_address_delivery][$key][$id_warehouse] = array();
foreach ($product_list as $product)
{
$package_carriers_key = implode(',', $product['carrier_list']);
@@ -1798,7 +1802,6 @@ class CartCore extends ObjectModel
);
$package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['carrier_list'] =
array_intersect($package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['carrier_list'], $data['carrier_list']);
$package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['product_list'] =
array_merge($package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['product_list'], $data['product_list']);

View File

@@ -107,8 +107,8 @@ class CategoryCore extends ObjectModel
'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
// Lang fields
'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 64),
'link_rewrite' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isLinkRewrite', 'required' => true, 'size' => 64),
'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 128),
'link_rewrite' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isLinkRewrite', 'required' => true, 'size' => 128),
'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),
'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128),
'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),

View File

@@ -188,8 +188,9 @@ class CurrencyCore extends ObjectModel
4 => array('left' => '', 'right' => &$formated_strings['right']),
5 => array('left' => '', 'right' => &$formated_strings['right'])
);
return ($formats[$this->format][$side]);
if (isset($formats[$this->format][$side]))
return ($formats[$this->format][$side]);
return $this->sign;
}
/**

View File

@@ -128,34 +128,44 @@ class FeatureValueCore extends ObjectModel
return $tab['value'];
}
public static function addFeatureValueImport($id_feature, $name)
public static function addFeatureValueImport($id_feature, $value, $id_product = null, $id_lang = null)
{
$rq = Db::getInstance()->executeS('
SELECT fv.`id_feature_value`
FROM '._DB_PREFIX_.'feature_value fv
LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl
ON (fvl.`id_feature_value` = fv.`id_feature_value`)
WHERE `value` = \''.pSQL($name).'\'
AND fv.`id_feature` = '.(int)$id_feature.'
GROUP BY fv.`id_feature_value` LIMIT 1
');
if (!isset($rq[0]['id_feature_value']) || !$id_feature_value = (int)$rq[0]['id_feature_value'])
if (!is_null($id_product) && $id_product)
{
// Feature doesn't exist, create it
$feature_value = new FeatureValue();
$id_feature_value = Db::getInstance()->getValue('
SELECT `id_feature_value`
FROM '._DB_PREFIX_.'feature_product
WHERE `id_feature` = '.(int)$id_feature.'
AND `id_product` = '.(int)$id_product);
$languages = Language::getLanguages();
foreach ($languages as $language)
$feature_value->value[$language['id_lang']] = strval($name);
$feature_value->id_feature = (int)$id_feature;
$feature_value->custom = 1;
$feature_value->add();
return (int)$feature_value->id;
if ($id_feature_value && !is_null($id_lang) && $id_lang)
Db::getInstance()->execute('
UPDATE '._DB_PREFIX_.'feature_value_lang
SET `value` = \''.pSQL($value).'\'
WHERE `id_feature_value` = '.(int)$id_feature_value.'
AND `id_lang` = '.(int)$id_lang);
}
return (int)$id_feature_value;
else
$id_feature_value = Db::getInstance()->getValue('
SELECT fv.`id_feature_value`
FROM '._DB_PREFIX_.'feature_value fv
LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.`id_feature_value` = fv.`id_feature_value`)
WHERE `value` = \''.pSQL($value).'\'
AND fv.`id_feature` = '.(int)$id_feature.'
GROUP BY fv.`id_feature_value`');
if ($id_feature_value)
return (int)$id_feature_value;
// Feature doesn't exist, create it
$feature_value = new FeatureValue();
$feature_value->id_feature = (int)$id_feature;
$feature_value->custom = 0;
foreach (Language::getLanguages() as $language)
$feature_value->value[$language['id_lang']] = $value;
$feature_value->add();
return (int)$feature_value->id;
}
public function add($autodate = true, $nullValues = false)

View File

@@ -137,6 +137,7 @@ class GroupReductionCore extends ObjectModel
SELECT `reduction`
FROM `'._DB_PREFIX_.'product_group_reduction_cache`
WHERE `id_product` = '.(int)$id_product.' AND `id_group` = '.(int)$id_group);
// Should return string (decimal in database) and not a float
return self::$reduction_cache[$id_product.'-'.$id_group];
}

View File

@@ -688,26 +688,28 @@ class LanguageCore extends ObjectModel
if (Language::getIdByIso($iso_code))
return true;
// Initialize the language
$lang = new Language();
$lang->iso_code = $iso_code;
$lang->language_code = $iso_code;
$lang->active = true;
// If the language pack has not been provided, retrieve it from prestashop.com
if (!$lang_pack)
$lang_pack = Tools::jsonDecode(Tools::file_get_contents('http://www.prestashop.com/download/lang_packs/get_language_pack.php?version='._PS_VERSION_.'&iso_lang='.$iso_code));
// If a language pack has been found or provided, prefill the language object with the value
if ($lang_pack)
{
if (isset($lang_pack->name)
&& isset($lang_pack->version)
&& isset($lang_pack->iso_code))
$lang->name = $lang_pack->name;
}
elseif ($params_lang !== null && is_array($params_lang))
foreach (get_object_vars($lang_pack) as $key => $value)
if ($key != 'iso_code' && isset(Language::$definition['fields'][$key]))
$lang->$key = $value;
// Use the values given in parameters to override the data retrieved automatically
if ($params_lang !== null && is_array($params_lang))
foreach ($params_lang as $key => $value)
$lang->$key = $value;
else
return false;
if ($key != 'iso_code' && isset(Language::$definition['fields'][$key]))
$lang->$key = $value;
if (!$lang->add(true, false, $only_add))
return false;
@@ -725,7 +727,7 @@ class LanguageCore extends ObjectModel
}
else
Language::_copyNoneFlag((int)$lang->id);
$files_copy = array(
'/en.jpg',
'/en-default-'.ImageType::getFormatedName('thickbox').'.jpg',
@@ -735,7 +737,7 @@ class LanguageCore extends ObjectModel
'/en-default-'.ImageType::getFormatedName('small').'.jpg',
'/en-default-'.ImageType::getFormatedName('scene').'.jpg'
);
foreach (array(_PS_CAT_IMG_DIR_, _PS_MANU_IMG_DIR_, _PS_PROD_IMG_DIR_, _PS_SUPP_IMG_DIR_) as $to)
foreach ($files_copy as $file)
@copy(dirname(__FILE__).'/../img/l'.$file, $to.str_replace('/en', '/'.$iso_code, $file));

View File

@@ -1368,8 +1368,8 @@ class ProductCore extends ObjectModel
}
$product_supplier->product_supplier_reference = pSQL($supplier_reference);
$product_supplier->product_supplier_price_te = (float)$price;
$product_supplier->id_currency = (int)$id_currency;
$product_supplier->product_supplier_price_te = !is_null($price) ? (float)$price : (float)$product_supplier->product_supplier_price_te;
$product_supplier->id_currency = !is_null($id_currency) ? (int)$id_currency : (int)$product_supplier->id_currency;
$product_supplier->save();
}
}
@@ -2509,7 +2509,7 @@ class ProductCore extends ObjectModel
$id_state = 0;
$zipcode = 0;
if (!$id_address)
if (!$id_address && Validate::isLoadedObject($cur_cart))
$id_address = $cur_cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')};
if ($id_address)
@@ -2720,8 +2720,7 @@ class ProductCore extends ObjectModel
if ($use_group_reduction)
{
$reduction_from_category = GroupReduction::getValueForProduct($id_product, $id_group);
if (!empty($reduction_from_category) && (float)$reduction_from_category == 0)
if ($reduction_from_category !== false)
$price -= $price * (float)$reduction_from_category;
else // apply group reduction if there is no group reduction for this category
$price *= ((100 - Group::getReductionByIdGroup($id_group)) / 100);
@@ -3160,8 +3159,9 @@ class ProductCore extends ObjectModel
LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (p.`id_manufacturer`= m.`id_manufacturer`)
'.Product::sqlStock('p', 0).'
WHERE `id_product_1` = '.(int)$this->id.
($active ? ' AND product_shop.`active` = 1' : '').'
($active ? ' AND product_shop.`active` = 1 AND product_shop.`visibility` != \'none\'' : '').'
GROUP BY product_shop.id_product';
if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql))
return false;
foreach ($result as &$row)

View File

@@ -103,7 +103,7 @@ class ProductSaleCore
LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
'.Product::sqlStock('p').'
WHERE product_shop.`active` = 1
AND p.`visibility` != \'none\'
AND product_shop.`visibility` != \'none\'
AND p.`id_product` IN (
SELECT cp.`id_product`
FROM `'._DB_PREFIX_.'category_group` cg
@@ -156,7 +156,7 @@ class ProductSaleCore
ON cl.`id_category` = product_shop.`id_category_default`
AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').'
WHERE product_shop.`active` = 1
AND p.`visibility` != \'none\'
AND product_shop.`visibility` != \'none\'
AND p.`id_product` IN (
SELECT cp.`id_product`
FROM `'._DB_PREFIX_.'category_group` cg

View File

@@ -169,7 +169,8 @@ class SpecificPriceCore extends ObjectModel
$priority = SpecificPrice::getPriority($id_product);
foreach (array_reverse($priority) as $k => $field)
$select .= ' IF (`'.bqSQL($field).'` = '.(int)$$field.', '.pow(2, $k + 1).', 0) + ';
if (!empty($field))
$select .= ' IF (`'.bqSQL($field).'` = '.(int)$$field.', '.pow(2, $k + 1).', 0) + ';
return rtrim($select, ' +').') AS `score`';
}
@@ -228,7 +229,7 @@ class SpecificPriceCore extends ObjectModel
(`to` = \'0000-00-00 00:00:00\' OR \''.$now.'\' <= `to`)
)
AND id_cart IN (0, '.(int)$id_cart.')'.
(($real_quantity != 0 && !Configuration::get('PS_QTY_DISCOUNT_ON_COMBINATION')) ? ' AND IF(`from_quantity` > 1, `from_quantity`, 0) <= IF(id_product_attribute=0,'.(int)$quantity.' ,'.(int)$real_quantity.')' : 'AND `from_quantity` <= '.(int)$real_quantity).'
(($real_quantity != 0 && !Configuration::get('PS_QTY_DISCOUNT_ON_COMBINATION')) ? ' AND IF(`from_quantity` > 1, `from_quantity`, 0) <= IF(id_product_attribute=0,'.(int)$quantity.' ,'.(int)$real_quantity.')' : 'AND `from_quantity` <= '.max(1, (int)$real_quantity)).'
ORDER BY `id_product_attribute` DESC, `from_quantity` DESC, `id_specific_price_rule` ASC, `score` DESC');
}
return self::$_specificPriceCache[$key];
@@ -301,7 +302,7 @@ class SpecificPriceCore extends ObjectModel
if (!isset($last_quantity[(int)$specific_price['id_product_attribute']]))
$last_quantity[(int)$specific_price['id_product_attribute']] = $specific_price['from_quantity'];
elseif ($last_quantity[(int)$specific_price['id_product_attribute']] == $specific_price['from_quantity'])
break;
continue;
$last_quantity[(int)$specific_price['id_product_attribute']] = $specific_price['from_quantity'];
if ($specific_price['from_quantity'] > 1)

View File

@@ -183,7 +183,7 @@ class SpecificPriceRuleCore extends ObjectModel
if ($conditions_group)
{
$where .= ' AND (';
$where .= ' AND ((';
foreach ($conditions_group as $id_condition_group => $condition_group)
{
$fields = array(
@@ -235,7 +235,7 @@ class SpecificPriceRuleCore extends ObjectModel
$where = rtrim($where, ' AND ').') OR (';
}
$where = rtrim($where, 'OR (');
$where = rtrim($where, 'OR (').')';
}
if ($products && count($products))
$where .= ' AND p.id_product IN ('.implode(', ', array_map('intval', $products)).')';
@@ -267,7 +267,7 @@ class SpecificPriceRuleCore extends ObjectModel
public static function applyRuleToProduct($id_rule, $id_product, $id_product_attribute = null)
{
$rule = new SpecificPriceRule((int)$id_rule);
if (!Validate::isLoadedObject($rule))
if (!Validate::isLoadedObject($rule) || !$id_product)
return false;
$specific_price = new SpecificPrice();

View File

@@ -40,7 +40,7 @@ class TagCore extends ObjectModel
'primary' => 'id_tag',
'fields' => array(
'id_lang' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
'name' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true),
'name' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 32),
),
);
@@ -100,22 +100,24 @@ class TagCore extends ObjectModel
$tag_list = array_filter(array_unique(array_map('trim', preg_split('#\\'.$separator.'#', $tag_list, null, PREG_SPLIT_NO_EMPTY))));
$list = array();
foreach ($tag_list as $tag)
{
if (!Validate::isGenericName($tag))
return false;
$tag_obj = new Tag(null, trim($tag), (int)$id_lang);
/* Tag does not exist in database */
if (!Validate::isLoadedObject($tag_obj))
if (is_array($tag_list))
foreach ($tag_list as $tag)
{
$tag_obj->name = trim($tag);
$tag_obj->id_lang = (int)$id_lang;
$tag_obj->add();
if (!Validate::isGenericName($tag))
return false;
$tag = trim(substr($tag, 0, self::$definition['fields']['name']['size']));
$tag_obj = new Tag(null, $tag, (int)$id_lang);
/* Tag does not exist in database */
if (!Validate::isLoadedObject($tag_obj))
{
$tag_obj->name = $tag;
$tag_obj->id_lang = (int)$id_lang;
$tag_obj->add();
}
if (!in_array($tag_obj->id, $list))
$list[] = $tag_obj->id;
}
if (!in_array($tag_obj->id, $list))
$list[] = $tag_obj->id;
}
$data = '';
foreach ($list as $tag)
$data .= '('.(int)$tag.','.(int)$id_product.'),';

View File

@@ -494,6 +494,20 @@ class ToolsCore
if (($is_negative = ($price < 0)))
$price *= -1;
$price = Tools::ps_round($price, $c_decimals);
/*
* If the language is RTL and the selected currency format contains spaces as thousands separator
* then the number will be printed in reverse since the space is interpreted as separating words.
* To avoid this we replace the currency format containing a space with the one containing a comma (,) as thousand
* separator when the language is RTL.
*
* TODO: This is not ideal, a currency format should probably be tied to a language, not to a currency.
*/
if(($c_format == 2) && ($context->language->is_rtl == 1))
{
$c_format = 4;
}
switch ($c_format)
{
/* X 0,000.00 */
@@ -512,9 +526,9 @@ class ToolsCore
case 4:
$ret = number_format($price, $c_decimals, '.', ',').$blank.$c_char;
break;
/* 0 000.00 X Added for the switzerland currency */
/* 0'000.00 X Added for the switzerland currency */
case 5:
$ret = number_format($price, $c_decimals, '.', ' ').$blank.$c_char;
$ret = number_format($price, $c_decimals, '.', "'").$blank.$c_char;
break;
}
if ($is_negative)

View File

@@ -654,7 +654,7 @@ class AdminControllerCore extends Controller
'export_content' => $content
)
);
$this->layout = 'layout-export.tpl';
}
@@ -2112,6 +2112,7 @@ class AdminControllerCore extends Controller
*/
public function getList($id_lang, $order_by = null, $order_way = null, $start = 0, $limit = null, $id_lang_shop = false)
{
if (!isset($this->list_id))
$this->list_id = $this->table;
@@ -2166,12 +2167,20 @@ class AdminControllerCore extends Controller
$order_by = $this->fields_list[$order_by]['order_key'];
/* Determine offset from current page */
if ((isset($_POST['submitFilter'.$this->list_id]) ||
isset($_POST['submitFilter'.$this->list_id.'_x']) ||
isset($_POST['submitFilter'.$this->list_id.'_y'])) &&
!empty($_POST['submitFilter'.$this->list_id]) &&
is_numeric($_POST['submitFilter'.$this->list_id]))
$start = ((int)$_POST['submitFilter'.$this->list_id] - 1) * $limit;
elseif (empty($start) && isset($this->context->cookie->{$this->list_id.'_start'}) && Tools::isSubmit('export'.$this->table))
$start = $this->context->cookie->{$this->list_id.'_start'};
else
$start = 0;
$this->context->cookie->{$this->list_id.'_start'} = $start;
/* Cache */
$this->_lang = (int)$id_lang;
@@ -2241,8 +2250,6 @@ class AdminControllerCore extends Controller
$having_clause .= $this->_having.' ';
}
$this->_listsql = '
SELECT SQL_CALC_FOUND_ROWS
'.($this->_tmpTableFilter ? ' * FROM (SELECT ' : '');
@@ -2464,8 +2471,27 @@ class AdminControllerCore extends Controller
$this->errors[$field] = $error;
}
/* Overload this method for custom checking */
$this->_childValidation();
/* Checking for multilingual fields validity */
if (isset($rules['validateLang']) && is_array($rules['validateLang']))
foreach ($rules['validateLang'] as $field_lang => $function)
foreach ($languages as $language)
if (($value = Tools::getValue($field_lang.'_'.$language['id_lang'])) !== false && !empty($value))
{
if (Tools::strtolower($function) == 'iscleanhtml' && Configuration::get('PS_ALLOW_HTML_IFRAME'))
$res = Validate::$function($value, true);
else
$res = Validate::$function($value);
if (!$res)
$this->errors[$field_lang.'_'.$language['id_lang']] = sprintf(
Tools::displayError('The %1$s field (%2$s) is invalid.'),
call_user_func(array($class_name, 'displayFieldName'), $field_lang, $class_name),
$language['name']
);
}
}
/**

View File

@@ -60,7 +60,7 @@ class ModuleFrontControllerCore extends FrontController
elseif (Tools::file_exists_cache($this->getTemplatePath().$template))
$this->template = $this->getTemplatePath().$template;
else
throw new PrestaShopException("Template '$template'' not found");
throw new PrestaShopException("Template '$template' not found");
}
/**

View File

@@ -27,7 +27,7 @@
class HelperCore
{
public $currentIndex;
public $table;
public $table = 'configuration';
public $identifier;
public $token;
public $toolbar_btn;

View File

@@ -37,8 +37,6 @@ class HelperFormCore extends Helper
/** @var array values of form fields */
public $fields_value = array();
public $table = 'configuration';
public $name_controller = '';
/** @var string if not null, a title will be added on that list */

View File

@@ -1730,7 +1730,7 @@ abstract class ModuleCore
{
Tools::enableCache();
if ($cache_id === null)
$cache_id = Module::getCacheId($this->name);
$cache_id = $this->name;
Tools::clearCache(Context::getContext()->smarty, $this->getTemplatePath($template), $cache_id, $compile_id);
Tools::restoreCacheSettings();
}

View File

@@ -243,7 +243,7 @@ class OrderInvoiceCore extends ObjectModel
WHERE od.`id_order` = '.(int)$this->id_order.'
AND od.`id_order_invoice` = '.(int)$this->id.'
AND od.`tax_computation_method` = '.(int)TaxCalculator::ONE_AFTER_ANOTHER_METHOD
);
) || Configuration::get('PS_INVOICE_TAXES_BREAKDOWN');
}
/**
@@ -301,7 +301,7 @@ class OrderInvoiceCore extends ObjectModel
{
// sum by order details in order to retrieve real taxes rate
$taxes_infos = Db::getInstance()->executeS('
SELECT odt.`id_order_detail`, t.`rate` AS `name`, SUM(od.`total_price_tax_excl`) AS total_price_tax_excl, SUM(t.`rate`) AS rate, SUM(`total_amount`) AS `total_amount`, od.`ecotax`, od.`ecotax_tax_rate`, od.`product_quantity`
SELECT odt.`id_order_detail`, t.`rate` AS `name`, od.`total_price_tax_excl` AS total_price_tax_excl, SUM(t.`rate`) AS rate, SUM(`total_amount`) AS `total_amount`, od.`ecotax`, od.`ecotax_tax_rate`, od.`product_quantity`
FROM `'._DB_PREFIX_.'order_detail_tax` odt
LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = odt.`id_tax`)
LEFT JOIN `'._DB_PREFIX_.'order_detail` od ON (od.`id_order_detail` = odt.`id_order_detail`)

View File

@@ -49,7 +49,7 @@ class OrderPaymentCore extends ObjectModel
'id_currency' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
'amount' => array('type' => self::TYPE_FLOAT, 'validate' => 'isNegativePrice', 'required' => true),
'payment_method' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName'),
'conversion_rate' => array('type' => self::TYPE_INT, 'validate' => 'isFloat'),
'conversion_rate' => array('type' => self::TYPE_FLOAT, 'validate' => 'isFloat'),
'transaction_id' => array('type' => self::TYPE_STRING, 'validate' => 'isAnything', 'size' => 254),
'card_number' => array('type' => self::TYPE_STRING, 'validate' => 'isAnything', 'size' => 254),
'card_brand' => array('type' => self::TYPE_STRING, 'validate' => 'isAnything', 'size' => 254),

View File

@@ -90,7 +90,7 @@ class HTMLTemplateDeliverySlipCore extends HTMLTemplate
*/
public function getFilename()
{
return Configuration::get('PS_DELIVERY_PREFIX', Context::getContext()->language->id, null, $this->order->id_shop).sprintf('%06d', $this->order->invoice_number).'.pdf';
return Configuration::get('PS_DELIVERY_PREFIX', Context::getContext()->language->id, null, $this->order->id_shop).sprintf('%06d', $this->order->delivery_number).'.pdf';
}
}

View File

@@ -1187,7 +1187,7 @@ class WebserviceRequestCore
else
{
$object = new $this->resourceConfiguration['retrieveData']['className']();
if ($object->isMultiShopField($this->resourceConfiguration['fields'][$fieldName]['sqlId']))
if ($object->isMultiShopField($this->resourceConfiguration['fields'][$fieldName]['sqlId']) || $fieldName == 'id')
$table_alias = 'multi_shop_'.$this->resourceConfiguration['retrieveData']['table'];
else
$table_alias = '';

View File

@@ -264,7 +264,7 @@ class AdminAttributesGroupsControllerCore extends AdminController
'input' => array(
array(
'type' => 'select',
'label' => $this->l('Attribute type:'),
'label' => $this->l('Attribute group:'),
'name' => 'id_attribute_group',
'required' => true,
'options' => array(
@@ -272,7 +272,7 @@ class AdminAttributesGroupsControllerCore extends AdminController
'id' => 'id_attribute_group',
'name' => 'name'
),
'desc' => $this->l('Choose the type of the attribute')
'desc' => $this->l('Choose the group of the attribute')
),
array(
'type' => 'text',

View File

@@ -684,18 +684,21 @@ class AdminCartsControllerCore extends AdminController
$free_shipping = true;
break;
}
return array('summary' => $this->getCartSummary(),
'delivery_option_list' => $this->getDeliveryOptionList(),
'cart' => $this->context->cart,
'addresses' => $this->context->customer->getAddresses((int)$this->context->cart->id_lang),
'id_cart' => $id_cart,
'order_message' => $message_content,
'link_order' => $this->context->link->getPageLink(
'order', false,
(int)$this->context->cart->id_lang,
'step=3&recover_cart='.$id_cart.'&token_cart='.md5(_COOKIE_KEY_.'recover_cart_'.$id_cart)),
'free_shipping' => (int)$free_shipping
);
return array(
'summary' => $this->getCartSummary(),
'delivery_option_list' => $this->getDeliveryOptionList(),
'cart' => $this->context->cart,
'currency' => new Currency($this->context->cart->id_currency),
'addresses' => $this->context->customer->getAddresses((int)$this->context->cart->id_lang),
'id_cart' => $id_cart,
'order_message' => $message_content,
'link_order' => $this->context->link->getPageLink(
'order', false,
(int)$this->context->cart->id_lang,
'step=3&recover_cart='.$id_cart.'&token_cart='.md5(_COOKIE_KEY_.'recover_cart_'.$id_cart)
),
'free_shipping' => (int)$free_shipping
);
}
public function initToolbar()

View File

@@ -151,7 +151,7 @@ class AdminCurrenciesControllerCore extends AdminController
array('key' => 2, 'name' => '0 000,00X ('.$this->l('as with Euros').')'),
array('key' => 3, 'name' => 'X0.000,00'),
array('key' => 4, 'name' => '0,000.00X'),
array('key' => 5, 'name' => '0 000.00X') // Added for the switzerland currency
array('key' => 5, 'name' => '0\'000.00X') // Added for the switzerland currency
),
'name' => 'name',
'id' => 'key'

View File

@@ -293,6 +293,7 @@ class AdminImportControllerCore extends AdminController
case $this->entities[$this->l('Addresses')]:
//Overwrite required_fields
$this->required_fields = array(
'alias',
'lastname',
'firstname',
'address1',
@@ -307,7 +308,7 @@ class AdminImportControllerCore extends AdminController
'id' => array('label' => $this->l('ID')),
'alias' => array('label' => $this->l('Alias *')),
'active' => array('label' => $this->l('Active (0/1)')),
'customer_email' => array('label' => $this->l('Customer email')),
'customer_email' => array('label' => $this->l('Customer email *')),
'id_customer' => array('label' => $this->l('Customer ID:')),
'manufacturer' => array('label' => $this->l('Manufacturer')),
'supplier' => array('label' => $this->l('Supplier')),
@@ -316,7 +317,7 @@ class AdminImportControllerCore extends AdminController
'firstname' => array('label' => $this->l('First Name *')),
'address1' => array('label' => $this->l('Address 1 *')),
'address2' => array('label' => $this->l('Address 2')),
'postcode' => array('label' => $this->l('Postal code / Zipcode*')),
'postcode' => array('label' => $this->l('Postal code / Zipcode *')),
'city' => array('label' => $this->l('City *')),
'country' => array('label' => $this->l('Country *')),
'state' => array('label' => $this->l('State')),
@@ -426,7 +427,7 @@ class AdminImportControllerCore extends AdminController
}
$this->separator = strval(trim(Tools::getValue('separator', ';')));
$this->separator = substr(strval(trim(Tools::getValue('separator', ';'))), 0, 1);
if (is_null(Tools::getValue('multiple_value_separator')) || trim(Tools::getValue('multiple_value_separator')) == '')
$this->multiple_value_separator = ',';
@@ -469,14 +470,26 @@ class AdminImportControllerCore extends AdminController
if (isset($this->entities[$this->l(Tools::ucfirst(Tools::getValue('import_type')))]))
{
$entity_selected = $this->entities[$this->l(Tools::ucfirst(Tools::getValue('import_type')))];
$this->context->cookie->entity_selected = $entity_selected;
$this->context->cookie->entity_selected = (int)$entity_selected;
}
elseif (isset($this->context->cookie->entity_selected))
$entity_selected = (int)$this->context->cookie->entity_selected;
$csv_selected = '';
if (isset($this->context->cookie->csv_selected))
$csv_selected = pSQL($this->context->cookie->csv_selected);
$csv_selected = base64_decode($this->context->cookie->csv_selected);
$id_lang_selected = '';
if (isset($this->context->cookie->iso_lang_selected) && $this->context->cookie->iso_lang_selected)
$id_lang_selected = (int)Language::getIdByIso(base64_decode($this->context->cookie->iso_lang_selected));
$separator_selected = '';
if (isset($this->context->cookie->separator_selected) && $this->context->cookie->separator_selected)
$separator_selected = base64_decode($this->context->cookie->separator_selected);
$multiple_value_separator_selected = '';
if (isset($this->context->cookie->multiple_value_separator_selected) && $this->context->cookie->multiple_value_separator_selected)
$multiple_value_separator_selected = base64_decode($this->context->cookie->multiple_value_separator_selected);
$this->tpl_form_vars = array(
'module_confirmation' => (Tools::getValue('import')) && (isset($this->warnings) && !count($this->warnings)),
@@ -484,9 +497,11 @@ class AdminImportControllerCore extends AdminController
'entities' => $this->entities,
'entity_selected' => $entity_selected,
'csv_selected' => $csv_selected,
'separator_selected' => $separator_selected,
'multiple_value_separator_selected' => $multiple_value_separator_selected,
'files_to_import' => $files_to_import,
'languages' => Language::getLanguages(false),
'id_language' => $this->context->language->id,
'id_language' => ($id_lang_selected) ? $id_lang_selected : $this->context->language->id,
'available_fields' => $this->getAvailableFields(),
'truncateAuthorized' => (Shop::isFeatureActive() && $this->context->employee->isSuperAdmin()) || !Shop::isFeatureActive(),
'PS_ADVANCED_STOCK_MANAGEMENT' => Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT'),
@@ -511,10 +526,11 @@ class AdminImportControllerCore extends AdminController
for ($i = 0; $i < $nb_table; $i++)
$data[$i] = $this->generateContentTable($i, $nb_column, $handle, $this->separator);
if ($entity_selected = (int)Tools::getValue('entity'))
$this->context->cookie->entity_selected = $entity_selected;
if ($csv_selected = Tools::getValue('csv'))
$this->context->cookie->csv_selected = $csv_selected;
$this->context->cookie->entity_selected = (int)Tools::getValue('entity');
$this->context->cookie->iso_lang_selected = base64_encode(Tools::getValue('iso_lang'));
$this->context->cookie->separator_selected = base64_encode(Tools::getValue('separator'));
$this->context->cookie->multiple_value_separator_selected = base64_encode(Tools::getValue('multiple_value_separator'));
$this->context->cookie->csv_selected = base64_encode(Tools::getValue('csv'));
$this->tpl_view_vars = array(
'import_matchs' => Db::getInstance()->executeS('SELECT * FROM '._DB_PREFIX_.'import_match'),
@@ -574,17 +590,12 @@ class AdminImportControllerCore extends AdminController
for ($i = 0; $i < $nb_column; $i++)
if (MAX_COLUMNS * (int)$current_table <= $i && (int)$i < MAX_COLUMNS * ((int)$current_table + 1))
$html .= '<th style="width: '.(900 / MAX_COLUMNS).'px; vertical-align: top; padding: 4px">
<select onchange="askFeatureName(this, '.$i.');"
style="width: '.(900 / MAX_COLUMNS).'px;"
<select style="width: '.(900 / MAX_COLUMNS).'px;"
id="type_value['.$i.']"
name="type_value['.$i.']"
class="type_value">
'.$this->getTypeValuesOptions($i).'
</select>
<div id="features_'.$i.'" style="display: none;">
<input style="width: 90px" type="text" name="" id="feature_name_'.$i.'">
<input type="button" value="ok" onclick="replaceFeature($(\'#feature_name_'.$i.'\').attr(\'name\'), '.$i.');">
</div>
</th>';
$html .= '</tr>';
@@ -670,7 +681,8 @@ class AdminImportControllerCore extends AdminController
$fd = fopen($uniqid_path, 'r');
$tab = fgetcsv($fd, MAX_LINE_SIZE, $separator);
fclose($fd);
unlink($uniqid_path);
if (file_exists($uniqid_path))
@unlink($uniqid_path);
}
if (empty($tab) || (!is_array($tab)))
@@ -868,6 +880,9 @@ class AdminImportControllerCore extends AdminController
$this->receiveTab();
$handle = $this->openCsvFile();
$default_language_id = (int)Configuration::get('PS_LANG_DEFAULT');
$id_lang = Language::getIdByIso(Tools::getValue('iso_lang'));
if (!Validate::isUnsignedId($id_lang))
$id_lang = $default_language_id;
AdminImportController::setLocale();
for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++)
{
@@ -914,8 +929,8 @@ class AdminImportControllerCore extends AdminController
$category_to_create = new Category();
$category_to_create->name = AdminImportController::createMultiLangField($category->parent);
$category_to_create->active = 1;
$category_link_rewrite = Tools::link_rewrite($category_to_create->name[$default_language_id]);
$category_to_create->link_rewrite = $category_link_rewrite;
$category_link_rewrite = Tools::link_rewrite($category_to_create->name[$id_lang]);
$category_to_create->link_rewrite = AdminImportController::createMultiLangField($category_link_rewrite);
$category_to_create->id_parent = Configuration::get('PS_HOME_CATEGORY'); // Default parent is home for unknown category to create
if (($field_error = $category_to_create->validateFields(UNFRIENDLY_ERROR, true)) === true &&
($lang_field_error = $category_to_create->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $category_to_create->add())
@@ -925,7 +940,7 @@ class AdminImportControllerCore extends AdminController
$this->errors[] = sprintf(
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
$category_to_create->name[$default_language_id],
(isset($category_to_create->id) ? $category_to_create->id : 'null')
(isset($category_to_create->id) && !empty($category_to_create->id))? $category_to_create->id : 'null'
);
$this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
Db::getInstance()->getMsgError();
@@ -958,7 +973,7 @@ class AdminImportControllerCore extends AdminController
$this->warnings[] = sprintf(
Tools::displayError('Rewrite link for %1$s (ID: %2$s) was re-written as %3$s.'),
$bak,
(isset($info['id']) ? $info['id'] : 'null'),
(isset($info['id']) && !empty($info['id']))? $info['id'] : 'null',
$category->link_rewrite[$default_language_id]
);
$res = false;
@@ -1006,8 +1021,8 @@ class AdminImportControllerCore extends AdminController
{
$this->errors[] = sprintf(
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
(isset($info['name']) ? Tools::safeOutput($info['name']) : 'No Name'),
(isset($info['id']) ? Tools::safeOutput($info['id']) : 'No ID')
(isset($info['name']) && !empty($info['name']))? Tools::safeOutput($info['name']) : 'No Name',
(isset($info['id']) && !empty($info['id']))? Tools::safeOutput($info['id']) : 'No ID'
);
$error_tmp = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').Db::getInstance()->getMsgError();
if ($error_tmp != '')
@@ -1051,6 +1066,9 @@ class AdminImportControllerCore extends AdminController
$this->receiveTab();
$handle = $this->openCsvFile();
$default_language_id = (int)Configuration::get('PS_LANG_DEFAULT');
$id_lang = Language::getIdByIso(Tools::getValue('iso_lang'));
if (!Validate::isUnsignedId($id_lang))
$id_lang = $default_language_id;
AdminImportController::setLocale();
$shop_ids = Shop::getCompleteListOfShopsID();
for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++)
@@ -1061,13 +1079,23 @@ class AdminImportControllerCore extends AdminController
if (Tools::getValue('forceIDs') && isset($info['id']) && (int)$info['id'])
$product = new Product((int)$info['id']);
else
elseif (Tools::getValue('match_ref') && array_key_exists('reference', $info))
{
if (array_key_exists('id', $info) && (int)$info['id'] && Product::existsInDatabase((int)$info['id'], 'product'))
$product = new Product((int)$info['id']);
else
$product = new Product();
$datas = Db::getInstance()->getRow('
SELECT p.`id_product`
FROM `'._DB_PREFIX_.'product` p
'.Shop::addSqlAssociation('product', 'p').'
WHERE p.`reference` = "'.pSQL($info['reference']).'"
');
if (isset($datas['id_product']) && $datas['id_product'])
$product = new Product((int)$datas['id_product']);
else
$product = new Product();
}
elseif (array_key_exists('id', $info) && (int)$info['id'] && Product::existsInDatabase((int)$info['id'], 'product'))
$product = new Product((int)$info['id']);
else
$product = new Product();
if (array_key_exists('id', $info) && (int)$info['id'] && Product::existsInDatabase((int)$info['id'], 'product'))
{
@@ -1132,7 +1160,7 @@ class AdminImportControllerCore extends AdminController
$this->errors[] = sprintf(
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
$manufacturer->name,
(isset($manufacturer->id) ? $manufacturer->id : 'null')
(isset($manufacturer->id) && !empty($manufacturer->id))? $manufacturer->id : 'null'
);
$this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
Db::getInstance()->getMsgError();
@@ -1163,7 +1191,7 @@ class AdminImportControllerCore extends AdminController
$this->errors[] = sprintf(
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
$supplier->name,
(isset($supplier->id) ? $supplier->id : 'null')
(isset($supplier->id) && !empty($supplier->id))? $supplier->id : 'null'
);
$this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
Db::getInstance()->getMsgError();
@@ -1209,7 +1237,7 @@ class AdminImportControllerCore extends AdminController
$this->errors[] = sprintf(
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
$category_to_create->name[$default_language_id],
(isset($category_to_create->id) ? $category_to_create->id : 'null')
(isset($category_to_create->id) && !empty($category_to_create->id))? $category_to_create->id : 'null'
);
$this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
Db::getInstance()->getMsgError();
@@ -1241,7 +1269,7 @@ class AdminImportControllerCore extends AdminController
$this->errors[] = sprintf(
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
$category_to_create->name[$default_language_id],
(isset($category_to_create->id) ? $category_to_create->id : 'null')
(isset($category_to_create->id) && !empty($category_to_create->id))? $category_to_create->id : 'null'
);
$this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
Db::getInstance()->getMsgError();
@@ -1252,14 +1280,14 @@ class AdminImportControllerCore extends AdminController
}
$product->id_category_default = isset($product->id_category[0]) ? (int)$product->id_category[0] : '';
$link_rewrite = (is_array($product->link_rewrite) && count($product->link_rewrite)) ? trim($product->link_rewrite[$default_language_id]) : '';
$link_rewrite = (is_array($product->link_rewrite) && isset($product->link_rewrite[$id_lang])) ? trim($product->link_rewrite[$id_lang]) : '';
$valid_link = Validate::isLinkRewrite($link_rewrite);
if ((isset($product->link_rewrite[$default_language_id]) && empty($product->link_rewrite[$default_language_id])) || !$valid_link)
if ((isset($product->link_rewrite[$id_lang]) && empty($product->link_rewrite[$id_lang])) || !$valid_link)
{
$link_rewrite = Tools::link_rewrite($product->name[$default_language_id]);
$link_rewrite = Tools::link_rewrite($product->name[$id_lang]);
if ($link_rewrite == '')
$link_rewrite = 'friendly-url-autogeneration-failed';
}
@@ -1267,18 +1295,20 @@ class AdminImportControllerCore extends AdminController
if (!$valid_link)
$this->warnings[] = sprintf(
Tools::displayError('Rewrite link for %1$s (ID: %2$s) was re-written as %3$s.'),
$product->name[$default_language_id],
(isset($info['id']) ? $info['id'] : 'null'),
$product->name[$id_lang],
(isset($info['id']) && !empty($info['id']))? $info['id'] : 'null',
$link_rewrite
);
$product->link_rewrite = AdminImportController::createMultiLangField($link_rewrite);
if (!Tools::getValue('match_ref') || !(is_array($product->link_rewrite) && count($product->link_rewrite) && !empty($product->link_rewrite[$id_lang])))
$product->link_rewrite = AdminImportController::createMultiLangField($link_rewrite);
// replace the value of separator by coma
if ($this->multiple_value_separator != ',')
foreach ($product->meta_keywords as &$meta_keyword)
if (!empty($meta_keyword))
$meta_keyword = str_replace($this->multiple_value_separator, ',', $meta_keyword);
if (is_array($product->meta_keywords))
foreach ($product->meta_keywords as &$meta_keyword)
if (!empty($meta_keyword))
$meta_keyword = str_replace($this->multiple_value_separator, ',', $meta_keyword);
// Convert comma into dot for all floating values
foreach (Product::$definition['fields'] as $key => $array)
@@ -1304,7 +1334,7 @@ class AdminImportControllerCore extends AdminController
SELECT product_shop.`date_add`, p.`id_product`
FROM `'._DB_PREFIX_.'product` p
'.Shop::addSqlAssociation('product', 'p').'
WHERE p.`reference` = "'.$product->reference.'"
WHERE p.`reference` = "'.pSQL($product->reference).'"
');
$product->id = (int)$datas['id_product'];
$product->date_add = pSQL($datas['date_add']);
@@ -1350,8 +1380,8 @@ class AdminImportControllerCore extends AdminController
{
$this->errors[] = sprintf(
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
(isset($info['name']) ? Tools::safeOutput($info['name']) : 'No Name'),
(isset($info['id']) ? Tools::safeOutput($info['id']) : 'No ID')
(isset($info['name']) && !empty($info['name']))? Tools::safeOutput($info['name']) : 'No Name',
(isset($info['id']) && !empty($info['id']))? Tools::safeOutput($info['id']) : 'No ID'
);
$this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
Db::getInstance()->getMsgError();
@@ -1360,7 +1390,7 @@ class AdminImportControllerCore extends AdminController
else
{
// Product supplier
if (isset($product->id_supplier) && isset($product->supplier_reference))
if (isset($product->id_supplier) && property_exists($product, 'supplier_reference'))
{
$id_product_supplier = ProductSupplier::getIdByProductAndSupplier((int)$product->id, 0, (int)$product->id_supplier);
if ($id_product_supplier)
@@ -1377,31 +1407,67 @@ class AdminImportControllerCore extends AdminController
}
// SpecificPrice (only the basic reduction feature is supported by the import)
if ((isset($info['reduction_price']) && $info['reduction_price'] > 0) || (isset($info['reduction_percent']) && $info['reduction_percent'] > 0))
{
$specific_price = new SpecificPrice();
$specific_price->id_product = (int)$product->id;
// @todo multishop specific price import
$specific_price->id_shop = $this->context->shop->id;
$specific_price->id_currency = 0;
$specific_price->id_country = 0;
$specific_price->id_group = 0;
$specific_price->price = -1;
$specific_price->id_customer = 0;
$specific_price->from_quantity = 1;
$specific_price->reduction = (isset($info['reduction_price']) && $info['reduction_price']) ? $info['reduction_price'] : $info['reduction_percent'] / 100;
$specific_price->reduction_type = (isset($info['reduction_price']) && $info['reduction_price']) ? 'amount' : 'percentage';
$specific_price->from = (isset($info['reduction_from']) && Validate::isDate($info['reduction_from'])) ? $info['reduction_from'] : '0000-00-00 00:00:00';
$specific_price->to = (isset($info['reduction_to']) && Validate::isDate($info['reduction_to'])) ? $info['reduction_to'] : '0000-00-00 00:00:00';
if (!$specific_price->add())
$this->addProductWarning(Tools::safeOutput($info['name']), $product->id, $this->l('Discount is invalid'));
}
if (!Shop::isFeatureActive())
$info['shop'] = 1;
elseif (!isset($info['shop']) || empty($info['shop']))
$info['shop'] = implode($this->multiple_value_separator, Shop::getContextListShopID());
// Get shops for each attributes
$info['shop'] = explode($this->multiple_value_separator, $info['shop']);
$id_shop_list = array();
foreach ($info['shop'] as $shop)
if (!is_numeric($shop))
$id_shop_list[] = (int)Shop::getIdByName($shop);
else
$id_shop_list[] = $shop;
if ((isset($info['reduction_price']) && $info['reduction_price'] > 0) || (isset($info['reduction_percent']) && $info['reduction_percent'] > 0))
foreach($id_shop_list as $id_shop)
{
$specific_price = SpecificPrice::getSpecificPrice($product->id, $id_shop, 0, 0, 0, 1, 0, 0, 0, 0);
if (is_array($specific_price))
$specific_price = new SpecificPrice((int)$specific_price['id_specific_price']);
else
$specific_price = new SpecificPrice();
$specific_price->id_product = (int)$product->id;
$specific_price->id_specific_price_rule = 0;
$specific_price->id_shop = $id_shop;
$specific_price->id_currency = 0;
$specific_price->id_country = 0;
$specific_price->id_group = 0;
$specific_price->price = -1;
$specific_price->id_customer = 0;
$specific_price->from_quantity = 1;
$specific_price->reduction = (isset($info['reduction_price']) && $info['reduction_price']) ? $info['reduction_price'] : $info['reduction_percent'] / 100;
$specific_price->reduction_type = (isset($info['reduction_price']) && $info['reduction_price']) ? 'amount' : 'percentage';
$specific_price->from = (isset($info['reduction_from']) && Validate::isDate($info['reduction_from'])) ? $info['reduction_from'] : '0000-00-00 00:00:00';
$specific_price->to = (isset($info['reduction_to']) && Validate::isDate($info['reduction_to'])) ? $info['reduction_to'] : '0000-00-00 00:00:00';
if (!$specific_price->save())
$this->addProductWarning(Tools::safeOutput($info['name']), $product->id, $this->l('Discount is invalid'));
}
if (isset($product->tags) && !empty($product->tags))
{
if (isset($product->id) && $product->id)
{
$tags = Tag::getProductTags($product->id);
if (is_array($tags) && count($tags))
{
if (!empty($product->tags))
$product->tags = explode($this->multiple_value_separator, $product->tags);
if (is_array($product->tags) && count($product->tags))
{
foreach ($product->tags as $key => $tag)
$product->tags[$key] = trim($tag);
$tags[$id_lang] = $product->tags;
$product->tags = $tags;
}
}
}
// Delete tags for this id product, for no duplicating error
Tag::deleteTagsForProduct($product->id);
if (!is_array($product->tags))
{
$product->tags = AdminImportController::createMultiLangField($product->tags);
@@ -1493,7 +1559,7 @@ class AdminImportControllerCore extends AdminController
if(!empty($feature_name) && !empty($feature_value))
{
$id_feature = Feature::addFeatureImport($feature_name, $position);
$id_feature_value = FeatureValue::addFeatureValueImport($id_feature, $feature_value);
$id_feature_value = FeatureValue::addFeatureValueImport($id_feature, $feature_value, $product->id, $id_lang);
Product::addFeatureProductImport($product->id, $id_feature, $id_feature_value);
}
}
@@ -1754,8 +1820,9 @@ class AdminImportControllerCore extends AdminController
null,
$id_shop_list
);
$id_product_attribute_update = true;
if (isset($info['supplier_reference']) && !empty($info['supplier_reference']))
$product->addSupplierReference($product->id_supplier, $id_product_attribute, $info['supplier_reference']);
}
}
}
@@ -1781,8 +1848,10 @@ class AdminImportControllerCore extends AdminController
(int)$info['minimal_quantity'],
$id_shop_list
);
if (isset($info['supplier_reference']) && !empty($info['supplier_reference']))
$product->addSupplierReference($product->id_supplier, $id_product_attribute, $info['supplier_reference']);
}
// fills our attributes array, in order to add the attributes to the product_attribute afterwards
if(isset($attributes[$group.'_'.$attribute]))
$attributes_to_add[] = (int)$attributes[$group.'_'.$attribute];
@@ -1957,7 +2026,7 @@ class AdminImportControllerCore extends AdminController
$this->errors[] = sprintf(
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
$info['email'],
(isset($info['id']) ? $info['id'] : 'null')
(isset($info['id']) && !empty($info['id']))? $info['id'] : 'null'
);
$this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
Db::getInstance()->getMsgError();
@@ -2054,7 +2123,7 @@ class AdminImportControllerCore extends AdminController
Tools::displayError('%1$s does not exist in database %2$s (ID: %3$s) cannot be saved'),
Db::getInstance()->getMsgError(),
$address->customer_email,
(isset($info['id']) ? $info['id'] : 'null')
(isset($info['id']) && !empty($info['id']))? $info['id'] : 'null'
);
}
else
@@ -2103,7 +2172,7 @@ class AdminImportControllerCore extends AdminController
$this->errors[] = Db::getInstance()->getMsgError().' '.sprintf(
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
$manufacturer->name,
(isset($manufacturer->id) ? $manufacturer->id : 'null')
(isset($manufacturer->id) && !empty($manufacturer->id))? $manufacturer->id : 'null'
);
$this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
Db::getInstance()->getMsgError();
@@ -2124,7 +2193,7 @@ class AdminImportControllerCore extends AdminController
$this->errors[] = Db::getInstance()->getMsgError().' '.sprintf(
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
$supplier->name,
(isset($supplier->id) ? $supplier->id : 'null')
(isset($supplier->id) && !empty($supplier->id))? $supplier->id : 'null'
);
$this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
Db::getInstance()->getMsgError();
@@ -2153,7 +2222,7 @@ class AdminImportControllerCore extends AdminController
$this->errors[] = sprintf(
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
$info['alias'],
(isset($info['id']) ? $info['id'] : 'null')
(isset($info['id']) && !empty($info['id']))? $info['id'] : 'null'
);
}
}
@@ -2170,7 +2239,7 @@ class AdminImportControllerCore extends AdminController
$this->errors[] = sprintf(
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
$info['alias'],
(isset($info['id']) ? $info['id'] : 'null')
(isset($info['id']) && !empty($info['id']))? $info['id'] : 'null'
);
$this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
Db::getInstance()->getMsgError();
@@ -2240,8 +2309,8 @@ class AdminImportControllerCore extends AdminController
{
$this->errors[] = Db::getInstance()->getMsgError().' '.sprintf(
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
(isset($info['name']) ? Tools::safeOutput($info['name']) : 'No Name'),
(isset($info['id']) ? Tools::safeOutput($info['id']) : 'No ID')
(isset($info['name']) && !empty($info['name']))? Tools::safeOutput($info['name']) : 'No Name',
(isset($info['id']) && !empty($info['id']))? Tools::safeOutput($info['id']) : 'No ID'
);
$this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '').
Db::getInstance()->getMsgError();
@@ -2287,8 +2356,8 @@ class AdminImportControllerCore extends AdminController
if (!$res)
$this->errors[] = Db::getInstance()->getMsgError().' '.sprintf(
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
(isset($info['name']) ? Tools::safeOutput($info['name']) : 'No Name'),
(isset($info['id']) ? Tools::safeOutput($info['id']) : 'No ID')
(isset($info['name']) && !empty($info['name']))? Tools::safeOutput($info['name']) : 'No Name',
(isset($info['id']) && !empty($info['id']))? Tools::safeOutput($info['id']) : 'No ID'
);
else
{
@@ -2546,13 +2615,9 @@ class AdminImportControllerCore extends AdminController
protected static function usortFiles($a, $b)
{
$a = strrev(substr(strrev($a), 0, 14));
$b = strrev(substr(strrev($b), 0, 14));
if ($a == $b)
return 0;
return ($a < $b) ? 1 : -1;
return ($b < $a) ? 1 : -1;
}
protected function openCsvFile()
@@ -2597,37 +2662,37 @@ class AdminImportControllerCore extends AdminController
unlink(_PS_CAT_IMG_DIR_.$d);
break;
case $this->entities[$this->l('Products')]:
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_shop');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'feature_product');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_lang');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'category_product');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_tag');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'image');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'image_lang');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'image_shop');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'specific_price');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'specific_price_priority');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_carrier');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'cart_product');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'compare_product');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_shop`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'feature_product`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_lang`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'category_product`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_tag`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'image`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'image_lang`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'image_shop`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'specific_price`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'specific_price_priority`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_carrier`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'cart_product`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'compare_product`');
if (count(Db::getInstance()->executeS('SHOW TABLES LIKE \''._DB_PREFIX_.'favorite_product\' '))) //check if table exist
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'favorite_product');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attachment');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_country_tax');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_download');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_group_reduction_cache');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_sale');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_supplier');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'scene_products');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'warehouse_product_location');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'stock');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'stock_available');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'stock_mvt');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'customization');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'customization_field');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'supply_order_detail');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute_impact');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'favorite_product`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attachment`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_country_tax`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_download`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_group_reduction_cache`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_sale`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_supplier`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'scene_products`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'warehouse_product_location`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'stock`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'stock_available`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'stock_mvt`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'customization`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'customization_field`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'supply_order_detail`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute_impact`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attribute`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attribute_shop`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attribute_combination`');
@@ -2638,7 +2703,7 @@ class AdminImportControllerCore extends AdminController
break;
case $this->entities[$this->l('Combinations')]:
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute_impact');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute_impact`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute_lang`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute_group`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'attribute_group_lang`');
@@ -2648,26 +2713,26 @@ class AdminImportControllerCore extends AdminController
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attribute_shop`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attribute_combination`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'product_attribute_image`');
Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'stock_available` WHERE id_product_attribute !=0');
Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'stock_available` WHERE id_product_attribute != 0');
break;
case $this->entities[$this->l('Customers')]:
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'customer');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'customer`');
break;
case $this->entities[$this->l('Addresses')]:
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'address');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'address`');
break;
case $this->entities[$this->l('Manufacturers')]:
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'manufacturer');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'manufacturer_lang');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'manufacturer_shop');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'manufacturer`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'manufacturer_lang`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'manufacturer_shop`');
foreach (scandir(_PS_MANU_IMG_DIR_) as $d)
if (preg_match('/^[0-9]+(\-(.*))?\.jpg$/', $d))
unlink(_PS_MANU_IMG_DIR_.$d);
break;
case $this->entities[$this->l('Suppliers')]:
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'supplier');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'supplier_lang');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'supplier_shop');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'supplier`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'supplier_lang`');
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'supplier_shop`');
foreach (scandir(_PS_SUPP_IMG_DIR_) as $d)
if (preg_match('/^[0-9]+(\-(.*))?\.jpg$/', $d))
unlink(_PS_SUPP_IMG_DIR_.$d);
@@ -2696,6 +2761,7 @@ class AdminImportControllerCore extends AdminController
if (Tools::isSubmit('submitFileUpload'))
{
$path = _PS_ADMIN_DIR_.'/import/'.date('Ymdhis').'-';
if (isset($_FILES['file']) && !empty($_FILES['file']['error']))
{
switch ($_FILES['file']['error'])
@@ -2721,13 +2787,18 @@ class AdminImportControllerCore extends AdminController
break;
}
}
else if (!file_exists($_FILES['file']['tmp_name']) ||
!@move_uploaded_file($_FILES['file']['tmp_name'], _PS_ADMIN_DIR_.'/import/'.date('Ymdhis').'-'.$_FILES['file']['name']))
elseif (!preg_match('/.*\.csv$/i', $_FILES['file']['name']))
$this->errors[] = Tools::displayError('The extension of your file should be .csv.');
elseif (!file_exists($_FILES['file']['tmp_name']) ||
!@move_uploaded_file($_FILES['file']['tmp_name'], $path.$_FILES['file']['name']))
$this->errors[] = $this->l('An error occurred while uploading / copying the file.');
else
{
@chmod($path.$_FILES['file']['name'], 0664);
Tools::redirectAdmin(self::$currentIndex.'&token='.Tools::getValue('token').'&conf=18');
}
}
else if (Tools::getValue('import'))
elseif (Tools::getValue('import'))
{
// Check if the CSV file exist
if (Tools::getValue('csv'))
@@ -2791,7 +2862,41 @@ class AdminImportControllerCore extends AdminController
else
$this->errors[] = $this->l('You must upload a file in order to proceed to the next step');
}
elseif ($filename = Tools::getValue('csvfilename'))
{
$filename = base64_decode($filename);
$file = _PS_ADMIN_DIR_.'/import/'.basename($filename);
if (realpath(dirname($file)) != _PS_ADMIN_DIR_.'/import')
exit();
if (!empty($filename))
{
$bName = basename($filename);
if ($delete = Tools::getValue('delete') && file_exists($file))
@unlink($file);
elseif (file_exists($file))
{
$bName = explode('.', $bName);
$bName = strtolower($bName[count($bName) - 1]);
$mimeTypes = array('csv' => 'text/csv');
if (isset($mimeTypes[$bName]))
$mimeType = $mimeTypes[$bName];
else
$mimeType = 'application/octet-stream';
if (ob_get_level())
ob_end_clean();
header('Content-Transfer-Encoding: binary');
header('Content-Type: '.$mimeType);
header('Content-Length: '.filesize($file));
header('Content-Disposition: attachment; filename="'.$filename.'"');
$fp = fopen($file, 'rb');
while (is_resource($fp) && !feof($fp))
echo fgets($fp, 16384);
exit;
}
}
}
parent::postProcess();
}

View File

@@ -42,6 +42,12 @@ class AdminInvoicesControllerCore extends AdminController
'cast' => 'intval',
'type' => 'bool'
),
'PS_INVOICE_TAXES_BREAKDOWN' => array(
'title' => $this->l('Enable the breakdown of taxes on the invoice:'),
'desc' => $this->l('Show a breakdown of taxes by tax rate on the invoice when there are several taxes combined'),
'cast' => 'intval',
'type' => 'bool'
),
'PS_INVOICE_PREFIX' => array(
'title' => $this->l('Invoice prefix:'),
'desc' => $this->l('Prefix used for invoice name (e.g. IN00001)'),

View File

@@ -35,7 +35,7 @@ class AdminLogsControllerCore extends AdminController
$this->fields_list = array(
'id_log' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25),
'employee' => array('title' => $this->l('Employee'), 'align' => 'center', 'width' => 100),
'employee' => array('title' => $this->l('Employee'), 'align' => 'center', 'width' => 100, 'havingFilter' => true),
'severity' => array('title' => $this->l('Severity (1-4)'), 'align' => 'center', 'width' => 50),
'message' => array('title' => $this->l('Message')),
'object_type' => array('title' => $this->l('Object type'), 'width' => 75),

View File

@@ -23,6 +23,200 @@ International Registred Trademark & Property of PrestaShop SA
Release Notes for PrestaShop 1.5
--------------------------------
####################################
# v1.5.6.0 - (2013-10-07) #
####################################
Fixed bugs:
[-] Installer : added the missing default tab in the employee
[-] INSTALLER : Fix bug #PSCFV-8289 bad orders vouchers total after update
[-] INSTALLER: Wrong SQL query for PS_LEGACY_IMAGES to 0
[-] INSTALLER: short_description for PREFIX_manufacturer_lang is now type TEXT
[-] INSTALLER : Fix infinite loop when order message has additional ampersand
[-] INSTALLER : Fix fatal error in upgrade, could not load configuration class
[-] INSTALLER : no update value in fix_download_product_feature_active
[-] INSTALLER : Fix fatal error when upgrading
[-] FO : isVirtualCart was forced to false
[-] FO: Fix display of quantity discounts on product pages if the customer is allowable for multiple discount for the same quantity #PSCFV-10580
[-] FO: packages should be splitted with advanced stock management when carrier is not associated to multiple warehouse
[-] FO : Fix #PSCFV-10480 again, css fix
[-] FO : Fix #PSCFV-10480 again css fix
[-] FO : Fix bug #PSCFV-10478 could not see auto added cart rule voucher on product page
[-] FO: Fix #PSCFV-10461
[-] FO : Fix bug #PSCFV-10328 Set country currency if defined when geolocated
[-] FO: Fix Product::getAttributesGroups() minimal_quantity/weight/available_date should be multishop
[-] FO : replace ucfirst by ucwords for the customer firstname #PSCFV-10396
[-] FO : 301 Redirect /iso_lang to /iso_lang/ url
[-] FO : Fix bug #PSCFV-8917 taxes calculation when changing delivery address
[-] FO: Fix SSL links on domain_ssl instead domain
[-] FO : fixed chinese search with multiple symbols #PSCFV-10322
[-] FO : Partial fix of adding gift on cart rule on the same entity in the cart rule
[-] FO : Fix bug #PSCFV-10118 quantity not updated when cart rules give the same product as gift
[-] FO : fixed bug when is virtual cart on OPC carriers is no longer displayed
[-] FO : FixBug when route id is empty
[-] BO : Bug fix - Modules confirmation messages
[-] BO : Retro compat, PS_ADMIN_DIR not defined //bad commit sorry
[-] BO : Employee's default_tab may not exists, switching to AdminOrders
[-] BO : Retro compat, PS_ADMIN_DIR not defined
[-] BO : AdminImport add combinations available fields
[-] BO : AdminImport add adresses required fields
[-] BO : Fix bug #PSCFV-9323 supplier_reference can be unset
[-] BO : Fix bug #PSCFV-10064, could not import feature in multilang, thanks @E.Bigfoot
[-] BO : Fix bug #PSCFV-10064, could not import deature in multilang, thanks @E.Bigfoot
[-] BO : Remove dead code in AdminImport
[-] BO : FixBug #PSCFV-10558 - Invalid HTML markup.
[-] BO : Fix bug #PSCFV-8389 duplicates is SpecificPrice table
[-] BO : AdminImport, tables are not truncated
[-] BO : managed decimal format in BO orders
[-] BO : Fix bug #PSCFV-5060 could not import supplier_combinations in combinations import
[-] BO : Fix #PSCFV-6482 could not import tags in deiffrent languages
[-] BO : fixed currency format on order creation
[-] Bo : Fix again #PSCFV-10474 again, not deleting start page after import
[-] Bo : Fix again #PSCFV-10474 coul not export more than 300 products
[-] BO: Fix total without tax in breakdown taxes when taxes are combined #PSCFV-10394 on the invoices
[-] BO: translation mismatch Here is a form to edit the values in the group, we do not need here "attribute type".
[-] BO : AdminImport, not matching by ref for updating
[-] BO: Fix #PSCFV-10488 filter by employee on logs tab
[-] BO : FixBig #PSCFV-10442 - Members Cutomer Group list
[-] BO : Could not import empty linkrewrite for products and not matching refs
[-] BO : Sort import files in select
[-] BO : Remove duplicate sql insert in setProductOutOfStock in monoshop
[-] BO : Fix #PSCFV-10501 Remove fatal error
[-] BO : Fix bug #PSCFV-9675 could not import non existent parent category
[-] BO : Bad entity pre selected in AdminImport
[-] BO : Fix bug #PSCFV-10483, could not import other language product link_rewrite
[-] BO: Fix data validation when iframe is allowed on some entities like CMS
[-] BO : Fix Bug For new Fancy Box events
[-] BO : fixed the redirection to a 404 page when loging in in the updater
[-] BO : Bad input radio names
[-] BO : Issue with domready on adminImport
[-] BO : do not reaffect import_type for categories
[-] BO: Bad id for multishop checkbox on admin products - weird bug with active flag #PSCFV-9935
[-] BO : Fix proces and save buttons for Modules and AdminControllers
[-] Bo : Modules 'save' button not active
[-] BO : Fix bug #PSCFV-8214 import entity pre selected
[-] BO : Fix bugPSCFV-10249 images copy when unix path
[-] BO : limited the number of customers displayed in the group view to 100 in order to avoid memory usage error
[-] BO : FixBug #PSCFV-9900 Double quote escape problem in delete button link
[-] BO : Could not order in AdminStatuses by ID or template
[-] BO : Fix bug #PSCFV-8407 can not customize feature column name if needed
[-] BO : quote badly decoded in customerThreads
[-] BO : Fix Bug #PSCFV-10331 check all from list
[-] BO : Customer message twice encoded
[-] BO : Fix bug, orders states not ordered by order state name
[-] BO : Bug fix - Encoding & tips of the day
[-] BO : Do not copy link_rewrite from title if cms already has one
[-] BO : Small changes when creating vouchers in back office orders
[-] BO: Fix out of stock creation with multishop and stock sharing
[-] BO: Fix preview url with multishop
[-] BO : Fix possible Uncaught exception 'ReflectionException' when viewing AdminMeta
[-] BO : FixBug PSCFV-10331 - Tax rules Pagination
[-] BO : Display the old image system migration tool if product images are in _PS_PROD_IMG_DIR_
[-] BO : ini_get('safe_mode') can return false
[-] BO : AdminModulesController - Bug fix, $params was not set
[-] BO : Fix #PSCFV-9906 could not register search engines keywords
[-] BO : Fix pull request #665
[-] BO : Fix error returned when first import of a localisation pack
[-] BO : FixBug #PSCFV-10213 check product/attribute id - Thanks F. Cespedes
[-] BO: Fix fatal error on customer edition when email is not valid
[-] BO : fixed bug when try to add jquery from ajax.googleapis.com in BO
[-] BO : FixBug Url rewrite preview when user have a different language from shop
[-] BO : fixed bug with multistore context on carrier wizard
[-] Classes : Bug fix - FrontController, mobile & JS minifier fixed
[-] CORE : #PSCFV-10389 Avoid eventual empty Specific Price Rule
[-] CORE : Fix bug #PSCFV-10179 Duplicate specific price records when updating a product
[-] CORE : Cart rules not ordered by priority for PaymentModule
[-] CORE : Partial fix bug #PSCFV-10534 bad total_products_wt calculated without other cart rules
[-] CORE : Could not add too long tags
[-] CORE : Missing tag max size
[-] CORE : Partial fix for #PSCFV-10482 getCacheId is different in back office
[-] CORE : Fix bug #PSCFV-10471 Cart item count problem, unique_id grouping error for id_product and id_product_attribute
[-] CORE : #PSCFV-10461 customer group in getPriceStatic, pull request https://github.com/kpodemski/kp-PrestaShop/commit/361ebc72e09d00463bb7a7b7af670e3235ab6a5a
[-] Core: Set a remote addr with php-cli #PSCFV-10372
[-] CORE : Could not add several cart rules
[-] CORE : Fix bug #PSCFV-10040 Notice: Undefined index: unifunc && Fatal error: Function name must be a string on some PHP version with empty cache folder and smarty cache enabled
[-] CORE: Fix for field length and type regarding https://github.com/PrestaShop/PrestaShop/pull/678
[-] CORE : Remove PHP Warning: file_put_contents on modules config.xml
[-] CORE : fixed bug #PSCFV-10175 - No virtuel download email send after accepted payment
[-] MO : Blocklayered - Fix empty fancy box after template edit
[-] MO : FixBug #10460 - UTF8 bug on accented URL
[-] MO : Blockcart, wrong tbody
[-] MO : Fix buig #PSCFV-10480 Blockcart too long cart_block_product_name
[-] MO : FixBug #PNM-1683 - Treeview problem
[-] MO: Fix time of smarty cache invalidation
[-] MO : PNM-1715 - Bug fix accented chars & ajax-cart
[-] MO : Editorial could not delete image
[-] MO : Fixed a bug when displaying textures Corrections links texture image in the blocklayered
[-] MO : carriercompare fixed bug, override template's files in theme. Ticket #PNM-1691
[-] MO : Statsdata, exception on duplicate entry
[-] MO: Fix unifunc smarty errors if module is displayed on multiplehook without cache
[-] MO : fix bug #PSCFV-9906 again, bad url parsing
[-] MO: Fix blocklayered sort by quantity #PSCFV-10300
[-] WS: Fix order by on id field on multishop entities
[-] WS: Fix entities retrieve for some cases
[-] WS: 404 error should be returned if a multishop entity does not exists #PSCFV-10229
[-] WS: Bad xlink for tax_rules_group in product
[-] PDF : Report of https://github.com/enumag/PrestaShop/commit/9c939cceadebd58ad390fb4f108816e3c17c0275
[-] LO: Argeninian localization
Improved/changed features:
[*] Project : Orders should rely only on ps_order_cart_rule
[*] Installer : added file check in order to check if everyhting has been successfuly uploaded
[*] FO: Allow to enable SSL on all the pages
[*] FO : removed extra slash and point
[*] BO : AdminImport, retrieve separators and lang selected
[*] BO : Add category id in AdminSpecificPriceRule
[*] BO: Allow to breakdown the taxes when they are computed
[*] BO : AdminImport, remove csv files
[*] BO : Adminimport, check csv download path
[*] BO : Add csv file download in AdminImport
[*] BO : improved automatic language creation
[*] BO : Set import entity in cookie (#PSCFV-8214)
[*] BO: sort modules name in Stats
[*] CORE : Increasing the length of link_rewrite & name in Category.php In database this fields have varchar(128) so let's give the user full size of fields
[*] CORE : bad else if in getTemplatePath
[*] CORE : Refactoring Tools::copy() as copy with context > PHP 5.3
[*] Core: don't re-generate the class_index.php file if a class is not known to avoid misuse of class_exists()
[*] MO : MailAlerts : Add SQL update script for v2.5
[*] MO : MailAlerts : multishop/multilang full compatibility Customers will receive alerts based on the real context of the moment they subscribed to the alert (sho, theme & language) SQL update table : `ps_mailalert_customer_oos` ========================================= ALTER TABLE `ps_mailalert_customer_oos` ADD `id_lang` INT( 10 ) UNSIGNED NOT NULL , DROP PRIMARY KEY , ADD PRIMARY KEY ( `id_customer` , `customer_email` , `id_product` , `id_product_attribute` , `id_shop` ) ;
[*] LO : Removed 'Miss' from the default genders because too country specific
[*] LO : Use single quote as thousands separator for CHF currency
Added Features:
[+] FO : add getManufacturer() to ManufacturerControllerCore Add getManufacturer() to ManufacturerControllerCore to access the protected manufacturer instance of the controller.
[+] BO : add TinyMCE editor for supplier descrpition in AdminManufacturerSupplier
[+] BO : add TinyMCE editor for short and long descrpition in AdminManufacturerController
[+] BO : Improve mod rewrite check
[+] MO : add link to all manufacturer page and the feature to show All Suppliers
[+] MO : add the option to show all Manufacturer Add the option to show all Manufacturer in blocktopmenu module.
[+] MO : Mailalerts - Add Total tax paid to order confirmation
[+] TR : Added Indonesian installer
[+] LO : Completed Traditional Chinese Installer
[+] LO : Added Bengali installer
[+] LO: Added Traditional Chinese installer
####################################
# v1.5.5.0 - (2013-08-22) #
####################################

View File

@@ -1,4 +1,4 @@
"id";"Alias*";"Active (0/1)";"Customer e-mail";"Customer ID";"Manufacturer";"Supplier";"Company";"Lastname*";"Firstname*";"Address 1*";"Address 2";"Postcode* / Zipcode*";"City*";"Country*";"State";"Other";"Phone";"Mobile Phone";"VAT number"
"id";"Alias*";"Active (0/1)";"Customer e-mail*";"Customer ID";"Manufacturer";"Supplier";"Company";"Lastname*";"Firstname*";"Address 1*";"Address 2";"Postcode* / Zipcode*";"City*";"Country*";"State";"Other";"Phone";"Mobile Phone";"VAT number"
1;"My Adress";1;"pub@prestashop.com";1;;;;"Doe";"John";"16, Main street";"2nd floor";75000;"PARIS ";"France";;;140138844;;
2;"My work";1;"pub@prestashop.com";1;;;"My Company";"Doe";"John";"535, Baker street";;13000;"Marseile";"France";;;235445588;;
3;"My work";0;;;"Apple Computer, Inc";;;"Jobs";"Steve";"1 Infinite Loop";;95014;"CUPERTINO";"United States";"California";;"(800) 275-2273";;
1 id Alias* Active (0/1) Customer e-mail Customer e-mail* Customer ID Manufacturer Supplier Company Lastname* Firstname* Address 1* Address 2 Postcode* / Zipcode* City* Country* State Other Phone Mobile Phone VAT number
2 1 My Adress 1 pub@prestashop.com pub@prestashop.com 1 Doe John 16, Main street 2nd floor 75000 PARIS France 140138844
3 2 My work 1 pub@prestashop.com pub@prestashop.com 1 My Company Doe John 535, Baker street 13000 Marseile France 235445588
4 3 My work 0 Apple Computer, Inc Jobs Steve 1 Infinite Loop 95014 CUPERTINO United States California (800) 275-2273

View File

@@ -1,2 +1,4 @@
1; Capacity:select:0, Color:color:1; 16Go:0, Bleu:1
1; Capacity:select:0, Color:color:1; 16Go:0, Red:1
Id_product*;Group*;Attribute*;Supplier_reference;Reference;Ean13;Upc;Wholesale price;Impact on price;Ecotax;Quantity;Minimal quantity;Impact on weight;Default (0 = No, 1 = Yes);Image position;Image URL;Delete existing images (0 = No, 1 = Yes);ID / Name of shop
1;Capacity:select:0, Color:color:1;16Go:0, Bleu:1;Ref suppplier 1;Ref 1;1234567891234;123456789123;0;None;0.000000;10;1;None;0;1;http://youdomain.com/img.jpg;0;1
1;Capacity:select:0, Color:color:1;16Go:0, Red:1;Ref suppplier 2;Ref 2;1234567891235;123456789124;0;None;0.000000;10;1;None;0;2;http://youdomain.com/img.jpg;0;1
1 1; Capacity:select:0 Id_product* Color:color:1; 16Go:0 Group* Bleu:1 Attribute* Supplier_reference Reference Ean13 Upc Wholesale price Impact on price Ecotax Quantity Minimal quantity Impact on weight Default (0 = No, 1 = Yes) Image position Image URL Delete existing images (0 = No, 1 = Yes) ID / Name of shop
2 1; Capacity:select:0 1 Color:color:1; 16Go:0 Capacity:select:0, Color:color:1 Red:1 16Go:0, Bleu:1 Ref suppplier 1 Ref 1 1234567891234 123456789123 0 None 0.000000 10 1 None 0 1 http://youdomain.com/img.jpg 0 1
3 1 Capacity:select:0, Color:color:1 16Go:0, Red:1 Ref suppplier 2 Ref 2 1234567891235 123456789124 0 None 0.000000 10 1 None 0 2 http://youdomain.com/img.jpg 0 1
4

View File

@@ -21,8 +21,8 @@ needs please refer to http://www.prestashop.com for more information.
@license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
International Registered Trademark & Property of PrestaShop SA
NAME: Prestashop 1.5.5.0
VERSION: 1.5.5.0
NAME: Prestashop 1.5.6.0
VERSION: 1.5.6.0
VORBEREITUNG
===========

View File

@@ -21,8 +21,8 @@ needs please refer to http://www.prestashop.com for more information.
@license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
International Registered Trademark & Property of PrestaShop SA
NAME: Prestashop 1.5.5.0
VERSION: 1.5.5.0
NAME: Prestashop 1.5.6.0
VERSION: 1.5.6.0
PREPARATION
===========

View File

@@ -21,8 +21,8 @@ needs please refer to http://www.prestashop.com for more information.
@license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
International Registered Trademark & Property of PrestaShop SA
NAME: Prestashop 1.5.5.0
VERSION: 1.5.5.0
NAME: Prestashop 1.5.6.0
VERSION: 1.5.6.0
PREPARACI<EFBFBD>N
===========

View File

@@ -21,8 +21,8 @@ needs please refer to http://www.prestashop.com for more information.
@license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
International Registered Trademark & Property of PrestaShop SA
NAME: Prestashop 1.5.5.0
VERSION: 1.5.5.0
NAME: Prestashop 1.5.6.0
VERSION: 1.5.6.0
PREPARATION
===========

View File

@@ -21,8 +21,8 @@ needs please refer to http://www.prestashop.com for more information.
@license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
International Registered Trademark & Property of PrestaShop SA
NAME: Prestashop 1.5.5.0
VERSION: 1.5.5.0
NAME: Prestashop 1.5.6.0
VERSION: 1.5.6.0
PREPARAZIONE
===========

View File

@@ -689,7 +689,7 @@ Country</value>
<value>7700</value>
</configuration>
<configuration id="PS_VERSION_DB" name="PS_VERSION_DB">
<value>1.5.5.0</value>
<value>1.5.6.0</value>
</configuration>
<configuration id="PS_BASE_DISTANCE_UNIT" name="PS_BASE_DISTANCE_UNIT">
<value>m</value>
@@ -701,7 +701,7 @@ Country</value>
<value>localhost</value>
</configuration>
<configuration id="PS_INSTALL_VERSION" name="PS_INSTALL_VERSION">
<value>1.5.5.0</value>
<value>1.5.6.0</value>
</configuration>
<configuration id="PS_SHOP_NAME" name="PS_SHOP_NAME">
<value>PrestaShop</value>

View File

@@ -6,6 +6,5 @@
<entities>
<gender id="1" type="0"/>
<gender id="2" type="1"/>
<gender id="3" type="1"/>
</entities>
</entity_gender>

View File

@@ -804,145 +804,145 @@
<state id="YO" id_country="ID" id_zone="Asia" iso_code="YO" tax_behavior="0" active="1">
<name>Yogyakarta</name>
</state>
<state id="23" id_country="JP" id_zone="Asia" iso_code="23" tax_behavior="0" active="1">
<state id="JP-23" id_country="JP" id_zone="Asia" iso_code="23" tax_behavior="0" active="1">
<name>Aichi</name>
</state>
<state id="05" id_country="JP" id_zone="Asia" iso_code="05" tax_behavior="0" active="1">
<state id="JP-05" id_country="JP" id_zone="Asia" iso_code="05" tax_behavior="0" active="1">
<name>Akita</name>
</state>
<state id="02" id_country="JP" id_zone="Asia" iso_code="02" tax_behavior="0" active="1">
<state id="JP-02" id_country="JP" id_zone="Asia" iso_code="02" tax_behavior="0" active="1">
<name>Aomori</name>
</state>
<state id="12" id_country="JP" id_zone="Asia" iso_code="12" tax_behavior="0" active="1">
<state id="JP-12" id_country="JP" id_zone="Asia" iso_code="12" tax_behavior="0" active="1">
<name>Chiba</name>
</state>
<state id="38" id_country="JP" id_zone="Asia" iso_code="38" tax_behavior="0" active="1">
<state id="JP-38" id_country="JP" id_zone="Asia" iso_code="38" tax_behavior="0" active="1">
<name>Ehime</name>
</state>
<state id="18" id_country="JP" id_zone="Asia" iso_code="18" tax_behavior="0" active="1">
<state id="JP-18" id_country="JP" id_zone="Asia" iso_code="18" tax_behavior="0" active="1">
<name>Fukui</name>
</state>
<state id="40" id_country="JP" id_zone="Asia" iso_code="40" tax_behavior="0" active="1">
<state id="JP-40" id_country="JP" id_zone="Asia" iso_code="40" tax_behavior="0" active="1">
<name>Fukuoka</name>
</state>
<state id="07" id_country="JP" id_zone="Asia" iso_code="07" tax_behavior="0" active="1">
<state id="JP-07" id_country="JP" id_zone="Asia" iso_code="07" tax_behavior="0" active="1">
<name>Fukushima</name>
</state>
<state id="21" id_country="JP" id_zone="Asia" iso_code="21" tax_behavior="0" active="1">
<state id="JP-21" id_country="JP" id_zone="Asia" iso_code="21" tax_behavior="0" active="1">
<name>Gifu</name>
</state>
<state id="10" id_country="JP" id_zone="Asia" iso_code="10" tax_behavior="0" active="1">
<state id="JP-10" id_country="JP" id_zone="Asia" iso_code="10" tax_behavior="0" active="1">
<name>Gunma</name>
</state>
<state id="34" id_country="JP" id_zone="Asia" iso_code="34" tax_behavior="0" active="1">
<state id="JP-34" id_country="JP" id_zone="Asia" iso_code="34" tax_behavior="0" active="1">
<name>Hiroshima</name>
</state>
<state id="01" id_country="JP" id_zone="Asia" iso_code="01" tax_behavior="0" active="1">
<state id="JP-01" id_country="JP" id_zone="Asia" iso_code="01" tax_behavior="0" active="1">
<name>Hokkaido</name>
</state>
<state id="28" id_country="JP" id_zone="Asia" iso_code="28" tax_behavior="0" active="1">
<state id="JP-28" id_country="JP" id_zone="Asia" iso_code="28" tax_behavior="0" active="1">
<name>Hyogo</name>
</state>
<state id="08" id_country="JP" id_zone="Asia" iso_code="08" tax_behavior="0" active="1">
<state id="JP-08" id_country="JP" id_zone="Asia" iso_code="08" tax_behavior="0" active="1">
<name>Ibaraki</name>
</state>
<state id="17" id_country="JP" id_zone="Asia" iso_code="17" tax_behavior="0" active="1">
<state id="JP-17" id_country="JP" id_zone="Asia" iso_code="17" tax_behavior="0" active="1">
<name>Ishikawa</name>
</state>
<state id="03" id_country="JP" id_zone="Asia" iso_code="03" tax_behavior="0" active="1">
<state id="JP-03" id_country="JP" id_zone="Asia" iso_code="03" tax_behavior="0" active="1">
<name>Iwate</name>
</state>
<state id="37" id_country="JP" id_zone="Asia" iso_code="37" tax_behavior="0" active="1">
<state id="JP-37" id_country="JP" id_zone="Asia" iso_code="37" tax_behavior="0" active="1">
<name>Kagawa</name>
</state>
<state id="46" id_country="JP" id_zone="Asia" iso_code="46" tax_behavior="0" active="1">
<state id="JP-46" id_country="JP" id_zone="Asia" iso_code="46" tax_behavior="0" active="1">
<name>Kagoshima</name>
</state>
<state id="14" id_country="JP" id_zone="Asia" iso_code="14" tax_behavior="0" active="1">
<state id="JP-14" id_country="JP" id_zone="Asia" iso_code="14" tax_behavior="0" active="1">
<name>Kanagawa</name>
</state>
<state id="39" id_country="JP" id_zone="Asia" iso_code="39" tax_behavior="0" active="1">
<state id="JP-39" id_country="JP" id_zone="Asia" iso_code="39" tax_behavior="0" active="1">
<name>Kochi</name>
</state>
<state id="43" id_country="JP" id_zone="Asia" iso_code="43" tax_behavior="0" active="1">
<state id="JP-43" id_country="JP" id_zone="Asia" iso_code="43" tax_behavior="0" active="1">
<name>Kumamoto</name>
</state>
<state id="26" id_country="JP" id_zone="Asia" iso_code="26" tax_behavior="0" active="1">
<state id="JP-26" id_country="JP" id_zone="Asia" iso_code="26" tax_behavior="0" active="1">
<name>Kyoto</name>
</state>
<state id="24" id_country="JP" id_zone="Asia" iso_code="24" tax_behavior="0" active="1">
<state id="JP-24" id_country="JP" id_zone="Asia" iso_code="24" tax_behavior="0" active="1">
<name>Mie</name>
</state>
<state id="04" id_country="JP" id_zone="Asia" iso_code="04" tax_behavior="0" active="1">
<state id="JP-04" id_country="JP" id_zone="Asia" iso_code="04" tax_behavior="0" active="1">
<name>Miyagi</name>
</state>
<state id="45" id_country="JP" id_zone="Asia" iso_code="45" tax_behavior="0" active="1">
<state id="JP-45" id_country="JP" id_zone="Asia" iso_code="45" tax_behavior="0" active="1">
<name>Miyazaki</name>
</state>
<state id="20" id_country="JP" id_zone="Asia" iso_code="20" tax_behavior="0" active="1">
<state id="JP-20" id_country="JP" id_zone="Asia" iso_code="20" tax_behavior="0" active="1">
<name>Nagano</name>
</state>
<state id="42" id_country="JP" id_zone="Asia" iso_code="42" tax_behavior="0" active="1">
<state id="JP-42" id_country="JP" id_zone="Asia" iso_code="42" tax_behavior="0" active="1">
<name>Nagasaki</name>
</state>
<state id="29" id_country="JP" id_zone="Asia" iso_code="29" tax_behavior="0" active="1">
<state id="JP-29" id_country="JP" id_zone="Asia" iso_code="29" tax_behavior="0" active="1">
<name>Nara</name>
</state>
<state id="15" id_country="JP" id_zone="Asia" iso_code="15" tax_behavior="0" active="1">
<state id="JP-15" id_country="JP" id_zone="Asia" iso_code="15" tax_behavior="0" active="1">
<name>Niigata</name>
</state>
<state id="44" id_country="JP" id_zone="Asia" iso_code="44" tax_behavior="0" active="1">
<state id="JP-44" id_country="JP" id_zone="Asia" iso_code="44" tax_behavior="0" active="1">
<name>Oita</name>
</state>
<state id="33" id_country="JP" id_zone="Asia" iso_code="33" tax_behavior="0" active="1">
<state id="JP-33" id_country="JP" id_zone="Asia" iso_code="33" tax_behavior="0" active="1">
<name>Okayama</name>
</state>
<state id="47" id_country="JP" id_zone="Asia" iso_code="47" tax_behavior="0" active="1">
<state id="JP-47" id_country="JP" id_zone="Asia" iso_code="47" tax_behavior="0" active="1">
<name>Okinawa</name>
</state>
<state id="27" id_country="JP" id_zone="Asia" iso_code="27" tax_behavior="0" active="1">
<state id="JP-27" id_country="JP" id_zone="Asia" iso_code="27" tax_behavior="0" active="1">
<name>Osaka</name>
</state>
<state id="41" id_country="JP" id_zone="Asia" iso_code="41" tax_behavior="0" active="1">
<state id="JP-41" id_country="JP" id_zone="Asia" iso_code="41" tax_behavior="0" active="1">
<name>Saga</name>
</state>
<state id="11" id_country="JP" id_zone="Asia" iso_code="11" tax_behavior="0" active="1">
<state id="JP-11" id_country="JP" id_zone="Asia" iso_code="11" tax_behavior="0" active="1">
<name>Saitama</name>
</state>
<state id="25" id_country="JP" id_zone="Asia" iso_code="25" tax_behavior="0" active="1">
<state id="JP-25" id_country="JP" id_zone="Asia" iso_code="25" tax_behavior="0" active="1">
<name>Shiga</name>
</state>
<state id="32" id_country="JP" id_zone="Asia" iso_code="32" tax_behavior="0" active="1">
<state id="JP-32" id_country="JP" id_zone="Asia" iso_code="32" tax_behavior="0" active="1">
<name>Shimane</name>
</state>
<state id="22" id_country="JP" id_zone="Asia" iso_code="22" tax_behavior="0" active="1">
<state id="JP-22" id_country="JP" id_zone="Asia" iso_code="22" tax_behavior="0" active="1">
<name>Shizuoka</name>
</state>
<state id="09" id_country="JP" id_zone="Asia" iso_code="09" tax_behavior="0" active="1">
<state id="JP-09" id_country="JP" id_zone="Asia" iso_code="09" tax_behavior="0" active="1">
<name>Tochigi</name>
</state>
<state id="36" id_country="JP" id_zone="Asia" iso_code="36" tax_behavior="0" active="1">
<state id="JP-36" id_country="JP" id_zone="Asia" iso_code="36" tax_behavior="0" active="1">
<name>Tokushima</name>
</state>
<state id="13" id_country="JP" id_zone="Asia" iso_code="13" tax_behavior="0" active="1">
<state id="JP-13" id_country="JP" id_zone="Asia" iso_code="13" tax_behavior="0" active="1">
<name>Tokyo</name>
</state>
<state id="31" id_country="JP" id_zone="Asia" iso_code="31" tax_behavior="0" active="1">
<state id="JP-31" id_country="JP" id_zone="Asia" iso_code="31" tax_behavior="0" active="1">
<name>Tottori</name>
</state>
<state id="16" id_country="JP" id_zone="Asia" iso_code="16" tax_behavior="0" active="1">
<state id="JP-16" id_country="JP" id_zone="Asia" iso_code="16" tax_behavior="0" active="1">
<name>Toyama</name>
</state>
<state id="30" id_country="JP" id_zone="Asia" iso_code="30" tax_behavior="0" active="1">
<state id="JP-30" id_country="JP" id_zone="Asia" iso_code="30" tax_behavior="0" active="1">
<name>Wakayama</name>
</state>
<state id="06" id_country="JP" id_zone="Asia" iso_code="06" tax_behavior="0" active="1">
<state id="JP-06" id_country="JP" id_zone="Asia" iso_code="06" tax_behavior="0" active="1">
<name>Yamagata</name>
</state>
<state id="35" id_country="JP" id_zone="Asia" iso_code="35" tax_behavior="0" active="1">
<state id="JP-35" id_country="JP" id_zone="Asia" iso_code="35" tax_behavior="0" active="1">
<name>Yamaguchi</name>
</state>
<state id="19" id_country="JP" id_zone="Asia" iso_code="19" tax_behavior="0" active="1">
<state id="JP-19" id_country="JP" id_zone="Asia" iso_code="19" tax_behavior="0" active="1">
<name>Yamanashi</name>
</state>
</entities>

View File

@@ -170,7 +170,7 @@
<access id="access_3_58" id_profile="Logistician" id_tab="Tax_Rules" view="0" add="0" edit="0" delete="0"/>
<access id="access_3_59" id_profile="Logistician" id_tab="Taxes" view="0" add="0" edit="0" delete="0"/>
<access id="access_3_60" id_profile="Logistician" id_tab="Translations" view="0" add="0" edit="0" delete="0"/>
<access id="access_3_61" id_profile="Logistician" id_tab="Modules_1" view="1" add="1" edit="1" delete="1"/>
<access id="access_3_61" id_profile="Logistician" id_tab="Modules_1" view="1" add="0" edit="1" delete="0"/>
<access id="access_3_62" id_profile="Logistician" id_tab="Modules_Themes_Catalog" view="0" add="0" edit="0" delete="0"/>
<access id="access_3_63" id_profile="Logistician" id_tab="Positions" view="0" add="0" edit="0" delete="0"/>
<access id="access_3_64" id_profile="Logistician" id_tab="Payment" view="0" add="0" edit="0" delete="0"/>
@@ -372,7 +372,7 @@
<access id="access_5_58" id_profile="Salesman" id_tab="Tax_Rules" view="0" add="0" edit="0" delete="0"/>
<access id="access_5_59" id_profile="Salesman" id_tab="Taxes" view="0" add="0" edit="0" delete="0"/>
<access id="access_5_60" id_profile="Salesman" id_tab="Translations" view="0" add="0" edit="0" delete="0"/>
<access id="access_5_61" id_profile="Salesman" id_tab="Modules_1" view="1" add="1" edit="1" delete="1"/>
<access id="access_5_61" id_profile="Salesman" id_tab="Modules_1" view="1" add="0" edit="1" delete="0"/>
<access id="access_5_62" id_profile="Salesman" id_tab="Modules_Themes_Catalog" view="0" add="0" edit="0" delete="0"/>
<access id="access_5_63" id_profile="Salesman" id_tab="Positions" view="0" add="0" edit="0" delete="0"/>
<access id="access_5_64" id_profile="Salesman" id_tab="Payment" view="0" add="0" edit="0" delete="0"/>

View File

@@ -0,0 +1,63 @@
<?xml version="1.0"?>
<entity_attribute>
<attribute id="2GB">
<name>2GB</name>
</attribute>
<attribute id="4GB">
<name>4GB</name>
</attribute>
<attribute id="Metal">
<name>Metal</name>
</attribute>
<attribute id="Blue">
<name>Blue</name>
</attribute>
<attribute id="Pink">
<name>Pink</name>
</attribute>
<attribute id="Green">
<name>Green</name>
</attribute>
<attribute id="Orange">
<name>Orange</name>
</attribute>
<attribute id="Optional_64GB_solid-state_drive">
<name>Optional 64GB solid-state drive</name>
</attribute>
<attribute id="80GB_Parallel_ATA_Drive_4200_rpm">
<name>80GB Parallel ATA Drive @ 4200 rpm</name>
</attribute>
<attribute id="1_60GHz_Intel_Core_2_Duo">
<name>1.60GHz Intel Core 2 Duo</name>
</attribute>
<attribute id="1_80GHz_Intel_Core_2_Duo">
<name>1.80GHz Intel Core 2 Duo</name>
</attribute>
<attribute id="80GB_20_000_Songs">
<name>80GB: 20,000 Songs</name>
</attribute>
<attribute id="160GB_40_000_Songs">
<name>160GB: 40,000 Songs</name>
</attribute>
<attribute id="Black">
<name>Black</name>
</attribute>
<attribute id="8GB">
<name>8GB</name>
</attribute>
<attribute id="16GB">
<name>16GB</name>
</attribute>
<attribute id="32GB">
<name>32GB</name>
</attribute>
<attribute id="Purple">
<name>Purple</name>
</attribute>
<attribute id="Yellow">
<name>Yellow</name>
</attribute>
<attribute id="Red">
<name>Red</name>
</attribute>
</entity_attribute>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<entity_attribute_group>
<attribute_group id="Disk_space">
<name>Disk space</name>
<public_name>Disk space</public_name>
</attribute_group>
<attribute_group id="Color">
<name>Color</name>
<public_name>Color</public_name>
</attribute_group>
<attribute_group id="ICU">
<name>ICU</name>
<public_name>Processor</public_name>
</attribute_group>
</entity_attribute_group>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<list_attributegroup>
<attributegroup id="capacity">
<name><![CDATA[Disk space]]></name>
</attributegroup>
<attributegroup id="capacity_public">
<name><![CDATA[Disk space]]></name>
</attributegroup>
<attributegroup id="color">
<name><![CDATA[Color]]></name>
</attributegroup>
<attributegroup id="color_public">
<name><![CDATA[Color]]></name>
</attributegroup>
<attributegroup id="processor">
<name><![CDATA[ICU]]></name>
</attributegroup>
<attributegroup id="processor_public">
<name><![CDATA[Processor]]></name>
</attributegroup>
</list_attributegroup>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0"?>
<entity_carrier>
<carrier id="My_carrier" id_shop="1">
<delay>Delivery next day!</delay>
</carrier>
</entity_carrier>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0"?>
<entity_category>
<category id="iPods" id_shop="1">
<name>iPods</name>
<description>Now that you can buy movies from the iTunes Store and sync them to your iPod, the whole world is your theater.</description>
<link_rewrite>music-ipods</link_rewrite>
<meta_title/>
<meta_keywords/>
<meta_description/>
</category>
<category id="Accessories" id_shop="1">
<name>Accessories</name>
<description>Wonderful accessories for your iPod</description>
<link_rewrite>accessories-ipod</link_rewrite>
<meta_title/>
<meta_keywords/>
<meta_description/>
</category>
<category id="Laptops" id_shop="1">
<name>Laptops</name>
<description>The latest Intel processor, a bigger hard drive, plenty of memory, and even more new features all fit inside just one liberating inch. The new Mac laptops have the performance, power, and connectivity of a desktop computer. Without the desk part.</description>
<link_rewrite>laptops</link_rewrite>
<meta_title>Apple laptops</meta_title>
<meta_keywords>Apple laptops MacBook Air</meta_keywords>
<meta_description>Powerful and chic Apple laptops</meta_description>
</category>
</entity_category>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0"?>
<entity_feature>
<feature id="Height">
<name>Height</name>
</feature>
<feature id="Width">
<name>Width</name>
</feature>
<feature id="Depth">
<name>Depth</name>
</feature>
<feature id="Weight">
<name>Weight</name>
</feature>
<feature id="Headphone">
<name>Headphone</name>
</feature>
</entity_feature>

View File

@@ -0,0 +1,45 @@
<?xml version="1.0"?>
<entity_feature_value>
<feature_value id="Jack_stereo">
<value>Jack stereo</value>
</feature_value>
<feature_value id="Mini-jack_stereo">
<value>Mini-jack stereo</value>
</feature_value>
<feature_value id="2_75_in">
<value>2.75 in</value>
</feature_value>
<feature_value id="2_06_in">
<value>2.06 in</value>
</feature_value>
<feature_value id="49_2_g">
<value>49.2 g</value>
</feature_value>
<feature_value id="0_26_in">
<value>0.26 in</value>
</feature_value>
<feature_value id="1_07_in">
<value>1.07 in</value>
</feature_value>
<feature_value id="1_62_in">
<value>1.62 in</value>
</feature_value>
<feature_value id="15_5_g">
<value>15.5 g</value>
</feature_value>
<feature_value id="0_41_in_clip_included">
<value>0.41 in (clip included)</value>
</feature_value>
<feature_value id="4_33_in">
<value>4.33 in</value>
</feature_value>
<feature_value id="2_76_in">
<value>2.76 in</value>
</feature_value>
<feature_value id="120g">
<value>120g</value>
</feature_value>
<feature_value id="0_31_in">
<value>0.31 in</value>
</feature_value>
</entity_feature_value>

View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<list_featurevalue>
<featurevalue id="jack_stereo">
<value><![CDATA[Jack stereo]]></value>
</featurevalue>
<featurevalue id="mini_jack_stereo">
<value><![CDATA[Mini-jack stereo]]></value>
</featurevalue>
<featurevalue id="2.75in">
<value><![CDATA[2.75 in]]></value>
</featurevalue>
<featurevalue id="2.06in">
<value><![CDATA[2.06 in]]></value>
</featurevalue>
<featurevalue id="49.2g">
<value><![CDATA[49.2 g]]></value>
</featurevalue>
<featurevalue id="0.26in">
<value><![CDATA[0.26 in]]></value>
</featurevalue>
<featurevalue id="1.07in">
<value><![CDATA[1.07 in]]></value>
</featurevalue>
<featurevalue id="1.62in">
<value><![CDATA[1.62 in]]></value>
</featurevalue>
<featurevalue id="15.5g">
<value><![CDATA[15.5 g]]></value>
</featurevalue>
<featurevalue id="0.41in">
<value><![CDATA[0.41 in (clip included)]]></value>
</featurevalue>
<featurevalue id="4.33in">
<value><![CDATA[4.33 in]]></value>
</featurevalue>
<featurevalue id="2.76in">
<value><![CDATA[2.76 in]]></value>
</featurevalue>
<featurevalue id="120g">
<value><![CDATA[120g]]></value>
</featurevalue>
<featurevalue id="0.31in">
<value><![CDATA[0.31 in]]></value>
</featurevalue>
</list_featurevalue>

View File

@@ -0,0 +1,81 @@
<?xml version="1.0"?>
<entity_image>
<image id="MacBook_Air">
<legend>MacBook Air</legend>
</image>
<image id="MacBook_Air_1">
<legend>MacBook Air</legend>
</image>
<image id="MacBook_Air_2">
<legend>MacBook Air</legend>
</image>
<image id="MacBook_Air_3">
<legend>MacBook Air</legend>
</image>
<image id="MacBook_Air_4">
<legend>MacBook Air</legend>
</image>
<image id="MacBook_Air_SuperDrive">
<legend> MacBook Air SuperDrive</legend>
</image>
<image id="iPod_touch">
<legend>iPod touch</legend>
</image>
<image id="iPod_touch_1">
<legend>iPod touch</legend>
</image>
<image id="iPod_touch_2">
<legend>iPod touch</legend>
</image>
<image id="iPod_touch_3">
<legend>iPod touch</legend>
</image>
<image id="iPod_touch_4">
<legend>iPod touch</legend>
</image>
<image id="iPod_touch_5">
<legend>iPod touch</legend>
</image>
<image id="housse-portefeuille-en-cuir">
<legend>housse-portefeuille-en-cuir</legend>
</image>
<image id="Shure_SE210_Sound-Isolating_Earphones_for_iPod_and_iPhone">
<legend>Shure SE210 Sound-Isolating Earphones for iPod and iPhone</legend>
</image>
<image id="iPod_Nano">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_1">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_2">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_3">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_4">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_5">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_6">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_7">
<legend>iPod Nano</legend>
</image>
<image id="iPod_shuffle">
<legend>iPod shuffle</legend>
</image>
<image id="iPod_shuffle_1">
<legend>iPod shuffle</legend>
</image>
<image id="iPod_shuffle_2">
<legend>iPod shuffle</legend>
</image>
<image id="iPod_shuffle_3">
<legend>iPod shuffle</legend>
</image>
</entity_image>

View File

@@ -0,0 +1,35 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 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/osl-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 <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../../');
exit;

View File

@@ -0,0 +1,17 @@
<?xml version="1.0"?>
<entity_manufacturer>
<manufacturer id="Apple_Computer_Inc">
<description/>
<short_description/>
<meta_title/>
<meta_keywords/>
<meta_description/>
</manufacturer>
<manufacturer id="Shure_Incorporated">
<description/>
<short_description/>
<meta_title/>
<meta_keywords/>
<meta_description/>
</manufacturer>
</entity_manufacturer>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<entity_order_message>
<order_message id="Delay">
<name>Delay</name>
<message>Hi,
Unfortunately, an item on your order is currently out of stock. This may cause a slight delay in delivery.
Please accept our apologies and rest assured that we are working hard to rectify this.
Best regards,</message>
</order_message>
</entity_order_message>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<list_ordermessage>
<ordermessage id="delay">
<name><![CDATA[Delay]]></name>
<message><![CDATA[Hi,
Unfortunately, an item on your order is currently out of stock. This may cause a slight delay in delivery.

View File

@@ -0,0 +1,135 @@
<?xml version="1.0"?>
<entity_product>
<product id="iPod_Nano" id_shop="1">
<description>&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;Curved ahead of the curve.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;For those about to rock, we give you nine amazing colors. But that's only part of the story. Feel the curved, all-aluminum and glass design and you won't want to put iPod nano down.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;Great looks. And brains, too.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;The new Genius feature turns iPod nano into your own highly intelligent, personal DJ. It creates playlists by finding songs in your library that go great together.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;Made to move with your moves.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;The accelerometer comes to iPod nano. Give it a shake to shuffle your music. Turn it sideways to view Cover Flow. And play games designed with your moves in mind.&lt;/p&gt;</description>
<description_short>&lt;p&gt;New design. New features. Now in 8GB and 16GB. iPod nano rocks like never before.&lt;/p&gt;</description_short>
<link_rewrite>ipod-nano</link_rewrite>
<meta_description/>
<meta_keywords/>
<meta_title/>
<name>iPod Nano</name>
<available_now>In stock</available_now>
<available_later/>
</product>
<product id="iPod_shuffle" id_shop="1">
<description>&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Instant attachment.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Wear up to 500 songs on your sleeve. Or your belt. Or your gym shorts. iPod shuffle is a badge of musical devotion. Now in new, more brilliant colors.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Feed your iPod shuffle.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;iTunes is your entertainment superstore. It&#x2019;s your ultra-organized music collection and jukebox. And it&#x2019;s how you load up your iPod shuffle in one click.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Beauty and the beat.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Intensely colorful anodized aluminum complements the simple design of iPod shuffle. Now in blue, green, pink, red, and original silver.&lt;/p&gt;</description>
<description_short>&lt;p&gt;iPod shuffle, the world&#x2019;s most wearable music player, now clips on in more vibrant blue, green, pink, and red.&lt;/p&gt;</description_short>
<link_rewrite>ipod-shuffle</link_rewrite>
<meta_description/>
<meta_keywords/>
<meta_title/>
<name>iPod shuffle</name>
<available_now>In stock</available_now>
<available_later/>
</product>
<product id="MacBook_Air" id_shop="1">
<description>&lt;p&gt;MacBook Air is nearly as thin as your index finger. Practically every detail that could be streamlined has been. Yet it still has a 13.3-inch widescreen LED display, full-size keyboard, and large multi-touch trackpad. It&#x2019;s incomparably portable without the usual ultraportable screen and keyboard compromises.&lt;/p&gt;&lt;p&gt;The incredible thinness of MacBook Air is the result of numerous size- and weight-shaving innovations. From a slimmer hard drive to strategically hidden I/O ports to a lower-profile battery, everything has been considered and reconsidered with thinness in mind.&lt;/p&gt;&lt;p&gt;MacBook Air is designed and engineered to take full advantage of the wireless world. A world in which 802.11n Wi-Fi is now so fast and so available, people are truly living untethered &#x2014; buying and renting movies online, downloading software, and sharing and storing files on the web. &lt;/p&gt;</description>
<description_short>MacBook Air is ultrathin, ultraportable, and ultra unlike anything else. But you don&#x2019;t lose inches and pounds overnight. It&#x2019;s the result of rethinking conventions. Of multiple wireless innovations. And of breakthrough design. With MacBook Air, mobile computing suddenly has a new standard.</description_short>
<link_rewrite>macbook-air</link_rewrite>
<meta_description/>
<meta_keywords/>
<meta_title/>
<name>MacBook Air</name>
<available_now/>
<available_later/>
</product>
<product id="MacBook" id_shop="1">
<description>Every MacBook has a larger hard drive, up to 250GB, to store growing media collections and valuable data.&lt;br /&gt;&lt;br /&gt;The 2.4GHz MacBook models now include 2GB of memory standard &#x2014; perfect for running more of your favorite applications smoothly.</description>
<description_short>MacBook makes it easy to hit the road thanks to its tough polycarbonate case, built-in wireless technologies, and innovative MagSafe Power Adapter that releases automatically if someone accidentally trips on the cord.</description_short>
<link_rewrite>macbook</link_rewrite>
<meta_description/>
<meta_keywords/>
<meta_title/>
<name>MacBook</name>
<available_now/>
<available_later/>
</product>
<product id="iPod_touch" id_shop="1">
<description>&lt;h3&gt;Five new hands-on applications&lt;/h3&gt;&#xD;
&lt;p&gt;View rich HTML email with photos as well as PDF, Word, and Excel attachments. Get maps, directions, and real-time traffic information. Take notes and read stock and weather reports.&lt;/p&gt;&#xD;
&lt;h3&gt;Touch your music, movies, and more&lt;/h3&gt;&#xD;
&lt;p&gt;The revolutionary Multi-Touch technology built into the gorgeous 3.5-inch display lets you pinch, zoom, scroll, and flick with your fingers.&lt;/p&gt;&#xD;
&lt;h3&gt;Internet in your pocket&lt;/h3&gt;&#xD;
&lt;p&gt;With the Safari web browser, see websites the way they were designed to be seen and zoom in and out with a tap.&lt;sup&gt;2&lt;/sup&gt; And add Web Clips to your Home screen for quick access to favorite sites.&lt;/p&gt;&#xD;
&lt;h3&gt;What's in the box&lt;/h3&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;iPod touch&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;Earphones&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;USB 2.0 cable&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;Dock adapter&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;Polishing cloth&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;Stand&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;Quick Start guide&lt;/li&gt;&#xD;
&lt;/ul&gt;</description>
<description_short>&lt;ul&gt;&#xD;
&lt;li&gt;Revolutionary Multi-Touch interface&lt;/li&gt;&#xD;
&lt;li&gt;3.5-inch widescreen color display&lt;/li&gt;&#xD;
&lt;li&gt;Wi-Fi (802.11b/g)&lt;/li&gt;&#xD;
&lt;li&gt;8 mm thin&lt;/li&gt;&#xD;
&lt;li&gt;Safari, YouTube, Mail, Stocks, Weather, Notes, iTunes Wi-Fi Music Store, Maps&lt;/li&gt;&#xD;
&lt;/ul&gt;</description_short>
<link_rewrite>ipod-touch</link_rewrite>
<meta_description/>
<meta_keywords/>
<meta_title/>
<name>iPod touch</name>
<available_now/>
<available_later/>
</product>
<product id="Belkin_Leather_Folio_for_iPod_nano_-_Black_Chocolate" id_shop="1">
<description>&lt;p&gt;Lorem ipsum&lt;/p&gt;</description>
<description_short>&lt;p&gt;Lorem ipsum&lt;/p&gt;</description_short>
<link_rewrite>belkin-leather-folio-for-ipod-nano-black-chocolate</link_rewrite>
<meta_description/>
<meta_keywords/>
<meta_title/>
<name>Belkin Leather Folio for iPod nano - Black / Chocolate</name>
<available_now/>
<available_later/>
</product>
<product id="Shure_SE210_Sound-Isolating_Earphones_for_iPod_and_iPhone" id_shop="1">
<description>&lt;div class="product-overview-full"&gt;Using Hi-Definition MicroSpeakers to deliver full-range audio, the ergonomic and lightweight design of the SE210 earphones is ideal for premium on-the-go listening on your iPod or iPhone. They offer the most accurate audio reproduction from both portable and home stereo audio sources--for the ultimate in precision highs and rich low end. In addition, the flexible design allows you to choose the most comfortable fit from a variety of wearing positions. &lt;br /&gt; &lt;br /&gt; &lt;strong&gt;Features &lt;/strong&gt; &lt;br /&gt; &#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Sound-isolating design &lt;/li&gt;&#xD;
&lt;li&gt; Hi-Definition MicroSpeaker with a single balanced armature driver &lt;/li&gt;&#xD;
&lt;li&gt; Detachable, modular cable so you can make the cable longer or shorter depending on your activity &lt;/li&gt;&#xD;
&lt;li&gt; Connector compatible with earphone ports on both iPod and iPhone &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;strong&gt;Specifications &lt;/strong&gt;&lt;br /&gt; &#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Speaker type: Hi-Definition MicroSpeaker &lt;/li&gt;&#xD;
&lt;li&gt; Frequency range: 25Hz-18.5kHz &lt;/li&gt;&#xD;
&lt;li&gt; Impedance (1kHz): 26 Ohms &lt;/li&gt;&#xD;
&lt;li&gt; Sensitivity (1mW): 114 dB SPL/mW &lt;/li&gt;&#xD;
&lt;li&gt; Cable length (with extension): 18.0 in./45.0 cm (54.0 in./137.1 cm) &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;strong&gt;In the box&lt;/strong&gt;&lt;br /&gt; &#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Shure SE210 earphones &lt;/li&gt;&#xD;
&lt;li&gt; Extension cable (36.0 in./91.4 cm) &lt;/li&gt;&#xD;
&lt;li&gt; Three pairs foam earpiece sleeves (small, medium, large) &lt;/li&gt;&#xD;
&lt;li&gt; Three pairs soft flex earpiece sleeves (small, medium, large) &lt;/li&gt;&#xD;
&lt;li&gt; One pair triple-flange earpiece sleeves &lt;/li&gt;&#xD;
&lt;li&gt; Carrying case &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
Warranty&lt;br /&gt; Two-year limited &lt;br /&gt;(For details, please visit &lt;br /&gt;www.shure.com/PersonalAudio/CustomerSupport/ProductReturnsAndWarranty/index.htm.) &lt;br /&gt;&lt;br /&gt; Mfr. Part No.: SE210-A-EFS &lt;br /&gt;&lt;br /&gt;Note: Products sold through this website that do not bear the Apple Brand name are serviced and supported exclusively by their manufacturers in accordance with terms and conditions packaged with the products. Apple's Limited Warranty does not apply to products that are not Apple-branded, even if packaged or sold with Apple products. Please contact the manufacturer directly for technical support and customer service.&lt;/div&gt;</description>
<description_short>&lt;p&gt;Evolved from personal monitor technology road-tested by pro musicians and perfected by Shure engineers, the lightweight and stylish SE210 delivers full-range audio that's free from outside noise.&lt;/p&gt;</description_short>
<link_rewrite>ecouteurs-a-isolation-sonore-shure-se210-blanc</link_rewrite>
<meta_description/>
<meta_keywords/>
<meta_title/>
<name>Shure SE210 Sound-Isolating Earphones for iPod and iPhone</name>
<available_now/>
<available_later/>
</product>
</entity_product>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<entity_profile>
<profile id="Administrator">
<name>Administrator</name>
</profile>
<profile id="Logistician">
<name>Logistician</name>
</profile>
<profile id="Translator">
<name>Translator</name>
</profile>
<profile id="Salesman">
<name>Salesman</name>
</profile>
</entity_profile>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<entity_scene>
<scene id="The_iPods_Nano">
<name>The iPods Nano</name>
</scene>
<scene id="The_iPods">
<name>The iPods</name>
</scene>
<scene id="The_MacBooks">
<name>The MacBooks</name>
</scene>
</entity_scene>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<entity_supplier>
<supplier id="AppleStore">
<description/>
<meta_title/>
<meta_keywords/>
<meta_description/>
</supplier>
<supplier id="Shure_Online_Store">
<description/>
<meta_title/>
<meta_keywords/>
<meta_description/>
</supplier>
</entity_supplier>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0"?>
<entity_tag>
<tag id="tag_5" name="apple" products="iPod_Nano,MacBook"/>
<tag id="tag_22" name="superdrive" products="MacBook"/>
<tag id="tag_23" name="Ipod touch" products="iPod_touch"/>
<tag id="tag_28" name="ipod" products="iPod_Nano,iPod_shuffle"/>
<tag id="tag_29" name="nano" products="iPod_Nano"/>
<tag id="tag_33" name="shuffle" products="iPod_shuffle"/>
</entity_tag>

View File

@@ -0,0 +1,35 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 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/osl-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 <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../');
exit;

View File

@@ -0,0 +1,63 @@
<?xml version="1.0"?>
<entity_attribute>
<attribute id="2GB">
<name>2GB</name>
</attribute>
<attribute id="4GB">
<name>4GB</name>
</attribute>
<attribute id="Metal">
<name>Metal</name>
</attribute>
<attribute id="Blue">
<name>Blue</name>
</attribute>
<attribute id="Pink">
<name>Pink</name>
</attribute>
<attribute id="Green">
<name>Green</name>
</attribute>
<attribute id="Orange">
<name>Orange</name>
</attribute>
<attribute id="Optional_64GB_solid-state_drive">
<name>Optional 64GB solid-state drive</name>
</attribute>
<attribute id="80GB_Parallel_ATA_Drive_4200_rpm">
<name>80GB Parallel ATA Drive @ 4200 rpm</name>
</attribute>
<attribute id="1_60GHz_Intel_Core_2_Duo">
<name>1.60GHz Intel Core 2 Duo</name>
</attribute>
<attribute id="1_80GHz_Intel_Core_2_Duo">
<name>1.80GHz Intel Core 2 Duo</name>
</attribute>
<attribute id="80GB_20_000_Songs">
<name>80GB: 20,000 Songs</name>
</attribute>
<attribute id="160GB_40_000_Songs">
<name>160GB: 40,000 Songs</name>
</attribute>
<attribute id="Black">
<name>Black</name>
</attribute>
<attribute id="8GB">
<name>8GB</name>
</attribute>
<attribute id="16GB">
<name>16GB</name>
</attribute>
<attribute id="32GB">
<name>32GB</name>
</attribute>
<attribute id="Purple">
<name>Purple</name>
</attribute>
<attribute id="Yellow">
<name>Yellow</name>
</attribute>
<attribute id="Red">
<name>Red</name>
</attribute>
</entity_attribute>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<entity_attribute_group>
<attribute_group id="Disk_space">
<name>Disk space</name>
<public_name>Disk space</public_name>
</attribute_group>
<attribute_group id="Color">
<name>Color</name>
<public_name>Color</public_name>
</attribute_group>
<attribute_group id="ICU">
<name>ICU</name>
<public_name>Processor</public_name>
</attribute_group>
</entity_attribute_group>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<list_attributegroup>
<attributegroup id="capacity">
<name><![CDATA[Disk space]]></name>
</attributegroup>
<attributegroup id="capacity_public">
<name><![CDATA[Disk space]]></name>
</attributegroup>
<attributegroup id="color">
<name><![CDATA[Color]]></name>
</attributegroup>
<attributegroup id="color_public">
<name><![CDATA[Color]]></name>
</attributegroup>
<attributegroup id="processor">
<name><![CDATA[ICU]]></name>
</attributegroup>
<attributegroup id="processor_public">
<name><![CDATA[Processor]]></name>
</attributegroup>
</list_attributegroup>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0"?>
<entity_carrier>
<carrier id="My_carrier" id_shop="1">
<delay>Delivery next day!</delay>
</carrier>
</entity_carrier>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0"?>
<entity_category>
<category id="iPods" id_shop="1">
<name>iPods</name>
<description>Now that you can buy movies from the iTunes Store and sync them to your iPod, the whole world is your theater.</description>
<link_rewrite>music-ipods</link_rewrite>
<meta_title/>
<meta_keywords/>
<meta_description/>
</category>
<category id="Accessories" id_shop="1">
<name>Accessories</name>
<description>Wonderful accessories for your iPod</description>
<link_rewrite>accessories-ipod</link_rewrite>
<meta_title/>
<meta_keywords/>
<meta_description/>
</category>
<category id="Laptops" id_shop="1">
<name>Laptops</name>
<description>The latest Intel processor, a bigger hard drive, plenty of memory, and even more new features all fit inside just one liberating inch. The new Mac laptops have the performance, power, and connectivity of a desktop computer. Without the desk part.</description>
<link_rewrite>laptops</link_rewrite>
<meta_title>Apple laptops</meta_title>
<meta_keywords>Apple laptops MacBook Air</meta_keywords>
<meta_description>Powerful and chic Apple laptops</meta_description>
</category>
</entity_category>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0"?>
<entity_feature>
<feature id="Height">
<name>Height</name>
</feature>
<feature id="Width">
<name>Width</name>
</feature>
<feature id="Depth">
<name>Depth</name>
</feature>
<feature id="Weight">
<name>Weight</name>
</feature>
<feature id="Headphone">
<name>Headphone</name>
</feature>
</entity_feature>

View File

@@ -0,0 +1,45 @@
<?xml version="1.0"?>
<entity_feature_value>
<feature_value id="Jack_stereo">
<value>Jack stereo</value>
</feature_value>
<feature_value id="Mini-jack_stereo">
<value>Mini-jack stereo</value>
</feature_value>
<feature_value id="2_75_in">
<value>2.75 in</value>
</feature_value>
<feature_value id="2_06_in">
<value>2.06 in</value>
</feature_value>
<feature_value id="49_2_g">
<value>49.2 g</value>
</feature_value>
<feature_value id="0_26_in">
<value>0.26 in</value>
</feature_value>
<feature_value id="1_07_in">
<value>1.07 in</value>
</feature_value>
<feature_value id="1_62_in">
<value>1.62 in</value>
</feature_value>
<feature_value id="15_5_g">
<value>15.5 g</value>
</feature_value>
<feature_value id="0_41_in_clip_included">
<value>0.41 in (clip included)</value>
</feature_value>
<feature_value id="4_33_in">
<value>4.33 in</value>
</feature_value>
<feature_value id="2_76_in">
<value>2.76 in</value>
</feature_value>
<feature_value id="120g">
<value>120g</value>
</feature_value>
<feature_value id="0_31_in">
<value>0.31 in</value>
</feature_value>
</entity_feature_value>

View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<list_featurevalue>
<featurevalue id="jack_stereo">
<value><![CDATA[Jack stereo]]></value>
</featurevalue>
<featurevalue id="mini_jack_stereo">
<value><![CDATA[Mini-jack stereo]]></value>
</featurevalue>
<featurevalue id="2.75in">
<value><![CDATA[2.75 in]]></value>
</featurevalue>
<featurevalue id="2.06in">
<value><![CDATA[2.06 in]]></value>
</featurevalue>
<featurevalue id="49.2g">
<value><![CDATA[49.2 g]]></value>
</featurevalue>
<featurevalue id="0.26in">
<value><![CDATA[0.26 in]]></value>
</featurevalue>
<featurevalue id="1.07in">
<value><![CDATA[1.07 in]]></value>
</featurevalue>
<featurevalue id="1.62in">
<value><![CDATA[1.62 in]]></value>
</featurevalue>
<featurevalue id="15.5g">
<value><![CDATA[15.5 g]]></value>
</featurevalue>
<featurevalue id="0.41in">
<value><![CDATA[0.41 in (clip included)]]></value>
</featurevalue>
<featurevalue id="4.33in">
<value><![CDATA[4.33 in]]></value>
</featurevalue>
<featurevalue id="2.76in">
<value><![CDATA[2.76 in]]></value>
</featurevalue>
<featurevalue id="120g">
<value><![CDATA[120g]]></value>
</featurevalue>
<featurevalue id="0.31in">
<value><![CDATA[0.31 in]]></value>
</featurevalue>
</list_featurevalue>

View File

@@ -0,0 +1,81 @@
<?xml version="1.0"?>
<entity_image>
<image id="MacBook_Air">
<legend>MacBook Air</legend>
</image>
<image id="MacBook_Air_1">
<legend>MacBook Air</legend>
</image>
<image id="MacBook_Air_2">
<legend>MacBook Air</legend>
</image>
<image id="MacBook_Air_3">
<legend>MacBook Air</legend>
</image>
<image id="MacBook_Air_4">
<legend>MacBook Air</legend>
</image>
<image id="MacBook_Air_SuperDrive">
<legend> MacBook Air SuperDrive</legend>
</image>
<image id="iPod_touch">
<legend>iPod touch</legend>
</image>
<image id="iPod_touch_1">
<legend>iPod touch</legend>
</image>
<image id="iPod_touch_2">
<legend>iPod touch</legend>
</image>
<image id="iPod_touch_3">
<legend>iPod touch</legend>
</image>
<image id="iPod_touch_4">
<legend>iPod touch</legend>
</image>
<image id="iPod_touch_5">
<legend>iPod touch</legend>
</image>
<image id="housse-portefeuille-en-cuir">
<legend>housse-portefeuille-en-cuir</legend>
</image>
<image id="Shure_SE210_Sound-Isolating_Earphones_for_iPod_and_iPhone">
<legend>Shure SE210 Sound-Isolating Earphones for iPod and iPhone</legend>
</image>
<image id="iPod_Nano">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_1">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_2">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_3">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_4">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_5">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_6">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_7">
<legend>iPod Nano</legend>
</image>
<image id="iPod_shuffle">
<legend>iPod shuffle</legend>
</image>
<image id="iPod_shuffle_1">
<legend>iPod shuffle</legend>
</image>
<image id="iPod_shuffle_2">
<legend>iPod shuffle</legend>
</image>
<image id="iPod_shuffle_3">
<legend>iPod shuffle</legend>
</image>
</entity_image>

View File

@@ -0,0 +1,35 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 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/osl-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 <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../../');
exit;

View File

@@ -0,0 +1,17 @@
<?xml version="1.0"?>
<entity_manufacturer>
<manufacturer id="Apple_Computer_Inc">
<description/>
<short_description/>
<meta_title/>
<meta_keywords/>
<meta_description/>
</manufacturer>
<manufacturer id="Shure_Incorporated">
<description/>
<short_description/>
<meta_title/>
<meta_keywords/>
<meta_description/>
</manufacturer>
</entity_manufacturer>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<entity_order_message>
<order_message id="Delay">
<name>Delay</name>
<message>Hi,
Unfortunately, an item on your order is currently out of stock. This may cause a slight delay in delivery.
Please accept our apologies and rest assured that we are working hard to rectify this.
Best regards,</message>
</order_message>
</entity_order_message>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<list_ordermessage>
<ordermessage id="delay">
<name><![CDATA[Delay]]></name>
<message><![CDATA[Hi,
Unfortunately, an item on your order is currently out of stock. This may cause a slight delay in delivery.

View File

@@ -0,0 +1,135 @@
<?xml version="1.0"?>
<entity_product>
<product id="iPod_Nano" id_shop="1">
<description>&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;Curved ahead of the curve.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;For those about to rock, we give you nine amazing colors. But that's only part of the story. Feel the curved, all-aluminum and glass design and you won't want to put iPod nano down.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;Great looks. And brains, too.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;The new Genius feature turns iPod nano into your own highly intelligent, personal DJ. It creates playlists by finding songs in your library that go great together.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;Made to move with your moves.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;The accelerometer comes to iPod nano. Give it a shake to shuffle your music. Turn it sideways to view Cover Flow. And play games designed with your moves in mind.&lt;/p&gt;</description>
<description_short>&lt;p&gt;New design. New features. Now in 8GB and 16GB. iPod nano rocks like never before.&lt;/p&gt;</description_short>
<link_rewrite>ipod-nano</link_rewrite>
<meta_description/>
<meta_keywords/>
<meta_title/>
<name>iPod Nano</name>
<available_now>In stock</available_now>
<available_later/>
</product>
<product id="iPod_shuffle" id_shop="1">
<description>&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Instant attachment.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Wear up to 500 songs on your sleeve. Or your belt. Or your gym shorts. iPod shuffle is a badge of musical devotion. Now in new, more brilliant colors.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Feed your iPod shuffle.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;iTunes is your entertainment superstore. It&#x2019;s your ultra-organized music collection and jukebox. And it&#x2019;s how you load up your iPod shuffle in one click.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Beauty and the beat.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Intensely colorful anodized aluminum complements the simple design of iPod shuffle. Now in blue, green, pink, red, and original silver.&lt;/p&gt;</description>
<description_short>&lt;p&gt;iPod shuffle, the world&#x2019;s most wearable music player, now clips on in more vibrant blue, green, pink, and red.&lt;/p&gt;</description_short>
<link_rewrite>ipod-shuffle</link_rewrite>
<meta_description/>
<meta_keywords/>
<meta_title/>
<name>iPod shuffle</name>
<available_now>In stock</available_now>
<available_later/>
</product>
<product id="MacBook_Air" id_shop="1">
<description>&lt;p&gt;MacBook Air is nearly as thin as your index finger. Practically every detail that could be streamlined has been. Yet it still has a 13.3-inch widescreen LED display, full-size keyboard, and large multi-touch trackpad. It&#x2019;s incomparably portable without the usual ultraportable screen and keyboard compromises.&lt;/p&gt;&lt;p&gt;The incredible thinness of MacBook Air is the result of numerous size- and weight-shaving innovations. From a slimmer hard drive to strategically hidden I/O ports to a lower-profile battery, everything has been considered and reconsidered with thinness in mind.&lt;/p&gt;&lt;p&gt;MacBook Air is designed and engineered to take full advantage of the wireless world. A world in which 802.11n Wi-Fi is now so fast and so available, people are truly living untethered &#x2014; buying and renting movies online, downloading software, and sharing and storing files on the web. &lt;/p&gt;</description>
<description_short>MacBook Air is ultrathin, ultraportable, and ultra unlike anything else. But you don&#x2019;t lose inches and pounds overnight. It&#x2019;s the result of rethinking conventions. Of multiple wireless innovations. And of breakthrough design. With MacBook Air, mobile computing suddenly has a new standard.</description_short>
<link_rewrite>macbook-air</link_rewrite>
<meta_description/>
<meta_keywords/>
<meta_title/>
<name>MacBook Air</name>
<available_now/>
<available_later/>
</product>
<product id="MacBook" id_shop="1">
<description>Every MacBook has a larger hard drive, up to 250GB, to store growing media collections and valuable data.&lt;br /&gt;&lt;br /&gt;The 2.4GHz MacBook models now include 2GB of memory standard &#x2014; perfect for running more of your favorite applications smoothly.</description>
<description_short>MacBook makes it easy to hit the road thanks to its tough polycarbonate case, built-in wireless technologies, and innovative MagSafe Power Adapter that releases automatically if someone accidentally trips on the cord.</description_short>
<link_rewrite>macbook</link_rewrite>
<meta_description/>
<meta_keywords/>
<meta_title/>
<name>MacBook</name>
<available_now/>
<available_later/>
</product>
<product id="iPod_touch" id_shop="1">
<description>&lt;h3&gt;Five new hands-on applications&lt;/h3&gt;&#xD;
&lt;p&gt;View rich HTML email with photos as well as PDF, Word, and Excel attachments. Get maps, directions, and real-time traffic information. Take notes and read stock and weather reports.&lt;/p&gt;&#xD;
&lt;h3&gt;Touch your music, movies, and more&lt;/h3&gt;&#xD;
&lt;p&gt;The revolutionary Multi-Touch technology built into the gorgeous 3.5-inch display lets you pinch, zoom, scroll, and flick with your fingers.&lt;/p&gt;&#xD;
&lt;h3&gt;Internet in your pocket&lt;/h3&gt;&#xD;
&lt;p&gt;With the Safari web browser, see websites the way they were designed to be seen and zoom in and out with a tap.&lt;sup&gt;2&lt;/sup&gt; And add Web Clips to your Home screen for quick access to favorite sites.&lt;/p&gt;&#xD;
&lt;h3&gt;What's in the box&lt;/h3&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;iPod touch&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;Earphones&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;USB 2.0 cable&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;Dock adapter&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;Polishing cloth&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;Stand&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;/span&gt;Quick Start guide&lt;/li&gt;&#xD;
&lt;/ul&gt;</description>
<description_short>&lt;ul&gt;&#xD;
&lt;li&gt;Revolutionary Multi-Touch interface&lt;/li&gt;&#xD;
&lt;li&gt;3.5-inch widescreen color display&lt;/li&gt;&#xD;
&lt;li&gt;Wi-Fi (802.11b/g)&lt;/li&gt;&#xD;
&lt;li&gt;8 mm thin&lt;/li&gt;&#xD;
&lt;li&gt;Safari, YouTube, Mail, Stocks, Weather, Notes, iTunes Wi-Fi Music Store, Maps&lt;/li&gt;&#xD;
&lt;/ul&gt;</description_short>
<link_rewrite>ipod-touch</link_rewrite>
<meta_description/>
<meta_keywords/>
<meta_title/>
<name>iPod touch</name>
<available_now/>
<available_later/>
</product>
<product id="Belkin_Leather_Folio_for_iPod_nano_-_Black_Chocolate" id_shop="1">
<description>&lt;p&gt;Lorem ipsum&lt;/p&gt;</description>
<description_short>&lt;p&gt;Lorem ipsum&lt;/p&gt;</description_short>
<link_rewrite>belkin-leather-folio-for-ipod-nano-black-chocolate</link_rewrite>
<meta_description/>
<meta_keywords/>
<meta_title/>
<name>Belkin Leather Folio for iPod nano - Black / Chocolate</name>
<available_now/>
<available_later/>
</product>
<product id="Shure_SE210_Sound-Isolating_Earphones_for_iPod_and_iPhone" id_shop="1">
<description>&lt;div class="product-overview-full"&gt;Using Hi-Definition MicroSpeakers to deliver full-range audio, the ergonomic and lightweight design of the SE210 earphones is ideal for premium on-the-go listening on your iPod or iPhone. They offer the most accurate audio reproduction from both portable and home stereo audio sources--for the ultimate in precision highs and rich low end. In addition, the flexible design allows you to choose the most comfortable fit from a variety of wearing positions. &lt;br /&gt; &lt;br /&gt; &lt;strong&gt;Features &lt;/strong&gt; &lt;br /&gt; &#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Sound-isolating design &lt;/li&gt;&#xD;
&lt;li&gt; Hi-Definition MicroSpeaker with a single balanced armature driver &lt;/li&gt;&#xD;
&lt;li&gt; Detachable, modular cable so you can make the cable longer or shorter depending on your activity &lt;/li&gt;&#xD;
&lt;li&gt; Connector compatible with earphone ports on both iPod and iPhone &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;strong&gt;Specifications &lt;/strong&gt;&lt;br /&gt; &#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Speaker type: Hi-Definition MicroSpeaker &lt;/li&gt;&#xD;
&lt;li&gt; Frequency range: 25Hz-18.5kHz &lt;/li&gt;&#xD;
&lt;li&gt; Impedance (1kHz): 26 Ohms &lt;/li&gt;&#xD;
&lt;li&gt; Sensitivity (1mW): 114 dB SPL/mW &lt;/li&gt;&#xD;
&lt;li&gt; Cable length (with extension): 18.0 in./45.0 cm (54.0 in./137.1 cm) &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;strong&gt;In the box&lt;/strong&gt;&lt;br /&gt; &#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;Shure SE210 earphones &lt;/li&gt;&#xD;
&lt;li&gt; Extension cable (36.0 in./91.4 cm) &lt;/li&gt;&#xD;
&lt;li&gt; Three pairs foam earpiece sleeves (small, medium, large) &lt;/li&gt;&#xD;
&lt;li&gt; Three pairs soft flex earpiece sleeves (small, medium, large) &lt;/li&gt;&#xD;
&lt;li&gt; One pair triple-flange earpiece sleeves &lt;/li&gt;&#xD;
&lt;li&gt; Carrying case &lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
Warranty&lt;br /&gt; Two-year limited &lt;br /&gt;(For details, please visit &lt;br /&gt;www.shure.com/PersonalAudio/CustomerSupport/ProductReturnsAndWarranty/index.htm.) &lt;br /&gt;&lt;br /&gt; Mfr. Part No.: SE210-A-EFS &lt;br /&gt;&lt;br /&gt;Note: Products sold through this website that do not bear the Apple Brand name are serviced and supported exclusively by their manufacturers in accordance with terms and conditions packaged with the products. Apple's Limited Warranty does not apply to products that are not Apple-branded, even if packaged or sold with Apple products. Please contact the manufacturer directly for technical support and customer service.&lt;/div&gt;</description>
<description_short>&lt;p&gt;Evolved from personal monitor technology road-tested by pro musicians and perfected by Shure engineers, the lightweight and stylish SE210 delivers full-range audio that's free from outside noise.&lt;/p&gt;</description_short>
<link_rewrite>ecouteurs-a-isolation-sonore-shure-se210-blanc</link_rewrite>
<meta_description/>
<meta_keywords/>
<meta_title/>
<name>Shure SE210 Sound-Isolating Earphones for iPod and iPhone</name>
<available_now/>
<available_later/>
</product>
</entity_product>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<entity_profile>
<profile id="Administrator">
<name>Administrator</name>
</profile>
<profile id="Logistician">
<name>Logistician</name>
</profile>
<profile id="Translator">
<name>Translator</name>
</profile>
<profile id="Salesman">
<name>Salesman</name>
</profile>
</entity_profile>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<entity_scene>
<scene id="The_iPods_Nano">
<name>The iPods Nano</name>
</scene>
<scene id="The_iPods">
<name>The iPods</name>
</scene>
<scene id="The_MacBooks">
<name>The MacBooks</name>
</scene>
</entity_scene>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<entity_supplier>
<supplier id="AppleStore">
<description/>
<meta_title/>
<meta_keywords/>
<meta_description/>
</supplier>
<supplier id="Shure_Online_Store">
<description/>
<meta_title/>
<meta_keywords/>
<meta_description/>
</supplier>
</entity_supplier>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0"?>
<entity_tag>
<tag id="tag_5" name="apple" products="iPod_Nano,MacBook"/>
<tag id="tag_22" name="superdrive" products="MacBook"/>
<tag id="tag_23" name="Ipod touch" products="iPod_touch"/>
<tag id="tag_28" name="ipod" products="iPod_Nano,iPod_shuffle"/>
<tag id="tag_29" name="nano" products="iPod_Nano"/>
<tag id="tag_33" name="shuffle" products="iPod_shuffle"/>
</entity_tag>

View File

@@ -0,0 +1,35 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 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/osl-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 <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../');
exit;

View File

@@ -0,0 +1,63 @@
<?xml version="1.0"?>
<entity_attribute>
<attribute id="2GB">
<name>2GB</name>
</attribute>
<attribute id="4GB">
<name>4GB</name>
</attribute>
<attribute id="Metal">
<name>Metal</name>
</attribute>
<attribute id="Blue">
<name>Blue</name>
</attribute>
<attribute id="Pink">
<name>Pink</name>
</attribute>
<attribute id="Green">
<name>Green</name>
</attribute>
<attribute id="Orange">
<name>Orange</name>
</attribute>
<attribute id="Optional_64GB_solid-state_drive">
<name>Optional 64GB solid-state drive</name>
</attribute>
<attribute id="80GB_Parallel_ATA_Drive_4200_rpm">
<name>80GB Parallel ATA Drive @ 4200 rpm</name>
</attribute>
<attribute id="1_60GHz_Intel_Core_2_Duo">
<name>1.60GHz Intel Core 2 Duo</name>
</attribute>
<attribute id="1_80GHz_Intel_Core_2_Duo">
<name>1.80GHz Intel Core 2 Duo</name>
</attribute>
<attribute id="80GB_20_000_Songs">
<name>80GB: 20,000 Songs</name>
</attribute>
<attribute id="160GB_40_000_Songs">
<name>160GB: 40,000 Songs</name>
</attribute>
<attribute id="Black">
<name>Black</name>
</attribute>
<attribute id="8GB">
<name>8GB</name>
</attribute>
<attribute id="16GB">
<name>16GB</name>
</attribute>
<attribute id="32GB">
<name>32GB</name>
</attribute>
<attribute id="Purple">
<name>Purple</name>
</attribute>
<attribute id="Yellow">
<name>Yellow</name>
</attribute>
<attribute id="Red">
<name>Red</name>
</attribute>
</entity_attribute>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<entity_attribute_group>
<attribute_group id="Disk_space">
<name>Disk space</name>
<public_name>Disk space</public_name>
</attribute_group>
<attribute_group id="Color">
<name>Color</name>
<public_name>Color</public_name>
</attribute_group>
<attribute_group id="ICU">
<name>ICU</name>
<public_name>Processor</public_name>
</attribute_group>
</entity_attribute_group>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<list_attributegroup>
<attributegroup id="capacity">
<name><![CDATA[Disk space]]></name>
</attributegroup>
<attributegroup id="capacity_public">
<name><![CDATA[Disk space]]></name>
</attributegroup>
<attributegroup id="color">
<name><![CDATA[Color]]></name>
</attributegroup>
<attributegroup id="color_public">
<name><![CDATA[Color]]></name>
</attributegroup>
<attributegroup id="processor">
<name><![CDATA[ICU]]></name>
</attributegroup>
<attributegroup id="processor_public">
<name><![CDATA[Processor]]></name>
</attributegroup>
</list_attributegroup>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0"?>
<entity_carrier>
<carrier id="My_carrier" id_shop="1">
<delay>Delivery next day!</delay>
</carrier>
</entity_carrier>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0"?>
<entity_category>
<category id="iPods" id_shop="1">
<name>iPods</name>
<description>Now that you can buy movies from the iTunes Store and sync them to your iPod, the whole world is your theater.</description>
<link_rewrite>music-ipods</link_rewrite>
<meta_title/>
<meta_keywords/>
<meta_description/>
</category>
<category id="Accessories" id_shop="1">
<name>Accessories</name>
<description>Wonderful accessories for your iPod</description>
<link_rewrite>accessories-ipod</link_rewrite>
<meta_title/>
<meta_keywords/>
<meta_description/>
</category>
<category id="Laptops" id_shop="1">
<name>Laptops</name>
<description>The latest Intel processor, a bigger hard drive, plenty of memory, and even more new features all fit inside just one liberating inch. The new Mac laptops have the performance, power, and connectivity of a desktop computer. Without the desk part.</description>
<link_rewrite>laptops</link_rewrite>
<meta_title>Apple laptops</meta_title>
<meta_keywords>Apple laptops MacBook Air</meta_keywords>
<meta_description>Powerful and chic Apple laptops</meta_description>
</category>
</entity_category>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0"?>
<entity_feature>
<feature id="Height">
<name>Height</name>
</feature>
<feature id="Width">
<name>Width</name>
</feature>
<feature id="Depth">
<name>Depth</name>
</feature>
<feature id="Weight">
<name>Weight</name>
</feature>
<feature id="Headphone">
<name>Headphone</name>
</feature>
</entity_feature>

View File

@@ -0,0 +1,45 @@
<?xml version="1.0"?>
<entity_feature_value>
<feature_value id="Jack_stereo">
<value>Jack stereo</value>
</feature_value>
<feature_value id="Mini-jack_stereo">
<value>Mini-jack stereo</value>
</feature_value>
<feature_value id="2_75_in">
<value>2.75 in</value>
</feature_value>
<feature_value id="2_06_in">
<value>2.06 in</value>
</feature_value>
<feature_value id="49_2_g">
<value>49.2 g</value>
</feature_value>
<feature_value id="0_26_in">
<value>0.26 in</value>
</feature_value>
<feature_value id="1_07_in">
<value>1.07 in</value>
</feature_value>
<feature_value id="1_62_in">
<value>1.62 in</value>
</feature_value>
<feature_value id="15_5_g">
<value>15.5 g</value>
</feature_value>
<feature_value id="0_41_in_clip_included">
<value>0.41 in (clip included)</value>
</feature_value>
<feature_value id="4_33_in">
<value>4.33 in</value>
</feature_value>
<feature_value id="2_76_in">
<value>2.76 in</value>
</feature_value>
<feature_value id="120g">
<value>120g</value>
</feature_value>
<feature_value id="0_31_in">
<value>0.31 in</value>
</feature_value>
</entity_feature_value>

View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<list_featurevalue>
<featurevalue id="jack_stereo">
<value><![CDATA[Jack stereo]]></value>
</featurevalue>
<featurevalue id="mini_jack_stereo">
<value><![CDATA[Mini-jack stereo]]></value>
</featurevalue>
<featurevalue id="2.75in">
<value><![CDATA[2.75 in]]></value>
</featurevalue>
<featurevalue id="2.06in">
<value><![CDATA[2.06 in]]></value>
</featurevalue>
<featurevalue id="49.2g">
<value><![CDATA[49.2 g]]></value>
</featurevalue>
<featurevalue id="0.26in">
<value><![CDATA[0.26 in]]></value>
</featurevalue>
<featurevalue id="1.07in">
<value><![CDATA[1.07 in]]></value>
</featurevalue>
<featurevalue id="1.62in">
<value><![CDATA[1.62 in]]></value>
</featurevalue>
<featurevalue id="15.5g">
<value><![CDATA[15.5 g]]></value>
</featurevalue>
<featurevalue id="0.41in">
<value><![CDATA[0.41 in (clip included)]]></value>
</featurevalue>
<featurevalue id="4.33in">
<value><![CDATA[4.33 in]]></value>
</featurevalue>
<featurevalue id="2.76in">
<value><![CDATA[2.76 in]]></value>
</featurevalue>
<featurevalue id="120g">
<value><![CDATA[120g]]></value>
</featurevalue>
<featurevalue id="0.31in">
<value><![CDATA[0.31 in]]></value>
</featurevalue>
</list_featurevalue>

View File

@@ -0,0 +1,81 @@
<?xml version="1.0"?>
<entity_image>
<image id="MacBook_Air">
<legend>MacBook Air</legend>
</image>
<image id="MacBook_Air_1">
<legend>MacBook Air</legend>
</image>
<image id="MacBook_Air_2">
<legend>MacBook Air</legend>
</image>
<image id="MacBook_Air_3">
<legend>MacBook Air</legend>
</image>
<image id="MacBook_Air_4">
<legend>MacBook Air</legend>
</image>
<image id="MacBook_Air_SuperDrive">
<legend> MacBook Air SuperDrive</legend>
</image>
<image id="iPod_touch">
<legend>iPod touch</legend>
</image>
<image id="iPod_touch_1">
<legend>iPod touch</legend>
</image>
<image id="iPod_touch_2">
<legend>iPod touch</legend>
</image>
<image id="iPod_touch_3">
<legend>iPod touch</legend>
</image>
<image id="iPod_touch_4">
<legend>iPod touch</legend>
</image>
<image id="iPod_touch_5">
<legend>iPod touch</legend>
</image>
<image id="housse-portefeuille-en-cuir">
<legend>housse-portefeuille-en-cuir</legend>
</image>
<image id="Shure_SE210_Sound-Isolating_Earphones_for_iPod_and_iPhone">
<legend>Shure SE210 Sound-Isolating Earphones for iPod and iPhone</legend>
</image>
<image id="iPod_Nano">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_1">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_2">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_3">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_4">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_5">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_6">
<legend>iPod Nano</legend>
</image>
<image id="iPod_Nano_7">
<legend>iPod Nano</legend>
</image>
<image id="iPod_shuffle">
<legend>iPod shuffle</legend>
</image>
<image id="iPod_shuffle_1">
<legend>iPod shuffle</legend>
</image>
<image id="iPod_shuffle_2">
<legend>iPod shuffle</legend>
</image>
<image id="iPod_shuffle_3">
<legend>iPod shuffle</legend>
</image>
</entity_image>

View File

@@ -0,0 +1,35 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 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/osl-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 <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../../');
exit;

View File

@@ -0,0 +1,17 @@
<?xml version="1.0"?>
<entity_manufacturer>
<manufacturer id="Apple_Computer_Inc">
<description/>
<short_description/>
<meta_title/>
<meta_keywords/>
<meta_description/>
</manufacturer>
<manufacturer id="Shure_Incorporated">
<description/>
<short_description/>
<meta_title/>
<meta_keywords/>
<meta_description/>
</manufacturer>
</entity_manufacturer>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0"?>
<entity_order_message>
<order_message id="Delay">
<name>Delay</name>
<message>Hi,
Unfortunately, an item on your order is currently out of stock. This may cause a slight delay in delivery.
Please accept our apologies and rest assured that we are working hard to rectify this.
Best regards,</message>
</order_message>
</entity_order_message>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<list_ordermessage>
<ordermessage id="delay">
<name><![CDATA[Delay]]></name>
<message><![CDATA[Hi,
Unfortunately, an item on your order is currently out of stock. This may cause a slight delay in delivery.

Some files were not shown because too many files have changed in this diff Show More