Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into bootstrap
Conflicts: admin-dev/themes/default/template/controllers/customer_threads/message.tpl admin-dev/themes/default/template/controllers/customers/helpers/view/view.tpl admin-dev/themes/default/template/controllers/import/helpers/form/form.tpl admin-dev/themes/default/template/controllers/modules/favorites.tpl admin-dev/themes/default/template/controllers/modules/list.tpl admin-dev/themes/default/template/controllers/modules/tab_module_line.tpl admin-dev/themes/default/template/controllers/modules_positions/list_modules.tpl admin-dev/themes/default/template/controllers/orders/_print_pdf_icon.tpl admin-dev/themes/default/template/controllers/orders/form.tpl admin-dev/themes/default/template/controllers/orders/helpers/view/view.tpl admin-dev/themes/default/template/controllers/products/associations.tpl admin-dev/themes/default/template/controllers/products/combinations.tpl admin-dev/themes/default/template/controllers/products/images.tpl admin-dev/themes/default/template/controllers/products/informations.tpl admin-dev/themes/default/template/controllers/products/prices.tpl admin-dev/themes/default/template/controllers/referrers/helpers/view/view.tpl admin-dev/themes/default/template/header.tpl admin-dev/themes/default/template/helpers/form/form.tpl admin-dev/themes/default/template/helpers/list/list_header.tpl classes/ProductSale.php classes/helper/HelperList.php controllers/admin/AdminCmsController.php controllers/admin/AdminCustomersController.php controllers/admin/AdminMetaController.php controllers/admin/AdminModulesController.php controllers/admin/AdminPerformanceController.php controllers/admin/AdminProductsController.php controllers/front/ParentOrderController.php install-dev/theme/views/welcome.phtml modules/blocknewproducts/blocknewproducts.php modules/blocktopmenu/blocktopmenu.php modules/importerosc/importerosc.php modules/mailalerts/mailalerts.php modules/shopimporter/shopimporter.php modules/statsstock/statsstock.php themes/default/css/product_list.css
This commit is contained in:
@@ -22,26 +22,18 @@
|
||||
|
||||
$upload->setInvalidFileExt(explode(",", CONFIG_UPLOAD_INVALID_EXTS));
|
||||
if(CONFIG_SYS_VIEW_ONLY || !CONFIG_OPTIONS_UPLOAD)
|
||||
{
|
||||
$error = SYS_DISABLED;
|
||||
}
|
||||
elseif(empty($_GET['folder']) || !isUnderRoot($_GET['folder']))
|
||||
{
|
||||
$error = ERR_FOLDER_PATH_NOT_ALLOWED;
|
||||
}else if(!$upload->isFileUploaded('file'))
|
||||
{
|
||||
elseif (!$upload->isFileUploaded('file'))
|
||||
$error = ERR_FILE_NOT_UPLOADED;
|
||||
}else if(!$upload->moveUploadedFile($_GET['folder']))
|
||||
{
|
||||
$error = ERR_FILE_MOVE_FAILED;
|
||||
}
|
||||
elseif(!$upload->isPermittedFileExt(explode(",", CONFIG_UPLOAD_VALID_EXTS)))
|
||||
{
|
||||
elseif (!$upload->isPermittedFileExt(explode(",", CONFIG_UPLOAD_VALID_EXTS)))
|
||||
$error = ERR_FILE_TYPE_NOT_ALLOWED;
|
||||
}elseif(defined('CONFIG_UPLOAD_MAXSIZE') && CONFIG_UPLOAD_MAXSIZE && $upload->isSizeTooBig(CONFIG_UPLOAD_MAXSIZE))
|
||||
{
|
||||
elseif (defined('CONFIG_UPLOAD_MAXSIZE') && CONFIG_UPLOAD_MAXSIZE && $upload->isSizeTooBig(CONFIG_UPLOAD_MAXSIZE))
|
||||
$error = sprintf(ERROR_FILE_TOO_BID, transformFileSize(CONFIG_UPLOAD_MAXSIZE));
|
||||
}else
|
||||
elseif (!$upload->moveUploadedFile($_GET['folder']))
|
||||
$error = ERR_FILE_MOVE_FAILED;
|
||||
else
|
||||
{
|
||||
include_once(CLASS_FILE);
|
||||
$path = $upload->getFilePath();
|
||||
|
||||
@@ -24,7 +24,8 @@
|
||||
if(!empty($_GET['search']))
|
||||
{
|
||||
include_once(CLASS_SEARCH);
|
||||
|
||||
if (!preg_match('/^'.Tools::pRegexp(realpath(dirname(__FILE__).'/'.$_GET['search_folder']), '/').'/i', _PS_ROOT_DIR_.'/img/cms'))
|
||||
exit;
|
||||
$search = new Search($_GET['search_folder']);
|
||||
$search->addSearchKeyword('recursive', @$_GET['search_recursively']);
|
||||
$search->addSearchKeyword('mtime_from', @$_GET['search_mtime_from']);
|
||||
|
||||
@@ -78,9 +78,9 @@
|
||||
define('CONFIG_EDITABLE_VALID_EXTS', 'txt,htm,html,xml,js,css'); //make you include all these extension in CONFIG_UPLOAD_VALID_EXTS if you want all valid
|
||||
|
||||
define('CONFIG_OVERWRITTEN', false); //overwirte when processing paste
|
||||
define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,png');// //
|
||||
define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,jpeg,png');// //
|
||||
//define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,png,bmp,tif,zip,sit,rar,gz,tar,htm,html,mov,mpg,avi,asf,mpeg,wmv,aif,aiff,wav,mp3,swf,ppt,rtf,doc,pdf,xls,txt,xml,xsl,dtd');//
|
||||
define("CONFIG_VIEWABLE_VALID_EXTS", 'gif,jpg,png');
|
||||
define("CONFIG_VIEWABLE_VALID_EXTS", 'gif,jpg,jpeg,jpeg,png');
|
||||
//define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,png,txt'); //
|
||||
define('CONFIG_UPLOAD_INVALID_EXTS', '');
|
||||
|
||||
|
||||
@@ -10,6 +10,9 @@
|
||||
|
||||
//FILESYSTEM CONFIG <br>
|
||||
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . "class.auth.php");
|
||||
if (_PS_MODE_DEMO_)
|
||||
die('This functionality has been disabled.');
|
||||
|
||||
define('CONFIG_QUERY_STRING_ENABLE', true); //Enable passed query string to setting the system configuration
|
||||
if(!isset($_SESSION))
|
||||
{
|
||||
|
||||
@@ -73,9 +73,9 @@
|
||||
define('CONFIG_EDITABLE_VALID_EXTS', 'txt,htm,html,xml,js,css'); //make you include all these extension in CONFIG_UPLOAD_VALID_EXTS if you want all valid
|
||||
|
||||
define('CONFIG_OVERWRITTEN', false); //overwirte when processing paste
|
||||
define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,png,txt'); //
|
||||
define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,jpeg,png,txt'); //
|
||||
//define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,png,bmp,tif,zip,sit,rar,gz,tar,htm,html,mov,mpg,avi,asf,mpeg,wmv,aif,aiff,wav,mp3,swf,ppt,rtf,doc,pdf,xls,txt,xml,xsl,dtd');//
|
||||
define("CONFIG_VIEWABLE_VALID_EXTS", 'gif,bmp,txt,jpg,png,tif,html,htm,js,css,xml,xsl,dtd,mp3,wav,wmv,wma,rm,rmvb,mov,swf');
|
||||
define("CONFIG_VIEWABLE_VALID_EXTS", 'gif,bmp,txt,jpg,jpeg,png,tif,html,htm,js,css,xml,xsl,dtd,mp3,wav,wmv,wma,rm,rmvb,mov,swf');
|
||||
//define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,png,txt'); //
|
||||
define('CONFIG_UPLOAD_INVALID_EXTS', '');
|
||||
|
||||
|
||||
@@ -53,12 +53,12 @@
|
||||
{/if}
|
||||
<dl class="dl-horizontal">
|
||||
<dt>{l s='Sent on:'}</dt>
|
||||
<dd>{$message.date_add}</dd>
|
||||
<dd>{$message.date_add} </dd>
|
||||
</dl>
|
||||
{if empty($message.id_employee)}
|
||||
<dl class="dl-horizontal">
|
||||
<dt>{l s='Browser:'}</dt>
|
||||
<dd>{$message.user_agent}</dd>
|
||||
<dd>{$message.user_agent} </dd>
|
||||
</dl>
|
||||
{/if}
|
||||
{if !empty($message.file_name) && $file_name}
|
||||
@@ -72,33 +72,26 @@
|
||||
</dd>
|
||||
</dl>
|
||||
{/if}
|
||||
{if !empty($message.id_order) && empty($message.id_employee)}
|
||||
<dl class="dl-horizontal">
|
||||
{if !empty($message.id_order) && $is_valid_order_id && empty($message.id_employee)}
|
||||
<dl>
|
||||
<dt>{l s='Order #'}</dt>
|
||||
<dd>
|
||||
<a href="index.php?tab=AdminOrders&id_order={$message.id_order}&vieworder&token={getAdminToken tab='AdminOrders'}" title="{l s='View order'}">
|
||||
{$message.id_order} <i class="icon-search"></i>
|
||||
</a>
|
||||
<dd><a href="index.php?tab=AdminOrders&id_order={$message.id_order}&vieworder&token={getAdminToken tab='AdminOrders'}" title="{l s='View order'}">{$message.id_order} <img src="../img/admin/search.gif" alt="{l s='View'}" /></a>
|
||||
</dd>
|
||||
</dl>
|
||||
{/if}
|
||||
{if !empty($message.id_product) && empty($message.id_employee)}
|
||||
<dl class="dl-horizontal">
|
||||
<dt>{l s='Product #'}</dt>
|
||||
<dd>
|
||||
<a href="index.php?tab=AdminProducts&id_product={$message.id_product}&updateproduct&token={getAdminToken tab='AdminProducts'}" title="{l s='View order'}">
|
||||
{$message.id_product} <i class="icon-search"></i>
|
||||
</a>
|
||||
</dd>
|
||||
<dd><a href="index.php?tab=AdminProducts&id_product={$message.id_product}&updateproduct&token={getAdminToken tab='AdminProducts'}" title="{l s='View order'}">{$message.id_product} <img src="../img/admin/search.gif" alt="{l s='View'}" /></a></dd>
|
||||
</dl>
|
||||
{/if}
|
||||
|
||||
<form action="{$current}&token={$token}&id_customer_thread={$message.id_customer_thread}&viewcustomer_thread" method="post" class="form-horizontal">
|
||||
<dl class="dl-horizontal">
|
||||
<dt> {l s='Subject:'}</dt>
|
||||
|
||||
<form class="form-horizontal" action="{$current}&token={$token}&id_customer_thread={$message.id_customer_thread}&viewcustomer_thread" method="post">
|
||||
<input type="hidden" name="id_customer_message" value="{$message.id_customer_message}" />
|
||||
<dl>
|
||||
<dt>{l s='Subject:'}</dt>
|
||||
<dd>
|
||||
<input type="hidden" name="id_customer_message" value="{$message.id_customer_message}" />
|
||||
<select name="id_contact" onchange="this.form.submit();" class="col-lg-3">
|
||||
<select name="id_contact" onchange="this.form.submit();">
|
||||
{foreach $contacts as $contact}
|
||||
<option value="{$contact.id_contact}" {if $contact.id_contact == $message.id_contact}selected="selected"{/if}>
|
||||
{$contact.name}
|
||||
@@ -200,4 +193,4 @@
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
{extends file="helpers/view/view.tpl"}
|
||||
|
||||
{block name="override_tpl"}
|
||||
|
||||
<script type="text/javascript">
|
||||
function saveCustomerNote()
|
||||
{
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
<div class="leadin">{block name="leadin"}{/block}</div>
|
||||
{if $module_confirmation}
|
||||
<div class="module_confirmation conf confirm">
|
||||
{l s='Your .CSV file has been sucessfully imported into your shop.'}
|
||||
{l s='Your .CSV file has been sucessfully imported into your shop. Don\'t forget to Re-build the products search index.'}
|
||||
</div>
|
||||
{/if}
|
||||
<div style="display: none">
|
||||
@@ -118,6 +118,7 @@
|
||||
<a class="list-group-item" href="../docs/csv_import/addresses_import.csv" target="_blank">{l s='Sample Addresses file'}</a>
|
||||
<a class="list-group-item" href="../docs/csv_import/manufacturers_import.csv" target="_blank">{l s='Sample Manufacturers file'}</a>
|
||||
<a class="list-group-item" href="../docs/csv_import/suppliers_import.csv" target="_blank">{l s='Sample Suppliers file'}</a>
|
||||
<a class="list-group-item" href="../docs/csv_import/alias_import.csv" target="_blank">{l s='Sample Alias file'}</a>
|
||||
{if $PS_ADVANCED_STOCK_MANAGEMENT}
|
||||
<a class="list-group-item" href="../docs/csv_import/supply_orders_import.csv" target="_blank">{l s='Supply Orders sample file'}</a>
|
||||
<a class="list-group-item" href="../docs/csv_import/supply_orders_details_import.csv" target="_blank">{l s='Supply Orders Details sample file'}</a>
|
||||
@@ -291,30 +292,35 @@
|
||||
});
|
||||
|
||||
$("select#entity").change(function(){
|
||||
if ($("#entity > option:selected").val() == 7 || $("#entity > option:selected").val() == 8)
|
||||
if ($("#entity > option:selected").val() == 8 || $("#entity > option:selected").val() == 9)
|
||||
$("label[for=truncate],#truncate").hide();
|
||||
else
|
||||
$("label[for=truncate],#truncate").show();
|
||||
|
||||
if ($("#entity > option:selected").val() == 8)
|
||||
{
|
||||
if ($("#entity > option:selected").val() == 9)
|
||||
$(".import_supply_orders_details").show();
|
||||
$('input[name=multiple_value_separator]').val('|');
|
||||
}
|
||||
else
|
||||
{
|
||||
$(".import_supply_orders_details").hide();
|
||||
$('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();
|
||||
$("label[for=match_ref], #match_ref").show();
|
||||
else
|
||||
$("label[for=match_ref], #match_ref, label[for=regenerate], #regenerate").hide();
|
||||
$("label[for=match_ref], #match_ref").hide();
|
||||
|
||||
if ($("#entity > option:selected").val() == 1 || $("#entity > option:selected").val() == 0)
|
||||
$(".import_products_categories, label[for=regenerate], #regenerate").show();
|
||||
$(".import_products_categories").show();
|
||||
else
|
||||
$(".import_products_categories, label[for=regenerate], #regenerate").hide();
|
||||
if ($("#entity > option:selected").val() == 0 || $("#entity > option:selected").val() == 1 || $("#entity > option:selected").val() == 3 || $("#entity > option:selected").val() == 5 || $("#entity > option:selected").val() == 6)
|
||||
$(".import_products_categories").hide();
|
||||
|
||||
if ($("#entity > option:selected").val() == 0 || $("#entity > option:selected").val() == 1 ||
|
||||
$("#entity > option:selected").val() == 5 || $("#entity > option:selected").val() == 6)
|
||||
$("label[for=regenerate], #regenerate").show()
|
||||
else
|
||||
$("label[for=regenerate], #regenerate").hide();
|
||||
|
||||
if ($("#entity > option:selected").val() == 0 || $("#entity > option:selected").val() == 1 || $("#entity > option:selected").val() == 3 || $("#entity > option:selected").val() == 5 || $("#entity > option:selected").val() == 6 || $("#entity > option:selected").val() == 7)
|
||||
$("label[for=forceIDs], #forceIDs").show();
|
||||
else
|
||||
$("label[for=forceIDs], #forceIDs").hide();
|
||||
|
||||
@@ -96,14 +96,14 @@
|
||||
</td>
|
||||
<td>
|
||||
<select name="i_{$module->name}" class="moduleFavorite">
|
||||
<option value="" selected="selected">---</option>
|
||||
<option value="" selected="selected">-</option>
|
||||
<option value="1" {if isset($module->preferences.interest) && $module->preferences.interest eq '1'}selected="selected"{/if}>{l s='Yes'}</option>
|
||||
<option value="0" {if isset($module->preferences.interest) && $module->preferences.interest eq '0'}selected="selected"{/if}>{l s='No'}</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<select name="f_{$module->name}" class="moduleFavorite">
|
||||
<option value="" selected="selected">---</option>
|
||||
<option value="" selected="selected">-</option>
|
||||
<option value="1" {if isset($module->preferences.favorite) && $module->preferences.favorite eq '1'}selected="selected"{/if}>{l s='Yes'}</option>
|
||||
<option value="0" {if isset($module->preferences.favorite) && $module->preferences.favorite eq '0'}selected="selected"{/if}>{l s='No'}</option>
|
||||
</select>
|
||||
|
||||
@@ -69,10 +69,7 @@
|
||||
<div class="module_name">
|
||||
<span style="display:none">{$module->name}</span>
|
||||
{$module->displayName}
|
||||
|
||||
<small>v{$module->version}</small>
|
||||
|
||||
|
||||
{if isset($module->type) && $module->type == 'addonsMustHave'}
|
||||
<span class="label label-info">{l s='Must Have'}</span>
|
||||
{elseif isset($module->id) && $module->id gt 0}
|
||||
@@ -86,20 +83,7 @@
|
||||
{else}
|
||||
<span class="label label-warning">{l s='Not installed'}</span>
|
||||
{/if}
|
||||
<!-- {if isset($module->id) && $module->id gt 0}
|
||||
<span class="label label-success{if isset($module->active) && $module->active eq 0} off{/if}">{l s='Installed'}</span>
|
||||
{else}
|
||||
<span class="label label-warning">{l s='Not installed'}</span>
|
||||
{/if} -->
|
||||
</div>
|
||||
<!-- <p class="text-muted">
|
||||
{if isset($module->author) && !empty($module->author)}
|
||||
{l s='Developed by'} {$module->author|truncate:20:'...'}
|
||||
{/if}
|
||||
{if isset($module->version_addons)}
|
||||
({l s='Update'} {$module->version_addons} {l s='Available on PrestaShop Addons'})
|
||||
{/if}
|
||||
</p> -->
|
||||
<p class="module_description">
|
||||
{if isset($module->description) && $module->description ne ''}
|
||||
{$module->description}
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
<span>
|
||||
<select id="show_modules" onChange="autoUrl('show_modules', '{$url_show_modules}')" class="filter fixed-width-lg">
|
||||
<option value="all">{l s='All modules'} </option>
|
||||
<option>---------------</option>
|
||||
<option>-</option>
|
||||
{foreach $modules as $module}
|
||||
<option value="{$module->id|intval}" {if $display_key == $module->id}selected="selected"{/if}>{$module->displayName}</option>
|
||||
{/foreach}
|
||||
@@ -51,7 +51,6 @@
|
||||
</label>
|
||||
</p>
|
||||
</form>
|
||||
|
||||
<div id="modulePosition">
|
||||
<form method="post" action="{$url_submit}" >
|
||||
|
||||
@@ -196,4 +195,4 @@
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
|
||||
@@ -39,4 +39,4 @@
|
||||
<i class="icon-truck"></i>
|
||||
</a>
|
||||
{/if}
|
||||
</span>
|
||||
</span>
|
||||
|
||||
@@ -689,7 +689,7 @@
|
||||
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" 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 += '<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" rel="'+this.id_product+'_'+this.id_product_attribute+'" class="product_unit_price" value="' + this.numeric_price + '" /></td><td>';
|
||||
cart_content += (!this.id_customization ? '<div class="input-group fixed-width-md"><div class="input-group-btn"><a href="#" class="btn btn-default increaseqty_product" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" ><i class="icon-caret-up"></i></a><a href="#" class="btn btn-default decreaseqty_product" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'"><i class="icon-caret-down"></i></a></div>' : '');
|
||||
cart_content += (!this.id_customization ? '<input type="text" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" class="cart_quantity" value="'+this.cart_quantity+'" />' : '');
|
||||
cart_content += (!this.id_customization ? '<div class="input-group-btn"><a href="#" class="delete_product btn btn-default" rel="delete_'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" ><i class="icon-remove text-danger"></i></a></div></div>' : '');
|
||||
@@ -748,6 +748,16 @@
|
||||
$('#payment_list').html(payment_list);
|
||||
}
|
||||
|
||||
function fixPriceFormat(price)
|
||||
{
|
||||
if(price.indexOf(',') > 0 && price.indexOf('.') > 0) // if contains , and .
|
||||
if(price.indexOf(',') < price.indexOf('.')) // if , is before .
|
||||
price = price.replace(',',''); // remove ,
|
||||
price = price.replace(' ',''); // remove any spaces
|
||||
price = price.replace(',','.'); // remove , if price did not cotain both , and .
|
||||
return price;
|
||||
}
|
||||
|
||||
function displaySummary(jsonSummary)
|
||||
{
|
||||
currency_format = jsonSummary.currency.format;
|
||||
@@ -783,13 +793,13 @@
|
||||
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(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));
|
||||
|
||||
$('#total_vouchers').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_discounts_tax_exc)), currency_format, currency_sign, currency_blank));
|
||||
$('#total_shipping').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_shipping_tax_exc)), currency_format, currency_sign, currency_blank));
|
||||
$('#total_taxes').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_tax)), currency_format, currency_sign, currency_blank));
|
||||
$('#total_without_taxes').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_price_without_tax)), currency_format, currency_sign, currency_blank));
|
||||
$('#total_with_taxes').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_price)), currency_format, currency_sign, currency_blank));
|
||||
$('#total_products').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_products)), 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);
|
||||
|
||||
@@ -65,29 +65,27 @@
|
||||
<div class="row">
|
||||
<div class="col-lg-3 box-stats color3" >
|
||||
<i class="icon-calendar-empty"></i>
|
||||
<span class="title">{l s='Date'}<br /><small>sous-titre</small></span>
|
||||
<span class="title">{l s='Date'}<br /><small>{l s='subtitle'}</small></span>
|
||||
<span class="value">{dateFormat date=$order->date_add full=false}</span>
|
||||
</div>
|
||||
<div class="col-lg-3 box-stats color2" >
|
||||
<i class="icon-comments"></i>
|
||||
<span class="title">{l s='Messages'}<br /><small>sous-titre</small></span>
|
||||
<!-- <span class="value">{sizeof($messages)}</span> -->
|
||||
<span class="title">{l s='Messages'}<br /><small>{l s='subtitle'}</small></span>
|
||||
<span class="value"><a href="{$link->getAdminLink('AdminCustomerThreads')|escape:'htmlall':'UTF-8'}">{sizeof($customer_thread_message)}</a></span>
|
||||
</div>
|
||||
<div class="col-lg-3 box-stats color1" >
|
||||
<i class="icon-ok"></i>
|
||||
<span class="title">{l s='Products'}<br /><small>sous-titre</small></span>
|
||||
<span class="title">{l s='Products'}<br /><small>{l s='subtitle'}</small></span>
|
||||
<span class="value">{sizeof($products)}</span>
|
||||
</div>
|
||||
<div class="col-lg-3 box-stats color4" >
|
||||
<i class="icon-money"></i>
|
||||
<span class="title">{l s='Total'}<br /><small>sous-titre</small></span>
|
||||
<span class="title">{l s='Total'}<br /><small>{l s='subtitle'}</small></span>
|
||||
<span class="value">{displayPrice price=$order->total_paid_tax_incl currency=$currency->id}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Todo : Be smart and find the best place for Admin order hook -->
|
||||
{hook h="displayAdminOrder" id_order=$order->id}
|
||||
<div class="row">
|
||||
@@ -534,7 +532,7 @@
|
||||
<label class="control-label col-lg-3">{l s='Choose a standard message'}</label>
|
||||
<div class="col-lg-9">
|
||||
<select name="order_message" id="order_message" onchange="orderOverwriteMessage(this, '{l s='Do you want to overwrite your existing message?'}')">
|
||||
<option value="0" selected="selected">--</option>
|
||||
<option value="0" selected="selected">-</option>
|
||||
{foreach from=$orderMessages item=orderMessage}
|
||||
<option value="{$orderMessage['message']|escape:'htmlall':'UTF-8'}">{$orderMessage['name']}</option>
|
||||
{/foreach}
|
||||
@@ -852,10 +850,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<form class="container-command-top-spacing" action="{$current_index}&vieworder&token={$smarty.get.token}&id_order={$order->id}" method="post" onsubmit="return orderDeleteProduct('{l s='This product cannot be returned.'}', '{l s='Quantity to cancel is greater than quantity available.'}');">
|
||||
<input type="hidden" name="id_order" value="{$order->id}" />
|
||||
<div style="display: none">
|
||||
@@ -1114,8 +1108,6 @@
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
{if (sizeof($messages))}
|
||||
<div class="panel">
|
||||
<h3>
|
||||
|
||||
@@ -92,16 +92,16 @@
|
||||
<label class="control-label col-lg-3" for="id_manufacturer">{l s='Manufacturer:'}</label>
|
||||
<div class="col-lg-5">
|
||||
<select name="id_manufacturer" id="id_manufacturer">
|
||||
<option value="0">-- {l s='Choose (optional)'} --</option>
|
||||
<option value="0">- {l s='Choose (optional)'} -</option>
|
||||
{if $product->id_manufacturer}
|
||||
<option value="{$product->id_manufacturer}" selected="selected">{$product->manufacturer_name}</option>
|
||||
{/if}
|
||||
<option disabled="disabled">----------</option>
|
||||
<option disabled="disabled">-</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
<a class="btn btn-link bt-icon confirm_leave" style="margin-bottom:0" href="{$link->getAdminLink('AdminManufacturers')|escape:'htmlall':'UTF-8'}&addmanufacturer">
|
||||
<i class="icon-plus-sign"></i> {l s='Create new manufacturer'} <i class="icon-external-link-sign"></i>
|
||||
<i class="icon-plus-sign"></i> {l s='Create new manufacturer'} <i class="icon-external-link-sign"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -24,14 +24,12 @@
|
||||
*}
|
||||
{if isset($product->id) && !$product->is_virtual}
|
||||
<div class="panel">
|
||||
|
||||
<script type="text/javascript">
|
||||
var msg_combination_1 = '{l s='Please choose an attribute.'}';
|
||||
var msg_combination_2 = '{l s='Please choose a value.'}';
|
||||
var msg_combination_3 = '{l s='You can only add one combination per attribute type.'}';
|
||||
var msg_new_combination = '{l s='New combination'}';
|
||||
var msg_cancel_combination = '{l s='Cancel combination'}';
|
||||
|
||||
var attrs = new Array();
|
||||
var modifyattributegroup = "{l s='Modify this attribute combination.' js=1}";
|
||||
attrs[0] = new Array(0, "---");
|
||||
@@ -43,10 +41,8 @@
|
||||
{/foreach}
|
||||
);
|
||||
{/foreach}
|
||||
|
||||
$(document).ready(function(){
|
||||
populate_attrs();
|
||||
|
||||
$(".datepicker").datepicker({
|
||||
prevText: '',
|
||||
nextText: '',
|
||||
@@ -54,14 +50,11 @@
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<input type="hidden" name="submitted_tabs[]" value="Combinations" />
|
||||
|
||||
<h3>{l s='Add or modify combinations for this product.'}</h3>
|
||||
<div class="alert alert-info">
|
||||
{l s='Or use the'} <a class="btn btn-link bt-icon confirm_leave" href="index.php?tab=AdminAttributeGenerator&id_product={$product->id}&attributegenerator&token={$token_generator}"><i class="icon-magic"></i> {l s='Product combinations generator'} <i class="icon-external-link-sign"></i></a> {l s='in order to automatically create a set of combinations.'}
|
||||
</div>
|
||||
|
||||
{if $combination_exists}
|
||||
<div class="alert alert-info" style="display:block">
|
||||
{l s='Some combinations already exist. If you want to generate new combinations, the quantities for the existing combinations will be lost.'}<br/>
|
||||
@@ -72,11 +65,8 @@
|
||||
<br />
|
||||
{include file="controllers/products/multishop/check_fields.tpl" product_tab="Combinations"}
|
||||
{/if}
|
||||
|
||||
<div id="add_new_combination" class="panel" style="display: none;">
|
||||
|
||||
<div class="panel-heading">{l s='Add or modify combinations for this product.'}</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-3" for="attribute_group">{l s='Attribute:'}</label>
|
||||
<div class="col-lg-5">
|
||||
@@ -89,14 +79,13 @@
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<label class="control-label col-lg-3" for="attribute">{l s='Value:'}</label>
|
||||
<div class="col-lg-9">
|
||||
<div class="form-group">
|
||||
<div class="col-lg-8">
|
||||
<select name="attribute" id="attribute">
|
||||
<option value="0">---</option>
|
||||
<option value="0">-</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
@@ -113,9 +102,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-3" for="attribute_reference">
|
||||
<span class="label-tooltip" data-toggle="tooltip"
|
||||
@@ -126,8 +113,7 @@
|
||||
<div class="col-lg-5">
|
||||
<input type="text" id="attribute_reference" name="attribute_reference" value="" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-3" for="attribute_ean13">
|
||||
{l s='EAN13:'}
|
||||
@@ -135,8 +121,7 @@
|
||||
<div class="col-lg-3">
|
||||
<input maxlength="13" type="text" id="attribute_ean13" name="attribute_ean13" value="" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-3" for="attribute_upc">
|
||||
{l s='UPC:'}
|
||||
@@ -144,10 +129,8 @@
|
||||
<div class="col-lg-3">
|
||||
<input maxlength="12" type="text" id="attribute_upc" name="attribute_upc" value="" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<hr/>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-3" for="attribute_wholesale_price">
|
||||
{include file="controllers/products/multishop/checkbox.tpl" field="attribute_wholesale_price" type="default"}
|
||||
@@ -165,7 +148,6 @@
|
||||
</div>
|
||||
<span style="display:none;" id="attribute_wholesale_price_full">({l s='Overrides wholesale price on "Information" tab'})</span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-3" for="attribute_price_impact">
|
||||
{include file="controllers/products/multishop/checkbox.tpl" field="attribute_price_impact" type="attribute_price_impact"}
|
||||
@@ -223,8 +205,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-3" for="attribute_weight_impact">
|
||||
{include file="controllers/products/multishop/checkbox.tpl" field="attribute_weight_impact" type="attribute_weight_impact"}
|
||||
@@ -255,7 +235,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="tr_unit_impact" class="form-group">
|
||||
<label class="control-label col-lg-3" for="attribute_unit_impact">
|
||||
{include file="controllers/products/multishop/checkbox.tpl" field="attribute_unit_impact" type="attribute_unit_impact"}
|
||||
@@ -284,7 +263,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{if $ps_use_ecotax}
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-3" for="attribute_ecotax">
|
||||
@@ -303,7 +281,6 @@
|
||||
</div>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-3" for="attribute_minimal_quantity">
|
||||
{include file="controllers/products/multishop/checkbox.tpl" field="attribute_minimal_quantity" type="default"}
|
||||
@@ -317,7 +294,6 @@
|
||||
<input maxlength="6" name="attribute_minimal_quantity" id="attribute_minimal_quantity" type="text" value="{$minimal_quantity}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-3" for="available_date_attribute">
|
||||
{include file="controllers/products/multishop/checkbox.tpl" field="available_date_attribute" type="default"}
|
||||
@@ -333,9 +309,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-3">{l s='Image:'}</label>
|
||||
<div class="col-lg-9">
|
||||
@@ -344,14 +318,13 @@
|
||||
<li>
|
||||
<input type="checkbox" name="id_image_attr[]" value="{$image.id_image}" id="id_image_attr_{$image.id_image}" />
|
||||
<label for="id_image_attr_{$image.id_image}">
|
||||
<img src="{$smarty.const._THEME_PROD_DIR_}{$image.obj->getExistingImgPath()}-small_default.jpg" alt="{$image.legend|escape:'htmlall':'UTF-8'}" title="{$image.legend|escape:'htmlall':'UTF-8'}" />
|
||||
<img src="{$smarty.const._THEME_PROD_DIR_}{$image.obj->getExistingImgPath()}-{$imageType}.jpg" alt="{$image.legend|escape:'htmlall':'UTF-8'}" title="{$image.legend|escape:'htmlall':'UTF-8'}" />
|
||||
</label>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-3" for="attribute_default">
|
||||
{include file="controllers/products/multishop/checkbox.tpl" field="attribute_default" type="attribute_default"}
|
||||
@@ -366,7 +339,6 @@
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel-footer">
|
||||
<span id="ResetSpan">
|
||||
<button type="reset" name="ResetBtn" id="ResetBtn" onclick="$('#desc-product-newCombination').click();" class="btn btn-default">
|
||||
@@ -377,4 +349,4 @@
|
||||
</div>
|
||||
{$list}
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
@@ -33,27 +33,42 @@
|
||||
</h3>
|
||||
|
||||
<div class="row">
|
||||
<label class="control-label col-lg-5 file_upload_label">
|
||||
<span class="label-tooltip" data-toggle="tooltip"
|
||||
title="{l s='Format:'} JPG, GIF, PNG. {l s='Filesize:'} {$max_image_size|string_format:"%.2f"} {l s='MB max.'}">
|
||||
{if isset($id_image)}{l s='Edit this product image'}{else}{l s='Add a new image to this product'}{/if}
|
||||
</span>
|
||||
</label>
|
||||
<div class="col-lg-7">
|
||||
{l s='File:'}
|
||||
<div id="file-uploader">
|
||||
<noscript>
|
||||
<p>{l s='Please enable JavaScript to use file uploader:'}</p>
|
||||
</noscript>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-3 file_upload_label">
|
||||
<span class="label-tooltip" data-toggle="tooltip"
|
||||
title="{l s='Format:'} JPG, GIF, PNG. {l s='Filesize:'} {$max_image_size|string_format:"%.2f"} {l s='MB max.'}">
|
||||
{if isset($id_image)}{l s='Edit this product image'}{else}{l s='Add a new image to this product'}{/if}
|
||||
</span>
|
||||
</label>
|
||||
<div class="col-lg-9">
|
||||
{l s='File:'}
|
||||
<div id="file-uploader">
|
||||
<noscript>
|
||||
<p>{l s='Please enable JavaScript to use file uploader:'}</p>
|
||||
</noscript>
|
||||
</div>
|
||||
<div id="progressBarImage" class="progressBarImage"></div>
|
||||
<div id="showCounter" style="display:none;">
|
||||
<span id="imageUpload">0</span><span id="imageTotal">0</span>
|
||||
</div>
|
||||
<input type="hidden" name="resizer" value="auto" />
|
||||
{if Tools::getValue('id_image')}
|
||||
<input type="hidden" name="id_image" value="{Tools::getValue('id_image')|intval}" />
|
||||
{/if}
|
||||
</div>
|
||||
<div id="progressBarImage" class="progressBarImage"></div>
|
||||
<div id="showCounter" style="display:none;">
|
||||
<span id="imageUpload">0</span><span id="imageTotal">0</span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="control-label col-lg-3">
|
||||
{l s='Legend:'}
|
||||
</label>
|
||||
<div class="col-lg-9 translatable">
|
||||
{foreach from=$languages item=language}
|
||||
<div class="lang_{$language.id_lang}" style="{if !$language.is_default}display: none;{/if} float: left;">
|
||||
<input class="updateCurrentText" type="text" {if !$product->id}disabled="disabled"{/if} id="legend_{$language.id_lang}" name="legend_{$language.id_lang}" value="{$product->name[$language.id_lang]|escape:'htmlall':'UTF-8'}"/>
|
||||
<div class="help-block">{l s='Invalid characters:'} <>;=#{}</div>
|
||||
</div>
|
||||
{/foreach}
|
||||
</div>
|
||||
<input type="hidden" name="resizer" value="auto" />
|
||||
{if Tools::getValue('id_image')}
|
||||
<input type="hidden" name="id_image" value="{Tools::getValue('id_image')|intval}" />
|
||||
{/if}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -61,6 +76,7 @@
|
||||
<thead>
|
||||
<tr class="nodrag nodrop">
|
||||
<th class="fixed-width-sm"><span class="title_box">{l s='Image'}</span></th>
|
||||
<th class="fixed-width-lg"><span class="title_box">{l s='Legend'}</span></th>
|
||||
<th class="center fixed-width-xs"><span class="title_box">{l s='Position'}</span></th>
|
||||
{if $shops}
|
||||
{foreach from=$shops item=shop}
|
||||
@@ -79,9 +95,10 @@
|
||||
<tr id="image_id">
|
||||
<td>
|
||||
<a href="{$smarty.const._THEME_PROD_DIR_}image_path.jpg" class="fancybox">
|
||||
<img src="{$smarty.const._THEME_PROD_DIR_}{$iso_lang}-default-small_default.jpg" alt="image_id" title="image_id" />
|
||||
<img src="{$smarty.const._THEME_PROD_DIR_}{$iso_lang}-default-{$imageType}.jpg" alt="image_id" title="image_id" />
|
||||
</a>
|
||||
</td>
|
||||
<td>legend</td>
|
||||
<td id="td_image_id" class="pointer dragHandle center positionImage">
|
||||
image_position
|
||||
</td>
|
||||
@@ -129,7 +146,7 @@
|
||||
}
|
||||
else
|
||||
assoc = false;
|
||||
imageLine({$image->id}, "{$image->getExistingImgPath()}", {$image->position}, "{if $image->cover}icon-check-sign{else}icon-check-empty{/if}", assoc);
|
||||
imageLine({$image->id}, "{$image->getExistingImgPath()}", {$image->position}, "{if $image->cover}icon-check-sign{else}icon-check-empty{/if}", assoc, "{$image->legend[$default_language]|@addcslashes:'\"'}");
|
||||
{/foreach}
|
||||
{literal}
|
||||
$("#imageTable").tableDnD(
|
||||
@@ -149,19 +166,18 @@
|
||||
}
|
||||
});
|
||||
var filecheck = 1;
|
||||
var uploader = new qq.FileUploader(
|
||||
var params = new Array;
|
||||
params['id_product'] = {/literal}{$id_product|intval}{literal};
|
||||
params['id_category'] = {/literal}{$id_category_default|intval}{literal};
|
||||
params['token'] = "{/literal}{$token}{literal}";
|
||||
params['tab'] = "AdminProducts";
|
||||
params['action'] = "addImage";
|
||||
params['ajax'] = 1;
|
||||
uploader = new qq.FileUploader(
|
||||
{
|
||||
element: document.getElementById("file-uploader"),
|
||||
action: "ajax-tab.php",
|
||||
debug: false,
|
||||
params: {
|
||||
id_product : {/literal}{$id_product}{literal},
|
||||
id_category : {/literal}{$id_category_default}{literal},
|
||||
token : "{/literal}{$token}{literal}",
|
||||
tab : "AdminProducts",
|
||||
action : 'addImage',
|
||||
ajax: 1
|
||||
},
|
||||
onComplete: function(id, fileName, responseJSON)
|
||||
{
|
||||
var percent = ((filecheck * 100) / nbfile);
|
||||
@@ -186,7 +202,7 @@
|
||||
cover = "icon-check-empty";
|
||||
if (responseJSON.cover == "1")
|
||||
cover = "icon-check-sign";
|
||||
imageLine(responseJSON.id, responseJSON.path, responseJSON.position, cover, responseJSON.shops)
|
||||
imageLine(responseJSON.id, responseJSON.path, responseJSON.position, cover, responseJSON.shops, responseJSON.legend[{/literal}{$default_language|intval}{literal}])
|
||||
$("#imageTable tr:last").after(responseJSON.html);
|
||||
$("#countImage").html(parseInt($("#countImage").html()) + 1);
|
||||
$("#img" + id).remove();
|
||||
@@ -199,6 +215,12 @@
|
||||
},
|
||||
onSubmit: function(id, filename)
|
||||
{
|
||||
$('input[id^="legend_"]').each(function()
|
||||
{
|
||||
id = $(this).prop("id").replace("legend_", "legend[") + "]";
|
||||
params[id] = $(this).val();
|
||||
});
|
||||
uploader.setParams(params);
|
||||
$("#imageTable").show();
|
||||
$("#listImage").append("<li id='img"+id+"'><div>" + filename + "</div></div><a href=\"javascript:delQueue(" + id +");\"><img src=\"../img/admin/disabled.gif\" ></a><p class=\"errorImg\"></p></li>");
|
||||
}
|
||||
@@ -286,8 +308,7 @@
|
||||
"ajax" : 1
|
||||
});
|
||||
});
|
||||
|
||||
//function
|
||||
|
||||
function updateImagePosition(json)
|
||||
{
|
||||
doAdminAjax(
|
||||
@@ -306,13 +327,14 @@
|
||||
$("#img" + id).remove();
|
||||
}
|
||||
|
||||
function imageLine(id, path, position, cover, shops)
|
||||
function imageLine(id, path, position, cover, shops, legend)
|
||||
{
|
||||
line = $("#lineType").html();
|
||||
line = line.replace(/image_id/g, id);
|
||||
line = line.replace(/[a-z]{2}-default-small_default/g, path+'-small_default');
|
||||
line = line.replace(/image_id/g, legend);
|
||||
line = line.replace(/[a-z]{0,2}-default-small_default/g, path+'-small_default');
|
||||
line = line.replace(/image_path/g, path);
|
||||
line = line.replace(/image_position/g, position);
|
||||
line = line.replace(/legend/g, legend);
|
||||
line = line.replace(/icon-check-empty/g, cover);
|
||||
line = line.replace(/<tbody>/gi, "");
|
||||
line = line.replace(/<\/tbody>/gi, "");
|
||||
@@ -330,4 +352,4 @@
|
||||
{/literal}
|
||||
</script>
|
||||
</div>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
@@ -429,6 +429,17 @@
|
||||
<div class="row">
|
||||
{/if}
|
||||
{foreach from=$languages item=language}
|
||||
{literal}
|
||||
<script type="text/javascript">
|
||||
$().ready(function () {
|
||||
var input_id = '{/literal}tags_{$language.id_lang}{literal}';
|
||||
$('#'+input_id).tagify({delimiters: [13,44], addTagPrompt: '{/literal}{l s='Add tag' js=1}{literal}'});
|
||||
$({/literal}'#{$table}{literal}_form').submit( function() {
|
||||
$(this).find('#'+input_id).val($('#'+input_id).tagify('serialize'));
|
||||
});
|
||||
});
|
||||
</script>
|
||||
{/literal}
|
||||
{if $languages|count > 1}
|
||||
<div class="translatable-field lang-{$language.id_lang}">
|
||||
<div class="col-lg-9">
|
||||
|
||||
@@ -444,7 +444,7 @@ $(document).ready(function () {
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<select name="sp_reduction_type" id="sp_reduction_type">
|
||||
<option selected="selected">---</option>
|
||||
<option selected="selected">-</option>
|
||||
<option value="amount">{l s='Amount'}</option>
|
||||
<option value="percentage">{l s='Percentage'}</option>
|
||||
</select>
|
||||
@@ -453,7 +453,6 @@ $(document).ready(function () {
|
||||
</div>
|
||||
<p class="help-block">{l s='The discount is applied after the tax'}</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
|
||||
@@ -58,6 +58,7 @@
|
||||
$('#file_missing').hide();
|
||||
$('#virtual_product_name').attr('value', fileName);
|
||||
$("#upload-confirmation .error").remove();
|
||||
$('#upload-confirmation div').find('span').remove()
|
||||
$('#upload-confirmation div').prepend('<span>{l s='The file'} "<a class="link" href="get-file-admin.php?file='+msg+'&filename='+fileName+'">'+fileName+'</a>" {l s='has successfully been uploaded'}' +
|
||||
'<input type="hidden" id="virtual_product_filename" name="virtual_product_filename" value="' + msg + '" /></span>');
|
||||
$("#upload-confirmation").show();
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
<label class="control-label col-lg-3">{l s='Filter by product:'}</label>
|
||||
<div class="col-lg-9">
|
||||
<select id="selectProduct" name="selectProduct" style="width: 200px;" onfocus="fillProducts();" onchange="updateConversionRate(this.value);">
|
||||
<option value="0" selected="selected">-- {l s='All'} --</option>
|
||||
<option value="0" selected="selected">- {l s='All'} -</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
@@ -127,6 +127,4 @@
|
||||
<script type="text/javascript">
|
||||
updateConversionRate(0);
|
||||
</script>
|
||||
|
||||
{/block}
|
||||
|
||||
|
||||
@@ -44,14 +44,14 @@
|
||||
var roundMode = {$round_mode};
|
||||
{if isset($shop_context)}
|
||||
{if $shop_context == Shop::CONTEXT_ALL}
|
||||
var youEditFieldFor = "{l s='A modification of this field will be applied for all shops' slashes=1 }";
|
||||
var youEditFieldFor = '{l s='A modification of this field will be applied for all shops' slashes=1}';
|
||||
{elseif $shop_context == Shop::CONTEXT_GROUP}
|
||||
var youEditFieldFor = "{l s='A modification of this field will be applied for all shops of group ' slashes=1 }<b>{$shop_name}</b>";
|
||||
var youEditFieldFor = '{l s='A modification of this field will be applied for all shops of group' slashes=1}<b>{$shop_name}</b>';
|
||||
{else}
|
||||
var youEditFieldFor = "{l s='A modification of this field will be applied for the shop ' slashes=1 }<b>{$shop_name}</b>";
|
||||
var youEditFieldFor = '{l s='A modification of this field will be applied for the shop' slashes=1}<b>{$shop_name}</b>';
|
||||
{/if}
|
||||
{else}
|
||||
var youEditFieldFor = '';
|
||||
{else}
|
||||
var youEditFieldFor = '';
|
||||
{/if}
|
||||
{* Notifications vars *}
|
||||
var autorefresh_notifications = '{$autorefresh_notifications}';
|
||||
@@ -66,12 +66,12 @@
|
||||
var new_msg = '{l s='A new message posted on your shop.' slashes=1}';
|
||||
var excerpt_msg = '{l s='Excerpt: ' slashes=1}';
|
||||
var see_msg = '{l s='Read this message' slashes=1}';
|
||||
var token_admin_orders = '{getAdminToken tab='AdminOrders' slashes=1}';
|
||||
var token_admin_customers = '{getAdminToken tab='AdminCustomers' slashes=1}';
|
||||
var token_admin_customer_threads = '{getAdminToken tab='AdminCustomerThreads' slashes=1}';
|
||||
var token_admin_orders = '{getAdminToken tab='AdminOrders'}';
|
||||
var token_admin_customers = '{getAdminToken tab='AdminCustomers'}';
|
||||
var token_admin_customer_threads = '{getAdminToken tab='AdminCustomerThreads'}';
|
||||
var currentIndex = '{$currentIndex}';
|
||||
var default_language = '{$default_language|intval}';
|
||||
var choose_language_translate = "{l s='Choose language' slashes=1}";
|
||||
var choose_language_translate = '{l s='Choose language' slashes=1}';
|
||||
var admin_modules_link = '{$link->getAdminLink("AdminModules")|addslashes}';
|
||||
var tab_modules_list = '{if isset($tab_modules_list) && $tab_modules_list}{$tab_modules_list|addslashes}{/if}';
|
||||
</script>
|
||||
|
||||
@@ -178,8 +178,7 @@
|
||||
<script type="text/javascript">
|
||||
$().ready(function () {
|
||||
var input_id = '{/literal}{if isset($input.id)}{$input.id}{else}{$input.name}{/if}{literal}';
|
||||
$('#'+input_id).tagify();
|
||||
$('#'+input_id).tagify({delimiters: [13,44],addTagPrompt: '{/literal}{l s='Add tag'}{literal}'});
|
||||
$('#'+input_id).tagify({delimiters: [13,44], addTagPrompt: '{/literal}{l s='Add tag'}{literal}'});
|
||||
$({/literal}'#{$table}{literal}_form').submit( function() {
|
||||
$(this).find('#'+input_id).val($('#'+input_id).tagify('serialize'));
|
||||
});
|
||||
@@ -337,7 +336,7 @@
|
||||
{/if}
|
||||
>{$option->$input.options.name}</option>
|
||||
{elseif $option == "-"}
|
||||
<option value="">--</option>
|
||||
<option value="">-</option>
|
||||
{else}
|
||||
<option value="{$option[$input.options.id]}"
|
||||
{if isset($input.multiple)}
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
*}
|
||||
{if count($categories) && isset($categories)}
|
||||
<script type="text/javascript">
|
||||
var inputName = '{$categories.input_name}';
|
||||
var inputName = '{$categories.input_name|@addcslashes:'\''}';
|
||||
var use_radio = {if $categories.use_radio}1{else}0{/if};
|
||||
var selectedCat = '{implode value=$categories.selected_cat}';
|
||||
var selectedLabel = '{$categories.trads.selected}';
|
||||
var home = '{$categories.trads.Root.name}';
|
||||
var selectedCat = {$categories.selected_cat|@implode|intval};
|
||||
var selectedLabel = '{$categories.trads.selected|@addcslashes:'\''}';
|
||||
var home = '{$categories.trads.Root.name|@addcslashes:'\''}';
|
||||
var use_radio = {if $categories.use_radio}1{else}0{/if};
|
||||
var use_context = {if isset($categories.use_context)}1{else}0{/if};
|
||||
$(document).ready(function(){
|
||||
|
||||
@@ -256,7 +256,7 @@
|
||||
{else}
|
||||
{if $params.type == 'bool'}
|
||||
<select class="filter fixed-width-sm" onchange="$('#submitFilterButton{$list_id}').focus();$('#submitFilterButton{$list_id}').click();" name="{$list_id}Filter_{$key}">
|
||||
<option value="">--</option>
|
||||
<option value="">-</option>
|
||||
<option value="1" {if $params.value == 1} selected="selected" {/if}>{l s='Yes'}</option>
|
||||
<option value="0" {if $params.value == 0 && $params.value != ''} selected="selected" {/if}>{l s='No'}</option>
|
||||
</select>
|
||||
@@ -278,7 +278,7 @@
|
||||
{elseif $params.type == 'select'}
|
||||
{if isset($params.filter_key)}
|
||||
<select class="filter" onchange="$('#submitFilterButton{$list_id}').focus();$('#submitFilterButton{$list_id}').click();" name="{$list_id}Filter_{$params.filter_key}" {if isset($params.width)} style="width:{$params.width}px"{/if}>
|
||||
<option value="" {if $params.value == ''} selected="selected" {/if}>--</option>
|
||||
<option value="" {if $params.value == ''} selected="selected" {/if}>-</option>
|
||||
{if isset($params.list) && is_array($params.list)}
|
||||
{foreach $params.list AS $option_value => $option_display}
|
||||
<option value="{$option_value}" {if (string)$option_display === (string)$params.value || (string)$option_value === (string)$params.value} selected="selected"{/if}>{$option_display}</option>
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
btn_submit.hide();
|
||||
//bind enter key press to validate form
|
||||
$('#{$table}_form').keypress(function (e) {
|
||||
if (e.which == 13 && e.target.localName != 'textarea')
|
||||
if (e.which == 13 && e.target.localName != 'textarea' && !e.target.hasClass('tagify'))
|
||||
$('#desc-{$table}-save').click();
|
||||
});
|
||||
//submit the form
|
||||
|
||||
@@ -1500,7 +1500,7 @@ abstract class AdminTabCore
|
||||
case 'bool':
|
||||
echo '
|
||||
<select name="'.$this->table.'Filter_'.$key.'">
|
||||
<option value="">--</option>
|
||||
<option value="">-</option>
|
||||
<option value="1"'.($value == 1 ? ' selected="selected"' : '').'>'.$this->l('Yes').'</option>
|
||||
<option value="0"'.(($value == 0 && $value != '') ? ' selected="selected"' : '').'>'.$this->l('No').'</option>
|
||||
</select>';
|
||||
@@ -1524,7 +1524,7 @@ abstract class AdminTabCore
|
||||
if (isset($params['filter_key']))
|
||||
{
|
||||
echo '<select onchange="$(\'#submitFilter'.$this->table.'\').focus();$(\'#submitFilter'.$this->table.'\').click();" name="'.$this->table.'Filter_'.$params['filter_key'].'" '.(isset($params['width']) ? 'style="width: '.$params['width'].'px"' : '').'>
|
||||
<option value=""'.(($value == 0 && $value != '') ? ' selected="selected"' : '').'>--</option>';
|
||||
<option value=""'.(($value == 0 && $value != '') ? ' selected="selected"' : '').'>-</option>';
|
||||
if (isset($params['select']) && is_array($params['select']))
|
||||
foreach ($params['select'] as $optionValue => $optionDisplay)
|
||||
{
|
||||
|
||||
@@ -124,5 +124,21 @@ class AliasCore extends ObjectModel
|
||||
{
|
||||
return Configuration::get('PS_ALIAS_FEATURE_ACTIVE');
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is allow to know if a alias exist for AdminImportController
|
||||
* @since 1.5.6.0
|
||||
* @return bool
|
||||
*/
|
||||
public static function aliasExists($id_alias)
|
||||
{
|
||||
$row = Db::getInstance()->getRow('
|
||||
SELECT `id_alias`
|
||||
FROM '._DB_PREFIX_.'alias a
|
||||
WHERE a.`id_alias` = '.(int)$id_alias
|
||||
);
|
||||
|
||||
return isset($row['id_alias']);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+12
-4
@@ -49,6 +49,8 @@ class Autoload
|
||||
*/
|
||||
public $index = array();
|
||||
|
||||
public $_include_override_path = true;
|
||||
|
||||
protected function __construct()
|
||||
{
|
||||
$this->root_dir = _PS_ROOT_DIR_.'/';
|
||||
@@ -120,10 +122,16 @@ class Autoload
|
||||
{
|
||||
$classes = array_merge(
|
||||
$this->getClassesFromDir('classes/'),
|
||||
$this->getClassesFromDir('override/classes/'),
|
||||
$this->getClassesFromDir('controllers/'),
|
||||
$this->getClassesFromDir('override/controllers/')
|
||||
$this->getClassesFromDir('controllers/')
|
||||
);
|
||||
|
||||
if ($this->_include_override_path)
|
||||
$classes = array_merge(
|
||||
$classes,
|
||||
$this->getClassesFromDir('override/classes/'),
|
||||
$this->getClassesFromDir('override/controllers/')
|
||||
);
|
||||
|
||||
ksort($classes);
|
||||
$content = '<?php return '.var_export($classes, true).'; ?>';
|
||||
|
||||
@@ -189,4 +197,4 @@ class Autoload
|
||||
{
|
||||
return isset($this->index[$classname]) ? $this->index[$classname] : null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ class CMSCore extends ObjectModel
|
||||
public $link_rewrite;
|
||||
public $id_cms_category;
|
||||
public $position;
|
||||
public $indexation;
|
||||
public $active;
|
||||
|
||||
/**
|
||||
@@ -46,6 +47,7 @@ class CMSCore extends ObjectModel
|
||||
'fields' => array(
|
||||
'id_cms_category' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
|
||||
'position' => array('type' => self::TYPE_INT),
|
||||
'indexation' => array('type' => self::TYPE_BOOL),
|
||||
'active' => array('type' => self::TYPE_BOOL),
|
||||
|
||||
// Lang fields
|
||||
|
||||
+1
-1
@@ -3219,7 +3219,7 @@ class CartCore extends ObjectModel
|
||||
public function getWsCartRows()
|
||||
{
|
||||
return Db::getInstance()->executeS('
|
||||
SELECT id_product, id_product_attribute, quantity
|
||||
SELECT id_product, id_product_attribute, quantity, id_address_delivery
|
||||
FROM `'._DB_PREFIX_.'cart_product`
|
||||
WHERE id_cart = '.(int)$this->id.' AND id_shop = '.(int)Context::getContext()->shop->id
|
||||
);
|
||||
|
||||
@@ -255,6 +255,16 @@ class CartRuleCore extends ObjectModel
|
||||
else
|
||||
$cart_rule['quantity_for_user'] = 0;
|
||||
|
||||
foreach ($result as $cart_rule)
|
||||
if ($cart_rule['shop_restriction'])
|
||||
{
|
||||
$cartRuleShops = Db::getInstance()->executeS('SELECT id_shop FROM '._DB_PREFIX_.'cart_rule_shop WHERE id_cart_rule = '.(int)$cart_rule['id_cart_rule']);
|
||||
foreach ($cartRuleShops as $cartRuleShop)
|
||||
if (Shop::isFeatureActive() && ($cartRuleShop['id_shop'] == Context::getContext()->shop->id))
|
||||
continue 2;
|
||||
unset($result[$key]);
|
||||
}
|
||||
|
||||
// Retrocompatibility with 1.4 discounts
|
||||
foreach ($result as &$cart_rule)
|
||||
{
|
||||
|
||||
+13
-4
@@ -73,7 +73,7 @@ class CurrencyCore extends ObjectModel
|
||||
'sign' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 8),
|
||||
'format' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
|
||||
'decimals' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'required' => true),
|
||||
'conversion_rate' =>array('type' => self::TYPE_FLOAT, 'validate' => 'isFloat', 'required' => true, 'shop' => true),
|
||||
'conversion_rate' =>array('type' => self::TYPE_FLOAT, 'validate' => 'isUnsignedFloat', 'required' => true, 'shop' => true),
|
||||
'deleted' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
|
||||
'active' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
|
||||
),
|
||||
@@ -107,14 +107,23 @@ class CurrencyCore extends ObjectModel
|
||||
$this->suffix = $this->format % 2 == 0 ? ' '.$this->sign : '';
|
||||
}
|
||||
/**
|
||||
* Overriding check if currency with the same iso code already exists.
|
||||
* If it's true, currency is doesn't added.
|
||||
* Overriding check if currency rate is not empty and if currency with the same iso code already exists.
|
||||
* If it's true, currency is not added.
|
||||
*
|
||||
* @see ObjectModelCore::add()
|
||||
*/
|
||||
public function add($autodate = true, $nullValues = false)
|
||||
{
|
||||
return Currency::exists($this->iso_code, $this->iso_code_num) ? false : parent::add();
|
||||
if ((float)$this->conversion_rate <= 0)
|
||||
return false;
|
||||
return Currency::exists($this->iso_code, $this->iso_code_num) ? false : parent::add($autodate, $nullValues);
|
||||
}
|
||||
|
||||
public function update($autodate = true, $nullValues = false)
|
||||
{
|
||||
if ((float)$this->conversion_rate <= 0)
|
||||
return false;
|
||||
return parent::update($autodate, $nullValues);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -589,9 +589,11 @@ class CustomerCore extends ObjectModel
|
||||
*/
|
||||
public function updateGroup($list)
|
||||
{
|
||||
$this->cleanGroups();
|
||||
if ($list && !empty($list))
|
||||
{
|
||||
$this->cleanGroups();
|
||||
$this->addGroups($list);
|
||||
}
|
||||
else
|
||||
$this->addGroups(array($this->id_default_group));
|
||||
}
|
||||
@@ -606,7 +608,7 @@ class CustomerCore extends ObjectModel
|
||||
foreach ($groups as $group)
|
||||
{
|
||||
$row = array('id_customer' => (int)$this->id, 'id_group' => (int)$group);
|
||||
Db::getInstance()->insert('customer_group', $row);
|
||||
Db::getInstance()->insert('customer_group', $row, false, true, Db::INSERT_IGNORE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ class CustomerMessageCore extends ObjectModel
|
||||
'fields' => array(
|
||||
'id_employee' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
|
||||
'id_customer_thread' => array('type' => self::TYPE_INT),
|
||||
'ip_address' => array('type' => self::TYPE_INT, 'validate' => 'isIp2Long'),
|
||||
'ip_address' => array('type' => self::TYPE_STRING, 'validate' => 'isIp2Long', 'size' => 15),
|
||||
'message' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml', 'required' => true, 'size' => 65000),
|
||||
'file_name' => array('type' => self::TYPE_STRING),
|
||||
'user_agent' => array('type' => self::TYPE_STRING),
|
||||
|
||||
@@ -369,7 +369,7 @@ class DispatcherCore
|
||||
|
||||
// If there are several languages, get language from uri
|
||||
if ($this->use_routes && Language::isMultiLanguageActivated())
|
||||
if (preg_match('#^/([a-z]{2})/?#', $this->request_uri, $m))
|
||||
if (preg_match('#^/([a-z]{2})(?:/.*)?$#', $this->request_uri, $m))
|
||||
{
|
||||
$_GET['isolang'] = $m[1];
|
||||
$this->request_uri = substr($this->request_uri, 3);
|
||||
|
||||
+31
-10
@@ -312,16 +312,37 @@ class FeatureCore extends ObjectModel
|
||||
*/
|
||||
public static function cleanPositions()
|
||||
{
|
||||
return Db::getInstance()->execute('
|
||||
UPDATE `'._DB_PREFIX_.'feature` f
|
||||
LEFT JOIN (
|
||||
SELECT @i := @i +1 AS rank, id_feature, position
|
||||
FROM `'._DB_PREFIX_.'feature`
|
||||
JOIN (SELECT @i :=1) dummy
|
||||
ORDER by position
|
||||
) AS f2
|
||||
USING (id_feature)
|
||||
SET f.position = f2.rank - 1');
|
||||
//Reordering positions to remove "holes" in them (after delete for instance)
|
||||
$sql = "SELECT id_feature, position FROM "._DB_PREFIX_."feature ORDER BY id_feature";
|
||||
$db = Db::getInstance();
|
||||
$r = $db->executeS($sql, false);
|
||||
$shiftTable = array(); //List of update queries (one query is necessary for each "hole" in the table)
|
||||
$currentDelta = 0;
|
||||
$minId = 0;
|
||||
$maxId = 0;
|
||||
$futurePosition = 1;
|
||||
while ($line = $db->nextRow($r)) {
|
||||
$delta = $futurePosition - $line['position']; //Difference between current position and future position
|
||||
if ($delta != $currentDelta) {
|
||||
$shiftTable[] = array('minId' => $minId, 'maxId' => $maxId, 'delta' => $currentDelta);
|
||||
$currentDelta = $delta;
|
||||
$minId = $line['id_feature'];
|
||||
}
|
||||
$maxId = $line['id_feature'];
|
||||
$futurePosition++;
|
||||
}
|
||||
$shiftTable[] = array('minId' => $minId, 'maxId' => $maxId, 'delta' => $currentDelta);
|
||||
|
||||
//Executing generated queries
|
||||
foreach ($shiftTable as $line) {
|
||||
$delta = $line['delta'];
|
||||
if ($delta == 0) continue;
|
||||
$delta = $delta > 0 ? '+' . (int)$delta : (int)$delta;
|
||||
$minId = (int)$line['minId'];
|
||||
$maxId = (int)$line['maxId'];
|
||||
$sql = "UPDATE "._DB_PREFIX_."feature SET position = position $delta WHERE id_feature >= $minId AND id_feature <= $maxId";
|
||||
Db::getInstance()->execute($sql);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -128,30 +128,36 @@ class FeatureValueCore extends ObjectModel
|
||||
return $tab['value'];
|
||||
}
|
||||
|
||||
public static function addFeatureValueImport($id_feature, $value, $id_product = null, $id_lang = null)
|
||||
public static function addFeatureValueImport($id_feature, $value, $id_product = null, $id_lang = null, $custom = false)
|
||||
{
|
||||
$id_feature_value = false;
|
||||
if (!is_null($id_product) && $id_product)
|
||||
{
|
||||
$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);
|
||||
SELECT fp.`id_feature_value`
|
||||
FROM '._DB_PREFIX_.'feature_product fp
|
||||
INNER JOIN '._DB_PREFIX_.'feature_value fv USING (`id_feature_value`)
|
||||
WHERE fp.`id_feature` = '.(int)$id_feature.'
|
||||
AND fv.`custom` = '.(int)$custom.'
|
||||
AND fp.`id_product` = '.(int)$id_product);
|
||||
|
||||
if ($id_feature_value && !is_null($id_lang) && $id_lang)
|
||||
if ($custom && $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 `value` != \''.pSQL($value).'\'
|
||||
AND `id_lang` = '.(int)$id_lang);
|
||||
}
|
||||
else
|
||||
|
||||
if (!$custom)
|
||||
$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`)
|
||||
LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.`id_feature_value` = fv.`id_feature_value` AND fvl.`id_lang` = '.(int)$id_lang.')
|
||||
WHERE `value` = \''.pSQL($value).'\'
|
||||
AND fv.`id_feature` = '.(int)$id_feature.'
|
||||
AND fv.`custom` = 0
|
||||
GROUP BY fv.`id_feature_value`');
|
||||
|
||||
if ($id_feature_value)
|
||||
@@ -160,7 +166,7 @@ class FeatureValueCore extends ObjectModel
|
||||
// Feature doesn't exist, create it
|
||||
$feature_value = new FeatureValue();
|
||||
$feature_value->id_feature = (int)$id_feature;
|
||||
$feature_value->custom = 0;
|
||||
$feature_value->custom = (bool)$custom;
|
||||
foreach (Language::getLanguages() as $language)
|
||||
$feature_value->value[$language['id_lang']] = $value;
|
||||
$feature_value->add();
|
||||
|
||||
@@ -102,6 +102,11 @@ class QqUploadedFileForm
|
||||
$image = new Image();
|
||||
$image->id_product = (int)$product->id;
|
||||
$image->position = Image::getHighestPosition($product->id) + 1;
|
||||
$legends = Tools::getValue('legend');
|
||||
if (is_array($legends))
|
||||
foreach ($legends as $key => $legend)
|
||||
if (!empty($legend))
|
||||
$image->legend[(int)$key] = $legend;
|
||||
if (!Image::getCover($image->id_product))
|
||||
$image->cover = 1;
|
||||
else
|
||||
@@ -136,7 +141,7 @@ class QqUploadedFileForm
|
||||
|
||||
if (!$image->update())
|
||||
return array('error' => Tools::displayError('Error while updating status'));
|
||||
$img = array('id_image' => $image->id, 'position' => $image->position, 'cover' => $image->cover, 'name' => $this->getName());
|
||||
$img = array('id_image' => $image->id, 'position' => $image->position, 'cover' => $image->cover, 'name' => $this->getName(), 'legend' => $image->legend);
|
||||
return array('success' => $img);
|
||||
}
|
||||
|
||||
@@ -184,6 +189,11 @@ class QqUploadedFileXhr
|
||||
$image = new Image();
|
||||
$image->id_product = (int)($product->id);
|
||||
$image->position = Image::getHighestPosition($product->id) + 1;
|
||||
$legends = Tools::getValue('legend');
|
||||
if (is_array($legends))
|
||||
foreach ($legends as $key => $legend)
|
||||
if (!empty($legend))
|
||||
$image->legend[(int)$key] = $legend;
|
||||
if (!Image::getCover($image->id_product))
|
||||
$image->cover = 1;
|
||||
else
|
||||
@@ -223,7 +233,7 @@ class QqUploadedFileXhr
|
||||
|
||||
if (!$image->update())
|
||||
return array('error' => Tools::displayError('Error while updating status'));
|
||||
$img = array('id_image' => $image->id, 'position' => $image->position, 'cover' => $image->cover, 'name' => $this->getName());
|
||||
$img = array('id_image' => $image->id, 'position' => $image->position, 'cover' => $image->cover, 'name' => $this->getName(), 'legend' => $image->legend);
|
||||
return array('success' => $img);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -325,7 +325,7 @@ class GroupCore extends ObjectModel
|
||||
* @param boolean $unrestricted allows search without lang and includes first group and exact match
|
||||
* @return array Corresponding groupes
|
||||
*/
|
||||
public static function searchByName($id_lang, $query)
|
||||
public static function searchByName($query)
|
||||
{
|
||||
return Db::getInstance()->getRow('
|
||||
SELECT g.*, gl.*
|
||||
|
||||
+10
-1
@@ -56,6 +56,8 @@ class HookCore extends ObjectModel
|
||||
*/
|
||||
public static $executed_hooks = array();
|
||||
|
||||
public static $native_module;
|
||||
|
||||
/**
|
||||
* @see ObjectModel::$definition
|
||||
*/
|
||||
@@ -416,12 +418,19 @@ class HookCore extends ObjectModel
|
||||
// Look on modules list
|
||||
$altern = 0;
|
||||
$output = '';
|
||||
|
||||
|
||||
if (!isset(Hook::$native_module))
|
||||
Hook::$native_module = Module::getNativeModuleList();
|
||||
|
||||
foreach ($module_list as $array)
|
||||
{
|
||||
// Check errors
|
||||
if ($id_module && $id_module != $array['id_module'])
|
||||
continue;
|
||||
|
||||
if ((bool)Configuration::get('PS_DISABLE_NON_NATIVE_MODULE') && !in_array($array['module'], self::$native_module))
|
||||
continue;
|
||||
|
||||
if (!($moduleInstance = Module::getInstanceByName($array['module'])))
|
||||
continue;
|
||||
|
||||
|
||||
@@ -40,6 +40,9 @@ class ImageCore extends ObjectModel
|
||||
/** @var boolean Image is cover */
|
||||
public $cover;
|
||||
|
||||
/** @var string Legend */
|
||||
public $legend;
|
||||
|
||||
/** @var string image extension */
|
||||
public $image_format = 'jpg';
|
||||
|
||||
@@ -66,6 +69,7 @@ class ImageCore extends ObjectModel
|
||||
'id_product' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
|
||||
'position' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
|
||||
'cover' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'shop' => true),
|
||||
'legend' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128),
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
@@ -127,16 +127,20 @@ class ImageTypeCore extends ObjectModel
|
||||
* @param string $name
|
||||
* @param string $type
|
||||
*/
|
||||
public static function getByNameNType($name, $type = null)
|
||||
public static function getByNameNType($name, $type = null, $order = null)
|
||||
{
|
||||
if (!isset(self::$images_types_name_cache[$name.'_'.$type]))
|
||||
if (!isset(self::$images_types_name_cache[$name.'_'.$type.'_'.$order]))
|
||||
{
|
||||
self::$images_types_name_cache[$name.'_'.$type] = Db::getInstance()->getRow('
|
||||
self::$images_types_name_cache[$name.'_'.$type.'_'.$order] = Db::getInstance()->getRow('
|
||||
SELECT `id_image_type`, `name`, `width`, `height`, `products`, `categories`, `manufacturers`, `suppliers`, `scenes`
|
||||
FROM `'._DB_PREFIX_.'image_type`
|
||||
WHERE `name` = \''.pSQL($name).'\' '.(!is_null($type) ? 'AND `'.pSQL($type).'` = 1' : ''));
|
||||
WHERE
|
||||
`name` LIKE \''.pSQL($name).'\''
|
||||
.(!is_null($type) ? ' AND `'.pSQL($type).'` = 1' : '')
|
||||
.(!is_null($order) ? ' ORDER BY `'.bqSQL($order).'` ASC' : '')
|
||||
);
|
||||
}
|
||||
return self::$images_types_name_cache[$name.'_'.$type];
|
||||
return self::$images_types_name_cache[$name.'_'.$type.'_'.$order];
|
||||
}
|
||||
|
||||
public static function getFormatedName($name)
|
||||
|
||||
+1
-1
@@ -62,7 +62,7 @@ class LoggerCore extends ObjectModel
|
||||
'fields' => array(
|
||||
'severity' => array('type' => self::TYPE_INT, 'validate' => 'isInt', 'required' => true),
|
||||
'error_code' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
|
||||
'message' => array('type' => self::TYPE_STRING, 'validate' => 'isMessage', 'required' => true),
|
||||
'message' => array('type' => self::TYPE_STRING, 'validate' => 'isString', 'required' => true),
|
||||
'object_id' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
|
||||
'id_employee' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
|
||||
'object_type' => array('type' => self::TYPE_STRING, 'validate' => 'isName'),
|
||||
|
||||
+2
-2
@@ -85,11 +85,11 @@ class MetaCore extends ObjectModel
|
||||
// Add modules controllers to list (this function is cool !)
|
||||
foreach (glob(_PS_MODULE_DIR_.'*/controllers/front/*.php') as $file)
|
||||
{
|
||||
$filename = basename($file, '.php');
|
||||
$filename = Tools::strtolower(basename($file, '.php'));
|
||||
if ($filename == 'index')
|
||||
continue;
|
||||
|
||||
$module = basename(dirname(dirname(dirname($file))));
|
||||
$module = Tools::strtolower(basename(dirname(dirname(dirname($file)))));
|
||||
$selected_pages[$module.' - '.$filename] = 'module-'.$module.'-'.$filename;
|
||||
}
|
||||
|
||||
|
||||
@@ -1139,7 +1139,7 @@ abstract class ObjectModelCore
|
||||
{
|
||||
$vars = get_class_vars($class_name);
|
||||
foreach ($vars['shopIDs'] as $id_shop)
|
||||
$or[] = ' main.id_shop = '.(int)$id_shop.' ';
|
||||
$or[] = '(main.id_shop = '.(int)$id_shop.(isset($this->def['fields']['id_shop_group']) ? ' OR (id_shop = 0 AND id_shop_group='.(int)Shop::getGroupFromShop((int)$id_shop).')' : '').')';
|
||||
|
||||
$prepend = '';
|
||||
if (count($or))
|
||||
@@ -1658,4 +1658,4 @@ abstract class ObjectModelCore
|
||||
{
|
||||
$this->update_fields = $fields;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -545,6 +545,13 @@ abstract class PaymentModuleCore extends Module
|
||||
if ($order_status->logable)
|
||||
ProductSale::addProductSale((int)$product['id_product'], (int)$product['cart_quantity']);
|
||||
|
||||
// Set the order state
|
||||
$new_history = new OrderHistory();
|
||||
$new_history->id_order = (int)$order->id;
|
||||
$new_history->changeIdOrderState((int)$id_order_state, $order, true);
|
||||
$new_history->addWithemail(true, $extra_vars);
|
||||
|
||||
// Switch to back order if needed
|
||||
if (Configuration::get('PS_STOCK_MANAGEMENT') && $order_detail->getStockState())
|
||||
{
|
||||
$history = new OrderHistory();
|
||||
@@ -553,13 +560,6 @@ abstract class PaymentModuleCore extends Module
|
||||
$history->addWithemail();
|
||||
}
|
||||
|
||||
// Set order state in order history ONLY even if the "out of stock" status has not been yet reached
|
||||
// So you migth have two order states
|
||||
$new_history = new OrderHistory();
|
||||
$new_history->id_order = (int)$order->id;
|
||||
$new_history->changeIdOrderState((int)$id_order_state, $order, true);
|
||||
$new_history->addWithemail(true, $extra_vars);
|
||||
|
||||
unset($order_detail);
|
||||
|
||||
// Order is reloaded because the status just changed
|
||||
|
||||
@@ -3623,6 +3623,7 @@ class ProductCore extends ObjectModel
|
||||
if ($result3)
|
||||
{
|
||||
$result3['id_feature_value'] = $new_id_feature_value;
|
||||
$result3['value'] = pSQL($result3['value']);
|
||||
$return &= Db::getInstance()->insert('feature_value_lang', $result3);
|
||||
}
|
||||
}
|
||||
|
||||
+33
-21
@@ -74,11 +74,22 @@ class ProductSaleCore
|
||||
$groups = FrontController::getCurrentCustomerGroups();
|
||||
$sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');
|
||||
$interval = Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20;
|
||||
|
||||
//Subquery: get product ids in a separate query to (greatly!) improve performances and RAM usage
|
||||
$sql = 'SELECT cp.`id_product`
|
||||
FROM `'._DB_PREFIX_.'category_group` cg
|
||||
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
|
||||
WHERE cg.`id_group` '.$sql_groups;
|
||||
$products = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
|
||||
$ids = array();
|
||||
foreach ($products as $product)
|
||||
$ids[$product['id_product']] = 1;
|
||||
$ids = array_keys($ids);
|
||||
sort($ids);
|
||||
$ids = count($ids) > 0 ? implode(',', $ids) : 'NULL';
|
||||
|
||||
$prefix = '';
|
||||
//Main query
|
||||
if ($order_by == 'date_add')
|
||||
$prefix = 'p.';
|
||||
|
||||
$sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity,
|
||||
pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`,
|
||||
pl.`meta_keywords`, pl.`meta_title`, pl.`name`,
|
||||
@@ -103,13 +114,8 @@ class ProductSaleCore
|
||||
LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
|
||||
'.Product::sqlStock('p').'
|
||||
WHERE product_shop.`active` = 1
|
||||
AND product_shop.`visibility` != \'none\'
|
||||
AND p.`id_product` IN (
|
||||
SELECT cp.`id_product`
|
||||
FROM `'._DB_PREFIX_.'category_group` cg
|
||||
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
|
||||
WHERE cg.`id_group` '.$sql_groups.'
|
||||
)
|
||||
AND p.`visibility` != \'none\'
|
||||
AND p.`id_product` IN ('.$ids.')
|
||||
GROUP BY product_shop.id_product
|
||||
ORDER BY '.(!empty($order_table) ? '`'.pSQL($order_table).'`.' : '').'`'.pSQL($order_by).'` '.pSQL($order_way).'
|
||||
LIMIT '.(int)($page_number * $nb_products).', '.(int)$nb_products;
|
||||
@@ -141,16 +147,27 @@ class ProductSaleCore
|
||||
$groups = FrontController::getCurrentCustomerGroups();
|
||||
$sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');
|
||||
|
||||
//Subquery: get product ids in a separate query to (greatly!) improve performances and RAM usage
|
||||
$sql = 'SELECT cp.`id_product`
|
||||
FROM `'._DB_PREFIX_.'category_group` cg
|
||||
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
|
||||
WHERE cg.`id_group` '.$sql_groups.' AND cp.`id_product` IS NOT NULL';
|
||||
$products = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
|
||||
$ids = array();
|
||||
foreach ($products as $product)
|
||||
$ids[$product['id_product']] = 1;
|
||||
$ids = array_keys($ids);
|
||||
sort($ids);
|
||||
$ids = count($ids) > 0 ? implode(',', $ids) : 'NULL';
|
||||
|
||||
//Main query
|
||||
$sql = 'SELECT p.id_product, MAX(product_attribute_shop.id_product_attribute) id_product_attribute, pl.`link_rewrite`, pl.`name`, pl.`description_short`, MAX(image_shop.`id_image`) id_image, il.`legend`,
|
||||
ps.`quantity` AS sales, p.`ean13`, p.`upc`, cl.`link_rewrite` AS category, p.show_price, p.available_for_order, IFNULL(stock.quantity, 0) as quantity, p.customizable,
|
||||
IFNULL(pa.minimal_quantity, p.minimal_quantity) as minimal_quantity, stock.out_of_stock
|
||||
FROM `'._DB_PREFIX_.'product_sale` ps
|
||||
LEFT JOIN `'._DB_PREFIX_.'product` p ON ps.`id_product` = p.`id_product`
|
||||
'.Shop::addSqlAssociation('product', 'p').'
|
||||
LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa
|
||||
ON (p.`id_product` = pa.`id_product`)
|
||||
'.Shop::addSqlAssociation('product_attribute', 'pa', false, 'product_attribute_shop.`default_on` = 1').'
|
||||
'.Product::sqlStock('p', 'product_attribute_shop', false, $context->shop).'
|
||||
LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (ps.`id_product` = pa.`id_product` AND pa.default_on = 1)
|
||||
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl
|
||||
ON p.`id_product` = pl.`id_product`
|
||||
AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').'
|
||||
@@ -161,13 +178,8 @@ 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 product_shop.`visibility` != \'none\'
|
||||
AND p.`id_product` IN (
|
||||
SELECT cp.`id_product`
|
||||
FROM `'._DB_PREFIX_.'category_group` cg
|
||||
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
|
||||
WHERE cg.`id_group` '.$sql_groups.'
|
||||
)
|
||||
AND p.`visibility` != \'none\'
|
||||
AND p.`id_product` IN ('.$ids.')
|
||||
GROUP BY product_shop.id_product
|
||||
ORDER BY sales DESC
|
||||
LIMIT '.(int)($page_number * $nb_products).', '.(int)$nb_products;
|
||||
|
||||
+24
-13
@@ -94,7 +94,7 @@ class SpecificPriceCore extends ObjectModel
|
||||
if (parent::add($autodate, $nullValues))
|
||||
{
|
||||
// Flush cache when we adding a new specific price
|
||||
self::$_specificPriceCache = array();
|
||||
SpecificPrice::$_specificPriceCache = array();
|
||||
Product::flushPriceCache();
|
||||
// Set cache of feature detachable to true
|
||||
Configuration::updateGlobalValue('PS_SPECIFIC_PRICE_FEATURE_ACTIVE', '1');
|
||||
@@ -108,7 +108,7 @@ class SpecificPriceCore extends ObjectModel
|
||||
if (parent::update($null_values))
|
||||
{
|
||||
// Flush cache when we updating a new specific price
|
||||
self::$_specificPriceCache = array();
|
||||
SpecificPrice::$_specificPriceCache = array();
|
||||
Product::flushPriceCache();
|
||||
return true;
|
||||
}
|
||||
@@ -120,7 +120,7 @@ class SpecificPriceCore extends ObjectModel
|
||||
if (parent::delete())
|
||||
{
|
||||
// Flush cache when we deletind a new specific price
|
||||
self::$_specificPriceCache = array();
|
||||
SpecificPrice::$_specificPriceCache = array();
|
||||
Product::flushPriceCache();
|
||||
// Refresh cache of feature detachable
|
||||
Configuration::updateGlobalValue('PS_SPECIFIC_PRICE_FEATURE_ACTIVE', SpecificPrice::isCurrentlyUsed($this->def['table']));
|
||||
@@ -180,9 +180,9 @@ class SpecificPriceCore extends ObjectModel
|
||||
if (!SpecificPrice::isFeatureActive())
|
||||
return explode(';', Configuration::get('PS_SPECIFIC_PRICE_PRIORITIES'));
|
||||
|
||||
if (!isset(self::$_cache_priorities[(int)$id_product]))
|
||||
if (!isset(SpecificPrice::$_cache_priorities[(int)$id_product]))
|
||||
{
|
||||
self::$_cache_priorities[(int)$id_product] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
|
||||
SpecificPrice::$_cache_priorities[(int)$id_product] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
|
||||
SELECT `priority`, `id_specific_price_priority`
|
||||
FROM `'._DB_PREFIX_.'specific_price_priority`
|
||||
WHERE `id_product` = '.(int)$id_product.'
|
||||
@@ -190,7 +190,7 @@ class SpecificPriceCore extends ObjectModel
|
||||
');
|
||||
}
|
||||
|
||||
$priority = self::$_cache_priorities[(int)$id_product];
|
||||
$priority = SpecificPrice::$_cache_priorities[(int)$id_product];
|
||||
|
||||
if (!$priority)
|
||||
$priority = Configuration::get('PS_SPECIFIC_PRICE_PRIORITIES');
|
||||
@@ -209,11 +209,11 @@ class SpecificPriceCore extends ObjectModel
|
||||
*/
|
||||
|
||||
$key = ((int)$id_product.'-'.(int)$id_shop.'-'.(int)$id_currency.'-'.(int)$id_country.'-'.(int)$id_group.'-'.(int)$quantity.'-'.(int)$id_product_attribute.'-'.(int)$id_cart.'-'.(int)$id_customer.'-'.(int)$real_quantity);
|
||||
if (!array_key_exists($key, self::$_specificPriceCache))
|
||||
if (!array_key_exists($key, SpecificPrice::$_specificPriceCache))
|
||||
{
|
||||
$now = date('Y-m-d H:i:s');
|
||||
self::$_specificPriceCache[$key] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
|
||||
SELECT *, '.SpecificPrice::_getScoreQuery($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_customer).'
|
||||
$query = '
|
||||
SELECT *, '.SpecificPrice::_getScoreQuery($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_customer).'
|
||||
FROM `'._DB_PREFIX_.'specific_price`
|
||||
WHERE `id_product` IN (0, '.(int)$id_product.')
|
||||
AND `id_product_attribute` IN (0, '.(int)$id_product_attribute.')
|
||||
@@ -228,11 +228,22 @@ class SpecificPriceCore extends ObjectModel
|
||||
AND
|
||||
(`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` <= '.max(1, (int)$real_quantity)).'
|
||||
ORDER BY `id_product_attribute` DESC, `from_quantity` DESC, `id_specific_price_rule` ASC, `score` DESC');
|
||||
AND id_cart IN (0, '.(int)$id_cart.') ';
|
||||
|
||||
if ($real_quantity != 0 && !Configuration::get('PS_QTY_DISCOUNT_ON_COMBINATION'))
|
||||
$query .= ' AND IF(`from_quantity` > 1, `from_quantity`, 0) <= IF(id_product_attribute=0,'.(int)$quantity.' ,'.(int)$real_quantity.')';
|
||||
else
|
||||
{
|
||||
$qty_to_use = $id_cart ? (int)$quantity : (int)$real_quantity;
|
||||
$query .= 'AND `from_quantity` <= '.max(1, $qty_to_use);
|
||||
}
|
||||
|
||||
$query .= ' ORDER BY `id_product_attribute` DESC, `from_quantity` DESC, `id_specific_price_rule` ASC, `score` DESC';
|
||||
|
||||
SpecificPrice::$_specificPriceCache[$key] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($query);
|
||||
|
||||
}
|
||||
return self::$_specificPriceCache[$key];
|
||||
return SpecificPrice::$_specificPriceCache[$key];
|
||||
}
|
||||
|
||||
public static function setPriorities($priorities)
|
||||
|
||||
+91
-54
@@ -357,13 +357,11 @@ class ToolsCore
|
||||
if (Validate::isLanguageIsoCode($string))
|
||||
{
|
||||
$lang = new Language(Language::getIdByIso($string));
|
||||
if (Validate::isLoadedObject($lang) && $lang->active)
|
||||
{
|
||||
$language = new Language((int)$lang->id);
|
||||
if (Validate::isLoadedObject($language))
|
||||
Context::getContext()->language = $language;
|
||||
if (Validate::isLoadedObject($lang) && $lang->active && $lang->isAssociatedToShop())
|
||||
{
|
||||
Context::getContext()->language = $lang;
|
||||
$cookie->id_lang = (int)$lang->id;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -674,14 +672,20 @@ class ToolsCore
|
||||
public static function htmlentitiesUTF8($string, $type = ENT_QUOTES)
|
||||
{
|
||||
if (is_array($string))
|
||||
return array_map(array('Tools', 'htmlentitiesUTF8'), $string);
|
||||
{
|
||||
$string = array_map(array('Tools', 'htmlentitiesUTF8'), $string);
|
||||
return (string)array_shift($string);
|
||||
}
|
||||
return htmlentities((string)$string, $type, 'utf-8');
|
||||
}
|
||||
|
||||
public static function htmlentitiesDecodeUTF8($string)
|
||||
{
|
||||
if (is_array($string))
|
||||
return array_map(array('Tools', 'htmlentitiesDecodeUTF8'), $string);
|
||||
{
|
||||
$string = array_map(array('Tools', 'htmlentitiesDecodeUTF8'), $string);
|
||||
return (string)array_shift($string);
|
||||
}
|
||||
return html_entity_decode((string)$string, ENT_QUOTES, 'utf-8');
|
||||
}
|
||||
|
||||
@@ -1107,63 +1111,94 @@ class ToolsCore
|
||||
/* One source among others:
|
||||
http://www.tachyonsoft.com/uc0000.htm
|
||||
http://www.tachyonsoft.com/uc0001.htm
|
||||
http://www.tachyonsoft.com/uc0004.htm
|
||||
*/
|
||||
$patterns = array(
|
||||
|
||||
/* Lowercase */
|
||||
/* a */ '/[\x{00E0}\x{00E1}\x{00E2}\x{00E3}\x{00E4}\x{00E5}\x{0101}\x{0103}\x{0105}]/u',
|
||||
/* c */ '/[\x{00E7}\x{0107}\x{0109}\x{010D}]/u',
|
||||
/* d */ '/[\x{010F}\x{0111}]/u',
|
||||
/* e */ '/[\x{00E8}\x{00E9}\x{00EA}\x{00EB}\x{0113}\x{0115}\x{0117}\x{0119}\x{011B}]/u',
|
||||
/* g */ '/[\x{011F}\x{0121}\x{0123}]/u',
|
||||
/* h */ '/[\x{0125}\x{0127}]/u',
|
||||
/* i */ '/[\x{00EC}\x{00ED}\x{00EE}\x{00EF}\x{0129}\x{012B}\x{012D}\x{012F}\x{0131}]/u',
|
||||
/* j */ '/[\x{0135}]/u',
|
||||
/* k */ '/[\x{0137}\x{0138}]/u',
|
||||
/* l */ '/[\x{013A}\x{013C}\x{013E}\x{0140}\x{0142}]/u',
|
||||
/* n */ '/[\x{00F1}\x{0144}\x{0146}\x{0148}\x{0149}\x{014B}]/u',
|
||||
/* o */ '/[\x{00F2}\x{00F3}\x{00F4}\x{00F5}\x{00F6}\x{00F8}\x{014D}\x{014F}\x{0151}]/u',
|
||||
/* r */ '/[\x{0155}\x{0157}\x{0159}]/u',
|
||||
/* s */ '/[\x{015B}\x{015D}\x{015F}\x{0161}]/u',
|
||||
/* ss*/ '/[\x{00DF}]/u',
|
||||
/* t */ '/[\x{0163}\x{0165}\x{0167}]/u',
|
||||
/* u */ '/[\x{00F9}\x{00FA}\x{00FB}\x{00FC}\x{0169}\x{016B}\x{016D}\x{016F}\x{0171}\x{0173}]/u',
|
||||
/* w */ '/[\x{0175}]/u',
|
||||
/* y */ '/[\x{00FF}\x{0177}\x{00FD}]/u',
|
||||
/* z */ '/[\x{017A}\x{017C}\x{017E}]/u',
|
||||
/* ae*/ '/[\x{00E6}]/u',
|
||||
/* oe*/ '/[\x{0153}]/u',
|
||||
/* a */ '/[\x{00E0}\x{00E1}\x{00E2}\x{00E3}\x{00E4}\x{00E5}\x{0101}\x{0103}\x{0105}\x{0430}]/u',
|
||||
/* b */ '/[\x{0431}]/u',
|
||||
/* c */ '/[\x{00E7}\x{0107}\x{0109}\x{010D}\x{0446}]/u',
|
||||
/* d */ '/[\x{010F}\x{0111}\x{0434}]/u',
|
||||
/* e */ '/[\x{00E8}\x{00E9}\x{00EA}\x{00EB}\x{0113}\x{0115}\x{0117}\x{0119}\x{011B}\x{0435}\x{044D}]/u',
|
||||
/* f */ '/[\x{0444}]/u',
|
||||
/* g */ '/[\x{011F}\x{0121}\x{0123}\x{0433}\x{0491}]/u',
|
||||
/* h */ '/[\x{0125}\x{0127}]/u',
|
||||
/* i */ '/[\x{00EC}\x{00ED}\x{00EE}\x{00EF}\x{0129}\x{012B}\x{012D}\x{012F}\x{0131}\x{0438}\x{0456}]/u',
|
||||
/* j */ '/[\x{0135}\x{0439}]/u',
|
||||
/* k */ '/[\x{0137}\x{0138}\x{043A}]/u',
|
||||
/* l */ '/[\x{013A}\x{013C}\x{013E}\x{0140}\x{0142}\x{043B}]/u',
|
||||
/* m */ '/[\x{043C}]/u',
|
||||
/* n */ '/[\x{00F1}\x{0144}\x{0146}\x{0148}\x{0149}\x{014B}\x{043D}]/u',
|
||||
/* o */ '/[\x{00F2}\x{00F3}\x{00F4}\x{00F5}\x{00F6}\x{00F8}\x{014D}\x{014F}\x{0151}\x{043E}]/u',
|
||||
/* p */ '/[\x{043F}]/u',
|
||||
/* r */ '/[\x{0155}\x{0157}\x{0159}\x{0440}]/u',
|
||||
/* s */ '/[\x{015B}\x{015D}\x{015F}\x{0161}\x{0441}]/u',
|
||||
/* ss */ '/[\x{00DF}]/u',
|
||||
/* t */ '/[\x{0163}\x{0165}\x{0167}\x{0442}]/u',
|
||||
/* u */ '/[\x{00F9}\x{00FA}\x{00FB}\x{00FC}\x{0169}\x{016B}\x{016D}\x{016F}\x{0171}\x{0173}\x{0443}]/u',
|
||||
/* v */ '/[\x{0432}]/u',
|
||||
/* w */ '/[\x{0175}]/u',
|
||||
/* y */ '/[\x{00FF}\x{0177}\x{00FD}\x{044B}]/u',
|
||||
/* z */ '/[\x{017A}\x{017C}\x{017E}\x{0437}]/u',
|
||||
/* ae */ '/[\x{00E6}]/u',
|
||||
/* ch */ '/[\x{0447}]/u',
|
||||
/* kh */ '/[\x{0445}]/u',
|
||||
/* oe */ '/[\x{0153}]/u',
|
||||
/* sh */ '/[\x{0448}]/u',
|
||||
/* shh*/ '/[\x{0449}]/u',
|
||||
/* ya */ '/[\x{044F}]/u',
|
||||
/* ye */ '/[\x{0454}]/u',
|
||||
/* yi */ '/[\x{0457}]/u',
|
||||
/* yo */ '/[\x{0451}]/u',
|
||||
/* yu */ '/[\x{044E}]/u',
|
||||
/* zh */ '/[\x{0436}]/u',
|
||||
|
||||
/* Uppercase */
|
||||
/* A */ '/[\x{0100}\x{0102}\x{0104}\x{00C0}\x{00C1}\x{00C2}\x{00C3}\x{00C4}\x{00C5}]/u',
|
||||
/* C */ '/[\x{00C7}\x{0106}\x{0108}\x{010A}\x{010C}]/u',
|
||||
/* D */ '/[\x{010E}\x{0110}]/u',
|
||||
/* E */ '/[\x{00C8}\x{00C9}\x{00CA}\x{00CB}\x{0112}\x{0114}\x{0116}\x{0118}\x{011A}]/u',
|
||||
/* G */ '/[\x{011C}\x{011E}\x{0120}\x{0122}]/u',
|
||||
/* H */ '/[\x{0124}\x{0126}]/u',
|
||||
/* I */ '/[\x{0128}\x{012A}\x{012C}\x{012E}\x{0130}]/u',
|
||||
/* J */ '/[\x{0134}]/u',
|
||||
/* K */ '/[\x{0136}]/u',
|
||||
/* L */ '/[\x{0139}\x{013B}\x{013D}\x{0139}\x{0141}]/u',
|
||||
/* N */ '/[\x{00D1}\x{0143}\x{0145}\x{0147}\x{014A}]/u',
|
||||
/* O */ '/[\x{00D3}\x{014C}\x{014E}\x{0150}]/u',
|
||||
/* R */ '/[\x{0154}\x{0156}\x{0158}]/u',
|
||||
/* S */ '/[\x{015A}\x{015C}\x{015E}\x{0160}]/u',
|
||||
/* T */ '/[\x{0162}\x{0164}\x{0166}]/u',
|
||||
/* U */ '/[\x{00D9}\x{00DA}\x{00DB}\x{00DC}\x{0168}\x{016A}\x{016C}\x{016E}\x{0170}\x{0172}]/u',
|
||||
/* W */ '/[\x{0174}]/u',
|
||||
/* Y */ '/[\x{0176}]/u',
|
||||
/* Z */ '/[\x{0179}\x{017B}\x{017D}]/u',
|
||||
/* AE*/ '/[\x{00C6}]/u',
|
||||
/* OE*/ '/[\x{0152}]/u');
|
||||
/* A */ '/[\x{0100}\x{0102}\x{0104}\x{00C0}\x{00C1}\x{00C2}\x{00C3}\x{00C4}\x{00C5}\x{0410}]/u',
|
||||
/* B */ '/[\x{0411}]]/u',
|
||||
/* C */ '/[\x{00C7}\x{0106}\x{0108}\x{010A}\x{010C}\x{0426}]/u',
|
||||
/* D */ '/[\x{010E}\x{0110}\x{0414}]/u',
|
||||
/* E */ '/[\x{00C8}\x{00C9}\x{00CA}\x{00CB}\x{0112}\x{0114}\x{0116}\x{0118}\x{011A}\x{0415}\x{042D}]/u',
|
||||
/* F */ '/[\x{0424}]/u',
|
||||
/* G */ '/[\x{011C}\x{011E}\x{0120}\x{0122}\x{0413}\x{0490}]/u',
|
||||
/* H */ '/[\x{0124}\x{0126}]/u',
|
||||
/* I */ '/[\x{0128}\x{012A}\x{012C}\x{012E}\x{0130}\x{0418}\x{0406}]/u',
|
||||
/* J */ '/[\x{0134}\x{0419}]/u',
|
||||
/* K */ '/[\x{0136}\x{041A}]/u',
|
||||
/* L */ '/[\x{0139}\x{013B}\x{013D}\x{0139}\x{0141}\x{041B}]/u',
|
||||
/* M */ '/[\x{041C}]/u',
|
||||
/* N */ '/[\x{00D1}\x{0143}\x{0145}\x{0147}\x{014A}\x{041D}]/u',
|
||||
/* O */ '/[\x{00D3}\x{014C}\x{014E}\x{0150}\x{041E}]/u',
|
||||
/* P */ '/[\x{041F}]/u',
|
||||
/* R */ '/[\x{0154}\x{0156}\x{0158}\x{0420}]/u',
|
||||
/* S */ '/[\x{015A}\x{015C}\x{015E}\x{0160}\x{0421}]/u',
|
||||
/* T */ '/[\x{0162}\x{0164}\x{0166}\x{0422}]/u',
|
||||
/* U */ '/[\x{00D9}\x{00DA}\x{00DB}\x{00DC}\x{0168}\x{016A}\x{016C}\x{016E}\x{0170}\x{0172}\x{0423}]/u',
|
||||
/* V */ '/[\x{0412}]/u',
|
||||
/* W */ '/[\x{0174}]/u',
|
||||
/* Y */ '/[\x{0176}\x{042B}]/u',
|
||||
/* Z */ '/[\x{0179}\x{017B}\x{017D}\x{0417}]/u',
|
||||
/* AE */ '/[\x{00C6}]/u',
|
||||
/* CH */ '/[\x{0427}]/u',
|
||||
/* KH */ '/[\x{0425}]/u',
|
||||
/* OE */ '/[\x{0152}]/u',
|
||||
/* SH */ '/[\x{0428}]/u',
|
||||
/* SHH*/ '/[\x{0429}]/u',
|
||||
/* YA */ '/[\x{042F}]/u',
|
||||
/* YE */ '/[\x{0404}]/u',
|
||||
/* YI */ '/[\x{0407}]/u',
|
||||
/* YO */ '/[\x{0401}]/u',
|
||||
/* YU */ '/[\x{042E}]/u',
|
||||
/* ZH */ '/[\x{0416}]/u');
|
||||
|
||||
// ö to oe
|
||||
// å to aa
|
||||
// ä to ae
|
||||
|
||||
$replacements = array(
|
||||
'a', 'c', 'd', 'e', 'g', 'h', 'i', 'j', 'k', 'l', 'n', 'o', 'r', 's', 'ss', 't', 'u', 'y', 'w', 'z', 'ae', 'oe',
|
||||
'A', 'C', 'D', 'E', 'G', 'H', 'I', 'J', 'K', 'L', 'N', 'O', 'R', 'S', 'T', 'U', 'Z', 'AE', 'OE'
|
||||
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 'ss', 't', 'u', 'v', 'w', 'y', 'z', 'ae', 'ch', 'kh', 'oe', 'sh', 'shh', 'ya', 'ye', 'yi', 'yo', 'yu', 'zh',
|
||||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'Y', 'Z', 'AE', 'CH', 'KH', 'OE', 'SH', 'SHH', 'YA', 'YE', 'YI', 'YO', 'YU', 'ZH'
|
||||
);
|
||||
|
||||
return preg_replace($patterns, $replacements, $str);
|
||||
@@ -1697,13 +1732,15 @@ class ToolsCore
|
||||
fwrite($write_fd, "AddType application/x-font-woff .woff\n");
|
||||
|
||||
if ($disable_modsec)
|
||||
fwrite($write_fd, "<IfModule mod_security.c>\nSecFilterEngine Off\nSecFilterScanPOST Off\n</IfModule>\n");
|
||||
fwrite($write_fd, "<IfModule mod_security.c>\nSecFilterEngine Off\nSecFilterScanPOST Off\n</IfModule>\n\n");
|
||||
|
||||
// RewriteEngine
|
||||
fwrite($write_fd, "<IfModule mod_rewrite.c>\n");
|
||||
|
||||
// Ensure HTTP_MOD_REWRITE variable is set in environment
|
||||
fwrite($write_fd, "<IfModule mod_env.c>\n");
|
||||
fwrite($write_fd, "SetEnv HTTP_MOD_REWRITE On\n");
|
||||
fwrite($write_fd, "</IfModule>\n\n");
|
||||
|
||||
// Disable multiviews ?
|
||||
if ($disable_multiviews)
|
||||
|
||||
@@ -2120,7 +2120,10 @@ class AdminControllerCore extends Controller
|
||||
$this->context->shop = new Shop(Configuration::get('PS_SHOP_DEFAULT'));
|
||||
elseif ($this->context->shop->id != $shop_id)
|
||||
$this->context->shop = new Shop($shop_id);
|
||||
|
||||
|
||||
// Replace current default country
|
||||
$this->context->country = new Country((int)Configuration::get('PS_COUNTRY_DEFAULT'));
|
||||
|
||||
$this->initBreadcrumbs();
|
||||
}
|
||||
|
||||
@@ -2379,8 +2382,10 @@ class AdminControllerCore extends Controller
|
||||
if (preg_match('/[.!]/', $order_by))
|
||||
{
|
||||
$order_by_split = preg_split('/[.!]/', $order_by);
|
||||
$order_by = pSQL($order_by_split[0]).'.`'.pSQL($order_by_split[1]).'`';
|
||||
$order_by = bqSQL($order_by_split[0]).'.`'.bqSQL($order_by_split[1]).'`';
|
||||
}
|
||||
elseif ($order_by)
|
||||
$order_by = '`'.bqSQL($order_by).'`';
|
||||
|
||||
$this->_orderWay = Tools::strtoupper($order_way);
|
||||
|
||||
@@ -2474,7 +2479,7 @@ class AdminControllerCore extends Controller
|
||||
(isset($this->_filter) ? $this->_filter : '').$where_shop.'
|
||||
'.(isset($this->_group) ? $this->_group.' ' : '').'
|
||||
'.$having_clause.'
|
||||
ORDER BY '.(($order_by == $this->identifier) ? 'a.' : '').pSQL($order_by).' '.pSQL($order_way).
|
||||
ORDER BY '.((str_replace('`', '', $order_by) == $this->identifier) ? 'a.' : '').$order_by.' '.pSQL($order_way).
|
||||
($this->_tmpTableFilter ? ') tmpTable WHERE 1'.$this->_tmpTableFilter : '').
|
||||
(($use_limit === true) ? ' LIMIT '.(int)$start.','.(int)$limit : '');
|
||||
|
||||
@@ -2526,22 +2531,20 @@ class AdminControllerCore extends Controller
|
||||
public function getLanguages()
|
||||
{
|
||||
$cookie = $this->context->cookie;
|
||||
$this->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
|
||||
$this->allow_employee_form_lang = (int)Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG');
|
||||
if ($this->allow_employee_form_lang && !$cookie->employee_form_lang)
|
||||
$cookie->employee_form_lang = (int)Configuration::get('PS_LANG_DEFAULT');
|
||||
$use_lang_from_cookie = false;
|
||||
$cookie->employee_form_lang = (int)$this->context->language->id;
|
||||
|
||||
$lang_exists = false;
|
||||
$this->_languages = Language::getLanguages(false);
|
||||
if ($this->allow_employee_form_lang)
|
||||
foreach ($this->_languages as $lang)
|
||||
if ($cookie->employee_form_lang == $lang['id_lang'])
|
||||
$use_lang_from_cookie = true;
|
||||
if (!$use_lang_from_cookie)
|
||||
$this->default_form_language = (int)Configuration::get('PS_LANG_DEFAULT');
|
||||
else
|
||||
$this->default_form_language = (int)$cookie->employee_form_lang;
|
||||
foreach ($this->_languages as $lang)
|
||||
if (isset($cookie->employee_form_lang) && $cookie->employee_form_lang == $lang['id_lang'])
|
||||
$lang_exists = true;
|
||||
|
||||
$this->default_form_language = $lang_exists ? (int)$cookie->employee_form_lang : (int)$this->context->language->id;
|
||||
|
||||
foreach ($this->_languages as $k => $language)
|
||||
$this->_languages[$k]['is_default'] = (int)($language['id_lang'] == $this->default_form_language);
|
||||
$this->_languages[$k]['is_default'] = ((int)($language['id_lang'] == $this->default_form_language));
|
||||
|
||||
return $this->_languages;
|
||||
}
|
||||
@@ -3269,4 +3272,4 @@ class AdminControllerCore extends Controller
|
||||
|
||||
return $return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -214,20 +214,18 @@ class HelperCore
|
||||
|
||||
$html = '
|
||||
<script type="text/javascript">
|
||||
var inputName = "'.$input_name.'";
|
||||
';
|
||||
var inputName = \''.addcslashes($input_name, '\'').'\';'."\n";
|
||||
if (count($selected_cat) > 0)
|
||||
{
|
||||
if (isset($selected_cat[0]))
|
||||
$html .= 'var selectedCat = "'.implode(',', $selected_cat).'";';
|
||||
$html .= ' var selectedCat = '.(int)implode(',', $selected_cat).';'."\n";
|
||||
else
|
||||
$html .= 'var selectedCat = "'.implode(',', array_keys($selected_cat)).'";';
|
||||
$html .= ' var selectedCat = '.(int)implode(',', array_keys($selected_cat)).';'."\n";
|
||||
}
|
||||
else
|
||||
$html .= 'var selectedCat = "";';
|
||||
$html .= '
|
||||
var selectedLabel = \''.$translations['selected'].'\';
|
||||
var home = \''.$root['name'].'\';
|
||||
$html .= ' var selectedCat = \'\';'."\n";
|
||||
$html .= ' var selectedLabel = \''.$translations['selected'].'\';
|
||||
var home = \''.addcslashes($root['name'], '\'').'\';
|
||||
var use_radio = '.(int)$use_radio.';';
|
||||
if (!$use_in_popup)
|
||||
$html .= '
|
||||
|
||||
@@ -455,13 +455,13 @@ class HelperListCore extends Helper
|
||||
self::$cache_lang['Delete'] = $this->l('Delete', 'Helper');
|
||||
|
||||
if (!array_key_exists('DeleteItem', self::$cache_lang))
|
||||
self::$cache_lang['DeleteItem'] = $this->l('Delete selected item?', 'Helper', false, false);
|
||||
self::$cache_lang['DeleteItem'] = $this->l('Delete selected item?', 'Helper', true, false);
|
||||
|
||||
if (!array_key_exists('Name', self::$cache_lang))
|
||||
self::$cache_lang['Name'] = $this->l('Name:', 'Helper', false, false);
|
||||
self::$cache_lang['Name'] = $this->l('Name:', 'Helper', true, false);
|
||||
|
||||
if (!is_null($name))
|
||||
$name = '\n\n'.self::$cache_lang['Name'].' '.$name;
|
||||
$name = addcslashes('\n\n'.self::$cache_lang['Name'].' '.$name, '\'');
|
||||
|
||||
$data = array(
|
||||
$this->identifier => $id,
|
||||
@@ -470,7 +470,8 @@ class HelperListCore extends Helper
|
||||
);
|
||||
|
||||
if ($this->specificConfirmDelete !== false)
|
||||
$data['confirm'] = !is_null($this->specificConfirmDelete) ? '\r'.$this->specificConfirmDelete : Tools::safeOutput(addcslashes(self::$cache_lang['DeleteItem'].$name, '\''));
|
||||
$data['confirm'] = !is_null($this->specificConfirmDelete) ? '\r'.$this->specificConfirmDelete : Tools::safeOutput(self::$cache_lang['DeleteItem'].$name);
|
||||
|
||||
$tpl->assign(array_merge($this->tpl_delete_link_vars, $data));
|
||||
|
||||
return $tpl->fetch();
|
||||
@@ -523,7 +524,7 @@ class HelperListCore extends Helper
|
||||
if (Tools::getIsset($this->table.'Orderby'))
|
||||
$order = '&'.$this->table.'Orderby='.urlencode($this->orderBy).'&'.$this->table.'Orderway='.urlencode(strtolower($this->orderWay));
|
||||
|
||||
$action = $this->currentIndex.$identifier.'&token='.$token.$order.'#'.$this->table;
|
||||
$action = $this->currentIndex.$identifier.'&token='.$token.'#'.$this->table;
|
||||
|
||||
/* Determine current page number */
|
||||
$page = (int)Tools::getValue('submitFilter'.$this->list_id);
|
||||
|
||||
@@ -1247,11 +1247,7 @@ abstract class ModuleCore
|
||||
$module->interest = 0;
|
||||
}
|
||||
|
||||
usort($module_list, create_function('$a,$b', '
|
||||
if ($a->displayName == $b->displayName)
|
||||
return 0;
|
||||
return ($a->displayName < $b->displayName) ? -1 : 1;
|
||||
'));
|
||||
usort($module_list, create_function('$a,$b', 'return strnatcasecmp($a->displayName, $b->displayName);'));
|
||||
|
||||
if ($errors)
|
||||
{
|
||||
@@ -1310,6 +1306,23 @@ abstract class ModuleCore
|
||||
return $db->executeS('SELECT * FROM `'._DB_PREFIX_.'module` m WHERE `name` NOT IN ('.implode(',', $arr_native_modules).') ');
|
||||
}
|
||||
|
||||
public static function getNativeModuleList()
|
||||
{
|
||||
$module_list_xml = _PS_ROOT_DIR_.self::CACHE_FILE_MODULES_LIST;
|
||||
$native_modules = simplexml_load_file($module_list_xml);
|
||||
$native_modules = $native_modules->modules;
|
||||
$modules = array();
|
||||
|
||||
foreach ($native_modules as $native_modules_type)
|
||||
if (in_array($native_modules_type['type'], array('native', 'partner')))
|
||||
{
|
||||
foreach ($native_modules_type->module as $module)
|
||||
$modules[] = $module['name'];
|
||||
}
|
||||
|
||||
return $modules;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return installed modules
|
||||
*
|
||||
@@ -1593,6 +1606,18 @@ abstract class ModuleCore
|
||||
return Cache::retrieve('Module::isInstalled'.$module_name);
|
||||
}
|
||||
|
||||
public function isEnabledForShopContext()
|
||||
{
|
||||
$shop_list = Shop::getContextListShopID();
|
||||
return (bool)Db::getInstance()->getValue('
|
||||
SELECT COUNT(*) n
|
||||
FROM `'._DB_PREFIX_.'module_shop`
|
||||
WHERE id_module='.(int)$this->id.' AND id_shop IN ('.implode(',', array_map('intval', Shop::getContextListShopID())).')
|
||||
GROUP BY id_module
|
||||
HAVING n='.(int)count(Shop::getContextListShopID())
|
||||
);
|
||||
}
|
||||
|
||||
public static function isEnabled($module_name)
|
||||
{
|
||||
if (!Cache::isStored('Module::isEnabled'.$module_name))
|
||||
@@ -1771,6 +1796,7 @@ abstract class ModuleCore
|
||||
@unlink($file);
|
||||
@file_put_contents($file, $xml);
|
||||
}
|
||||
@chmod($file, 0664);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -144,6 +144,7 @@ class OrderReturnCore extends ObjectModel
|
||||
$data[$k]['type'] = 'Return';
|
||||
$data[$k]['tracking_number'] = $or['id_order_return'];
|
||||
$data[$k]['can_edit'] = false;
|
||||
$data[$k]['reference'] = Order::getUniqReferenceOf($or['id_order']);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
@@ -799,7 +799,7 @@ class ShopCore extends ObjectModel
|
||||
{
|
||||
if (Shop::getContext() == Shop::CONTEXT_SHOP)
|
||||
$list = ($share) ? Shop::getSharedShops(Shop::getContextShopID(), $share) : array(Shop::getContextShopID());
|
||||
else if (Shop::getContext() == Shop::CONTEXT_GROUP)
|
||||
elseif (Shop::getContext() == Shop::CONTEXT_GROUP)
|
||||
$list = Shop::getShops(true, Shop::getContextShopGroupID(), true);
|
||||
else
|
||||
$list = Shop::getShops(true, null, true);
|
||||
|
||||
@@ -236,7 +236,10 @@ class StockMvtCore extends ObjectModel
|
||||
$query->innerJoin('stock', 's', 's.id_stock = sm.id_stock');
|
||||
$query->innerJoin('warehouse', 'w', 'w.id_warehouse = s.id_warehouse');
|
||||
$query->where('sm.sign = 1');
|
||||
$query->where('s.id_product = '.(int)$id_product.' OR s.id_product_attribute = '.(int)$id_product_attribute);
|
||||
if ($id_product_attribute)
|
||||
$query->where('s.id_product = '.(int)$id_product.' AND s.id_product_attribute = '.(int)$id_product_attribute);
|
||||
else
|
||||
$query->where('s.id_product = '.(int)$id_product);
|
||||
$query->orderBy('date_add DESC');
|
||||
|
||||
$res = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
|
||||
|
||||
+4
-2
@@ -73,8 +73,10 @@ function bqSQL($string)
|
||||
|
||||
function displayFatalError()
|
||||
{
|
||||
$error = error_get_last();
|
||||
if ($error !== NULL && in_array($error['type'], array(E_ERROR, E_PARSE)))
|
||||
$error = null;
|
||||
if (function_exists('error_get_last'))
|
||||
$error = error_get_last();
|
||||
if ($error !== NULL && in_array($error['type'], array(E_ERROR, E_PARSE, E_COMPILE_ERROR )))
|
||||
echo '[PrestaShop] Fatal error in module '.substr(basename($error['file']), 0, -4).':<br />'.$error['message'];
|
||||
}
|
||||
|
||||
|
||||
@@ -70,7 +70,8 @@ smartyRegisterFunction($smarty, 'function', 'd', 'smartyDieObject'); // Debug on
|
||||
smartyRegisterFunction($smarty, 'function', 'l', 'smartyTranslate', false);
|
||||
smartyRegisterFunction($smarty, 'function', 'hook', 'smartyHook');
|
||||
smartyRegisterFunction($smarty, 'function', 'toolsConvertPrice', 'toolsConvertPrice');
|
||||
|
||||
smartyRegisterFunction($smarty, 'modifier', 'json_encode', array('Tools', 'jsonEncode'));
|
||||
smartyRegisterFunction($smarty, 'modifier', 'json_decode', array('Tools', 'jsonDecode'));
|
||||
smartyRegisterFunction($smarty, 'function', 'dateFormat', array('Tools', 'dateFormat'));
|
||||
smartyRegisterFunction($smarty, 'function', 'convertPrice', array('Product', 'convertPrice'));
|
||||
smartyRegisterFunction($smarty, 'function', 'convertPriceWithCurrency', array('Product', 'convertPriceWithCurrency'));
|
||||
|
||||
@@ -196,6 +196,8 @@ class AdminAttachmentsControllerCore extends AdminController
|
||||
$this->errors[] = $this->l('Failed to copy the file.');
|
||||
$_POST['file_name'] = $_FILES['file']['name'];
|
||||
@unlink($_FILES['file']['tmp_name']);
|
||||
if (!sizeof($this->errors) && isset($a) && file_exists(_PS_DOWNLOAD_DIR_.$a->file))
|
||||
unlink(_PS_DOWNLOAD_DIR_.$a->file);
|
||||
$_POST['file'] = $uniqid;
|
||||
$_POST['mime'] = $_FILES['file']['type'];
|
||||
}
|
||||
@@ -211,11 +213,14 @@ class AdminAttachmentsControllerCore extends AdminController
|
||||
'<b>'.$upload_mb.'</b>'
|
||||
);
|
||||
}
|
||||
else if (!empty($_FILES['file']['tmp_name']))
|
||||
else
|
||||
$this->errors[] = $this->l('Upload error. Please check your server configurations for the maximum upload size allowed.');
|
||||
}
|
||||
$this->validateRules();
|
||||
}
|
||||
return parent::postProcess();
|
||||
$return = parent::postProcess();
|
||||
if (!$return && isset($uniqid) && file_exists(_PS_DOWNLOAD_DIR_.$uniqid))
|
||||
unlink(_PS_DOWNLOAD_DIR_.$uniqid);
|
||||
return $return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -877,7 +877,7 @@ class AdminCarrierWizardControllerCore extends AdminController
|
||||
$step_number = Tools::getValue('step_number');
|
||||
|
||||
if ($step_number == 4 && !Shop::isFeatureActive() || $step_number == 5 && Shop::isFeatureActive())
|
||||
return array();
|
||||
return array('fields' => array());
|
||||
|
||||
$step_fields = array(
|
||||
1 => array('name', 'delay', 'grade', 'url'),
|
||||
@@ -896,7 +896,7 @@ class AdminCarrierWizardControllerCore extends AdminController
|
||||
foreach ($definition['fields'] as $field => $def)
|
||||
if (!in_array($field, $step_fields[$step_number]))
|
||||
unset($definition['fields'][$field]);
|
||||
|
||||
|
||||
return $definition;
|
||||
}
|
||||
|
||||
|
||||
@@ -566,6 +566,8 @@ class AdminCartsControllerCore extends AdminController
|
||||
if (count($summary['products']))
|
||||
foreach ($summary['products'] as &$product)
|
||||
{
|
||||
$product['numeric_price'] = $product['price'];
|
||||
$product['numeric_total'] = $product['total'];
|
||||
$product['price'] = str_replace($currency->sign, '', Tools::displayPrice($product['price'], $currency));
|
||||
$product['total'] = str_replace($currency->sign, '', Tools::displayPrice($product['total'], $currency));
|
||||
$product['image_link'] = $this->context->link->getImageLink($product['link_rewrite'], $product['id_image'], 'small_default');
|
||||
|
||||
@@ -162,6 +162,26 @@ class AdminCmsControllerCore extends AdminController
|
||||
'cols' => 40,
|
||||
'hint' => $this->l('Invalid characters:').' <>;=#{}'
|
||||
),
|
||||
array(
|
||||
'type' => 'switch',
|
||||
'label' => $this->l('Indexation (by search engines):'),
|
||||
'name' => 'indexation',
|
||||
'required' => false,
|
||||
'class' => 't',
|
||||
'is_bool' => true,
|
||||
'values' => array(
|
||||
array(
|
||||
'id' => 'indexation_on',
|
||||
'value' => 1,
|
||||
'label' => $this->l('Enabled')
|
||||
),
|
||||
array(
|
||||
'id' => 'indexation_off',
|
||||
'value' => 0,
|
||||
'label' => $this->l('Disabled')
|
||||
)
|
||||
),
|
||||
),
|
||||
array(
|
||||
'type' => 'switch',
|
||||
'label' => $this->l('Displayed:'),
|
||||
|
||||
@@ -339,6 +339,8 @@ class AdminCurrenciesControllerCore extends AdminController
|
||||
}
|
||||
if (Tools::isSubmit('submitAddcurrency') && !Tools::getValue('id_currency') && Currency::exists(Tools::getValue('iso_code'), Tools::getValue('iso_code_num')))
|
||||
$this->errors[] = Tools::displayError('This currency already exists.');
|
||||
if (Tools::isSubmit('submitAddcurrency') && (float)Tools::getValue('conversion_rate') <= 0)
|
||||
$this->errors[] = Tools::displayError('This currency conversion rate can not be equal to 0.');
|
||||
parent::initProcess();
|
||||
}
|
||||
|
||||
|
||||
@@ -393,7 +393,7 @@ class AdminCustomerThreadsControllerCore extends AdminController
|
||||
$contact = new Contact((int)$ct->id_contact, (int)$ct->id_lang);
|
||||
if (Validate::isLoadedObject($contact))
|
||||
{
|
||||
$from_name = $contact->name[(int)$ct->id_lang];
|
||||
$from_name = $contact->name;
|
||||
$from_email = $contact->email;
|
||||
}
|
||||
else
|
||||
@@ -401,6 +401,7 @@ class AdminCustomerThreadsControllerCore extends AdminController
|
||||
$from_name = null;
|
||||
$from_email = null;
|
||||
}
|
||||
|
||||
if (Mail::Send(
|
||||
(int)$ct->id_lang,
|
||||
'reply_msg',
|
||||
@@ -641,6 +642,12 @@ class AdminCustomerThreadsControllerCore extends AdminController
|
||||
ENT_QUOTES, 'UTF-8')
|
||||
);
|
||||
|
||||
$is_valid_order_id = true;
|
||||
$order = new Order((int)$message['id_order']);
|
||||
|
||||
if (!Validate::isLoadedObject($order))
|
||||
$is_valid_order_id = false;
|
||||
|
||||
$tpl->assign(array(
|
||||
'current' => self::$currentIndex,
|
||||
'token' => $this->token,
|
||||
@@ -651,7 +658,8 @@ class AdminCustomerThreadsControllerCore extends AdminController
|
||||
'PS_SHOP_NAME' => Configuration::get('PS_SHOP_NAME'),
|
||||
'file_name' => file_exists(_PS_UPLOAD_DIR_.$message['file_name']),
|
||||
'contacts' => $contacts,
|
||||
'PS_CUSTOMER_SERVICE_SIGNATURE' => str_replace('\r\n', "\n", Configuration::get('PS_CUSTOMER_SERVICE_SIGNATURE', $message['id_lang']))
|
||||
'PS_CUSTOMER_SERVICE_SIGNATURE' => str_replace('\r\n', "\n", Configuration::get('PS_CUSTOMER_SERVICE_SIGNATURE', $message['id_lang'])),
|
||||
'is_valid_order_id' => $is_valid_order_id
|
||||
));
|
||||
|
||||
return $tpl->fetch();
|
||||
|
||||
@@ -308,7 +308,7 @@ class AdminCustomersControllerCore extends AdminController
|
||||
'name' => 'passwd',
|
||||
'required' => ($obj->id ? false : true),
|
||||
'col' => '4',
|
||||
'hint' => ($obj->id ? $this->l('Leave this field blank if there\'s no change') : $this->l('Minimum of five characters (only letters and numbers).').' -_')
|
||||
'hint' => ($obj->id ? $this->l('Leave this field blank if there\'s no change') : $this->l('Minimum of five characters'))
|
||||
),
|
||||
array(
|
||||
'type' => 'birthday',
|
||||
@@ -678,9 +678,10 @@ class AdminCustomersControllerCore extends AdminController
|
||||
$carts[$i]['name'] = $carrier->name;
|
||||
}
|
||||
|
||||
$sql = 'SELECT DISTINCT id_product, c.id_cart, c.id_shop, cp.id_shop AS cp_id_shop
|
||||
$sql = 'SELECT DISTINCT cp.id_product, c.id_cart, c.id_shop, cp.id_shop AS cp_id_shop
|
||||
FROM '._DB_PREFIX_.'cart_product cp
|
||||
JOIN '._DB_PREFIX_.'cart c ON (c.id_cart = cp.id_cart)
|
||||
JOIN '._DB_PREFIX_.'product p ON (cp.id_product = p.id_product)
|
||||
WHERE c.id_customer = '.(int)$customer->id.'
|
||||
AND cp.id_product NOT IN (
|
||||
SELECT product_id
|
||||
@@ -693,6 +694,8 @@ class AdminCustomersControllerCore extends AdminController
|
||||
for ($i = 0; $i < $total_interested; $i++)
|
||||
{
|
||||
$product = new Product($interested[$i]['id_product'], false, $this->default_form_language, $interested[$i]['id_shop']);
|
||||
if (!Validate::isLoadedObject($product))
|
||||
continue;
|
||||
$interested[$i]['url'] = $this->context->link->getProductLink(
|
||||
$product->id,
|
||||
$product->link_rewrite,
|
||||
@@ -706,15 +709,15 @@ class AdminCustomersControllerCore extends AdminController
|
||||
}
|
||||
|
||||
$connections = $customer->getLastConnections();
|
||||
if (!is_array($connections))
|
||||
$connections = array();
|
||||
$total_connections = count($connections);
|
||||
for ($i = 0; $i < $total_connections; $i++)
|
||||
{
|
||||
$connections[$i]['date_add'] = Tools::displayDate($connections[$i]['date_add'],null , true);
|
||||
$connections[$i]['http_referer'] = $connections[$i]['http_referer'] ?
|
||||
preg_replace('/^www./', '', parse_url($connections[$i]['http_referer'], PHP_URL_HOST)) :
|
||||
$this->l('Direct link');
|
||||
$connections[$i]['http_referer'] = $connections[$i]['http_referer'] ? preg_replace('/^www./', '', parse_url($connections[$i]['http_referer'], PHP_URL_HOST)) : $this->l('Direct link');
|
||||
}
|
||||
|
||||
|
||||
$referrers = Referrer::getReferrers($customer->id);
|
||||
$total_referrers = count($referrers);
|
||||
for ($i = 0; $i < $total_referrers; $i++)
|
||||
|
||||
@@ -63,7 +63,8 @@ class AdminEmailsControllerCore extends AdminController
|
||||
),
|
||||
'js' => array(
|
||||
1 => 'onclick="$(\'#smtp\').slideUp();"',
|
||||
2 => 'onclick="$(\'#smtp\').slideDown();"'
|
||||
2 => 'onclick="$(\'#smtp\').slideDown();"',
|
||||
3 => 'onclick="$(\'#smtp\').slideUp();"'
|
||||
),
|
||||
'visibility' => Shop::CONTEXT_ALL
|
||||
),
|
||||
|
||||
@@ -216,7 +216,7 @@ class AdminEmployeesControllerCore extends AdminController
|
||||
'required' => true,
|
||||
'hint' => ($obj->id ?
|
||||
$this->l('Leave this field blank if you do not want to change your password.') :
|
||||
$this->l('Minimum of eight characters (use only letters and numbers)').' -_')
|
||||
$this->l('Minimum of eight characters'))
|
||||
),
|
||||
array(
|
||||
'type' => 'text',
|
||||
|
||||
@@ -303,7 +303,7 @@ class AdminHomeControllerCore extends AdminController
|
||||
|
||||
public function getMonthlyStatistics()
|
||||
{
|
||||
$currency = Tools::setCurrency($this->context->cookie);
|
||||
$currency = Tools::setCurrency((object)array('id_currency' => null));
|
||||
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
|
||||
SELECT IFNULL(SUM(`total_paid_real` / conversion_rate), "0") as total_sales, COUNT(*) as total_orders
|
||||
FROM `'._DB_PREFIX_.'orders`
|
||||
@@ -400,7 +400,7 @@ class AdminHomeControllerCore extends AdminController
|
||||
$chart->getCurve(1)->setPoint(strtotime($row['invoice_date'].' 02:00:00'), $row['total_converted']);
|
||||
$chart->setSize(580, 170);
|
||||
$chart->setTimeMode(strtotime('-7 DAYS', time()), time(), 'd');
|
||||
$currency = Tools::setCurrency($this->context->cookie);
|
||||
$currency = Tools::setCurrency((object)array('id_currency' => null));
|
||||
$chart->getCurve(1)->setLabel($this->l('Sales + Tax').' ('.strtoupper($currency->iso_code).')');
|
||||
|
||||
$content .= $chart->fetch();
|
||||
|
||||
@@ -427,10 +427,11 @@ class AdminImagesControllerCore extends AdminController
|
||||
if (!is_dir($dir))
|
||||
return false;
|
||||
$toDel = scandir($dir);
|
||||
|
||||
foreach ($toDel as $d)
|
||||
foreach ($type as $imageType)
|
||||
if (preg_match('/^[0-9]+\-'.($product ? '[0-9]+\-' : '').$imageType['name'].'\.jpg$/', $d) || preg_match('/^([[:lower:]]{2})\-default\-(.*)\.jpg$/', $d))
|
||||
if (file_exists($dir.$d))
|
||||
if (preg_match('/^[0-9]+\-'.($product ? '[0-9]+\-' : '').$imageType['name'].'\.jpg$/', $d) || preg_match('/^([[:lower:]]{2})\-default\-'.$imageType['name'].'\.jpg$/', $d))
|
||||
if (file_exists($dir.$d))
|
||||
unlink($dir.$d);
|
||||
|
||||
// delete product images using new filesystem.
|
||||
|
||||
@@ -89,6 +89,7 @@ class AdminImportControllerCore extends AdminController
|
||||
$this->l('Addresses'),
|
||||
$this->l('Manufacturers'),
|
||||
$this->l('Suppliers'),
|
||||
$this->l('Alias'),
|
||||
);
|
||||
|
||||
// @since 1.5.0
|
||||
@@ -247,13 +248,13 @@ class AdminImportControllerCore extends AdminController
|
||||
'delete_existing_images' => array(
|
||||
'label' => $this->l('Delete existing images (0 = No, 1 = Yes)')
|
||||
),
|
||||
'features' => array('label' => $this->l('Feature(Name:Value:Position)')),
|
||||
'features' => array('label' => $this->l('Feature(Name:Value:Position:Customized)')),
|
||||
'online_only' => array('label' => $this->l('Available online only (0 = No, 1 = Yes)')),
|
||||
'condition' => array('label' => $this->l('Condition')),
|
||||
'customizable' => array('label' => $this->l('Customizable (0 = No, 1 = Yes)')),
|
||||
'uploadable_files' => array('label' => $this->l('Uploadable files (0 = No, 1 = Yes)')),
|
||||
'text_fields' => array('label' => $this->l('Text fields (0 = No, 1 = Yes)')),
|
||||
'out_of_stock' => array('label' => $this->l('Out_of_stock')),
|
||||
'out_of_stock' => array('label' => $this->l('Action when out of stock')),
|
||||
'advanced_stock_management' => array('label' => $this->l('Advanced stock management')),
|
||||
'shop' => array(
|
||||
'label' => $this->l('ID / Name of shop'),
|
||||
@@ -306,7 +307,8 @@ class AdminImportControllerCore extends AdminController
|
||||
'firstname' => array('label' => $this->l('First Name *')),
|
||||
'newsletter' => array('label' => $this->l('Newsletter (0/1)')),
|
||||
'optin' => array('label' => $this->l('Opt-in (0/1)')),
|
||||
'group' => array('label' => $this->l('Groupe Name')),
|
||||
'group' => array('label' => $this->l('Groups (x,y,z...)')),
|
||||
'id_default_group' => array('label' => $this->l('Default group ID')),
|
||||
'id_shop' => array(
|
||||
'label' => $this->l('ID / Name of shop'),
|
||||
'help' => $this->l('Ignore this field if you don\'t use the Multistore tool. If you leave this field empty, the default shop will be used.'),
|
||||
@@ -361,7 +363,6 @@ class AdminImportControllerCore extends AdminController
|
||||
'postcode' => 'X'
|
||||
);
|
||||
break;
|
||||
|
||||
case $this->entities[$this->l('Manufacturers')]:
|
||||
case $this->entities[$this->l('Suppliers')]:
|
||||
//Overwrite validators AS name is not MultiLangField
|
||||
@@ -383,6 +384,7 @@ class AdminImportControllerCore extends AdminController
|
||||
'meta_title' => array('label' => $this->l('Meta title')),
|
||||
'meta_keywords' => array('label' => $this->l('Meta keywords')),
|
||||
'meta_description' => array('label' => $this->l('Meta description')),
|
||||
'image' => array('label' => $this->l('Image URL')),
|
||||
'shop' => array(
|
||||
'label' => $this->l('ID / Name of group shop'),
|
||||
'help' => $this->l('Ignore this field if you don\'t use the Multistore tool. If you leave this field empty, the default shop will be used.'),
|
||||
@@ -393,6 +395,23 @@ class AdminImportControllerCore extends AdminController
|
||||
'shop' => Shop::getGroupFromShop(Configuration::get('PS_SHOP_DEFAULT')),
|
||||
);
|
||||
break;
|
||||
case $this->entities[$this->l('Alias')]:
|
||||
//Overwrite required_fields
|
||||
$this->required_fields = array(
|
||||
'alias',
|
||||
'search',
|
||||
);
|
||||
$this->available_fields = array(
|
||||
'no' => array('label' => $this->l('Ignore this column')),
|
||||
'id' => array('label' => $this->l('ID')),
|
||||
'alias' => array('label' => $this->l('Alias *')),
|
||||
'search' => array('label' => $this->l('Search *')),
|
||||
'active' => array('label' => $this->l('Active')),
|
||||
);
|
||||
self::$default_values = array(
|
||||
'active' => '1',
|
||||
);
|
||||
break;
|
||||
}
|
||||
|
||||
// @since 1.5.0
|
||||
@@ -456,9 +475,8 @@ class AdminImportControllerCore extends AdminController
|
||||
|
||||
}
|
||||
|
||||
$this->separator = substr(strval(trim(Tools::getValue('separator', ';'))), 0, 1);
|
||||
$this->multiple_value_separator = substr(strval(trim(Tools::getValue('multiple_value_separator', ','))), 0, 1);
|
||||
|
||||
$this->separator = ($separator = Tools::substr(strval(trim(Tools::getValue('separator'))), 0, 1)) ? $separator : ';';
|
||||
$this->multiple_value_separator = ($separator = Tools::substr(strval(trim(Tools::getValue('multiple_value_separator'))), 0, 1)) ? $separator : ',';
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
@@ -508,11 +526,11 @@ class AdminImportControllerCore extends AdminController
|
||||
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 = $this->multiple_value_separator;
|
||||
$separator_selected = $this->separator;
|
||||
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 = $this->separator;
|
||||
$multiple_value_separator_selected = $this->multiple_value_separator;
|
||||
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);
|
||||
|
||||
@@ -553,8 +571,8 @@ class AdminImportControllerCore extends AdminController
|
||||
|
||||
$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->separator_selected = base64_encode($this->separator);
|
||||
$this->context->cookie->multiple_value_separator_selected = base64_encode($this->multiple_value_separator);
|
||||
$this->context->cookie->csv_selected = base64_encode(Tools::getValue('csv'));
|
||||
|
||||
$this->tpl_view_vars = array(
|
||||
@@ -633,7 +651,7 @@ class AdminImportControllerCore extends AdminController
|
||||
$html .= '<tr id="table_'.$current_table.'_line_'.$current_line.'" style="padding: 4px">';
|
||||
foreach ($line as $nb_c => $column)
|
||||
if ((MAX_COLUMNS * (int)$current_table <= $nb_c) && ((int)$nb_c < MAX_COLUMNS * ((int)$current_table + 1)))
|
||||
$html .= '<td>'.htmlentities(substr($column, 0, 200), ENT_QUOTES, 'UTF-8').'</td>';
|
||||
$html .= '<td>'.htmlentities(Tools::substr($column, 0, 200), ENT_QUOTES, 'UTF-8').'</td>';
|
||||
$html .= '</tr>';
|
||||
}
|
||||
$html .= '</table>';
|
||||
@@ -676,6 +694,8 @@ class AdminImportControllerCore extends AdminController
|
||||
protected static function rewindBomAware($handle)
|
||||
{
|
||||
// A rewind wrapper that skip BOM signature wrongly
|
||||
if (!is_resource($handle))
|
||||
return false;
|
||||
rewind($handle);
|
||||
if (($bom = fread($handle, 3)) != "\xEF\xBB\xBF")
|
||||
rewind($handle);
|
||||
@@ -871,6 +891,12 @@ class AdminImportControllerCore extends AdminController
|
||||
case 'categories':
|
||||
$path = _PS_CAT_IMG_DIR_.(int)$id_entity;
|
||||
break;
|
||||
case 'manufacturers':
|
||||
$path = _PS_MANU_IMG_DIR_.(int)$id_entity;
|
||||
break;
|
||||
case 'suppliers':
|
||||
$path = _PS_SUPP_IMG_DIR_.(int)$id_entity;
|
||||
break;
|
||||
}
|
||||
$url = str_replace(' ', '%20', trim($url));
|
||||
|
||||
@@ -947,7 +973,7 @@ class AdminImportControllerCore extends AdminController
|
||||
}
|
||||
elseif (isset($category->parent) && is_string($category->parent))
|
||||
{
|
||||
$category_parent = Category::searchByName($default_language_id, $category->parent, true);
|
||||
$category_parent = Category::searchByName($id_lang, $category->parent, true);
|
||||
if ($category_parent['id_category'])
|
||||
{
|
||||
$category->id_parent = (int)$category_parent['id_category'];
|
||||
@@ -968,7 +994,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],
|
||||
$category_to_create->name[$id_lang],
|
||||
(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 : '').
|
||||
@@ -1010,8 +1036,8 @@ class AdminImportControllerCore extends AdminController
|
||||
($lang_field_error = $category->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && empty($this->errors))
|
||||
{
|
||||
$category_already_created = Category::searchByNameAndParentCategoryId(
|
||||
$default_language_id,
|
||||
$category->name[$default_language_id],
|
||||
$id_lang,
|
||||
$category->name[$id_lang],
|
||||
$category->id_parent
|
||||
);
|
||||
|
||||
@@ -1074,11 +1100,11 @@ class AdminImportControllerCore extends AdminController
|
||||
|
||||
// Get shops for each attributes
|
||||
$info['shop'] = explode($this->multiple_value_separator, $info['shop']);
|
||||
|
||||
|
||||
foreach ($info['shop'] as $shop)
|
||||
if (!is_numeric($shop))
|
||||
if (!empty($shop) && !is_numeric($shop))
|
||||
$category->addShop(Shop::getIdByName($shop));
|
||||
else
|
||||
elseif (!empty($shop))
|
||||
$category->addShop($shop);
|
||||
}
|
||||
}
|
||||
@@ -1126,7 +1152,7 @@ class AdminImportControllerCore extends AdminController
|
||||
else
|
||||
$product = new Product();
|
||||
|
||||
if (array_key_exists('id', $info) && (int)$info['id'] && Product::existsInDatabase((int)$info['id'], 'product'))
|
||||
if (isset($product->id) && $product->id && Product::existsInDatabase((int)$product->id, 'product'))
|
||||
{
|
||||
$product->loadStockData();
|
||||
$category_data = Product::getProductCategories((int)$product->id);
|
||||
@@ -1150,9 +1176,9 @@ class AdminImportControllerCore extends AdminController
|
||||
// link product to shops
|
||||
$product->id_shop_list = array();
|
||||
foreach (explode($this->multiple_value_separator, $product->shop) as $shop)
|
||||
if (!is_numeric($shop))
|
||||
if (!empty($shop) && !is_numeric($shop))
|
||||
$product->id_shop_list[] = Shop::getIdByName($shop);
|
||||
else
|
||||
elseif (!empty($shop))
|
||||
$product->id_shop_list[] = $shop;
|
||||
|
||||
if ((int)$product->id_tax_rules_group != 0)
|
||||
@@ -1275,7 +1301,7 @@ class AdminImportControllerCore extends AdminController
|
||||
}
|
||||
else if (is_string($value) && !empty($value))
|
||||
{
|
||||
$category = Category::searchByName($default_language_id, trim($value), true);
|
||||
$category = Category::searchByName($id_lang, trim($value), true);
|
||||
if ($category['id_category'])
|
||||
$product->id_category[] = (int)$category['id_category'];
|
||||
else
|
||||
@@ -1393,8 +1419,10 @@ class AdminImportControllerCore extends AdminController
|
||||
$product_shop = explode($this->multiple_value_separator, $product->shop);
|
||||
foreach ($product_shop as $shop)
|
||||
{
|
||||
if (empty($shop))
|
||||
continue;
|
||||
$shop = trim($shop);
|
||||
if (!is_numeric($shop))
|
||||
if (!empty($shop) && !is_numeric($shop))
|
||||
$shop = Shop::getIdByName($shop);
|
||||
|
||||
if (in_array($shop, $shop_ids))
|
||||
@@ -1446,36 +1474,36 @@ class AdminImportControllerCore extends AdminController
|
||||
|
||||
$id_shop_list = array();
|
||||
foreach ($info['shop'] as $shop)
|
||||
if (!is_numeric($shop))
|
||||
if (!empty($shop) && !is_numeric($shop))
|
||||
$id_shop_list[] = (int)Shop::getIdByName($shop);
|
||||
else
|
||||
elseif (!empty($shop))
|
||||
$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 ((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) && isset($specific_price['id_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 (is_array($specific_price) && isset($specific_price['id_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))
|
||||
{
|
||||
@@ -1489,7 +1517,8 @@ class AdminImportControllerCore extends AdminController
|
||||
if (is_array($product->tags) && count($product->tags))
|
||||
{
|
||||
foreach ($product->tags as $key => $tag)
|
||||
$product->tags[$key] = trim($tag);
|
||||
if (!empty($tag))
|
||||
$product->tags[$key] = trim($tag);
|
||||
$tags[$id_lang] = $product->tags;
|
||||
$product->tags = $tags;
|
||||
}
|
||||
@@ -1497,7 +1526,7 @@ class AdminImportControllerCore extends AdminController
|
||||
}
|
||||
// Delete tags for this id product, for no duplicating error
|
||||
Tag::deleteTagsForProduct($product->id);
|
||||
if (!is_array($product->tags))
|
||||
if (!is_array($product->tags) && !empty($product->tags))
|
||||
{
|
||||
$product->tags = AdminImportController::createMultiLangField($product->tags);
|
||||
foreach ($product->tags as $key => $tags)
|
||||
@@ -1581,14 +1610,20 @@ class AdminImportControllerCore extends AdminController
|
||||
if (isset($features['features']) && !empty($features['features']))
|
||||
foreach (explode($this->multiple_value_separator, $features['features']) as $single_feature)
|
||||
{
|
||||
if (empty($single_feature))
|
||||
continue;
|
||||
$tab_feature = explode(':', $single_feature);
|
||||
$feature_name = trim($tab_feature[0]);
|
||||
$feature_value = trim($tab_feature[1]);
|
||||
$position = isset($tab_feature[2]) ? $tab_feature[2]: false;
|
||||
$feature_name = isset($tab_feature[0]) ? trim($tab_feature[0]) : '';
|
||||
$feature_value = isset($tab_feature[1]) ? trim($tab_feature[1]) : '';
|
||||
$position = isset($tab_feature[2]) ? (int)$tab_feature[2] : false;
|
||||
$custom = isset($tab_feature[3]) ? (int)$tab_feature[3] : false;
|
||||
if(!empty($feature_name) && !empty($feature_value))
|
||||
{
|
||||
$id_feature = Feature::addFeatureImport($feature_name, $position);
|
||||
$id_feature_value = FeatureValue::addFeatureValueImport($id_feature, $feature_value, $product->id, $id_lang);
|
||||
$id_feature = (int)Feature::addFeatureImport($feature_name, $position);
|
||||
$id_product = null;
|
||||
if (Tools::getValue('forceIDs') || Tools::getValue('match_ref'))
|
||||
$id_product = (int)$product->id;
|
||||
$id_feature_value = (int)FeatureValue::addFeatureValueImport($id_feature, $feature_value, $id_product, $id_lang, $custom);
|
||||
Product::addFeatureProductImport($product->id, $id_feature, $id_feature_value);
|
||||
}
|
||||
}
|
||||
@@ -1606,7 +1641,6 @@ class AdminImportControllerCore extends AdminController
|
||||
StockAvailable::setQuantity((int)$product->id, 0, $product->quantity, $this->context->shop->id);
|
||||
|
||||
}
|
||||
|
||||
$this->closeCsvFile($handle);
|
||||
}
|
||||
|
||||
@@ -1646,11 +1680,12 @@ class AdminImportControllerCore extends AdminController
|
||||
$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[] = Shop::getIdByName($shop);
|
||||
else
|
||||
$id_shop_list[] = $shop;
|
||||
if (is_array($info['shop']) && count($info['shop']))
|
||||
foreach ($info['shop'] as $shop)
|
||||
if (!empty($shop) && !is_numeric($shop))
|
||||
$id_shop_list[] = Shop::getIdByName($shop);
|
||||
elseif (!empty($shop))
|
||||
$id_shop_list[] = $shop;
|
||||
|
||||
if(isset($info['id_product']))
|
||||
$product = new Product((int)$info['id_product'], false, $default_language);
|
||||
@@ -1724,12 +1759,14 @@ class AdminImportControllerCore extends AdminController
|
||||
if(isset($info['group']))
|
||||
foreach (explode($this->multiple_value_separator, $info['group']) as $key => $group)
|
||||
{
|
||||
if (empty($group))
|
||||
continue;
|
||||
$tab_group = explode(':', $group);
|
||||
$group = trim($tab_group[0]);
|
||||
if (!isset($tab_group[1]))
|
||||
$type = 'select';
|
||||
else
|
||||
$type = trim($tab_group[1]);
|
||||
$type = trim($tab_group[1]);
|
||||
|
||||
// sets group
|
||||
$groups_attributes[$key]['group'] = $group;
|
||||
@@ -1779,6 +1816,8 @@ class AdminImportControllerCore extends AdminController
|
||||
if(isset($info['attribute']))
|
||||
foreach (explode($this->multiple_value_separator, $info['attribute']) as $key => $attribute)
|
||||
{
|
||||
if (empty($attribute))
|
||||
continue;
|
||||
$tab_attribute = explode(':', $attribute);
|
||||
$attribute = trim($tab_attribute[0]);
|
||||
// if position is filled
|
||||
@@ -1925,6 +1964,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++)
|
||||
{
|
||||
@@ -1952,31 +1994,45 @@ class AdminImportControllerCore extends AdminController
|
||||
$customer_exist = true;
|
||||
$customer_groups = $customer->getGroups();
|
||||
$addresses = $customer->getAddresses((int)Configuration::get('PS_LANG_DEFAULT'));
|
||||
foreach ($customer_groups as $key => $group)
|
||||
if ($group == $customer->id_default_group)
|
||||
unset($customer_groups[$key]);
|
||||
}
|
||||
|
||||
// Group Importation
|
||||
if (isset($info['group']) && !empty($info['group']))
|
||||
{
|
||||
if (!isset($customer_groups))
|
||||
$customer_groups = array();
|
||||
|
||||
$myGroup = Group::searchByName($default_language_id, $info['group']);
|
||||
|
||||
if (!$myGroup)
|
||||
foreach (explode($this->multiple_value_separator, $info['group']) as $key => $group)
|
||||
{
|
||||
$myGroup = new Group();
|
||||
$myGroup->name = Array($default_language_id => $info['group']);
|
||||
$myGroup->price_display_method = 1;
|
||||
$myGroup->add();
|
||||
$myGroup = Group::searchByName($default_language_id, $info['group']);
|
||||
$group = trim($group);
|
||||
if(empty($group))
|
||||
continue;
|
||||
$id_group = false;
|
||||
if (is_numeric($group) && $group)
|
||||
{
|
||||
$myGroup = new Group((int)$group);
|
||||
if (Validate::isLoadedObject($myGroup))
|
||||
$customer_groups[] = (int)$group;
|
||||
continue;
|
||||
}
|
||||
$myGroup = Group::searchByName($group);
|
||||
if (isset($myGroup['id_group']) && $myGroup['id_group'])
|
||||
$id_group = (int)$myGroup['id_group'];
|
||||
if (!$id_group)
|
||||
{
|
||||
$myGroup = new Group();
|
||||
$myGroup->name = Array($id_lang => $group);
|
||||
if ($id_lang != $default_language_id)
|
||||
$myGroup->name = array_merge($myGroup->name, array($default_language_id => $group));
|
||||
$myGroup->price_display_method = 1;
|
||||
$myGroup->add();
|
||||
if (Validate::isLoadedObject($myGroup))
|
||||
$id_group = (int)$myGroup->id;
|
||||
}
|
||||
if ($id_group)
|
||||
$customer_groups[] = (int)$id_group;
|
||||
}
|
||||
if (isset($myGroup['0']['id_group']))
|
||||
$customer_groups[] = $myGroup['0']['id_group'];
|
||||
}
|
||||
|
||||
elseif(empty($info['group']) && isset($customer->id) && $customer->id)
|
||||
$customer_groups = array(0 => Configuration::get('PS_CUSTOMER_GROUP'));
|
||||
|
||||
AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $customer);
|
||||
|
||||
if ($customer->passwd)
|
||||
@@ -1990,6 +2046,8 @@ class AdminImportControllerCore extends AdminController
|
||||
{
|
||||
foreach ($id_shop_list as $id_shop)
|
||||
{
|
||||
if (empty($id_shop))
|
||||
continue;
|
||||
$shop = new Shop((int)$id_shop);
|
||||
$group_shop = $shop->getGroup();
|
||||
if ($group_shop->share_customer)
|
||||
@@ -2011,7 +2069,18 @@ class AdminImportControllerCore extends AdminController
|
||||
//set temporally for validate field
|
||||
$customer->id_shop = $default_shop->id;
|
||||
$customer->id_shop_group = $default_shop->getGroup()->id;
|
||||
|
||||
if (isset($info['id_default_group']) && !empty($info['id_default_group']) && !is_numeric($info['id_default_group']))
|
||||
{
|
||||
$info['id_default_group'] = trim($info['id_default_group']);
|
||||
$myGroup = Group::searchByName($info['id_default_group']);
|
||||
if (isset($myGroup['id_group']) && $myGroup['id_group'])
|
||||
$info['id_default_group'] = (int)$myGroup['id_group'];
|
||||
}
|
||||
$myGroup = new Group($customer->id_default_group);
|
||||
if (!Validate::isLoadedObject($myGroup))
|
||||
$customer->id_default_group = (int)Configuration::get('PS_CUSTOMER_GROUP');
|
||||
$customer_groups[] = (int)$customer->id_default_group;
|
||||
$customer_groups = array_flip(array_flip($customer_groups));
|
||||
$res = true;
|
||||
if (($field_error = $customer->validateFields(UNFRIENDLY_ERROR, true)) === true &&
|
||||
($lang_field_error = $customer->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true)
|
||||
@@ -2029,12 +2098,9 @@ class AdminImportControllerCore extends AdminController
|
||||
$customer->id = $current_id_customer;
|
||||
$res &= $customer->update();
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
$res &= $customer->add();
|
||||
if (isset($customer_groups))
|
||||
$customer->addGroups($customer_groups);
|
||||
if (isset($addresses))
|
||||
foreach ($addresses as $address)
|
||||
{
|
||||
@@ -2043,6 +2109,8 @@ class AdminImportControllerCore extends AdminController
|
||||
Db::getInstance()->insert('address', $address);
|
||||
}
|
||||
}
|
||||
if ($res && isset($customer_groups))
|
||||
$customer->updateGroup($customer_groups);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -2057,8 +2125,6 @@ class AdminImportControllerCore extends AdminController
|
||||
else
|
||||
{
|
||||
$res &= $customer->add();
|
||||
if (isset($customer_groups))
|
||||
$customer->addGroups($customer_groups);
|
||||
if (isset($addresses))
|
||||
foreach ($addresses as $address)
|
||||
{
|
||||
@@ -2067,9 +2133,12 @@ class AdminImportControllerCore extends AdminController
|
||||
Db::getInstance()->insert('address', $address);
|
||||
}
|
||||
}
|
||||
if ($res && isset($customer_groups))
|
||||
$customer->updateGroup($customer_groups);
|
||||
}
|
||||
}
|
||||
}
|
||||
unset($customer_groups);
|
||||
$customer_exist = false;
|
||||
if (!$res)
|
||||
{
|
||||
@@ -2116,7 +2185,7 @@ class AdminImportControllerCore extends AdminController
|
||||
$country->active = 1;
|
||||
$country->name = AdminImportController::createMultiLangField($address->country);
|
||||
$country->id_zone = 0; // Default zone for country to create
|
||||
$country->iso_code = strtoupper(substr($address->country, 0, 2)); // Default iso for country to create
|
||||
$country->iso_code = Tools::strtoupper(Tools::substr($address->country, 0, 2)); // Default iso for country to create
|
||||
$country->contains_states = 0; // Default value for country to create
|
||||
$lang_field_error = $country->validateFieldsLang(UNFRIENDLY_ERROR, true);
|
||||
if (($field_error = $country->validateFields(UNFRIENDLY_ERROR, true)) === true &&
|
||||
@@ -2147,7 +2216,7 @@ class AdminImportControllerCore extends AdminController
|
||||
$state->name = $address->state;
|
||||
$state->id_country = isset($country->id) ? (int)$country->id : 0;
|
||||
$state->id_zone = 0; // Default zone for state to create
|
||||
$state->iso_code = strtoupper(substr($address->state, 0, 2)); // Default iso for state to create
|
||||
$state->iso_code = Tools::strtoupper(Tools::substr($address->state, 0, 2)); // Default iso for state to create
|
||||
$state->tax_behavior = 0;
|
||||
if (($field_error = $state->validateFields(UNFRIENDLY_ERROR, true)) === true &&
|
||||
($lang_field_error = $state->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $state->add())
|
||||
@@ -2332,6 +2401,11 @@ class AdminImportControllerCore extends AdminController
|
||||
if (!$res)
|
||||
$res = $manufacturer->add();
|
||||
|
||||
//copying images of manufacturer
|
||||
if (isset($manufacturer->image) && !empty($manufacturer->image))
|
||||
if (!AdminImportController::copyImg($manufacturer->id, null, $manufacturer->image, 'manufacturers', !Tools::getValue('regenerate')))
|
||||
$this->warnings[] = $manufacturer->image.' '.Tools::displayError('cannot be copied.');
|
||||
|
||||
if ($res)
|
||||
{
|
||||
// Associate supplier to group shop
|
||||
@@ -2345,6 +2419,8 @@ class AdminImportControllerCore extends AdminController
|
||||
$shops = array();
|
||||
foreach ($manufacturer->shop as $shop)
|
||||
{
|
||||
if (empty($shop))
|
||||
continue;
|
||||
$shop = trim($shop);
|
||||
if (!is_numeric($shop))
|
||||
$shop = ShopGroup::getIdByName($shop);
|
||||
@@ -2403,6 +2479,11 @@ class AdminImportControllerCore extends AdminController
|
||||
if (!$res)
|
||||
$res = $supplier->add();
|
||||
|
||||
//copying images of suppliers
|
||||
if (isset($supplier->image) && !empty($supplier->image))
|
||||
if (!AdminImportController::copyImg($supplier->id, null, $supplier->image, 'suppliers', !Tools::getValue('regenerate')))
|
||||
$this->warnings[] = $supplier->image.' '.Tools::displayError('cannot be copied.');
|
||||
|
||||
if (!$res)
|
||||
$this->errors[] = Db::getInstance()->getMsgError().' '.sprintf(
|
||||
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
|
||||
@@ -2422,6 +2503,8 @@ class AdminImportControllerCore extends AdminController
|
||||
$shops = array();
|
||||
foreach ($supplier->shop as $shop)
|
||||
{
|
||||
if (empty($shop))
|
||||
continue;
|
||||
$shop = trim($shop);
|
||||
if (!is_numeric($shop))
|
||||
$shop = ShopGroup::getIdByName($shop);
|
||||
@@ -2440,6 +2523,56 @@ class AdminImportControllerCore extends AdminController
|
||||
$this->closeCsvFile($handle);
|
||||
}
|
||||
|
||||
public function aliasImport()
|
||||
{
|
||||
$this->receiveTab();
|
||||
$handle = $this->openCsvFile();
|
||||
AdminImportController::setLocale();
|
||||
for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++)
|
||||
{
|
||||
if (Tools::getValue('convert'))
|
||||
$line = $this->utf8EncodeArray($line);
|
||||
$info = AdminImportController::getMaskedRow($line);
|
||||
|
||||
AdminImportController::setDefaultValues($info);
|
||||
|
||||
if (Tools::getValue('forceIDs') && isset($info['id']) && (int)$info['id'])
|
||||
$alias = new Alias((int)$info['id']);
|
||||
else
|
||||
{
|
||||
if (array_key_exists('id', $info) && (int)$info['id'] && Alias::existsInDatabase((int)$info['id'], 'alias'))
|
||||
$alias = new Alias((int)$info['id']);
|
||||
else
|
||||
$alias = new Alias();
|
||||
}
|
||||
|
||||
AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $alias);
|
||||
|
||||
$res = false;
|
||||
if (($field_error = $alias->validateFields(UNFRIENDLY_ERROR, true)) === true &&
|
||||
($lang_field_error = $alias->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true)
|
||||
{
|
||||
if ($alias->id && $alias->aliasExists($alias->id))
|
||||
$res = $alias->update();
|
||||
if (!$res)
|
||||
$res = $alias->add();
|
||||
|
||||
if (!$res)
|
||||
$this->errors[] = Db::getInstance()->getMsgError().' '.sprintf(
|
||||
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
|
||||
$info['name'],
|
||||
(isset($info['id']) ? $info['id'] : 'null')
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->errors[] = $this->l('Alias is invalid').' ('.$alias->name.')';
|
||||
$this->errors[] = ($field_error !== true ? $field_error : '').(isset($lang_field_error) && $lang_field_error !== true ? $lang_field_error : '');
|
||||
}
|
||||
}
|
||||
$this->closeCsvFile($handle);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 1.5.0
|
||||
*/
|
||||
@@ -2479,34 +2612,32 @@ class AdminImportControllerCore extends AdminController
|
||||
$date_delivery_expected = pSQL($info['date_delivery_expected']);
|
||||
$discount_rate = (float)$info['discount_rate'];
|
||||
$is_template = (bool)$info['is_template'];
|
||||
|
||||
|
||||
$error = '';
|
||||
// checks parameters
|
||||
if (!Supplier::supplierExists($id_supplier))
|
||||
$this->errors[] = sprintf($this->l('Supplier ID (%d) is not valid (at line %d).'), $id_supplier, $current_line + 1);
|
||||
$error = sprintf($this->l('Supplier ID (%d) is not valid (at line %d).'), $id_supplier, $current_line + 1);
|
||||
if (!Language::getLanguage($id_lang))
|
||||
$this->errors[] = sprintf($this->l('Lang ID (%d) is not valid (at line %d).'), $id_lang, $current_line + 1);
|
||||
$error = sprintf($this->l('Lang ID (%d) is not valid (at line %d).'), $id_lang, $current_line + 1);
|
||||
if (!Warehouse::exists($id_warehouse))
|
||||
$this->errors[] = sprintf($this->l('Warehouse ID (%d) is not valid (at line %d).'), $id_warehouse, $current_line + 1);
|
||||
$error = sprintf($this->l('Warehouse ID (%d) is not valid (at line %d).'), $id_warehouse, $current_line + 1);
|
||||
if (!Currency::getCurrency($id_currency))
|
||||
$this->errors[] = sprintf($this->l('Currency ID (%d) is not valid (at line %d).'), $id_currency, $current_line + 1);
|
||||
$error = sprintf($this->l('Currency ID (%d) is not valid (at line %d).'), $id_currency, $current_line + 1);
|
||||
if (empty($supply_order->reference) && SupplyOrder::exists($reference))
|
||||
$this->errors[] = sprintf($this->l('Reference (%s) already exists (at line %d).'), $reference, $current_line + 1);
|
||||
$error = sprintf($this->l('Reference (%s) already exists (at line %d).'), $reference, $current_line + 1);
|
||||
if (!empty($supply_order->reference) && ($supply_order->reference != $reference && SupplyOrder::exists($reference)))
|
||||
$this->errors[] = sprintf($this->l('Reference (%s) already exists (at line %d).'), $reference, $current_line + 1);
|
||||
$error = sprintf($this->l('Reference (%s) already exists (at line %d).'), $reference, $current_line + 1);
|
||||
if (!Validate::isDateFormat($date_delivery_expected))
|
||||
$this->errors[] = sprintf($this->l('Date (%s) is not valid (at line %d). Format: %s.'), $date_delivery_expected,
|
||||
$current_line + 1, $this->l('YYYY-MM-DD'));
|
||||
$error = sprintf($this->l('Date (%s) is not valid (at line %d). Format: %s.'), $date_delivery_expected, $current_line + 1, $this->l('YYYY-MM-DD'));
|
||||
else if (new DateTime($date_delivery_expected) <= new DateTime('yesterday'))
|
||||
$this->errors[] = sprintf($this->l('Date (%s) cannot be in the past (at line %d). Format: %s.'), $date_delivery_expected,
|
||||
$current_line + 1, $this->l('YYYY-MM-DD'));
|
||||
$error = sprintf($this->l('Date (%s) cannot be in the past (at line %d). Format: %s.'), $date_delivery_expected, $current_line + 1, $this->l('YYYY-MM-DD'));
|
||||
if ($discount_rate < 0 || $discount_rate > 100)
|
||||
$this->errors[] = sprintf($this->l('Discount rate (%d) is not valid (at line %d). %s.'), $discount_rate,
|
||||
$current_line + 1, $this->l('Format: Between 0 and 100'));
|
||||
$error = sprintf($this->l('Discount rate (%d) is not valid (at line %d). %s.'), $discount_rate, $current_line + 1, $this->l('Format: Between 0 and 100'));
|
||||
if ($supply_order->id > 0 && !$supply_order->isEditable())
|
||||
$this->errors[] = sprintf($this->l('Supply Order (%d) is not editable (at line %d).'), $supply_order->id, $current_line + 1);
|
||||
$error = sprintf($this->l('Supply Order (%d) is not editable (at line %d).'), $supply_order->id, $current_line + 1);
|
||||
|
||||
// if no errors, sets supply order
|
||||
if (empty($this->errors))
|
||||
if (empty($error))
|
||||
{
|
||||
// adds parameters
|
||||
$info['id_ref_currency'] = (int)Currency::getDefaultCurrency()->id;
|
||||
@@ -2523,8 +2654,10 @@ class AdminImportControllerCore extends AdminController
|
||||
AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $supply_order);
|
||||
|
||||
// updatesd($supply_order);
|
||||
|
||||
$res = true;
|
||||
if ($supply_order->id > 0)
|
||||
|
||||
if ((int)$supply_order->id && ($supply_order->exists((int)$supply_order->id) || $supply_order->exists($supply_order->reference)))
|
||||
$res &= $supply_order->update();
|
||||
else
|
||||
$res &= $supply_order->add();
|
||||
@@ -2533,6 +2666,8 @@ class AdminImportControllerCore extends AdminController
|
||||
if (!$res)
|
||||
$this->errors[] = sprintf($this->l('Supply Order could not be saved (at line %d).'), $current_line + 1);
|
||||
}
|
||||
else
|
||||
$this->errors[] = $error;
|
||||
}
|
||||
|
||||
// closes
|
||||
@@ -2658,6 +2793,8 @@ class AdminImportControllerCore extends AdminController
|
||||
|
||||
protected function getNbrColumn($handle, $glue)
|
||||
{
|
||||
if (!is_resource($handle))
|
||||
return false;
|
||||
$tmp = fgetcsv($handle, MAX_LINE_SIZE, $glue);
|
||||
AdminImportController::rewindBomAware($handle);
|
||||
return count($tmp);
|
||||
@@ -2672,7 +2809,10 @@ class AdminImportControllerCore extends AdminController
|
||||
|
||||
protected function openCsvFile()
|
||||
{
|
||||
$handle = fopen(_PS_ADMIN_DIR_.'/import/'.strval(preg_replace('/\.{2,}/', '.', Tools::getValue('csv'))), 'r');
|
||||
$file = _PS_ADMIN_DIR_.'/import/'.strval(preg_replace('/\.{2,}/', '.', Tools::getValue('csv')));
|
||||
$handle = false;
|
||||
if (is_file($file) && is_readable($file))
|
||||
$handle = fopen($file, 'r');
|
||||
|
||||
if (!$handle)
|
||||
$this->errors[] = Tools::displayError('Cannot read the .CSV file');
|
||||
@@ -2787,6 +2927,9 @@ class AdminImportControllerCore extends AdminController
|
||||
if (preg_match('/^[0-9]+(\-(.*))?\.jpg$/', $d))
|
||||
unlink(_PS_SUPP_IMG_DIR_.$d);
|
||||
break;
|
||||
case $this->entities[$this->l('Alias')]:
|
||||
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'alias`');
|
||||
break;
|
||||
}
|
||||
Image::clearTmpDir();
|
||||
return true;
|
||||
@@ -2811,7 +2954,7 @@ class AdminImportControllerCore extends AdminController
|
||||
|
||||
if (Tools::isSubmit('submitFileUpload'))
|
||||
{
|
||||
$path = _PS_ADMIN_DIR_.'/import/'.date('Ymdhis').'-';
|
||||
$path = _PS_ADMIN_DIR_.'/import/'.date('YmdHis').'-';
|
||||
if (isset($_FILES['file']) && !empty($_FILES['file']['error']))
|
||||
{
|
||||
switch ($_FILES['file']['error'])
|
||||
@@ -2885,6 +3028,9 @@ class AdminImportControllerCore extends AdminController
|
||||
$this->supplierImport();
|
||||
$this->clearSmartyCache();
|
||||
break;
|
||||
case $this->entities[$import_type = $this->l('Alias')]:
|
||||
$this->aliasImport();
|
||||
break;
|
||||
}
|
||||
|
||||
// @since 1.5.0
|
||||
@@ -3002,3 +3148,4 @@ class AdminImportControllerCore extends AdminController
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -225,6 +225,12 @@ class AdminMetaControllerCore extends AdminController
|
||||
public function renderForm()
|
||||
{
|
||||
$files = Meta::getPages(true, ($this->object->page ? $this->object->page : false));
|
||||
|
||||
$is_index = false;
|
||||
foreach ($this->object->url_rewrite as $rewrite)
|
||||
if($is_index != true)
|
||||
$is_index = ($this->object->page == 'index' && empty($rewrite)) ? true : false;
|
||||
|
||||
$pages = array(
|
||||
'common' => array(
|
||||
'name' => $this->l('Default pages'),
|
||||
@@ -312,6 +318,7 @@ class AdminMetaControllerCore extends AdminController
|
||||
'name' => 'url_rewrite',
|
||||
'lang' => true,
|
||||
'required' => true,
|
||||
'disabled' => (bool)$is_index,
|
||||
'hint' => array(
|
||||
$this->l('Only letters and hyphens are allowed'),
|
||||
$this->l('e.g. "contacts" for http://mysite.com/shop/contacts to redirect to http://mysite.com/shop/contact-form.php'),
|
||||
@@ -404,7 +411,7 @@ class AdminMetaControllerCore extends AdminController
|
||||
{
|
||||
fwrite($write_fd, "# Directories\n");
|
||||
foreach ($this->rb_data['Directories'] as $dir)
|
||||
fwrite($write_fd, 'Disallow: /*'.$dir."\n");
|
||||
fwrite($write_fd, 'Disallow: */'.$dir."\n");
|
||||
}
|
||||
|
||||
// Files
|
||||
|
||||
@@ -829,7 +829,7 @@ class AdminModulesControllerCore extends AdminController
|
||||
|
||||
if (count($module_errors))
|
||||
{
|
||||
$html_error = '<ul style="line-height:20px">';
|
||||
$html_error = '<ul>';
|
||||
foreach ($module_errors as $module_error)
|
||||
{
|
||||
$html_error_description = '';
|
||||
|
||||
@@ -317,7 +317,7 @@ class AdminOrdersControllerCore extends AdminController
|
||||
'{shipping_number}' => $order->shipping_number,
|
||||
'{order_name}' => $order->getUniqReference()
|
||||
);
|
||||
if (@Mail::Send((int)$order->id_lang, 'in_transit', Mail::l('Package in transit'), $templateVars,
|
||||
if (@Mail::Send((int)$order->id_lang, 'in_transit', Mail::l('Package in transit', (int)$order->id_lang), $templateVars,
|
||||
$customer->email, $customer->firstname.' '.$customer->lastname, null, null, null, null,
|
||||
_PS_MAIL_DIR_, true, (int)$order->id_shop))
|
||||
{
|
||||
@@ -715,7 +715,7 @@ class AdminOrdersControllerCore extends AdminController
|
||||
@Mail::Send(
|
||||
(int)$order->id_lang,
|
||||
'credit_slip',
|
||||
Mail::l('New credit slip regarding your order', $order->id_lang),
|
||||
Mail::l('New credit slip regarding your order', (int)$order->id_lang),
|
||||
$params,
|
||||
$customer->email,
|
||||
$customer->firstname.' '.$customer->lastname,
|
||||
@@ -1884,7 +1884,7 @@ class AdminOrdersControllerCore extends AdminController
|
||||
Mail::Send(
|
||||
(int)$order->id_lang,
|
||||
'order_changed',
|
||||
Mail::l('Your order has been changed', $order->id_lang),
|
||||
Mail::l('Your order has been changed', (int)$order->id_lang),
|
||||
$data,
|
||||
$order->getCustomer()->email,
|
||||
$order->getCustomer()->firstname.' '.$order->getCustomer()->lastname,
|
||||
|
||||
@@ -129,9 +129,68 @@ class AdminPerformanceControllerCore extends AdminController
|
||||
$this->fields_value['smarty_console_key'] = Configuration::get('PS_SMARTY_CONSOLE_KEY');
|
||||
}
|
||||
|
||||
public function initFieldsetFeaturesDetachables()
|
||||
public function initFieldsetDebugMode()
|
||||
{
|
||||
$this->fields_form[1]['form'] = array(
|
||||
'legend' => array(
|
||||
'title' => $this->l('Debug mode'),
|
||||
'image' => '../img/admin/prefs.gif'
|
||||
),
|
||||
'input' => array(
|
||||
array(
|
||||
'type' => 'radio',
|
||||
'label' => $this->l('Disable non PrestaShop modules'),
|
||||
'name' => 'native_module',
|
||||
'class' => 't',
|
||||
'is_bool' => true,
|
||||
'values' => array(
|
||||
array(
|
||||
'id' => 'native_module_on',
|
||||
'value' => 1,
|
||||
'label' => $this->l('Enabled')
|
||||
),
|
||||
array(
|
||||
'id' => 'native_module_off',
|
||||
'value' => 0,
|
||||
'label' => $this->l('Disabled')
|
||||
)
|
||||
),
|
||||
'desc' => $this->l('Enable or disable non PrestaShop Modules.')
|
||||
),
|
||||
array(
|
||||
'type' => 'radio',
|
||||
'label' => $this->l('Disable all overrides'),
|
||||
'name' => 'overrides',
|
||||
'class' => 't',
|
||||
'is_bool' => true,
|
||||
'values' => array(
|
||||
array(
|
||||
'id' => 'overrides_module_on',
|
||||
'value' => 1,
|
||||
'label' => $this->l('Enabled')
|
||||
),
|
||||
array(
|
||||
'id' => 'overrides_module_off',
|
||||
'value' => 0,
|
||||
'label' => $this->l('Disabled')
|
||||
)
|
||||
),
|
||||
'desc' => $this->l('Enable or disable all classes and controllers overrides')
|
||||
),
|
||||
),
|
||||
'submit' => array(
|
||||
'title' => $this->l(' Save '),
|
||||
'class' => 'button'
|
||||
),
|
||||
);
|
||||
|
||||
$this->fields_value['native_module'] = Configuration::get('PS_DISABLE_NON_NATIVE_MODULE');
|
||||
$this->fields_value['overrides'] = Configuration::get('PS_DISABLE_OVERRIDES');
|
||||
}
|
||||
|
||||
public function initFieldsetFeaturesDetachables()
|
||||
{
|
||||
$this->fields_form[2]['form'] = array(
|
||||
'legend' => array(
|
||||
'title' => $this->l('Optional features'),
|
||||
'icon' => 'icon-puzzle-piece'
|
||||
@@ -190,7 +249,7 @@ class AdminPerformanceControllerCore extends AdminController
|
||||
|
||||
public function initFieldsetCCC()
|
||||
{
|
||||
$this->fields_form[2]['form'] = array(
|
||||
$this->fields_form[3]['form'] = array(
|
||||
'legend' => array(
|
||||
'title' => $this->l('CCC (Combine, Compress and Cache)'),
|
||||
'icon' => 'icon-fullscreen'
|
||||
@@ -300,7 +359,7 @@ class AdminPerformanceControllerCore extends AdminController
|
||||
|
||||
public function initFieldsetMediaServer()
|
||||
{
|
||||
$this->fields_form[3]['form'] = array(
|
||||
$this->fields_form[4]['form'] = array(
|
||||
'legend' => array(
|
||||
'title' => $this->l('Media servers (use only with CCC)'),
|
||||
'icon' => 'icon-link'
|
||||
@@ -346,7 +405,8 @@ class AdminPerformanceControllerCore extends AdminController
|
||||
$warning_mcrypt = str_replace('[a]', '<a href="http://www.php.net/manual/'.substr($php_lang, 0, 2).'/book.mcrypt.php" target="_blank">', $warning_mcrypt);
|
||||
$warning_mcrypt = str_replace('[/a]', '</a>', $warning_mcrypt);
|
||||
|
||||
$this->fields_form[4]['form'] = array(
|
||||
$this->fields_form[5]['form'] = array(
|
||||
|
||||
'legend' => array(
|
||||
'title' => $this->l('Ciphering'),
|
||||
'icon' => 'icon-desktop'
|
||||
@@ -399,7 +459,7 @@ class AdminPerformanceControllerCore extends AdminController
|
||||
|
||||
$warning_fs = ' '.sprintf($this->l('(the directory %s must be writable)'), realpath(_PS_CACHEFS_DIRECTORY_));
|
||||
|
||||
$this->fields_form[5]['form'] = array(
|
||||
$this->fields_form[6]['form'] = array(
|
||||
'legend' => array(
|
||||
'title' => $this->l('Caching'),
|
||||
'icon' => 'icon-desktop'
|
||||
@@ -481,12 +541,19 @@ class AdminPerformanceControllerCore extends AdminController
|
||||
{
|
||||
// Initialize fieldset for a form
|
||||
$this->initFieldsetSmarty();
|
||||
|
||||
if (_PS_MODE_DEV_)
|
||||
$this->initFieldsetDebugMode();
|
||||
|
||||
$this->initFieldsetFeaturesDetachables();
|
||||
$this->initFieldsetCCC();
|
||||
$this->initFieldsetMediaServer();
|
||||
$this->initFieldsetCiphering();
|
||||
$this->initFieldsetCaching();
|
||||
|
||||
// Reindex fields
|
||||
$this->fields_form = array_values($this->fields_form);
|
||||
|
||||
// Activate multiple fieldset
|
||||
$this->multiple_fieldsets = true;
|
||||
|
||||
@@ -781,6 +848,17 @@ class AdminPerformanceControllerCore extends AdminController
|
||||
Autoload::getInstance()->generateIndex();
|
||||
}
|
||||
|
||||
if (Tools::isSubmit('submitAddconfiguration') && _PS_MODE_DEV_)
|
||||
{
|
||||
Configuration::updateGlobalValue('PS_DISABLE_NON_NATIVE_MODULE', (int)Tools::getValue('native_module'));
|
||||
Configuration::updateGlobalValue('PS_DISABLE_OVERRIDES', (int)Tools::getValue('overrides'));
|
||||
|
||||
if (Tools::getValue('overrides'))
|
||||
Autoload::getInstance()->_include_override_path = false;
|
||||
|
||||
Autoload::getInstance()->generateIndex();
|
||||
}
|
||||
|
||||
if ($redirectAdmin && (!isset($this->errors) || !count($this->errors)))
|
||||
{
|
||||
Hook::exec('action'.get_class($this).ucfirst($this->action).'After', array('controller' => $this, 'return' => ''));
|
||||
|
||||
@@ -180,7 +180,7 @@ class AdminProductsControllerCore extends AdminController
|
||||
LEFT JOIN `'._DB_PREFIX_.'shop` shop ON (shop.id_shop = '.$id_shop.')
|
||||
LEFT JOIN `'._DB_PREFIX_.'image_shop` image_shop ON (image_shop.`id_image` = i.`id_image` AND image_shop.`cover` = 1 AND image_shop.id_shop = '.$id_shop.')';
|
||||
|
||||
$this->_select .= 'shop.name as shopname, ';
|
||||
$this->_select .= 'shop.name as shopname, a.id_shop_default, ';
|
||||
$this->_select .= 'MAX('.$alias_image.'.id_image) id_image, cl.name `name_category`, '.$alias.'.`price`, 0 AS price_final, sav.`quantity` as sav_quantity, '.$alias.'.`active`';
|
||||
|
||||
if ($join_category)
|
||||
@@ -331,12 +331,17 @@ class AdminProductsControllerCore extends AdminController
|
||||
$nb = count($this->_list);
|
||||
if ($this->_list)
|
||||
{
|
||||
$context = $this->context->cloneContext();
|
||||
$context->shop = clone($context->shop);
|
||||
/* update product final price */
|
||||
for ($i = 0; $i < $nb; $i++)
|
||||
{
|
||||
if (Context::getContext()->shop->getContext() != Shop::CONTEXT_SHOP)
|
||||
$context->shop = new Shop((int)$this->_list[$i]['id_shop_default']);
|
||||
|
||||
// convert price with the currency from context
|
||||
$this->_list[$i]['price'] = Tools::convertPrice($this->_list[$i]['price'], $this->context->currency, true, $this->context);
|
||||
$this->_list[$i]['price_tmp'] = Product::getPriceStatic($this->_list[$i]['id_product'], true, null, 2, null, false, true, 1, true);
|
||||
$this->_list[$i]['price_tmp'] = Product::getPriceStatic($this->_list[$i]['id_product'], true, null, 2, null, false, true, 1, true, null, null, null, $nothing, true, true, $context);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -367,9 +372,9 @@ class AdminProductsControllerCore extends AdminController
|
||||
{
|
||||
if (is_array($default_product->$field_name))
|
||||
foreach ($default_product->$field_name as $key => $value)
|
||||
$this->object->{$field_name}[$key] = ObjectModel::formatValue($value, $def['fields'][$field_name]['type']);
|
||||
$this->object->{$field_name}[$key] = $value;
|
||||
else
|
||||
$this->object->$field_name = ObjectModel::formatValue($default_product->$field_name, $def['fields'][$field_name]['type']);
|
||||
$this->object->$field_name = $default_product->$field_name;
|
||||
}
|
||||
}
|
||||
$this->object->loadStockData();
|
||||
@@ -1337,7 +1342,6 @@ class AdminProductsControllerCore extends AdminController
|
||||
if (isset($result['success']))
|
||||
{
|
||||
$obj = new Image((int)$result['success']['id_image']);
|
||||
|
||||
// Associate image to shop from context
|
||||
$shops = Shop::getContextListShopID();
|
||||
$obj->associateTo($shops);
|
||||
@@ -1351,6 +1355,7 @@ class AdminProductsControllerCore extends AdminController
|
||||
'id'=>$obj->id,
|
||||
'path' => $obj->getExistingImgPath(),
|
||||
'position' => $obj->position,
|
||||
'legend' => $obj->legend,
|
||||
'cover' => $obj->cover,
|
||||
'shops' => $json_shops,
|
||||
);
|
||||
@@ -3676,6 +3681,7 @@ class AdminProductsControllerCore extends AdminController
|
||||
foreach ($images as $k => $image)
|
||||
$images[$k] = new Image($image['id_image']);
|
||||
|
||||
|
||||
if ($this->context->shop->getContext() == Shop::CONTEXT_SHOP)
|
||||
$current_shop_id = (int)$this->context->shop->id;
|
||||
else
|
||||
@@ -3694,8 +3700,16 @@ class AdminProductsControllerCore extends AdminController
|
||||
'max_image_size' => $this->max_image_size / 1024 / 1024,
|
||||
'up_filename' => (string)Tools::getValue('virtual_product_filename_attribute'),
|
||||
'currency' => $this->context->currency,
|
||||
'current_shop_id' => $current_shop_id
|
||||
'current_shop_id' => $current_shop_id,
|
||||
'languages' => $this->_languages,
|
||||
'default_language' => (int)Configuration::get('PS_LANG_DEFAULT')
|
||||
));
|
||||
|
||||
$type = ImageType::getByNameNType('%', 'products', 'height');
|
||||
if (isset($type['name']))
|
||||
$data->assign('imageType', $type['name']);
|
||||
else
|
||||
$data->assign('imageType', 'small_default');
|
||||
}
|
||||
else
|
||||
$this->displayWarning($this->l('You must save the product in this shop before adding images.'));
|
||||
@@ -3752,7 +3766,11 @@ class AdminProductsControllerCore extends AdminController
|
||||
$data->assign('available_date', ($this->getFieldValue($product, 'available_date') != 0) ? stripslashes(htmlentities($this->getFieldValue($product, 'available_date'), $this->context->language->id)) : '0000-00-00');
|
||||
|
||||
$i = 0;
|
||||
$data->assign('imageType', ImageType::getByNameNType('small_default', 'products'));
|
||||
$type = ImageType::getByNameNType('%', 'products', 'height');
|
||||
if (isset($type['name']))
|
||||
$data->assign('imageType', $type['name']);
|
||||
else
|
||||
$data->assign('imageType', 'small_default');
|
||||
$data->assign('imageWidth', (isset($image_type['width']) ? (int)($image_type['width']) : 64) + 25);
|
||||
foreach ($images as $k => $image)
|
||||
{
|
||||
|
||||
@@ -1410,7 +1410,9 @@ class AdminSupplyOrdersControllerCore extends AdminController
|
||||
true,
|
||||
$supply_order->id);
|
||||
|
||||
if (!$res)
|
||||
if ($res)
|
||||
StockAvailable::synchronize($supply_order_detail->id_product);
|
||||
else
|
||||
$this->errors[] = Tools::displayError($this->l('Something went wrong when adding products to the warehouse.'));
|
||||
|
||||
$location = Warehouse::getProductLocation($supply_order_detail->id_product,
|
||||
|
||||
@@ -1259,6 +1259,8 @@ class AdminTranslationsControllerCore extends AdminController
|
||||
// Set the path of selected theme
|
||||
if ($this->theme_selected)
|
||||
define('_PS_THEME_SELECTED_DIR_', _PS_ROOT_DIR_.'/themes/'.$this->theme_selected.'/');
|
||||
else
|
||||
define('_PS_THEME_SELECTED_DIR_', '');
|
||||
|
||||
// Get type of translation
|
||||
if (($type = Tools::getValue('type')) && !is_array($type))
|
||||
|
||||
@@ -227,19 +227,19 @@ class AddressControllerCore extends FrontController
|
||||
else // Update cart address
|
||||
$this->context->cart->autosetProductAddress();
|
||||
|
||||
if ((bool)(Tools::getValue('select_address', false)) == true OR Tools::getValue('type') == 'invoice' && Configuration::get('PS_ORDER_PROCESS_TYPE'))
|
||||
{
|
||||
$this->context->cart->id_address_invoice = (int)$address->id;
|
||||
$this->context->cart->update();
|
||||
}
|
||||
|
||||
if ((bool)(Tools::getValue('select_address', false)) == true OR (Tools::getValue('type') == 'invoice' && Configuration::get('PS_ORDER_PROCESS_TYPE')))
|
||||
$this->context->cart->id_address_invoice = (int)$address->id;
|
||||
elseif (Configuration::get('PS_ORDER_PROCESS_TYPE'))
|
||||
$this->context->cart->id_address_invoice = (int)$this->context->cart->id_address_delivery;
|
||||
$this->context->cart->update();
|
||||
|
||||
if ($this->ajax)
|
||||
{
|
||||
$return = array(
|
||||
'hasError' => (bool)$this->errors,
|
||||
'errors' => $this->errors,
|
||||
'id_address_delivery' => $this->context->cart->id_address_delivery,
|
||||
'id_address_invoice' => $this->context->cart->id_address_invoice
|
||||
'id_address_delivery' => (int)$this->context->cart->id_address_delivery,
|
||||
'id_address_invoice' => (int)$this->context->cart->id_address_invoice
|
||||
);
|
||||
die(Tools::jsonEncode($return));
|
||||
}
|
||||
@@ -247,6 +247,8 @@ class AddressControllerCore extends FrontController
|
||||
// Redirect to old page or current page
|
||||
if ($back = Tools::getValue('back'))
|
||||
{
|
||||
if ($back == Tools::secureReferrer(Tools::getValue('back')))
|
||||
Tools::redirect(html_entity_decode($back));
|
||||
$mod = Tools::getValue('mod');
|
||||
Tools::redirect('index.php?controller='.$back.($mod ? '&back='.$mod : ''));
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ class AuthControllerCore extends FrontController
|
||||
if (!empty($key))
|
||||
$back .= (strpos($back, '?') !== false ? '&' : '?').'key='.$key;
|
||||
if (!empty($back))
|
||||
$this->context->smarty->assign('back', Tools::safeOutput($back));
|
||||
$this->context->smarty->assign('back', Tools::safeOutput(Tools::secureReferrer($back)));
|
||||
|
||||
if (Tools::getValue('display_guest_checkout'))
|
||||
{
|
||||
@@ -329,7 +329,7 @@ class AuthControllerCore extends FrontController
|
||||
|
||||
if (!$this->ajax)
|
||||
{
|
||||
if ($back = Tools::getValue('back'))
|
||||
if (($back = Tools::getValue('back')) && $back == Tools::secureReferrer($back))
|
||||
Tools::redirect(html_entity_decode($back));
|
||||
Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : 'my-account'));
|
||||
}
|
||||
@@ -394,7 +394,10 @@ class AuthControllerCore extends FrontController
|
||||
$firstnameAddress = Tools::getValue('firstname');
|
||||
$_POST['lastname'] = Tools::getValue('customer_lastname');
|
||||
$_POST['firstname'] = Tools::getValue('customer_firstname');
|
||||
|
||||
$addresses_types = array('address');
|
||||
if (!Configuration::get('PS_ORDER_PROCESS_TYPE') && Configuration::get('PS_GUEST_CHECKOUT_ENABLED') && Tools::getValue('invoice_address'))
|
||||
$addresses_types[] = 'address_invoice';
|
||||
|
||||
$error_phone = false;
|
||||
if (Configuration::get('PS_ONE_PHONE_AT_LEAST'))
|
||||
{
|
||||
@@ -404,10 +407,8 @@ class AuthControllerCore extends FrontController
|
||||
$error_phone = true;
|
||||
}
|
||||
elseif (((Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && Configuration::get('PS_ORDER_PROCESS_TYPE'))
|
||||
|| (Configuration::get('PS_ORDER_PROCESS_TYPE') && !Tools::getValue('email_create')))
|
||||
&& (!Tools::getValue('phone') && !Tools::getValue('phone_mobile')))
|
||||
$error_phone = true;
|
||||
elseif (((Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && Configuration::get('PS_ORDER_PROCESS_TYPE') && Tools::getValue('email_create')))
|
||||
|| (Configuration::get('PS_ORDER_PROCESS_TYPE') && !Tools::getValue('email_create'))
|
||||
|| (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && Tools::getValue('email_create')))
|
||||
&& (!Tools::getValue('phone') && !Tools::getValue('phone_mobile')))
|
||||
$error_phone = true;
|
||||
}
|
||||
@@ -465,7 +466,7 @@ class AuthControllerCore extends FrontController
|
||||
die(Tools::jsonEncode($return));
|
||||
}
|
||||
|
||||
if ($back = Tools::getValue('back'))
|
||||
if (($back = Tools::getValue('back')) && $back == Tools::secureReferrer($back))
|
||||
Tools::redirect(html_entity_decode($back));
|
||||
// redirection: if cart is not empty : redirection to the cart
|
||||
if (count($this->context->cart->getProducts(true)) > 0)
|
||||
@@ -482,37 +483,57 @@ class AuthControllerCore extends FrontController
|
||||
}
|
||||
else // if registration type is in one step, we save the address
|
||||
{
|
||||
// Preparing address
|
||||
$address = new Address();
|
||||
$_POST['lastname'] = $lastnameAddress;
|
||||
$_POST['firstname'] = $firstnameAddress;
|
||||
$address->id_customer = 1;
|
||||
$this->errors = array_unique(array_merge($this->errors, $address->validateController()));
|
||||
|
||||
// US customer: normalize the address
|
||||
if ($address->id_country == Country::getByIso('US') && Configuration::get('PS_TAASC'))
|
||||
$post_back = $_POST;
|
||||
// Preparing addresses
|
||||
foreach($addresses_types as $addresses_type)
|
||||
{
|
||||
include_once(_PS_TAASC_PATH_.'AddressStandardizationSolution.php');
|
||||
$normalize = new AddressStandardizationSolution;
|
||||
$address->address1 = $normalize->AddressLineStandardization($address->address1);
|
||||
$address->address2 = $normalize->AddressLineStandardization($address->address2);
|
||||
$$addresses_type = new Address();
|
||||
$$addresses_type->id_customer = 1;
|
||||
|
||||
if ($addresses_type == 'address_invoice')
|
||||
foreach($_POST as $key => &$post)
|
||||
if (isset($_POST[$key.'_invoice']))
|
||||
$post = $_POST[$key.'_invoice'];
|
||||
|
||||
$this->errors = array_unique(array_merge($this->errors, $$addresses_type->validateController()));
|
||||
if ($addresses_type == 'address_invoice')
|
||||
$_POST = $post_back;
|
||||
|
||||
// US customer: normalize the address
|
||||
if ($$addresses_type->id_country == Country::getByIso('US') && Configuration::get('PS_TAASC'))
|
||||
{
|
||||
include_once(_PS_TAASC_PATH_.'AddressStandardizationSolution.php');
|
||||
$normalize = new AddressStandardizationSolution;
|
||||
$$addresses_type->address1 = $normalize->AddressLineStandardization($$addresses_type->address1);
|
||||
$$addresses_type->address2 = $normalize->AddressLineStandardization($$addresses_type->address2);
|
||||
}
|
||||
|
||||
if (!($country = new Country($$addresses_type->id_country)) || !Validate::isLoadedObject($country))
|
||||
$this->errors[] = Tools::displayError('Country cannot be loaded with address->id_country');
|
||||
$postcode = Tools::getValue('postcode');
|
||||
/* Check zip code format */
|
||||
if ($country->zip_code_format && !$country->checkZipCode($postcode))
|
||||
$this->errors[] = sprintf(Tools::displayError('The Zip/Postal code you\'ve entered is invalid. It must follow this format: %s'), str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $country->zip_code_format))));
|
||||
elseif(empty($postcode) && $country->need_zip_code)
|
||||
$this->errors[] = Tools::displayError('A Zip / Postal code is required.');
|
||||
elseif ($postcode && !Validate::isPostCode($postcode))
|
||||
$this->errors[] = Tools::displayError('The Zip / Postal code is invalid.');
|
||||
|
||||
if ($country->need_identification_number && (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni'))))
|
||||
$this->errors[] = Tools::displayError('The identification number is incorrect or has already been used.');
|
||||
elseif (!$country->need_identification_number)
|
||||
$$addresses_type->dni = null;
|
||||
|
||||
if (Tools::isSubmit('submitAccount') || Tools::isSubmit('submitGuestAccount'))
|
||||
if (!($country = new Country($$addresses_type->id_country, Configuration::get('PS_LANG_DEFAULT'))) || !Validate::isLoadedObject($country))
|
||||
$this->errors[] = Tools::displayError('Country is invalid');
|
||||
$contains_state = isset($country) && is_object($country) ? (int)$country->contains_states: 0;
|
||||
$id_state = isset($$addresses_type) && is_object($$addresses_type) ? (int)$$addresses_type->id_state: 0;
|
||||
if ((Tools::isSubmit('submitAccount')|| Tools::isSubmit('submitGuestAccount')) && $contains_state && !$id_state)
|
||||
$this->errors[] = Tools::displayError('This country requires you to choose a State.');
|
||||
}
|
||||
|
||||
if (!($country = new Country($address->id_country)) || !Validate::isLoadedObject($country))
|
||||
$this->errors[] = Tools::displayError('Country cannot be loaded with address->id_country');
|
||||
$postcode = Tools::getValue('postcode');
|
||||
/* Check zip code format */
|
||||
if ($country->zip_code_format && !$country->checkZipCode($postcode))
|
||||
$this->errors[] = sprintf(Tools::displayError('The Zip/Postal code you\'ve entered is invalid. It must follow this format: %s'), str_replace('C', $country->iso_code, str_replace('N', '0', str_replace('L', 'A', $country->zip_code_format))));
|
||||
elseif(empty($postcode) && $country->need_zip_code)
|
||||
$this->errors[] = Tools::displayError('A Zip / Postal code is required.');
|
||||
elseif ($postcode && !Validate::isPostCode($postcode))
|
||||
$this->errors[] = Tools::displayError('The Zip / Postal code is invalid.');
|
||||
|
||||
if ($country->need_identification_number && (!Tools::getValue('dni') || !Validate::isDniLite(Tools::getValue('dni'))))
|
||||
$this->errors[] = Tools::displayError('The identification number is incorrect or has already been used.');
|
||||
elseif (!$country->need_identification_number)
|
||||
$address->dni = null;
|
||||
}
|
||||
|
||||
if (!@checkdate(Tools::getValue('months'), Tools::getValue('days'), Tools::getValue('years')) && !(Tools::getValue('months') == '' && Tools::getValue('days') == '' && Tools::getValue('years') == ''))
|
||||
@@ -531,88 +552,89 @@ class AuthControllerCore extends FrontController
|
||||
|
||||
if (!count($this->errors))
|
||||
{
|
||||
// if registration type is in one step, we save the address
|
||||
if (Tools::isSubmit('submitAccount') || Tools::isSubmit('submitGuestAccount'))
|
||||
if (!($country = new Country($address->id_country, Configuration::get('PS_LANG_DEFAULT'))) || !Validate::isLoadedObject($country))
|
||||
die(Tools::displayError());
|
||||
$contains_state = isset($country) && is_object($country) ? (int)$country->contains_states: 0;
|
||||
$id_state = isset($address) && is_object($address) ? (int)$address->id_state: 0;
|
||||
if ((Tools::isSubmit('submitAccount')|| Tools::isSubmit('submitGuestAccount')) && $contains_state && !$id_state)
|
||||
$this->errors[] = Tools::displayError('This country requires you to choose a State.');
|
||||
$customer->active = 1;
|
||||
// New Guest customer
|
||||
if (Tools::isSubmit('is_new_customer'))
|
||||
$customer->is_guest = !Tools::getValue('is_new_customer', 1);
|
||||
else
|
||||
$customer->is_guest = 0;
|
||||
if (!$customer->add())
|
||||
$this->errors[] = Tools::displayError('An error occurred while creating your account.');
|
||||
else
|
||||
{
|
||||
$customer->active = 1;
|
||||
// New Guest customer
|
||||
if (Tools::isSubmit('is_new_customer'))
|
||||
$customer->is_guest = !Tools::getValue('is_new_customer', 1);
|
||||
else
|
||||
$customer->is_guest = 0;
|
||||
if (!$customer->add())
|
||||
$this->errors[] = Tools::displayError('An error occurred while creating your account.');
|
||||
else
|
||||
foreach($addresses_types as $addresses_type)
|
||||
{
|
||||
$address->id_customer = (int)$customer->id;
|
||||
$this->errors = array_unique(array_merge($this->errors, $address->validateController()));
|
||||
if (!count($this->errors) && (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') || $this->ajax || Tools::isSubmit('submitGuestAccount')) && !$address->add())
|
||||
$$addresses_type->id_customer = (int)$customer->id;
|
||||
if ($addresses_type == 'address_invoice')
|
||||
foreach($_POST as $key => &$post)
|
||||
if (isset($_POST[$key.'_invoice']))
|
||||
$post = $_POST[$key.'_invoice'];
|
||||
|
||||
$this->errors = array_unique(array_merge($this->errors, $$addresses_type->validateController()));
|
||||
if ($addresses_type == 'address_invoice')
|
||||
$_POST = $post_back;
|
||||
if (!count($this->errors) && (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') || $this->ajax || Tools::isSubmit('submitGuestAccount')) && !$$addresses_type->add())
|
||||
$this->errors[] = Tools::displayError('An error occurred while creating your address.');
|
||||
}
|
||||
if (!count($this->errors))
|
||||
{
|
||||
if (!$customer->is_guest)
|
||||
{
|
||||
$this->context->customer = $customer;
|
||||
$customer->cleanGroups();
|
||||
// we add the guest customer in the default customer group
|
||||
$customer->addGroups(array((int)Configuration::get('PS_CUSTOMER_GROUP')));
|
||||
if (!$this->sendConfirmationMail($customer))
|
||||
$this->errors[] = Tools::displayError('The email cannot be sent.');
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!$customer->is_guest)
|
||||
{
|
||||
$this->context->customer = $customer;
|
||||
$customer->cleanGroups();
|
||||
// we add the guest customer in the default customer group
|
||||
$customer->addGroups(array((int)Configuration::get('PS_CUSTOMER_GROUP')));
|
||||
if (!$this->sendConfirmationMail($customer))
|
||||
$this->errors[] = Tools::displayError('The email cannot be sent.');
|
||||
}
|
||||
else
|
||||
{
|
||||
$customer->cleanGroups();
|
||||
// we add the guest customer in the guest customer group
|
||||
$customer->addGroups(array((int)Configuration::get('PS_GUEST_GROUP')));
|
||||
}
|
||||
$this->updateContext($customer);
|
||||
$this->context->cart->id_address_delivery = Address::getFirstCustomerAddressId((int)$customer->id);
|
||||
$this->context->cart->id_address_invoice = Address::getFirstCustomerAddressId((int)$customer->id);
|
||||
|
||||
// If a logged guest logs in as a customer, the cart secure key was already set and needs to be updated
|
||||
$this->context->cart->update();
|
||||
|
||||
// Avoid articles without delivery address on the cart
|
||||
$this->context->cart->autosetProductAddress();
|
||||
|
||||
Hook::exec('actionCustomerAccountAdd', array(
|
||||
'_POST' => $_POST,
|
||||
'newCustomer' => $customer
|
||||
));
|
||||
if ($this->ajax)
|
||||
{
|
||||
$return = array(
|
||||
'hasError' => !empty($this->errors),
|
||||
'errors' => $this->errors,
|
||||
'isSaved' => true,
|
||||
'id_customer' => (int)$this->context->cookie->id_customer,
|
||||
'id_address_delivery' => $this->context->cart->id_address_delivery,
|
||||
'id_address_invoice' => $this->context->cart->id_address_invoice,
|
||||
'token' => Tools::getToken(false)
|
||||
);
|
||||
die(Tools::jsonEncode($return));
|
||||
}
|
||||
// if registration type is in two steps, we redirect to register address
|
||||
if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount'))
|
||||
Tools::redirect('index.php?controller=address');
|
||||
|
||||
if ($back = Tools::getValue('back'))
|
||||
Tools::redirect(html_entity_decode($back));
|
||||
|
||||
// redirection: if cart is not empty : redirection to the cart
|
||||
if (count($this->context->cart->getProducts(true)) > 0)
|
||||
Tools::redirect('index.php?controller=order&multi-shipping='.(int)Tools::getValue('multi-shipping'));
|
||||
// else : redirection to the account
|
||||
else
|
||||
Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : 'my-account'));
|
||||
$customer->cleanGroups();
|
||||
// we add the guest customer in the guest customer group
|
||||
$customer->addGroups(array((int)Configuration::get('PS_GUEST_GROUP')));
|
||||
}
|
||||
$this->updateContext($customer);
|
||||
$this->context->cart->id_address_delivery = (int)Address::getFirstCustomerAddressId((int)$customer->id);
|
||||
$this->context->cart->id_address_invoice = (int)Address::getFirstCustomerAddressId((int)$customer->id);
|
||||
if (isset($address_invoice) && Validate::isLoadedObject($address_invoice))
|
||||
$this->context->cart->id_address_invoice = (int)$address_invoice->id;
|
||||
|
||||
// If a logged guest logs in as a customer, the cart secure key was already set and needs to be updated
|
||||
$this->context->cart->update();
|
||||
|
||||
// Avoid articles without delivery address on the cart
|
||||
$this->context->cart->autosetProductAddress();
|
||||
|
||||
Hook::exec('actionCustomerAccountAdd', array(
|
||||
'_POST' => $_POST,
|
||||
'newCustomer' => $customer
|
||||
));
|
||||
if ($this->ajax)
|
||||
{
|
||||
$return = array(
|
||||
'hasError' => !empty($this->errors),
|
||||
'errors' => $this->errors,
|
||||
'isSaved' => true,
|
||||
'id_customer' => (int)$this->context->cookie->id_customer,
|
||||
'id_address_delivery' => $this->context->cart->id_address_delivery,
|
||||
'id_address_invoice' => $this->context->cart->id_address_invoice,
|
||||
'token' => Tools::getToken(false)
|
||||
);
|
||||
die(Tools::jsonEncode($return));
|
||||
}
|
||||
// if registration type is in two steps, we redirect to register address
|
||||
if (!Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && !$this->ajax && !Tools::isSubmit('submitGuestAccount'))
|
||||
Tools::redirect('index.php?controller=address');
|
||||
|
||||
if (($back = Tools::getValue('back')) && $back == Tools::secureReferrer($back))
|
||||
Tools::redirect(html_entity_decode($back));
|
||||
|
||||
// redirection: if cart is not empty : redirection to the cart
|
||||
if (count($this->context->cart->getProducts(true)) > 0)
|
||||
Tools::redirect('index.php?controller=order&multi-shipping='.(int)Tools::getValue('multi-shipping'));
|
||||
// else : redirection to the account
|
||||
else
|
||||
Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : 'my-account'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,6 +110,9 @@ class CmsControllerCore extends FrontController
|
||||
'content_only' => (int)(Tools::getValue('content_only')),
|
||||
'path' => $path
|
||||
));
|
||||
|
||||
if ($this->cms->indexation == 0)
|
||||
$this->context->smarty->assign('nobots', true);
|
||||
}
|
||||
else if ($this->assignCase == 2)
|
||||
{
|
||||
|
||||
@@ -58,8 +58,8 @@ class OrderControllerCore extends ParentOrderController
|
||||
{
|
||||
$this->step = 0;
|
||||
$this->errors[] = sprintf(
|
||||
Tools::displayError('A minimum purchase total of %s is required in order to validate your order.'),
|
||||
Tools::displayPrice($minimal_purchase, $currency)
|
||||
Tools::displayError('A minimum purchase total of %1s (tax excl.) is required in order to validate your order, current purchase total is %2s (tax excl.).'),
|
||||
Tools::displayPrice($minimal_purchase, $currency), Tools::displayPrice($this->context->cart->getOrderTotal(false, Cart::ONLY_PRODUCTS), $currency)
|
||||
);
|
||||
}
|
||||
if (!$this->context->customer->isLogged(true) && in_array($this->step, array(1, 2, 3)))
|
||||
|
||||
@@ -445,6 +445,21 @@ class OrderOpcControllerCore extends ParentOrderController
|
||||
'phone_mobile_invoice' => Tools::htmlentitiesUTF8($address_invoice->phone_mobile),
|
||||
'id_country_invoice' => (int)($address_invoice->id_country),
|
||||
'id_state_invoice' => (int)($address_invoice->id_state),
|
||||
'id_address_invoice' => $id_address_invoice,
|
||||
'invoice_company' => Tools::htmlentitiesUTF8($address_invoice->company),
|
||||
'invoice_lastname' => Tools::htmlentitiesUTF8($address_invoice->lastname),
|
||||
'invoice_firstname' => Tools::htmlentitiesUTF8($address_invoice->firstname),
|
||||
'invoice_vat_number' => Tools::htmlentitiesUTF8($address_invoice->vat_number),
|
||||
'invoice_dni' => Tools::htmlentitiesUTF8($address_invoice->dni),
|
||||
'invoice_address' => $this->context->cart->id_address_invoice !== $this->context->cart->id_address_delivery,
|
||||
'invoice_address1' => Tools::htmlentitiesUTF8($address_invoice->address1),
|
||||
'invoice_address2' => Tools::htmlentitiesUTF8($address_invoice->address2),
|
||||
'invoice_postcode' => Tools::htmlentitiesUTF8($address_invoice->postcode),
|
||||
'invoice_city' => Tools::htmlentitiesUTF8($address_invoice->city),
|
||||
'invoice_phone' => Tools::htmlentitiesUTF8($address_invoice->phone),
|
||||
'invoice_phone_mobile' => Tools::htmlentitiesUTF8($address_invoice->phone_mobile),
|
||||
'invoice_id_country' => (int)($address_invoice->id_country),
|
||||
'invoice_id_state' => (int)($address_invoice->id_state),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -149,7 +149,7 @@ class ParentOrderControllerCore extends FrontController
|
||||
if ((Configuration::get('PS_ORDER_PROCESS_TYPE') == 0 && Tools::getValue('step') == 1) || Configuration::get('PS_ORDER_PROCESS_TYPE') == 1)
|
||||
$this->addJS(_THEME_JS_DIR_.'order-address.js');
|
||||
$this->addJqueryPlugin('fancybox');
|
||||
if ((int)(Configuration::get('PS_BLOCK_CART_AJAX')) || Configuration::get('PS_ORDER_PROCESS_TYPE') == 1)
|
||||
if ((int)(Configuration::get('PS_BLOCK_CART_AJAX')) || Configuration::get('PS_ORDER_PROCESS_TYPE') == 1 || Tools::getValue('step') == 2)
|
||||
{
|
||||
$this->addJqueryPlugin('typewatch');
|
||||
$this->addJS(_THEME_JS_DIR_.'cart-summary.js');
|
||||
@@ -465,7 +465,7 @@ class ParentOrderControllerCore extends FrontController
|
||||
$address = new Address($this->context->cart->id_address_delivery);
|
||||
$id_zone = Address::getZoneById($address->id);
|
||||
$bad_delivery = false;
|
||||
if ($bad_delivery = !Address::isCountryActiveById((int)$this->context->cart->id_address_delivery) || !Address::isCountryActiveById((int)$this->context->cart->id_address_invoice))
|
||||
if (($bad_delivery = (bool)!Address::isCountryActiveById((int)$this->context->cart->id_address_delivery)) || (!Address::isCountryActiveById((int)$this->context->cart->id_address_invoice)))
|
||||
{
|
||||
if (Configuration::get('PS_ORDER_PROCESS_TYPE') == 1 && Dispatcher::getInstance()->getController() != 'order-opc')
|
||||
{
|
||||
|
||||
@@ -63,23 +63,8 @@ class PdfInvoiceControllerCore extends FrontController
|
||||
$order_invoice_list = $this->order->getInvoicesCollection();
|
||||
Hook::exec('actionPDFInvoiceRender', array('order_invoice_list' => $order_invoice_list));
|
||||
|
||||
$pdf = new PDF($order_invoice_list, PDF::TEMPLATE_INVOICE, $this->context->smarty, $this->context->language->id);
|
||||
$pdf = new PDF($order_invoice_list, PDF::TEMPLATE_INVOICE, $this->context->smarty);
|
||||
$pdf->render();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the invoice template associated to the country iso_code
|
||||
* @param string $iso_user
|
||||
*/
|
||||
public function getTemplate($iso_country)
|
||||
{
|
||||
$template = _PS_THEME_PDF_DIR_.'/invoice.tpl';
|
||||
|
||||
$iso_template = _PS_THEME_PDF_DIR_.'/invoice.'.$iso_country.'.tpl';
|
||||
if (file_exists($iso_template))
|
||||
$template = $iso_template;
|
||||
|
||||
return $template;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
id;Alias *;Search *;Active (0/1)
|
||||
3;microsft,micro;microsoft;1
|
||||
4;adbe,adaub;adobe;1
|
||||
|
@@ -1,3 +1,3 @@
|
||||
id;Active (0/1);Gender ID (Mr=1, Ms=2, else 9);E-mail*;Password*;Birthday;Lastname*;Firstname*;Newletter (0/1);Opt-in (0/1)
|
||||
1;1;1;johndoe@prestashop.com;#res152EDRF;1987-09-21;Doe;John;1;1
|
||||
2;1;2;mariedoe@prestashop.com;58@ret26#;1986-10-14;Doe;Marie;0;1
|
||||
id;Active (0/1);Gender ID (Mr=1, Ms=2, else 9);E-mail*;Password*;Birthday;Lastname*;Firstname*;Newletter (0/1);Opt-in (0/1);Groups (x,y,z...);Default group ID;ID / Name of shop
|
||||
1;1;1;johndoe@prestashop.com;#res152EDRF;1987-09-21;Doe;John;1;1;1,2;1;1
|
||||
2;1;2;mariedoe@prestashop.com;58@ret26#;1986-10-14;Doe;Marie;0;1;1,3;3;1
|
||||
|
@@ -1,3 +1,3 @@
|
||||
id;Active (0/1);Name*;Description;Short description;Meta-title;Meta-keywords;Meta-description
|
||||
1;1;Apple Computer, Inc;;;;;
|
||||
2;1;Shure Incorporated;;;;;
|
||||
id;Active (0/1);Name*;Description;Short description;Meta-title;Meta-keywords;Meta-description;Image URL
|
||||
1;1;Apple Computer, Inc;;;;;http://youdomain.com/img.jpg
|
||||
2;1;Shure Incorporated;;;;;http://youdomain.com/img.jpg
|
||||
|
||||
|
@@ -1,3 +1,3 @@
|
||||
ID;Active (0/1);Name*;Categories (x,y,z,…);Price tax excl. Or Price tax excl;Tax rules id;Wholesale price;On sale (0/1);Discount amount;Discount percent;Discount from (yyy-mm-dd);Discount to (yyy-mm-dd);Reference #;Supplier reference #;Supplier;Manufacturer;EAN13;UPC;Ecotax;Width;Height;Depth;Weight;Quantity;Minimum quantity;Visibility;Additional shipping cost;Unity;Unity price ratio;Short description;Description;Tags (x,y,z,...);Meta-title;Meta-keywords;Meta-description;URL rewritten;Text when in-stock;Text if back-order allowed;Available for order (0 = No, 1 = Yes);Product available date;Product creation date;Show price (0 = No, 1 = Yes);Image URLs (x,y,z,...);Delete existing images (0 = No, 1 = Yes);Feature (Name:Value:Position);Available online only (0 = No, 1 = Yes);Condition (new,used,refurbished);Customizable;File fields;Text fields;Out of stock;Advanced stock management;ID / Name of shop
|
||||
1;1;iPod Nano;Home, iPods;49;1;40;0;;;;;92458844;54778855;AppleStore;Apple Computer, Inc;5605055055056;560505505555;0;0,1;0,2;0,3;0.5;800;1;both;0.00;;0.00;New design. New features. Now i….;Curved ahead of the curve. 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 de...;apple, ipod, nano;Meta title;Meta keywords;Meta description;ipod-nano;In stock;Out stock;1;;;1;http://youdomain.com/img.jpg, http://yourdomain.com/img1.jpg;0;Music:Rock:1;0;new;0;0;0;2;0;1
|
||||
2;1;iPod shuffle;Home, iPods;66.05;1;50;0;;;;;92458845;54778855;AppleStore;Apple Computer, Inc;5605055055057;560505505556;0;0,1;0,2;0,3;0.5;800;1;both;0.00;;0.00;iPod shuffle, the world’s most wearabl….;You want listen to music;ipod, shuffle;Meta title;Meta keywords;Meta description;ipod-shuffle;In stock;Out stock;1;;;1;http://youdomain.com/img25.jpg, http://yourdomain.com/img30.jpg;0;Music:Blues:2;0;new;0;0;0;2;0;1
|
||||
1;1;iPod Nano;Home, iPods;49;1;40;0;;;;;92458844;54778855;AppleStore;Apple Computer, Inc;5605055055056;560505505555;0;1;2;3;0.5;800;1;both;0.00;;0.00;New design. New features. Now i….;Curved ahead of the curve. 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 de...;apple, ipod, nano;Meta title;Meta keywords;Meta description;ipod-nano;In stock;Out stock;1;;;1;http://youdomain.com/img.jpg, http://yourdomain.com/img1.jpg;0;Music:Rock:1;0;new;0;0;0;2;0;1
|
||||
2;1;iPod shuffle;Home, iPods;66.05;1;50;0;;;;;92458845;54778855;AppleStore;Apple Computer, Inc;5605055055057;560505505556;0;1;2;3;0.5;800;1;both;0.00;;0.00;iPod shuffle, the world’s most wearabl….;You want listen to music;ipod, shuffle;Meta title;Meta keywords;Meta description;ipod-shuffle;In stock;Out stock;1;;;1;http://youdomain.com/img25.jpg, http://yourdomain.com/img30.jpg;0;Music:Blues:2;0;new;0;0;0;2;0;1
|
||||
|
||||
|
@@ -1,3 +1,3 @@
|
||||
id;Active (0/1);Name*;Description;Short description;Meta-title;Meta-keywords;Meta-description
|
||||
1;1;Applestore;;;;;
|
||||
2;1;Shure Online Store;;;;;
|
||||
id;Active (0/1);Name*;Description;Short description;Meta-title;Meta-keywords;Meta-description;Image URL
|
||||
1;1;Applestore;;;;;http://youdomain.com/img.jpg
|
||||
2;1;Shure Online Store;;;;;http://youdomain.com/img.jpg
|
||||
|
||||
|
@@ -95,6 +95,10 @@ abstract class InstallControllerHttp
|
||||
|
||||
final public static function execute()
|
||||
{
|
||||
$session = InstallSession::getInstance();
|
||||
if (!$session->last_step || $session->last_step == 'welcome')
|
||||
Autoload::getInstance()->generateIndex();
|
||||
|
||||
if (Tools::getValue('compile_templates'))
|
||||
{
|
||||
require_once (_PS_INSTALL_CONTROLLERS_PATH_.'http/smarty_compile.php');
|
||||
@@ -111,7 +115,6 @@ abstract class InstallControllerHttp
|
||||
self::$instances[$step] = new $classname($step);
|
||||
}
|
||||
|
||||
$session = InstallSession::getInstance();
|
||||
if (!$session->last_step || !in_array($session->last_step, self::$steps))
|
||||
$session->last_step = self::$steps[0];
|
||||
|
||||
|
||||
@@ -358,7 +358,7 @@ class InstallControllerHttpProcess extends InstallControllerHttp
|
||||
$install_modules['subtasks'][] = array('module' => $module);
|
||||
$this->process_steps[] = $install_modules;
|
||||
|
||||
$install_modules = array('key' => 'installModulesAddons', 'lang' => $this->l('Install modules Addons'));
|
||||
$install_modules = array('key' => 'installModulesAddons', 'lang' => $this->l('Install Addons modules'));
|
||||
|
||||
$params = array('iso_lang' => $this->language->getLanguageIso(),
|
||||
'iso_country' => $this->session->shop_country,
|
||||
|
||||
@@ -365,6 +365,7 @@ CREATE TABLE `PREFIX_cms` (
|
||||
`id_cms_category` int(10) unsigned NOT NULL,
|
||||
`position` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`active` tinyint(1) unsigned NOT NULL default '0',
|
||||
`indexation` tinyint(1) unsigned NOT NULL default '1',
|
||||
PRIMARY KEY (`id_cms`)
|
||||
) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8;
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -66,7 +66,7 @@ echo '
|
||||
<body>
|
||||
<form action="translate.php" method="post">
|
||||
<select name="iso" onchange="document.location = \'translate.php?iso=\'+this.value;">
|
||||
<option>-- Choose your language --</option>';
|
||||
<option>- Choose your language -</option>';
|
||||
foreach ($languages as $language)
|
||||
if (file_exists('../langs/'.$language.'/install.php'))
|
||||
echo '<option value="'.htmlspecialchars($language, ENT_COMPAT, 'utf-8').'" '.($iso == $language ? 'selected="selected"' : '').'>'.htmlspecialchars($language, ENT_NOQUOTES, 'utf-8').'</option>'."\n";
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
ob_start();
|
||||
|
||||
// Check PHP version
|
||||
if (version_compare(PHP_VERSION, '5.1.3', '<'))
|
||||
if (version_compare(preg_replace('/[^0-9.]/', '', PHP_VERSION), '5.1.3', '<'))
|
||||
die('You need at least PHP 5.1.3 to run PrestaShop. Your current PHP version is '.PHP_VERSION);
|
||||
|
||||
// Generate common constants
|
||||
|
||||
@@ -62,9 +62,9 @@ return array(
|
||||
'Populate database tables' => 'ডাটাবেস টেবিল তথ্যপূর্ণ হয়েছে',
|
||||
'Configure shop information' => 'দোকানের তথ্য কনফিগার হয়েছে',
|
||||
'Install modules' => 'মডিউল ইনস্টল হয়েছে',
|
||||
'Install modules Addons' => 'মডিউল অ্যাডঅনস ইনস্টল হয়েছে',
|
||||
'Install Addons modules' => 'মডিউল অ্যাডঅনস ইনস্টল হয়েছে',
|
||||
'Install demonstration data' => 'ডেমনেসট্রেসন তথ্য ইনস্টল হয়েছে',
|
||||
'PHP parameters:' => 'পিএইচপি পরামিতি:',
|
||||
'PHP parameters:' => 'পিএইচপি পরামিতি',
|
||||
'PHP 5.1.2 or later is not enabled' => 'পিএইচপি 5.1.2 অথবা পরবর্তী সংস্করণ সক্রিয় করা নেই',
|
||||
'Cannot upload files' => 'ফাইল আপলোড করা যাচ্ছে না',
|
||||
'Cannot create new files and folders' => 'নতুন ফাইল এবং ফোল্ডার তৈরি করা যাচ্ছে না',
|
||||
@@ -106,52 +106,52 @@ return array(
|
||||
'Fixtures class "%s" not found' => '"%s" Fixtures class পাওয়া যায় নি',
|
||||
'"%s" must be an instane of "InstallXmlLoader"' => '"%s" কে অবশ্যই "InstallXmlLoader" এর একটি instaneহতে হবে',
|
||||
'Information about your Store' => 'আপনার দোকান সম্পর্কে তথ্য',
|
||||
'Shop name:' => 'দোকানের নাম:',
|
||||
'Main activity:' => 'মুখ্য কার্যকলাপ:',
|
||||
'Shop name' => 'দোকানের নাম',
|
||||
'Main activity' => 'মুখ্য কার্যকলাপ',
|
||||
'Please choose your main activity' => 'আপনার প্রধান কার্যকলাপ বেছে নিন',
|
||||
'Other activity...' => 'অন্য কার্যকলাপ ...',
|
||||
'Help us learn more about your store so we can offer you optimal guidance and the best features for your business!' => 'আমরা যাতে আপনাকে আপনার ব্যবসার জন্য অনুকূল নির্দেশিকা এবং সর্বোত্তম বৈশিষ্ট্য অফার করতে পারি সেজন্য আমাদের আপনার দোকান সম্বন্ধে আরও জানতে সাহায্য করুন!',
|
||||
'Install demo products:' => 'ডেমো পণ্য ইনস্টল করুন:',
|
||||
'Install demo products' => 'ডেমো পণ্য ইনস্টল করুন',
|
||||
'Yes' => 'হ্যাঁ',
|
||||
'No' => 'না ',
|
||||
'Demo products are a good way to learn how to use PrestaShop. You should install them if you are not familiar with it.' => 'ডেমো পণ্য PrestaShopএর ব্যবহার শিখার একটি ভালো উপায়।আপনি যদি এটার সাথে পরিচিত না হন, তাহলে তাদের ইনস্টল করা উচিত।',
|
||||
'Country:' => 'দেশ:',
|
||||
'Country' => 'দেশ',
|
||||
'Select your country' => 'আপনার দেশ নির্বাচন করুন',
|
||||
'Shop timezone:' => 'দোকানের সময় অঞ্চল(timezone):',
|
||||
'Shop timezone:' => 'দোকানের সময় অঞ্চল(timezone)',
|
||||
'Select your timezone' => 'আপনার সময় অঞ্চল নির্বাচন করুন',
|
||||
'Shop logo:' => 'দোকান লোগো:',
|
||||
'Shop logo:' => 'দোকান লোগো',
|
||||
'Optional - You can add you logo at a later time.' => 'ঐচ্ছিক - পরবর্তী সময়ে লোগো যোগ করতে পারেন.',
|
||||
'Your Account' => 'আপনার অ্যাকাউন্ট',
|
||||
'First name:' => 'নামের ১ম অংশঃ',
|
||||
'Last name:' => 'নামের শেষ অংশঃ',
|
||||
'E-mail address:' => 'ইমেইল ঠিকানা:',
|
||||
'First name' => 'নামের ১ম অংশঃ',
|
||||
'Last name' => 'নামের শেষ অংশঃ',
|
||||
'E-mail address' => 'ইমেইল ঠিকানা',
|
||||
'This email address will be your username to access your store\'s back office.' => 'এই ইমেইল ঠিকানা আপনার দোকান এর ব্যাক অফিস অ্যাক্সেস করতে আপনার ইউজারনেম হবে',
|
||||
'Shop password:' => 'দোকানের পাসওয়ার্ড:',
|
||||
'Shop password' => 'দোকানের পাসওয়ার্ড',
|
||||
'Must be letters and numbers with at least 8 characters' => 'কমপক্ষে ৮ অক্ষরের অক্ষর এবং সংখ্যায় হতে হবে',
|
||||
'Re-type to confirm:' => 'নিশ্চিত করার জন্য আবার টাইপ করুন:',
|
||||
'Re-type to confirm' => 'নিশ্চিত করার জন্য আবার টাইপ করুন',
|
||||
'Sign-up to the newsletter' => 'নিউজলেটারে সাইন আপ করুন ',
|
||||
'PrestaShop can provide you with guidance on a regular basis by sending you tips on how to optimize the management of your store which will help you grow your business. If you do not wish to receive these tips, please uncheck this box.' => 'আপনার দোকান পরিচালনার অনুকূল টিপস প্রেরণ করে একটি নিয়মিত ভিত্তিতে নির্দেশিকা দিয়ে PrestaShop আপনার ব্যবসা বৃদ্ধি করতে সহায়তা করবে।আপনি এই টিপস পেতে না চাইলে এই বাক্সটি আনচেক করুন।',
|
||||
'Configure your database by filling out the following fields:' => 'নিম্নলিখিত ক্ষেত্রগুলি পূরণ করে আপনার ডাটাবেস কনফিগার করুন:',
|
||||
'Configure your database by filling out the following fields' => 'নিম্নলিখিত ক্ষেত্রগুলি পূরণ করে আপনার ডাটাবেস কনফিগার করুন',
|
||||
'To use PrestaShop, you must <a href="http://doc.prestashop.com/display/PS15/Installing+PrestaShop#InstallingPrestaShop-Creatingadatabaseforyourshop" target="_blank">ডেটাবেস তৈরি করুন</a> to collect all of your store’s data-related activities.' => 'PrestaShop ব্যবহার করতে আপনাকে অবশ্যই <a href="http://doc.prestashop.com/display/PS15/Installing+PrestaShop#InstallingPrestaShop-Creatingadatabaseforyourshop" target="_blank">ডাটাবেস তৈরি করুন এ</a>আপনার দোকান এর তথ্য সংক্রান্ত কার্যক্রম পূরণ করতে হবে',
|
||||
'Please complete the fields below in order for PrestaShop to connect to your database. ' => 'PrestaShop আপনার ডাটাবেসের সাথে সংযোগ করার জন্য নীচের ক্ষেত্রগুলি পূরণ করুন.',
|
||||
'Database server address:' => 'ডাটাবেস সার্ভারের ঠিকানা:',
|
||||
'Database server address' => 'ডাটাবেস সার্ভারের ঠিকানা',
|
||||
'The default port is 3306. To use a different port, add the port number at the end of your server’s address i.e ":4242".' => 'ডিফল্ট পোর্ট হল 3306।ভিন্ন পোর্ট ব্যবহার করতে হলে আপনার সার্ভারের ঠিকানা এবং শেষে পোর্ট সংখ্যা যোগ করুন।যেমন-":4242". ',
|
||||
'Database name:' => 'ডেটাবেস নাম:',
|
||||
'Database login:' => 'ডাটাবেস লগইন:',
|
||||
'Database password:' => 'ডাটাবেজ পাসওয়ার্ড:',
|
||||
'Database Engine:' => 'ডাটাবেস ইঞ্জিন:',
|
||||
'Tables prefix:' => 'টেবিল প্রিফিক্সঃ',
|
||||
'Drop existing tables (mode dev):' => 'বিদ্যমান টেবিল ড্রপ করুন(mode dev):',
|
||||
'Database name' => 'ডেটাবেস নাম',
|
||||
'Database login' => 'ডাটাবেস লগইন',
|
||||
'Database password' => 'ডাটাবেজ পাসওয়ার্ড',
|
||||
'Database Engine:' => 'ডাটাবেস ইঞ্জিন',
|
||||
'Tables prefix' => 'টেবিল প্রিফিক্সঃ',
|
||||
'Drop existing tables (mode dev)' => 'বিদ্যমান টেবিল ড্রপ করুন(mode dev)',
|
||||
'Test your database connection now!' => 'এখন আপনার ডাটাবেস সংযোগ পরীক্ষা করুন!',
|
||||
'E-mail delivery set-up' => 'ই মেইল বিতরণের সেট আপ',
|
||||
'Configure SMTP manually (advanced users only)' => 'নিজে SMTP-কনফিগার করুন(দক্ষ ব্যবহারকারীদের জন্য শুধুমাত্র)',
|
||||
'By default, the PHP mail() function is used' => 'ডিফল্টরূপে পিএইচপি মেইল () ফাংশন ব্যবহার করা হয়েছে',
|
||||
'SMTP server address:' => 'SMTP সার্ভারের ঠিকানা:',
|
||||
'Encryption:' => 'এনক্রিপশন:',
|
||||
'SMTP server address:' => 'SMTP সার্ভারের ঠিকানা',
|
||||
'Encryption:' => 'এনক্রিপশন',
|
||||
'None' => 'কোনোটা না',
|
||||
'Port:' => 'পোর্ট:',
|
||||
'Login:' => 'লগইন:',
|
||||
'Password:' => 'পাসওয়ার্ড:',
|
||||
'Port:' => 'পোর্ট',
|
||||
'Login:' => 'লগইন',
|
||||
'Password' => 'পাসওয়ার্ড',
|
||||
'enter@your.email' => 'enter@your.email ',
|
||||
'Send me a test email!' => 'আমাকে একটা পরীক্ষামূলক ইমেল প্রেরণ করুন!',
|
||||
'Next' => 'পরবর্তী ',
|
||||
@@ -177,8 +177,8 @@ return array(
|
||||
'You can use the links on the left column to go back to the previous steps, or restart the installation process by <a href="%s">clicking here</a>.' => 'আপনি বাম কলামের পিছনে ফেরার লিঙ্ক দিয়ে আগের ধাপে ফিরে যেতে পারেন অথবা ইনস্টলেশন প্রক্রিয়া পুনরায় আরম্ভ করুন-<a href="%s">clicking here</a>. হতে',
|
||||
'Your installation is finished!' => 'আপনার ইনস্টলেশন সমাপ্ত!',
|
||||
'You have just finished installing your shop. Thank you for using PrestaShop!' => ' আপনার দোকান ইনস্টল সমাপ্ত হয়েছে. PrestaShop ব্যবহারের জন্য আপনাকে ধন্যবাদ!',
|
||||
'Please remember your login information:' => 'আপনার লগইন তথ্য দয়া করে মনে রাখবেন:',
|
||||
'E-mail:' => 'ই মেইল:',
|
||||
'Please remember your login information' => 'আপনার লগইন তথ্য দয়া করে মনে রাখবেন',
|
||||
'E-mail' => 'ই মেইল',
|
||||
'Print my login information' => 'আপনার লগইন তথ্য মুদ্রণ করুন',
|
||||
'Display' => 'প্রদর্শন ',
|
||||
'For security purposes, you must delete the "install" folder.' => 'নিরাপত্তার জন্য "install" ফোল্ডার মুছে ফেলা আবশ্যক.',
|
||||
@@ -195,11 +195,13 @@ return array(
|
||||
'Oops! Please correct the item(s) below, and then click "Refresh information" to test the compatibility of your new system.' => ' নীচের আইটেম (গুলি) দয়া করে সঠিক করুন তারপর আপনার নতুন সিস্টেম সামঞ্জস্যের পরীক্ষা করতে "Refresh information" ক্লিক করুন',
|
||||
'Refresh these settings' => 'এই সেটিংস রিফ্রেশ করুন',
|
||||
'PrestaShop requires at least 32M of memory to run, please check the memory_limit directive in php.ini or contact your host provider' => 'PrestaShop চালাতে অন্তত 32M মেমরি প্রয়োজন।php.ini তে আপনার মেমরি চেক করুন অথবা অথবা আপনার হোস্ট সরবরাহকারীর সাথে যোগাযোগ করুন।',
|
||||
'Welcome to the PrestaShop %s Installer.' => 'PrestaShop ইনস্টলার %s এ স্বাগতম',
|
||||
'Welcome to the PrestaShop %s Installer' => 'PrestaShop ইনস্টলার %s এ স্বাগতম',
|
||||
'The installation of PrestaShop is quick and easy. In just a few moments, you will become part of a community consisting of more than 150,000 merchants. You are on the way to creating your own unique online store that you can manage easily every day.' => 'PrestaShop ইনস্টলেশনের দ্রুত এবং সহজ।মাত্র কয়েক মুহূর্তের মধ্যে, আপনি আরও ১৫০০০০ ব্যাবসায়ি নিয়ে গঠিত একটি কমিউনিটির অংশ হয়ে যাবেন।আপনি প্রতিদিন সহজে পরিচালনা করতে পারবেন এমন একটি নিজস্ব অনন্য অনলাইন দোকান নির্মাণ করতে যাচ্ছেন।',
|
||||
'If you need help, do not hesitate to check <a href="%1$s" target="_blank">আমাদের নত্থি করন</a> or to contact our support team: %2$s' => 'যদি আপনার সাহায্যের প্রয়োজন হলে, <a href="%1$s" target="_blank">আমাদের ম্যানুয়াল</a>চেক করতে বিব্রত বোধ করবেন না অথবা আমাদের সহায়ক দলের সাথে যোগাযোগ করুন: %2$s ',
|
||||
'Continue the installation in:' => 'ইনস্টলেশন চালিয়ে যান:',
|
||||
'Continue the installation in' => 'ইনস্টলেশন চালিয়ে যান',
|
||||
'The language selection above only applies to the Installation Assistant. Once your store is installed, you can choose the language of your store from over %d translations, all for free!' => 'উপরোক্ত ভাষা নির্বাচন শুধুমাত্র ইনস্টলেশনের সহকারীর জন্য প্রযোজ্য।আপনার দোকান ইনস্টল করা হলে,আপনি উপর থেকে আপনার দোকানের ভাষা নির্বাচন করতে পারবেন একদম বিনামূল্যে!',
|
||||
'If you need help, do not hesitate to check <a href="%1$s" target="_blank">our documentation</a> or to contact our support team: %2$s' => ' যদি আপনার কোনো সাহায্যের দরকার হয়,তবে আমাদের নত্থিপত্র<a href="%1$s" target="_blank">চেক করতে দ্বিধা করবেন না</a> অথবা আমাদের সাপোর্ট টিম এর সাথে যোগাযোগ করুন: %2$s ',
|
||||
'Must be at least 8 characters' => 'আট অক্ষর নূন্যতম',
|
||||
'To use PrestaShop, you must <a href="http://doc.prestashop.com/display/PS15/Installing+PrestaShop#InstallingPrestaShop-Creatingadatabaseforyourshop" target="_blank">create a database</a> to collect all of your store’s data-related activities.' => 'PrestaShop ব্যবহার করতে আপনাকে অবশ্যই <a href="http://doc.prestashop.com/display/PS15/Installing+PrestaShop#InstallingPrestaShop-Creatingadatabaseforyourshop" target="_blank">ডাটাবেস তৈরি করুন এ</a>আপনার দোকান এর তথ্য সংক্রান্ত কার্যক্রম পূরণ করতে হবে',
|
||||
),
|
||||
);
|
||||
@@ -12,7 +12,7 @@ return array(
|
||||
'menu_database' => 'Configuração do Sistema',
|
||||
'menu_configure' => 'Informação da Loja',
|
||||
'menu_process' => 'Instalação da Loja',
|
||||
'Choose the installer language:' => 'Escolha a língua para instalação :',
|
||||
'Choose the installer language:' => 'Escolha a língua para instalação',
|
||||
'Field required' => 'Campos requeridos',
|
||||
'Invalid shop name' => 'Nome da loja inválido',
|
||||
'Your firstname contains some invalid characters' => 'Seu primeiro nome contém alguns caractéres inválidos',
|
||||
@@ -65,13 +65,13 @@ return array(
|
||||
'Install demonstration data' => 'Demonstração de instalação do produto',
|
||||
'Install theme' => 'Instale o tema',
|
||||
'Send information e-mail' => 'Envio de informações por e-mail',
|
||||
'PHP parameters:' => 'Parâmetros PHP :',
|
||||
'PHP parameters:' => 'Parâmetros PHP',
|
||||
'Is PHP 5.1.2 or later installed ?' => 'PHP 5.1.2 ou posterior está instalado ?',
|
||||
'Can upload files ?' => 'Pode enviar arquivos ?',
|
||||
'Can create new files and folders ?' => 'Pode criar novos arquivos e pastas ?',
|
||||
'Is GD Library installed ?' => 'Biblioteca GD está instalada ?',
|
||||
'Is MySQL support is on ?' => 'MySQL está instalado ?',
|
||||
'Recursive write permissions on files and folders:' => 'Grave permissões em arquivos e pastas recursivas:',
|
||||
'Recursive write permissions on files and folders:' => 'Grave permissões em arquivos e pastas recursivas',
|
||||
'Can open external URLs ?' => 'Pode abrir URLs externas ?',
|
||||
'Is PHP register global option off (recommended) ?' => 'A opção de registro global PHP está desligada(recomendado) ?',
|
||||
'Is GZIP compression activated (recommended) ?' => 'A compressão GZIP está ativada (recomendado) ?',
|
||||
@@ -80,48 +80,48 @@ return array(
|
||||
'Is Dom extension loaded ?' => 'A extensão DOM está carregada ?',
|
||||
'Is PDO MySQL extension loaded ?' => 'A extensão PDO MySQL está carregada ?',
|
||||
'Shop settings and merchant account information' => 'Informações sobre o vendedor e a loja',
|
||||
'Shop name:' => 'O nome da sua loja :',
|
||||
'Main activity:' => 'Principal atividade :',
|
||||
'Shop name' => 'O nome da sua loja',
|
||||
'Main activity' => 'Principal atividade',
|
||||
'Please choose your main activity' => 'Por favor escolha sua atividade principal',
|
||||
'Other activity...' => 'Outra atividade ...',
|
||||
'This information is not required, it will only be used for statistical purposes. This information does not change anything in your store.' => 'Esta informação não é necessária, ela será usada apenas para fins estatísticos. Esta informação não muda nada em sua loja.',
|
||||
'Install demo products:' => 'Instalar produtos de demonstração :',
|
||||
'Install demo products' => 'Instalar produtos de demonstração',
|
||||
'Yes' => 'Sim',
|
||||
'No' => 'Não',
|
||||
'Demo products are a good way to learn how to use PrestaShop. You should install them if you are not familiar with it.' => 'Produtos de demonstração são uma boa maneira de aprender como usar o PrestaShop. Você deve instalá-los se você não está familiarizado com a plataforma.',
|
||||
'Default country:' => 'País padrão :',
|
||||
'Default country:' => 'País padrão',
|
||||
'Select your country' => 'Selecione seu país',
|
||||
'Shop timezone:' => 'Fuso horário da loja :',
|
||||
'Shop timezone:' => 'Fuso horário da loja',
|
||||
'Select your timezone' => 'Selecione o seu fuso horário',
|
||||
'Shop logo:' => 'Logo da loja',
|
||||
'Recommended dimensions:' => 'Dimensões recomendadas :',
|
||||
'First name:' => 'Primeiro nome :',
|
||||
'Last name:' => 'Sobrenome :',
|
||||
'E-mail address:' => 'Endereço de e-mail :',
|
||||
'Shop password:' => 'Senha da loja :',
|
||||
'Re-type to confirm:' => 'Digite novamente para confirmar :',
|
||||
'Recommended dimensions:' => 'Dimensões recomendadas',
|
||||
'First name' => 'Primeiro nome',
|
||||
'Last name' => 'Sobrenome',
|
||||
'E-mail address' => 'Endereço de e-mail',
|
||||
'Shop password' => 'Senha da loja',
|
||||
'Re-type to confirm' => 'Digite novamente para confirmar ',
|
||||
'Receive this information by e-mail' => 'Receba esta informação por e-mail',
|
||||
'Warning: You will receive this information only if your e-mail configuration is correct.' => 'Atenção: Você receberá esta informação apenas se a configuração do seu e-mail está correta.',
|
||||
'Configure your database by filling out the following fields:' => 'Configure o seu banco de dados, preencha os seguintes campos :',
|
||||
'Configure your database by filling out the following fields' => 'Configure o seu banco de dados, preencha os seguintes campos',
|
||||
'You have to create a database, help available in <a href="http://doc.prestashop.com" target="_blank">our online documentation</a>.' => 'Você tem que criar um banco de dados, você encontra ajuda em <a href="http://doc.prestashop.com" target="_blank">nossa documentação on line</a>.',
|
||||
'Database server address:' => 'Endereço do servidor do banco de dados :',
|
||||
'Database server address' => 'Endereço do servidor do banco de dados',
|
||||
'If you want to use a different port, add :XX after your server address where XX is your port number.' => 'Se você quiser usar um port diferente, adicione: XX após o endereço do servidor, onde XX é o número do seu port.',
|
||||
'Database name:' => 'Nome do banco de dados :',
|
||||
'Database login:' => 'Login do banco de dados :',
|
||||
'Database password:' => 'Senha do banco de dados :',
|
||||
'Database Engine:' => 'Tipo do banco de dados :',
|
||||
'Tables prefix:' => 'Prefixo das tabelas :',
|
||||
'Drop existing tables (mode dev):' => 'Exclua as tabelas existentes (mode dev) :',
|
||||
'Database name' => 'Nome do banco de dados',
|
||||
'Database login' => 'Login do banco de dados',
|
||||
'Database password' => 'Senha do banco de dados',
|
||||
'Database Engine:' => 'Tipo do banco de dados',
|
||||
'Tables prefix' => 'Prefixo das tabelas',
|
||||
'Drop existing tables (mode dev)' => 'Exclua as tabelas existentes (mode dev)',
|
||||
'Verify now!' => 'Verifique agora !',
|
||||
'E-mail delivery set-up' => 'Configuração de entrega de e-mails',
|
||||
'Configure SMTP manually (advanced users only)' => 'Configuração manual do SMTP (apenas para usuários avançados)',
|
||||
'By default, the PHP mail() function is used' => 'Por padrão, é usada a função PHP mail()',
|
||||
'SMTP server address:' => 'Endereço do servidor SMTP',
|
||||
'Encryption:' => 'Encriptação :',
|
||||
'Encryption:' => 'Encriptação',
|
||||
'None' => 'Nenhum',
|
||||
'Port:' => 'Port :',
|
||||
'Login:' => 'Identificação :',
|
||||
'Password:' => 'Senha :',
|
||||
'Port:' => 'Port',
|
||||
'Login:' => 'Identificação',
|
||||
'Password' => 'Senha',
|
||||
'enter@your.email' => 'colocar@seu.email',
|
||||
'Send me a test email!' => 'Envie-me um email de teste !',
|
||||
'Next' => 'Próximo',
|
||||
@@ -137,7 +137,7 @@ return array(
|
||||
'You can use the links on the left column to go back to the previous steps, or restart the installation process by <a href="%s">clicking here</a>.' => 'Você pode usar os links da coluna da esquerda para voltar às etapas anteriores, ou reiniciar o processo de instalação ao <a href="%s">clicar aqui</a>.',
|
||||
'Your installation is finished!' => 'Você acabou a instalação !',
|
||||
'You have just finished installing your shop. Thank you for using PrestaShop!' => 'Você acaba de terminar de instalar sua loja. Obrigado por utilizar o PrestaShop !',
|
||||
'Please remember your login information:' => 'Por favor, memorize suas informações de identificação :',
|
||||
'Please remember your login information' => 'Por favor, memorize suas informações de identificação',
|
||||
'WARNING: For security purposes, you must delete the "install" folder.' => 'ATENÇÃO : Por questão de segurança, você deve deletar a pasta "/install/".',
|
||||
'Back Office' => 'Área Administrativa',
|
||||
'Manage your store using your Back Office. Manage your orders and customers, add modules, change themes, etc.' => 'Gerencie sua loja usando sua Área Administrativa. Gerencie seus pedidos e clientes, adicione módulos, mude temas, etc...',
|
||||
@@ -147,10 +147,10 @@ return array(
|
||||
'Discover your store' => 'Conheça sua loja',
|
||||
'Required set-up. Please verify the following checklist items are true.' => 'Configuração obrigatória. Por favor, verifique que os seguintes ítens da lista sejam verdadeiros.',
|
||||
'Your configuration is valid, click next to continue!' => 'Sua configuração está válida, clique próximo para continuar !',
|
||||
'Your configuration is invalid. Please fix the issues below:' => 'Sua configuração está inválida. Por favor arrume os erros abaixo :',
|
||||
'Your configuration is invalid. Please fix the issues below:' => 'Sua configuração está inválida. Por favor arrume os erros abaixo',
|
||||
'Optional set-up' => 'Configuração opcional',
|
||||
'Refresh these settings' => 'Atualize estas configurações',
|
||||
'Welcome to the PrestaShop %s Installer.' => 'Bem-vindo ao Instalador % do PrestaShop.',
|
||||
'Welcome to the PrestaShop %s Installer' => 'Bem-vindo ao Instalador % do PrestaShop',
|
||||
'The installation process should take only few minutes!' => 'O processo de instalação deve levar apenas alguns minutos! !',
|
||||
'If you need help, do not hesitate to check <a href="%1$s" target="_blank">our documentation</a> or to contact our support team: %2$s' => 'Se você precisar de ajuda, não deixe de visitar <a href="%1$s" target="_blank">nossa documentação</a> ou contatar nossa equipe de suporte : %2$s',
|
||||
'Did you know?' => 'Você sabia ?',
|
||||
@@ -213,7 +213,7 @@ return array(
|
||||
'PrestaShop compatibility with your system environment has been verified!' => 'A compatibilidade do PrestaShop com seu ambiente de sistema foi verificada!',
|
||||
'Oops! Please correct the item(s) below, and then click "Refresh information" to test the compatibility of your new system.' => 'Ups! Por favor corrija o(s) item(s) abaixo, e depois clique “Atualizar Informação” para testar a compatibilidade do seu novo sistema.',
|
||||
'The installation of PrestaShop is quick and easy. In just a few moments, you will become part of a community consisting of more than 150,000 merchants. You are on the way to creating your own unique online store that you can manage easily every day.' => 'A instalação do PrestaShop é rápida e fácil. Em alguns minutos, você vai se tornar parte de uma comunidade composta por mais de 150 mil comerciantes. Você está no caminho certo para criar sua própria loja virtual original que você pode gerenciar facilmente todos os dias.',
|
||||
'Continue the installation in:' => 'Continue a instalação em:',
|
||||
'Continue the installation in' => 'Continue a instalação em',
|
||||
'The language selection above only applies to the Installation Assistant. Once your store is installed, you can choose the language of your store from over %d translations, all for free!' => 'A seleção de idioma acima é válida somente para o Assistente de Instalação. Uma vez que a loja for instalada, você pode escolher o idioma da sua loja entre mais de %d traduções disponíveis, totalmente grátis!',
|
||||
'The field %s is limited to %d characters' => 'O campo %s está limitado a %d caractéres',
|
||||
'An error occurred during logo copy.' => 'Um erro ocorreu durante a cópia da logo',
|
||||
@@ -235,19 +235,22 @@ return array(
|
||||
'Sign-up to the newsletter' => 'Inscreva-se para a newsletter',
|
||||
'If you need some assistance during the installation process, please call our team at %s and one of our experts will be happy to help.' => 'Se você está tendo problemas durante o processo de instalação, por favor ligue para o nosso time no %s e um de nossos especialistas lhe ajudará.',
|
||||
'Contact us!' => 'Contate-nos!',
|
||||
'E-mail:' => 'E-mail:',
|
||||
'E-mail' => 'E-mail',
|
||||
'PrestaShop requires at least 32M of memory to run, please check the memory_limit directive in php.ini or contact your host provider' => 'PrestaShop requer pelo menos 32M de memória para funcionar, por favor verifique memory_limit no php.ini ou contate seu provedor de hospedagem.',
|
||||
'Your PHP sessions path is not writable - check with your hosting provider:' => 'O caminho para sessão PHP não pode ser escrito - verifique com o seu provedor de hospedagem',
|
||||
'Database is created' => 'Banco de dados está criado',
|
||||
'Cannot create the database automatically' => 'Não é possível criar o banco de dados automaticamente',
|
||||
'Install modules Addons' => 'Instalar módulos Addons',
|
||||
'Install Addons modules' => 'Instalar módulos Addons',
|
||||
'Attempt to create the database automatically' => 'Tentativa de criar o banco de dados automaticamente',
|
||||
'Country:' => 'País:',
|
||||
'Country' => 'País',
|
||||
'Must be letters and numbers with at least 8 characters' => 'Deve ser letras e números com pelo menos 8 caractéres',
|
||||
'To install PrestaShop, you need to have JavaScript enabled in your browser.' => 'Para instalar o PrestaShop, você precisa ter JavaScript ativado no seu navegador',
|
||||
'To enjoy the many features that are offered for free by PrestaShop, please read the license terms below. PrestaShop core is licensed under OSL 3.0, while the modules and themes are licensed under AFL 3.0.' => 'Para aproveitar os muitos recursos que são oferecidos grátis pelo PrestaShop, por favor, leia os termos de licença abaixo. O núcleo do PrestaShop é licenciado sob OSL 3.0, enquanto os módulos e temas são licenciados sob AFL 3.0.',
|
||||
'For security purposes, you must delete the "install" folder.' => 'Por questões de segurança, você deve deletar a pasta "install"',
|
||||
'Files' => 'Arquivos',
|
||||
'All files are not successfuly uploaded on your server' => 'Todos os arquivos não foram carregados no seu servidor com sucesso',
|
||||
'Must be at least 8 characters' => 'Mínimo de 8 caracteres',
|
||||
'http://doc.prestashop.com/display/PS15/What+you+need+to+get+started#HowtoenableJavaScript-HowtoenableJavaScript' => 'http://doc.prestashop.com/display/PS15/What+you+need+to+get+started#HowtoenableJavaScript-HowtoenableJavaScript',
|
||||
'http://doc.prestashop.com/display/PS15/Installing+PrestaShop#InstallingPrestaShop-Completingtheinstallation' => 'http://doc.prestashop.com/display/PS15/Installing+PrestaShop#InstallingPrestaShop-Completingtheinstallation',
|
||||
),
|
||||
);
|
||||
@@ -61,13 +61,13 @@ return array(
|
||||
'Install modules' => 'Module werden installiert',
|
||||
'Install demonstration data' => 'Demo wird installiert',
|
||||
'Install theme' => 'Thema wird installiert',
|
||||
'PHP parameters:' => 'PHP-Parameter:',
|
||||
'PHP parameters:' => 'PHP-Parameter',
|
||||
'Is PHP 5.1.2 or later installed ?' => 'Is PHP 5.1.2. oder höher installiert ?',
|
||||
'Can upload files ?' => 'Können Dateien hochgeladen werden ?',
|
||||
'Can create new files and folders ?' => 'Können neue Dateien und Ordner erstellt weden ?',
|
||||
'Is GD Library installed ?' => 'Ist GD-Library installiert ?',
|
||||
'Is MySQL support is on ?' => 'Ist MySQL-Support aktiviert ?',
|
||||
'Recursive write permissions on files and folders:' => 'Schreibrechte in Dateien und Ordner:',
|
||||
'Recursive write permissions on files and folders:' => 'Schreibrechte in Dateien und Ordner',
|
||||
'Can open external URLs ?' => 'Können externe URLs geöffnet werden',
|
||||
'Is PHP register global option off (recommended) ?' => 'Ist register global auf off (emfohlen)?',
|
||||
'Is GZIP compression activated (recommended) ?' => 'Ist GZIP Kompression aktiviert (empfohlen)?',
|
||||
@@ -76,48 +76,48 @@ return array(
|
||||
'Is Dom extension loaded ?' => 'Ist DOM geladen ?',
|
||||
'Is PDO MySQL extension loaded ?' => 'Ist PDO MySQL geladen ?',
|
||||
'Shop settings and merchant account information' => 'Shopinformationen über den Verkäufer',
|
||||
'Shop name:' => 'Name Ihres Shops:',
|
||||
'Main activity:' => 'Branchenzugehörigkeit',
|
||||
'Shop name' => 'Name Ihres Shops',
|
||||
'Main activity' => 'Branchenzugehörigkeit',
|
||||
'Please choose your main activity' => 'Bitte wählen Sie Ihre Branchenzugehörigkeit',
|
||||
'Other activity...' => 'Andere...',
|
||||
'This information is not required, it will only be used for statistical purposes. This information does not change anything in your store.' => 'Diese Information ist nicht erforderlich, sie wird zu statistischen Zwecken verwendet. Diese Information ändert nichts in Ihrem Shop.',
|
||||
'Install demo products:' => 'Demoprodukte installieren:',
|
||||
'Install demo products' => 'Demoprodukte installieren',
|
||||
'Yes' => 'Ja',
|
||||
'No' => 'Nein',
|
||||
'Demo products are a good way to learn how to use PrestaShop. You should install them if you are not familiar with it.' => 'Demo-Produkte sind eine gute Möglichkeit die Funktionen des Shops näher kennzulernen. Wir empfehlen Ihnen daher diese zu installieren. Sie können die Produkte im Back-Office jederzeit nachträglich deaktivieren oder löschen',
|
||||
'Default country:' => 'Standard-Land:',
|
||||
'Default country:' => 'Standard-Land',
|
||||
'Select your country' => 'Wählen Sie Ihr Land',
|
||||
'Shop timezone:' => 'Zeitzone des Shops:',
|
||||
'Shop timezone:' => 'Zeitzone des Shops',
|
||||
'Select your timezone' => 'Wählen Sie Ihre Zeitzone',
|
||||
'Shop logo:' => 'Shop-Logo:',
|
||||
'Recommended dimensions:' => 'Empfohlene Abmessungen:',
|
||||
'First name:' => 'Vorname:',
|
||||
'Last name:' => 'Name:',
|
||||
'E-mail address:' => 'E-Mail-Adresse:',
|
||||
'Shop password:' => 'Kennwort des Shops:',
|
||||
'Re-type to confirm:' => 'Bestätigen Sie das Kennwort:',
|
||||
'Shop logo:' => 'Shop-Logo',
|
||||
'Recommended dimensions:' => 'Empfohlene Abmessungen',
|
||||
'First name' => 'Vorname',
|
||||
'Last name' => 'Name',
|
||||
'E-mail address' => 'E-Mail-Adresse',
|
||||
'Shop password' => 'Kennwort des Shops',
|
||||
'Re-type to confirm' => 'Bestätigen Sie das Kennwort',
|
||||
'Receive this information by e-mail' => 'Meine Einstellungen per E-Mail erhalten',
|
||||
'Warning: You will receive this information only if your e-mail configuration is correct.' => 'Hinweis: Sie erhalten diese Information nur, wenn Ihre Mail-Einstellungen korrekt sind',
|
||||
'Configure your database by filling out the following fields:' => 'Konfigurieren Sie Ihre Datenbank, indem Sie folgende Felder ausfüllen:',
|
||||
'Configure your database by filling out the following fields' => 'Konfigurieren Sie Ihre Datenbank, indem Sie folgende Felder ausfüllen',
|
||||
'You have to create a database, help available in <a href="http://doc.prestashop.com" target="_blank">our online documentation</a>.' => '',
|
||||
'Database server address:' => 'Datenbank-Adresse',
|
||||
'Database server address' => 'Datenbank-Adresse',
|
||||
'If you want to use a different port, add :XX after your server address where XX is your port number.' => 'Möchten Sie einen anderen Port verwenden, fügen Sie hinter der Datenbank-Adresse :XX hinzu. XX steht für die Port-Nummer',
|
||||
'Database name:' => 'Name der Datenbank:',
|
||||
'Database login:' => 'Datenbank Benutzer:',
|
||||
'Database password:' => 'Datenbank Kennwort:',
|
||||
'Database Engine:' => 'Datenbank-Engine:',
|
||||
'Tables prefix:' => 'Tabellen-Präfixe:',
|
||||
'Drop existing tables (mode dev):' => 'Vorhandene Tabellen löschen:',
|
||||
'Database name' => 'Name der Datenbank',
|
||||
'Database login' => 'Datenbank Benutzer',
|
||||
'Database password' => 'Datenbank Kennwort',
|
||||
'Database Engine:' => 'Datenbank-Engine',
|
||||
'Tables prefix' => 'Tabellen-Präfixe',
|
||||
'Drop existing tables (mode dev)' => 'Vorhandene Tabellen löschen',
|
||||
'Verify now!' => 'Jetz prüfen',
|
||||
'E-mail delivery set-up' => 'E-Mail Einstellungen',
|
||||
'Configure SMTP manually (advanced users only)' => 'Konfigurieren des SMTP-Mailversandes (nur für Fortgeschrittene Nutzer)',
|
||||
'By default, the PHP mail() function is used' => 'Standardmäßig wird PHP mail () Funktion verwendet',
|
||||
'SMTP server address:' => 'SMTP-Server-Adresse',
|
||||
'Encryption:' => 'Verschlüsselung:',
|
||||
'Encryption:' => 'Verschlüsselung',
|
||||
'None' => 'Keine',
|
||||
'Port:' => 'Port:',
|
||||
'Login:' => 'Benutzername:',
|
||||
'Password:' => 'Kennwort:',
|
||||
'Port:' => 'Port',
|
||||
'Login:' => 'Benutzername',
|
||||
'Password' => 'Kennwort',
|
||||
'enter@your.email' => 'enter@your.email ',
|
||||
'Send me a test email!' => 'Eine Test-E-Mail an mich senden!',
|
||||
'Next' => 'Weiter',
|
||||
@@ -133,7 +133,7 @@ return array(
|
||||
'You can use the links on the left column to go back to the previous steps, or restart the installation process by <a href="%s">clicking here</a>.' => 'Um zum vorherigen Schritt zu gelangen, können Sie die Links in der Linken Spalte nutzen, oder den Installationsprozess komplett neu starten wenn Sie <a href="%s">HIER klicken</a>.',
|
||||
'Your installation is finished!' => 'Die Installation ist abgeschlossen!',
|
||||
'You have just finished installing your shop. Thank you for using PrestaShop!' => 'Sie haben soeben Ihren Shop erfolgreich installiert. Danke dass Sie Prestashop nutzen',
|
||||
'Please remember your login information:' => 'Merken Sie sich Ihre Log-In-Daten',
|
||||
'Please remember your login information' => 'Merken Sie sich Ihre Log-In-Daten',
|
||||
'WARNING: For security purposes, you must delete the "install" folder.' => 'HINWEIS: Aus Sicherheitsgründen löschen Sie bitte den Ordner \'/install\'.',
|
||||
'Back Office' => 'Back Office',
|
||||
'Manage your store using your Back Office. Manage your orders and customers, add modules, change themes, etc.' => 'Verwalten Sie Ihren Shop im Back-Office. Verwalten Sie Ihre Bestellungen und Kunden, fügen Sie Module hinzu, ändern Sie Ihr Theme, usw. ...',
|
||||
@@ -143,10 +143,10 @@ return array(
|
||||
'Discover your store' => 'Meinen Shop entdecken',
|
||||
'Required set-up. Please verify the following checklist items are true.' => 'Erforderliche Mindestanforderungen und Einstellungen. Bitte überprüfen Sie die Checkliste',
|
||||
'Your configuration is valid, click next to continue!' => 'Ihre Server-Einstellugnen sind gültig, bitte klicken Sie auf weiter',
|
||||
'Your configuration is invalid. Please fix the issues below:' => 'Ihre Konfiguration ist nicht gültig, <br /> bitte beheben Sie diese Probleme:',
|
||||
'Your configuration is invalid. Please fix the issues below:' => 'Ihre Konfiguration ist nicht gültig, <br /> bitte beheben Sie diese Probleme',
|
||||
'Optional set-up' => 'Optionale Einstellungen',
|
||||
'Refresh these settings' => 'Einstellungen aktualisieren',
|
||||
'Welcome to the PrestaShop %s Installer.' => 'Herzlich Willkommen beim PrestaShop Installationsassistenten',
|
||||
'Welcome to the PrestaShop %s Installer' => 'Herzlich Willkommen beim PrestaShop Installationsassistenten',
|
||||
'The installation process should take only few minutes!' => 'Der Installationsprozess dauert nur ein paar Minuten!',
|
||||
'If you need help, do not hesitate to check <a href="%1$s" target="_blank">our documentation</a> or to contact our support team: %2$s' => 'Falls Sie Hilfe benötigen, haben Sie folgende Möglichkeiten: <a href="%1$s" target="_blank">unsere Dokumentation einsehen</a> oder unser Support-Team zu kontaktieren: %2$s',
|
||||
'Did you know?' => 'Wussten Sie schon?',
|
||||
@@ -205,7 +205,7 @@ return array(
|
||||
'We are currently checking PrestaShop compatibility with your system environment' => 'Wir überprüfen derzeit die Kompatibilität von PrestaShop mit Ihrer Systemumgebung.',
|
||||
'Oops! Please correct the item(s) below, and then click "Refresh information" to test the compatibility of your new system.' => 'Bitte korrigieren Sie untenstehende(n) Punkt(e) und klicken Sie anschließend auf den Refresh-Button, um erneut die Kompatibilität Ihres Systems zu überprüfen.',
|
||||
'The installation of PrestaShop is quick and easy. In just a few moments, you will become part of a community consisting of more than 150,000 merchants. You are on the way to creating your own unique online store that you can manage easily every day.' => 'Die PrestaShop-Installation ist schnell und einfach. In nur wenigen Minuten werden Sie Teil einer Community aus über 150 000 Händlern und erstellen einen Onlineshop, der genau zu Ihnen passt und der einfach in der täglichen Verwaltung ist.',
|
||||
'Continue the installation in:' => 'Die Installation fortführen als:',
|
||||
'Continue the installation in' => 'Die Installation fortführen als',
|
||||
'The language selection above only applies to the Installation Assistant. Once your store is installed, you can choose the language of your store from over %d translations, all for free!' => 'Die untenstehende Sprachauswahl bezieht sich auf den Installationsassistenten. Sobald Ihr Shop installiert ist, können Sie aus %d Sprachen Ihre Shopsprache wählen!',
|
||||
'An error occurred during logo copy.' => 'Beim Logo Copy ist ein Fehler aufgetreten.',
|
||||
'The field %s is limited to %d characters' => 'Dieses Feld %s ist auf %s Zeichen begrenzt.',
|
||||
@@ -229,21 +229,24 @@ return array(
|
||||
'Sign-up to the newsletter' => 'Für den Newsletter anmelden',
|
||||
'Please complete the fields below in order for PrestaShop to connect to your database. ' => 'Bitte füllen Sie die untenstehenden Felder aus, damit PrestaShop sich mit Ihrer Datenbank verbinden kann.',
|
||||
'If you need some assistance during the installation process, please call our team at %s and one of our experts will be happy to help.' => 'Wenn während des Installationsprozesses technische Schwierigkeiten auftreten, kontaktieren Sie bitte unser Team unter %s. Ein Experte ist Ihnen gerne behilflich!',
|
||||
'E-mail:' => 'E-Mail:',
|
||||
'E-mail' => 'E-Mail',
|
||||
'Display' => 'Anzeige',
|
||||
'PrestaShop compatibility with your system environment has been verified!' => 'Die Kompatibilität von PrestaShop mit Ihrem System wurde überprüft!',
|
||||
'PrestaShop requires at least 32M of memory to run, please check the memory_limit directive in php.ini or contact your host provider' => 'Damit PrestaShop einwandfrei funktionieren kann, werden mindestens 32M Speicher benötigt. Bitte überprüfen Sie die memory_limit directive in php.in oder kontaktieren Sie Ihrem Provider.',
|
||||
'Your PHP sessions path is not writable - check with your hosting provider:' => 'Der Speicherungsordner ist nicht beschreibbar - bitte kontaktieren Sie Ihren Provider',
|
||||
'Database is created' => 'Datenbank erstellt',
|
||||
'Cannot create the database automatically' => 'Datenbank kann nicht automatisch erstellt werden',
|
||||
'Install modules Addons' => 'Module Addons installieren',
|
||||
'Install Addons modules' => 'Module Addons installieren',
|
||||
'Files' => 'Dateien',
|
||||
'All files are not successfuly uploaded on your server' => 'Es wurden nicht alle Dateien erfolgreich auf Ihren Server hochgeladen',
|
||||
'Attempt to create the database automatically' => 'Versuchen, die Datenbank automatisch zu erstellen.',
|
||||
'Country:' => 'Land:',
|
||||
'Country' => 'Land',
|
||||
'Must be letters and numbers with at least 8 characters' => 'Zulässig sind Buchstaben und Nummern. Mindestens 8 Zeichen.',
|
||||
'To install PrestaShop, you need to have JavaScript enabled in your browser.' => 'JavaScript muss in Ihrem Browser aktiviert sein, um PrestaShop zu installieren.',
|
||||
'To enjoy the many features that are offered for free by PrestaShop, please read the license terms below. PrestaShop core is licensed under OSL 3.0, while the modules and themes are licensed under AFL 3.0.' => 'Um all die Vorteile zu nutzen, die Ihnen Prestashop bietet, lesen sie bitte die folgenden Bedingungen. Der PrestaShop ist unter OSL 3.0 lizensiert, die Module und Themen unter AFL 3.0.',
|
||||
'For security purposes, you must delete the "install" folder.' => 'For security purposes, you must delete the "install" folder. - Aus Sicherheitsgründen sollten Sie das Verzeichnis “install” unbedingt löschen.',
|
||||
'http://doc.prestashop.com/display/PS15/What+you+need+to+get+started#HowtoenableJavaScript-HowtoenableJavaScript' => 'http://doc.prestashop.com/display/PS15/What+you+need+to+get+started#HowtoenableJavaScript-HowtoenableJavaScript',
|
||||
'http://doc.prestashop.com/display/PS15/Installing+PrestaShop#InstallingPrestaShop-Completingtheinstallation' => 'http://doc.prestashop.com/display/PS15/Installing+PrestaShop#InstallingPrestaShop-Completingtheinstallation',
|
||||
'Must be at least 8 characters' => 'Mindestens 8 Zeichen',
|
||||
),
|
||||
);
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user