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));
|
$upload->setInvalidFileExt(explode(",", CONFIG_UPLOAD_INVALID_EXTS));
|
||||||
if(CONFIG_SYS_VIEW_ONLY || !CONFIG_OPTIONS_UPLOAD)
|
if(CONFIG_SYS_VIEW_ONLY || !CONFIG_OPTIONS_UPLOAD)
|
||||||
{
|
|
||||||
$error = SYS_DISABLED;
|
$error = SYS_DISABLED;
|
||||||
}
|
|
||||||
elseif(empty($_GET['folder']) || !isUnderRoot($_GET['folder']))
|
elseif(empty($_GET['folder']) || !isUnderRoot($_GET['folder']))
|
||||||
{
|
|
||||||
$error = ERR_FOLDER_PATH_NOT_ALLOWED;
|
$error = ERR_FOLDER_PATH_NOT_ALLOWED;
|
||||||
}else if(!$upload->isFileUploaded('file'))
|
elseif (!$upload->isFileUploaded('file'))
|
||||||
{
|
|
||||||
$error = ERR_FILE_NOT_UPLOADED;
|
$error = ERR_FILE_NOT_UPLOADED;
|
||||||
}else if(!$upload->moveUploadedFile($_GET['folder']))
|
elseif (!$upload->isPermittedFileExt(explode(",", CONFIG_UPLOAD_VALID_EXTS)))
|
||||||
{
|
|
||||||
$error = ERR_FILE_MOVE_FAILED;
|
|
||||||
}
|
|
||||||
elseif(!$upload->isPermittedFileExt(explode(",", CONFIG_UPLOAD_VALID_EXTS)))
|
|
||||||
{
|
|
||||||
$error = ERR_FILE_TYPE_NOT_ALLOWED;
|
$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));
|
$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);
|
include_once(CLASS_FILE);
|
||||||
$path = $upload->getFilePath();
|
$path = $upload->getFilePath();
|
||||||
|
|||||||
@@ -24,7 +24,8 @@
|
|||||||
if(!empty($_GET['search']))
|
if(!empty($_GET['search']))
|
||||||
{
|
{
|
||||||
include_once(CLASS_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 = new Search($_GET['search_folder']);
|
||||||
$search->addSearchKeyword('recursive', @$_GET['search_recursively']);
|
$search->addSearchKeyword('recursive', @$_GET['search_recursively']);
|
||||||
$search->addSearchKeyword('mtime_from', @$_GET['search_mtime_from']);
|
$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_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_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_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_VALID_EXTS', 'gif,jpg,png,txt'); //
|
||||||
define('CONFIG_UPLOAD_INVALID_EXTS', '');
|
define('CONFIG_UPLOAD_INVALID_EXTS', '');
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,9 @@
|
|||||||
|
|
||||||
//FILESYSTEM CONFIG <br>
|
//FILESYSTEM CONFIG <br>
|
||||||
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . "class.auth.php");
|
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
|
define('CONFIG_QUERY_STRING_ENABLE', true); //Enable passed query string to setting the system configuration
|
||||||
if(!isset($_SESSION))
|
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_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_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_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_VALID_EXTS', 'gif,jpg,png,txt'); //
|
||||||
define('CONFIG_UPLOAD_INVALID_EXTS', '');
|
define('CONFIG_UPLOAD_INVALID_EXTS', '');
|
||||||
|
|
||||||
|
|||||||
@@ -53,12 +53,12 @@
|
|||||||
{/if}
|
{/if}
|
||||||
<dl class="dl-horizontal">
|
<dl class="dl-horizontal">
|
||||||
<dt>{l s='Sent on:'}</dt>
|
<dt>{l s='Sent on:'}</dt>
|
||||||
<dd>{$message.date_add}</dd>
|
<dd>{$message.date_add} </dd>
|
||||||
</dl>
|
</dl>
|
||||||
{if empty($message.id_employee)}
|
{if empty($message.id_employee)}
|
||||||
<dl class="dl-horizontal">
|
<dl class="dl-horizontal">
|
||||||
<dt>{l s='Browser:'}</dt>
|
<dt>{l s='Browser:'}</dt>
|
||||||
<dd>{$message.user_agent}</dd>
|
<dd>{$message.user_agent} </dd>
|
||||||
</dl>
|
</dl>
|
||||||
{/if}
|
{/if}
|
||||||
{if !empty($message.file_name) && $file_name}
|
{if !empty($message.file_name) && $file_name}
|
||||||
@@ -72,33 +72,26 @@
|
|||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
{/if}
|
{/if}
|
||||||
{if !empty($message.id_order) && empty($message.id_employee)}
|
{if !empty($message.id_order) && $is_valid_order_id && empty($message.id_employee)}
|
||||||
<dl class="dl-horizontal">
|
<dl>
|
||||||
<dt>{l s='Order #'}</dt>
|
<dt>{l s='Order #'}</dt>
|
||||||
<dd>
|
<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>
|
||||||
<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>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
{/if}
|
{/if}
|
||||||
{if !empty($message.id_product) && empty($message.id_employee)}
|
{if !empty($message.id_product) && empty($message.id_employee)}
|
||||||
<dl class="dl-horizontal">
|
<dl class="dl-horizontal">
|
||||||
<dt>{l s='Product #'}</dt>
|
<dt>{l s='Product #'}</dt>
|
||||||
<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>
|
||||||
<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>
|
|
||||||
</dl>
|
</dl>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<form action="{$current}&token={$token}&id_customer_thread={$message.id_customer_thread}&viewcustomer_thread" method="post" class="form-horizontal">
|
<form class="form-horizontal" action="{$current}&token={$token}&id_customer_thread={$message.id_customer_thread}&viewcustomer_thread" method="post">
|
||||||
<dl class="dl-horizontal">
|
<input type="hidden" name="id_customer_message" value="{$message.id_customer_message}" />
|
||||||
<dt> {l s='Subject:'}</dt>
|
<dl>
|
||||||
|
<dt>{l s='Subject:'}</dt>
|
||||||
<dd>
|
<dd>
|
||||||
<input type="hidden" name="id_customer_message" value="{$message.id_customer_message}" />
|
<select name="id_contact" onchange="this.form.submit();">
|
||||||
<select name="id_contact" onchange="this.form.submit();" class="col-lg-3">
|
|
||||||
{foreach $contacts as $contact}
|
{foreach $contacts as $contact}
|
||||||
<option value="{$contact.id_contact}" {if $contact.id_contact == $message.id_contact}selected="selected"{/if}>
|
<option value="{$contact.id_contact}" {if $contact.id_contact == $message.id_contact}selected="selected"{/if}>
|
||||||
{$contact.name}
|
{$contact.name}
|
||||||
@@ -200,4 +193,4 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -26,7 +26,6 @@
|
|||||||
{extends file="helpers/view/view.tpl"}
|
{extends file="helpers/view/view.tpl"}
|
||||||
|
|
||||||
{block name="override_tpl"}
|
{block name="override_tpl"}
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
function saveCustomerNote()
|
function saveCustomerNote()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
<div class="leadin">{block name="leadin"}{/block}</div>
|
<div class="leadin">{block name="leadin"}{/block}</div>
|
||||||
{if $module_confirmation}
|
{if $module_confirmation}
|
||||||
<div class="module_confirmation conf confirm">
|
<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>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
<div style="display: none">
|
<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/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/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/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}
|
{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_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>
|
<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(){
|
$("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();
|
$("label[for=truncate],#truncate").hide();
|
||||||
else
|
else
|
||||||
$("label[for=truncate],#truncate").show();
|
$("label[for=truncate],#truncate").show();
|
||||||
|
|
||||||
if ($("#entity > option:selected").val() == 8)
|
if ($("#entity > option:selected").val() == 9)
|
||||||
{
|
|
||||||
$(".import_supply_orders_details").show();
|
$(".import_supply_orders_details").show();
|
||||||
$('input[name=multiple_value_separator]').val('|');
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$(".import_supply_orders_details").hide();
|
$(".import_supply_orders_details").hide();
|
||||||
$('input[name=multiple_value_separator]').val('{if isset($multiple_value_separator_selected)}{$multiple_value_separator_selected}{else},{/if}');
|
$('input[name=multiple_value_separator]').val('{if isset($multiple_value_separator_selected)}{$multiple_value_separator_selected}{else},{/if}');
|
||||||
}
|
}
|
||||||
if ($("#entity > option:selected").val() == 1)
|
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
|
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)
|
if ($("#entity > option:selected").val() == 1 || $("#entity > option:selected").val() == 0)
|
||||||
$(".import_products_categories, label[for=regenerate], #regenerate").show();
|
$(".import_products_categories").show();
|
||||||
else
|
else
|
||||||
$(".import_products_categories, label[for=regenerate], #regenerate").hide();
|
$(".import_products_categories").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)
|
|
||||||
|
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();
|
$("label[for=forceIDs], #forceIDs").show();
|
||||||
else
|
else
|
||||||
$("label[for=forceIDs], #forceIDs").hide();
|
$("label[for=forceIDs], #forceIDs").hide();
|
||||||
|
|||||||
@@ -96,14 +96,14 @@
|
|||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<select name="i_{$module->name}" class="moduleFavorite">
|
<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="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>
|
<option value="0" {if isset($module->preferences.interest) && $module->preferences.interest eq '0'}selected="selected"{/if}>{l s='No'}</option>
|
||||||
</select>
|
</select>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<select name="f_{$module->name}" class="moduleFavorite">
|
<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="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>
|
<option value="0" {if isset($module->preferences.favorite) && $module->preferences.favorite eq '0'}selected="selected"{/if}>{l s='No'}</option>
|
||||||
</select>
|
</select>
|
||||||
|
|||||||
@@ -69,10 +69,7 @@
|
|||||||
<div class="module_name">
|
<div class="module_name">
|
||||||
<span style="display:none">{$module->name}</span>
|
<span style="display:none">{$module->name}</span>
|
||||||
{$module->displayName}
|
{$module->displayName}
|
||||||
|
|
||||||
<small>v{$module->version}</small>
|
<small>v{$module->version}</small>
|
||||||
|
|
||||||
|
|
||||||
{if isset($module->type) && $module->type == 'addonsMustHave'}
|
{if isset($module->type) && $module->type == 'addonsMustHave'}
|
||||||
<span class="label label-info">{l s='Must Have'}</span>
|
<span class="label label-info">{l s='Must Have'}</span>
|
||||||
{elseif isset($module->id) && $module->id gt 0}
|
{elseif isset($module->id) && $module->id gt 0}
|
||||||
@@ -86,20 +83,7 @@
|
|||||||
{else}
|
{else}
|
||||||
<span class="label label-warning">{l s='Not installed'}</span>
|
<span class="label label-warning">{l s='Not installed'}</span>
|
||||||
{/if}
|
{/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>
|
</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">
|
<p class="module_description">
|
||||||
{if isset($module->description) && $module->description ne ''}
|
{if isset($module->description) && $module->description ne ''}
|
||||||
{$module->description}
|
{$module->description}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
<span>
|
<span>
|
||||||
<select id="show_modules" onChange="autoUrl('show_modules', '{$url_show_modules}')" class="filter fixed-width-lg">
|
<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 value="all">{l s='All modules'} </option>
|
||||||
<option>---------------</option>
|
<option>-</option>
|
||||||
{foreach $modules as $module}
|
{foreach $modules as $module}
|
||||||
<option value="{$module->id|intval}" {if $display_key == $module->id}selected="selected"{/if}>{$module->displayName}</option>
|
<option value="{$module->id|intval}" {if $display_key == $module->id}selected="selected"{/if}>{$module->displayName}</option>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
@@ -51,7 +51,6 @@
|
|||||||
</label>
|
</label>
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<div id="modulePosition">
|
<div id="modulePosition">
|
||||||
<form method="post" action="{$url_submit}" >
|
<form method="post" action="{$url_submit}" >
|
||||||
|
|
||||||
@@ -196,4 +195,4 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -39,4 +39,4 @@
|
|||||||
<i class="icon-truck"></i>
|
<i class="icon-truck"></i>
|
||||||
</a>
|
</a>
|
||||||
{/if}
|
{/if}
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@@ -689,7 +689,7 @@
|
|||||||
var id_product = Number(this.id_product);
|
var id_product = Number(this.id_product);
|
||||||
var id_product_attribute = Number(this.id_product_attribute);
|
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_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 ? '<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 ? '<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>' : '');
|
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);
|
$('#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)
|
function displaySummary(jsonSummary)
|
||||||
{
|
{
|
||||||
currency_format = jsonSummary.currency.format;
|
currency_format = jsonSummary.currency.format;
|
||||||
@@ -783,13 +793,13 @@
|
|||||||
if (!changed_shipping_price)
|
if (!changed_shipping_price)
|
||||||
$('#shipping_price').html('<b>' + formatCurrency(parseFloat(jsonSummary.summary.total_shipping), currency_format, currency_sign, currency_blank) + '</b>');
|
$('#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;
|
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_vouchers').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_discounts_tax_exc)), 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_shipping').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_shipping_tax_exc)), currency_format, currency_sign, currency_blank));
|
||||||
$('#total_taxes').html(formatCurrency(parseFloat(jsonSummary.summary.total_tax.replace(',', '.')), 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(jsonSummary.summary.total_price_without_tax.replace(',', '.')), 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(jsonSummary.summary.total_price.replace(',', '.')), 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(jsonSummary.summary.total_products.replace(',', '.')), 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 = jsonSummary.cart.id_currency;
|
||||||
$('#id_currency option').removeAttr('selected');
|
$('#id_currency option').removeAttr('selected');
|
||||||
$('#id_currency option[value="'+id_currency+'"]').attr('selected', true);
|
$('#id_currency option[value="'+id_currency+'"]').attr('selected', true);
|
||||||
|
|||||||
@@ -65,29 +65,27 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-3 box-stats color3" >
|
<div class="col-lg-3 box-stats color3" >
|
||||||
<i class="icon-calendar-empty"></i>
|
<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>
|
<span class="value">{dateFormat date=$order->date_add full=false}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-3 box-stats color2" >
|
<div class="col-lg-3 box-stats color2" >
|
||||||
<i class="icon-comments"></i>
|
<i class="icon-comments"></i>
|
||||||
<span class="title">{l s='Messages'}<br /><small>sous-titre</small></span>
|
<span class="title">{l s='Messages'}<br /><small>{l s='subtitle'}</small></span>
|
||||||
<!-- <span class="value">{sizeof($messages)}</span> -->
|
|
||||||
<span class="value"><a href="{$link->getAdminLink('AdminCustomerThreads')|escape:'htmlall':'UTF-8'}">{sizeof($customer_thread_message)}</a></span>
|
<span class="value"><a href="{$link->getAdminLink('AdminCustomerThreads')|escape:'htmlall':'UTF-8'}">{sizeof($customer_thread_message)}</a></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-3 box-stats color1" >
|
<div class="col-lg-3 box-stats color1" >
|
||||||
<i class="icon-ok"></i>
|
<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>
|
<span class="value">{sizeof($products)}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-3 box-stats color4" >
|
<div class="col-lg-3 box-stats color4" >
|
||||||
<i class="icon-money"></i>
|
<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>
|
<span class="value">{displayPrice price=$order->total_paid_tax_incl currency=$currency->id}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<!-- Todo : Be smart and find the best place for Admin order hook -->
|
<!-- Todo : Be smart and find the best place for Admin order hook -->
|
||||||
{hook h="displayAdminOrder" id_order=$order->id}
|
{hook h="displayAdminOrder" id_order=$order->id}
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -534,7 +532,7 @@
|
|||||||
<label class="control-label col-lg-3">{l s='Choose a standard message'}</label>
|
<label class="control-label col-lg-3">{l s='Choose a standard message'}</label>
|
||||||
<div class="col-lg-9">
|
<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?'}')">
|
<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}
|
{foreach from=$orderMessages item=orderMessage}
|
||||||
<option value="{$orderMessage['message']|escape:'htmlall':'UTF-8'}">{$orderMessage['name']}</option>
|
<option value="{$orderMessage['message']|escape:'htmlall':'UTF-8'}">{$orderMessage['name']}</option>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
@@ -852,10 +850,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</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.'}');">
|
<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}" />
|
<input type="hidden" name="id_order" value="{$order->id}" />
|
||||||
<div style="display: none">
|
<div style="display: none">
|
||||||
@@ -1114,8 +1108,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{if (sizeof($messages))}
|
{if (sizeof($messages))}
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<h3>
|
<h3>
|
||||||
|
|||||||
@@ -92,16 +92,16 @@
|
|||||||
<label class="control-label col-lg-3" for="id_manufacturer">{l s='Manufacturer:'}</label>
|
<label class="control-label col-lg-3" for="id_manufacturer">{l s='Manufacturer:'}</label>
|
||||||
<div class="col-lg-5">
|
<div class="col-lg-5">
|
||||||
<select name="id_manufacturer" id="id_manufacturer">
|
<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}
|
{if $product->id_manufacturer}
|
||||||
<option value="{$product->id_manufacturer}" selected="selected">{$product->manufacturer_name}</option>
|
<option value="{$product->id_manufacturer}" selected="selected">{$product->manufacturer_name}</option>
|
||||||
{/if}
|
{/if}
|
||||||
<option disabled="disabled">----------</option>
|
<option disabled="disabled">-</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-4">
|
<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">
|
<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>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -24,14 +24,12 @@
|
|||||||
*}
|
*}
|
||||||
{if isset($product->id) && !$product->is_virtual}
|
{if isset($product->id) && !$product->is_virtual}
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var msg_combination_1 = '{l s='Please choose an attribute.'}';
|
var msg_combination_1 = '{l s='Please choose an attribute.'}';
|
||||||
var msg_combination_2 = '{l s='Please choose a value.'}';
|
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_combination_3 = '{l s='You can only add one combination per attribute type.'}';
|
||||||
var msg_new_combination = '{l s='New combination'}';
|
var msg_new_combination = '{l s='New combination'}';
|
||||||
var msg_cancel_combination = '{l s='Cancel combination'}';
|
var msg_cancel_combination = '{l s='Cancel combination'}';
|
||||||
|
|
||||||
var attrs = new Array();
|
var attrs = new Array();
|
||||||
var modifyattributegroup = "{l s='Modify this attribute combination.' js=1}";
|
var modifyattributegroup = "{l s='Modify this attribute combination.' js=1}";
|
||||||
attrs[0] = new Array(0, "---");
|
attrs[0] = new Array(0, "---");
|
||||||
@@ -43,10 +41,8 @@
|
|||||||
{/foreach}
|
{/foreach}
|
||||||
);
|
);
|
||||||
{/foreach}
|
{/foreach}
|
||||||
|
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
populate_attrs();
|
populate_attrs();
|
||||||
|
|
||||||
$(".datepicker").datepicker({
|
$(".datepicker").datepicker({
|
||||||
prevText: '',
|
prevText: '',
|
||||||
nextText: '',
|
nextText: '',
|
||||||
@@ -54,14 +50,11 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<input type="hidden" name="submitted_tabs[]" value="Combinations" />
|
<input type="hidden" name="submitted_tabs[]" value="Combinations" />
|
||||||
|
|
||||||
<h3>{l s='Add or modify combinations for this product.'}</h3>
|
<h3>{l s='Add or modify combinations for this product.'}</h3>
|
||||||
<div class="alert alert-info">
|
<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.'}
|
{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>
|
</div>
|
||||||
|
|
||||||
{if $combination_exists}
|
{if $combination_exists}
|
||||||
<div class="alert alert-info" style="display:block">
|
<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/>
|
{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 />
|
<br />
|
||||||
{include file="controllers/products/multishop/check_fields.tpl" product_tab="Combinations"}
|
{include file="controllers/products/multishop/check_fields.tpl" product_tab="Combinations"}
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<div id="add_new_combination" class="panel" style="display: none;">
|
<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="panel-heading">{l s='Add or modify combinations for this product.'}</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-lg-3" for="attribute_group">{l s='Attribute:'}</label>
|
<label class="control-label col-lg-3" for="attribute_group">{l s='Attribute:'}</label>
|
||||||
<div class="col-lg-5">
|
<div class="col-lg-5">
|
||||||
@@ -89,14 +79,13 @@
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<label class="control-label col-lg-3" for="attribute">{l s='Value:'}</label>
|
<label class="control-label col-lg-3" for="attribute">{l s='Value:'}</label>
|
||||||
<div class="col-lg-9">
|
<div class="col-lg-9">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<div class="col-lg-8">
|
<div class="col-lg-8">
|
||||||
<select name="attribute" id="attribute">
|
<select name="attribute" id="attribute">
|
||||||
<option value="0">---</option>
|
<option value="0">-</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-4">
|
<div class="col-lg-4">
|
||||||
@@ -113,9 +102,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-lg-3" for="attribute_reference">
|
<label class="control-label col-lg-3" for="attribute_reference">
|
||||||
<span class="label-tooltip" data-toggle="tooltip"
|
<span class="label-tooltip" data-toggle="tooltip"
|
||||||
@@ -126,8 +113,7 @@
|
|||||||
<div class="col-lg-5">
|
<div class="col-lg-5">
|
||||||
<input type="text" id="attribute_reference" name="attribute_reference" value="" />
|
<input type="text" id="attribute_reference" name="attribute_reference" value="" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-lg-3" for="attribute_ean13">
|
<label class="control-label col-lg-3" for="attribute_ean13">
|
||||||
{l s='EAN13:'}
|
{l s='EAN13:'}
|
||||||
@@ -135,8 +121,7 @@
|
|||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
<input maxlength="13" type="text" id="attribute_ean13" name="attribute_ean13" value="" />
|
<input maxlength="13" type="text" id="attribute_ean13" name="attribute_ean13" value="" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-lg-3" for="attribute_upc">
|
<label class="control-label col-lg-3" for="attribute_upc">
|
||||||
{l s='UPC:'}
|
{l s='UPC:'}
|
||||||
@@ -144,10 +129,8 @@
|
|||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
<input maxlength="12" type="text" id="attribute_upc" name="attribute_upc" value="" />
|
<input maxlength="12" type="text" id="attribute_upc" name="attribute_upc" value="" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-lg-3" for="attribute_wholesale_price">
|
<label class="control-label col-lg-3" for="attribute_wholesale_price">
|
||||||
{include file="controllers/products/multishop/checkbox.tpl" field="attribute_wholesale_price" type="default"}
|
{include file="controllers/products/multishop/checkbox.tpl" field="attribute_wholesale_price" type="default"}
|
||||||
@@ -165,7 +148,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<span style="display:none;" id="attribute_wholesale_price_full">({l s='Overrides wholesale price on "Information" tab'})</span>
|
<span style="display:none;" id="attribute_wholesale_price_full">({l s='Overrides wholesale price on "Information" tab'})</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-lg-3" for="attribute_price_impact">
|
<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"}
|
{include file="controllers/products/multishop/checkbox.tpl" field="attribute_price_impact" type="attribute_price_impact"}
|
||||||
@@ -223,8 +205,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-lg-3" for="attribute_weight_impact">
|
<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"}
|
{include file="controllers/products/multishop/checkbox.tpl" field="attribute_weight_impact" type="attribute_weight_impact"}
|
||||||
@@ -255,7 +235,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="tr_unit_impact" class="form-group">
|
<div id="tr_unit_impact" class="form-group">
|
||||||
<label class="control-label col-lg-3" for="attribute_unit_impact">
|
<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"}
|
{include file="controllers/products/multishop/checkbox.tpl" field="attribute_unit_impact" type="attribute_unit_impact"}
|
||||||
@@ -284,7 +263,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{if $ps_use_ecotax}
|
{if $ps_use_ecotax}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-lg-3" for="attribute_ecotax">
|
<label class="control-label col-lg-3" for="attribute_ecotax">
|
||||||
@@ -303,7 +281,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-lg-3" for="attribute_minimal_quantity">
|
<label class="control-label col-lg-3" for="attribute_minimal_quantity">
|
||||||
{include file="controllers/products/multishop/checkbox.tpl" field="attribute_minimal_quantity" type="default"}
|
{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}" />
|
<input maxlength="6" name="attribute_minimal_quantity" id="attribute_minimal_quantity" type="text" value="{$minimal_quantity}" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-lg-3" for="available_date_attribute">
|
<label class="control-label col-lg-3" for="available_date_attribute">
|
||||||
{include file="controllers/products/multishop/checkbox.tpl" field="available_date_attribute" type="default"}
|
{include file="controllers/products/multishop/checkbox.tpl" field="available_date_attribute" type="default"}
|
||||||
@@ -333,9 +309,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-lg-3">{l s='Image:'}</label>
|
<label class="control-label col-lg-3">{l s='Image:'}</label>
|
||||||
<div class="col-lg-9">
|
<div class="col-lg-9">
|
||||||
@@ -344,14 +318,13 @@
|
|||||||
<li>
|
<li>
|
||||||
<input type="checkbox" name="id_image_attr[]" value="{$image.id_image}" id="id_image_attr_{$image.id_image}" />
|
<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}">
|
<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>
|
</label>
|
||||||
</li>
|
</li>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label col-lg-3" for="attribute_default">
|
<label class="control-label col-lg-3" for="attribute_default">
|
||||||
{include file="controllers/products/multishop/checkbox.tpl" field="attribute_default" type="attribute_default"}
|
{include file="controllers/products/multishop/checkbox.tpl" field="attribute_default" type="attribute_default"}
|
||||||
@@ -366,7 +339,6 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="panel-footer">
|
<div class="panel-footer">
|
||||||
<span id="ResetSpan">
|
<span id="ResetSpan">
|
||||||
<button type="reset" name="ResetBtn" id="ResetBtn" onclick="$('#desc-product-newCombination').click();" class="btn btn-default">
|
<button type="reset" name="ResetBtn" id="ResetBtn" onclick="$('#desc-product-newCombination').click();" class="btn btn-default">
|
||||||
@@ -377,4 +349,4 @@
|
|||||||
</div>
|
</div>
|
||||||
{$list}
|
{$list}
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -33,27 +33,42 @@
|
|||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<label class="control-label col-lg-5 file_upload_label">
|
<div class="form-group">
|
||||||
<span class="label-tooltip" data-toggle="tooltip"
|
<label class="control-label col-lg-3 file_upload_label">
|
||||||
title="{l s='Format:'} JPG, GIF, PNG. {l s='Filesize:'} {$max_image_size|string_format:"%.2f"} {l s='MB max.'}">
|
<span class="label-tooltip" data-toggle="tooltip"
|
||||||
{if isset($id_image)}{l s='Edit this product image'}{else}{l s='Add a new image to this product'}{/if}
|
title="{l s='Format:'} JPG, GIF, PNG. {l s='Filesize:'} {$max_image_size|string_format:"%.2f"} {l s='MB max.'}">
|
||||||
</span>
|
{if isset($id_image)}{l s='Edit this product image'}{else}{l s='Add a new image to this product'}{/if}
|
||||||
</label>
|
</span>
|
||||||
<div class="col-lg-7">
|
</label>
|
||||||
{l s='File:'}
|
<div class="col-lg-9">
|
||||||
<div id="file-uploader">
|
{l s='File:'}
|
||||||
<noscript>
|
<div id="file-uploader">
|
||||||
<p>{l s='Please enable JavaScript to use file uploader:'}</p>
|
<noscript>
|
||||||
</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>
|
||||||
<div id="progressBarImage" class="progressBarImage"></div>
|
</div>
|
||||||
<div id="showCounter" style="display:none;">
|
<div class="form-group">
|
||||||
<span id="imageUpload">0</span><span id="imageTotal">0</span>
|
<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>
|
</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>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -61,6 +76,7 @@
|
|||||||
<thead>
|
<thead>
|
||||||
<tr class="nodrag nodrop">
|
<tr class="nodrag nodrop">
|
||||||
<th class="fixed-width-sm"><span class="title_box">{l s='Image'}</span></th>
|
<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>
|
<th class="center fixed-width-xs"><span class="title_box">{l s='Position'}</span></th>
|
||||||
{if $shops}
|
{if $shops}
|
||||||
{foreach from=$shops item=shop}
|
{foreach from=$shops item=shop}
|
||||||
@@ -79,9 +95,10 @@
|
|||||||
<tr id="image_id">
|
<tr id="image_id">
|
||||||
<td>
|
<td>
|
||||||
<a href="{$smarty.const._THEME_PROD_DIR_}image_path.jpg" class="fancybox">
|
<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>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
|
<td>legend</td>
|
||||||
<td id="td_image_id" class="pointer dragHandle center positionImage">
|
<td id="td_image_id" class="pointer dragHandle center positionImage">
|
||||||
image_position
|
image_position
|
||||||
</td>
|
</td>
|
||||||
@@ -129,7 +146,7 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
assoc = false;
|
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}
|
{/foreach}
|
||||||
{literal}
|
{literal}
|
||||||
$("#imageTable").tableDnD(
|
$("#imageTable").tableDnD(
|
||||||
@@ -149,19 +166,18 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
var filecheck = 1;
|
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"),
|
element: document.getElementById("file-uploader"),
|
||||||
action: "ajax-tab.php",
|
action: "ajax-tab.php",
|
||||||
debug: false,
|
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)
|
onComplete: function(id, fileName, responseJSON)
|
||||||
{
|
{
|
||||||
var percent = ((filecheck * 100) / nbfile);
|
var percent = ((filecheck * 100) / nbfile);
|
||||||
@@ -186,7 +202,7 @@
|
|||||||
cover = "icon-check-empty";
|
cover = "icon-check-empty";
|
||||||
if (responseJSON.cover == "1")
|
if (responseJSON.cover == "1")
|
||||||
cover = "icon-check-sign";
|
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);
|
$("#imageTable tr:last").after(responseJSON.html);
|
||||||
$("#countImage").html(parseInt($("#countImage").html()) + 1);
|
$("#countImage").html(parseInt($("#countImage").html()) + 1);
|
||||||
$("#img" + id).remove();
|
$("#img" + id).remove();
|
||||||
@@ -199,6 +215,12 @@
|
|||||||
},
|
},
|
||||||
onSubmit: function(id, filename)
|
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();
|
$("#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>");
|
$("#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
|
"ajax" : 1
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
//function
|
|
||||||
function updateImagePosition(json)
|
function updateImagePosition(json)
|
||||||
{
|
{
|
||||||
doAdminAjax(
|
doAdminAjax(
|
||||||
@@ -306,13 +327,14 @@
|
|||||||
$("#img" + id).remove();
|
$("#img" + id).remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
function imageLine(id, path, position, cover, shops)
|
function imageLine(id, path, position, cover, shops, legend)
|
||||||
{
|
{
|
||||||
line = $("#lineType").html();
|
line = $("#lineType").html();
|
||||||
line = line.replace(/image_id/g, id);
|
line = line.replace(/image_id/g, legend);
|
||||||
line = line.replace(/[a-z]{2}-default-small_default/g, path+'-small_default');
|
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_path/g, path);
|
||||||
line = line.replace(/image_position/g, position);
|
line = line.replace(/image_position/g, position);
|
||||||
|
line = line.replace(/legend/g, legend);
|
||||||
line = line.replace(/icon-check-empty/g, cover);
|
line = line.replace(/icon-check-empty/g, cover);
|
||||||
line = line.replace(/<tbody>/gi, "");
|
line = line.replace(/<tbody>/gi, "");
|
||||||
line = line.replace(/<\/tbody>/gi, "");
|
line = line.replace(/<\/tbody>/gi, "");
|
||||||
@@ -330,4 +352,4 @@
|
|||||||
{/literal}
|
{/literal}
|
||||||
</script>
|
</script>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -429,6 +429,17 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
{/if}
|
{/if}
|
||||||
{foreach from=$languages item=language}
|
{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}
|
{if $languages|count > 1}
|
||||||
<div class="translatable-field lang-{$language.id_lang}">
|
<div class="translatable-field lang-{$language.id_lang}">
|
||||||
<div class="col-lg-9">
|
<div class="col-lg-9">
|
||||||
|
|||||||
@@ -444,7 +444,7 @@ $(document).ready(function () {
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<select name="sp_reduction_type" id="sp_reduction_type">
|
<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="amount">{l s='Amount'}</option>
|
||||||
<option value="percentage">{l s='Percentage'}</option>
|
<option value="percentage">{l s='Percentage'}</option>
|
||||||
</select>
|
</select>
|
||||||
@@ -453,7 +453,6 @@ $(document).ready(function () {
|
|||||||
</div>
|
</div>
|
||||||
<p class="help-block">{l s='The discount is applied after the tax'}</p>
|
<p class="help-block">{l s='The discount is applied after the tax'}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|||||||
@@ -58,6 +58,7 @@
|
|||||||
$('#file_missing').hide();
|
$('#file_missing').hide();
|
||||||
$('#virtual_product_name').attr('value', fileName);
|
$('#virtual_product_name').attr('value', fileName);
|
||||||
$("#upload-confirmation .error").remove();
|
$("#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'}' +
|
$('#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>');
|
'<input type="hidden" id="virtual_product_filename" name="virtual_product_filename" value="' + msg + '" /></span>');
|
||||||
$("#upload-confirmation").show();
|
$("#upload-confirmation").show();
|
||||||
|
|||||||
@@ -112,7 +112,7 @@
|
|||||||
<label class="control-label col-lg-3">{l s='Filter by product:'}</label>
|
<label class="control-label col-lg-3">{l s='Filter by product:'}</label>
|
||||||
<div class="col-lg-9">
|
<div class="col-lg-9">
|
||||||
<select id="selectProduct" name="selectProduct" style="width: 200px;" onfocus="fillProducts();" onchange="updateConversionRate(this.value);">
|
<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>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -127,6 +127,4 @@
|
|||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
updateConversionRate(0);
|
updateConversionRate(0);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{/block}
|
{/block}
|
||||||
|
|
||||||
|
|||||||
@@ -44,14 +44,14 @@
|
|||||||
var roundMode = {$round_mode};
|
var roundMode = {$round_mode};
|
||||||
{if isset($shop_context)}
|
{if isset($shop_context)}
|
||||||
{if $shop_context == Shop::CONTEXT_ALL}
|
{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}
|
{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}
|
{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}
|
{/if}
|
||||||
{else}
|
{else}
|
||||||
var youEditFieldFor = '';
|
var youEditFieldFor = '';
|
||||||
{/if}
|
{/if}
|
||||||
{* Notifications vars *}
|
{* Notifications vars *}
|
||||||
var autorefresh_notifications = '{$autorefresh_notifications}';
|
var autorefresh_notifications = '{$autorefresh_notifications}';
|
||||||
@@ -66,12 +66,12 @@
|
|||||||
var new_msg = '{l s='A new message posted on your shop.' slashes=1}';
|
var new_msg = '{l s='A new message posted on your shop.' slashes=1}';
|
||||||
var excerpt_msg = '{l s='Excerpt: ' slashes=1}';
|
var excerpt_msg = '{l s='Excerpt: ' slashes=1}';
|
||||||
var see_msg = '{l s='Read this message' slashes=1}';
|
var see_msg = '{l s='Read this message' slashes=1}';
|
||||||
var token_admin_orders = '{getAdminToken tab='AdminOrders' slashes=1}';
|
var token_admin_orders = '{getAdminToken tab='AdminOrders'}';
|
||||||
var token_admin_customers = '{getAdminToken tab='AdminCustomers' slashes=1}';
|
var token_admin_customers = '{getAdminToken tab='AdminCustomers'}';
|
||||||
var token_admin_customer_threads = '{getAdminToken tab='AdminCustomerThreads' slashes=1}';
|
var token_admin_customer_threads = '{getAdminToken tab='AdminCustomerThreads'}';
|
||||||
var currentIndex = '{$currentIndex}';
|
var currentIndex = '{$currentIndex}';
|
||||||
var default_language = '{$default_language|intval}';
|
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 admin_modules_link = '{$link->getAdminLink("AdminModules")|addslashes}';
|
||||||
var tab_modules_list = '{if isset($tab_modules_list) && $tab_modules_list}{$tab_modules_list|addslashes}{/if}';
|
var tab_modules_list = '{if isset($tab_modules_list) && $tab_modules_list}{$tab_modules_list|addslashes}{/if}';
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -178,8 +178,7 @@
|
|||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$().ready(function () {
|
$().ready(function () {
|
||||||
var input_id = '{/literal}{if isset($input.id)}{$input.id}{else}{$input.name}{/if}{literal}';
|
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() {
|
$({/literal}'#{$table}{literal}_form').submit( function() {
|
||||||
$(this).find('#'+input_id).val($('#'+input_id).tagify('serialize'));
|
$(this).find('#'+input_id).val($('#'+input_id).tagify('serialize'));
|
||||||
});
|
});
|
||||||
@@ -337,7 +336,7 @@
|
|||||||
{/if}
|
{/if}
|
||||||
>{$option->$input.options.name}</option>
|
>{$option->$input.options.name}</option>
|
||||||
{elseif $option == "-"}
|
{elseif $option == "-"}
|
||||||
<option value="">--</option>
|
<option value="">-</option>
|
||||||
{else}
|
{else}
|
||||||
<option value="{$option[$input.options.id]}"
|
<option value="{$option[$input.options.id]}"
|
||||||
{if isset($input.multiple)}
|
{if isset($input.multiple)}
|
||||||
|
|||||||
@@ -24,11 +24,11 @@
|
|||||||
*}
|
*}
|
||||||
{if count($categories) && isset($categories)}
|
{if count($categories) && isset($categories)}
|
||||||
<script type="text/javascript">
|
<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 use_radio = {if $categories.use_radio}1{else}0{/if};
|
||||||
var selectedCat = '{implode value=$categories.selected_cat}';
|
var selectedCat = {$categories.selected_cat|@implode|intval};
|
||||||
var selectedLabel = '{$categories.trads.selected}';
|
var selectedLabel = '{$categories.trads.selected|@addcslashes:'\''}';
|
||||||
var home = '{$categories.trads.Root.name}';
|
var home = '{$categories.trads.Root.name|@addcslashes:'\''}';
|
||||||
var use_radio = {if $categories.use_radio}1{else}0{/if};
|
var use_radio = {if $categories.use_radio}1{else}0{/if};
|
||||||
var use_context = {if isset($categories.use_context)}1{else}0{/if};
|
var use_context = {if isset($categories.use_context)}1{else}0{/if};
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
|
|||||||
@@ -256,7 +256,7 @@
|
|||||||
{else}
|
{else}
|
||||||
{if $params.type == 'bool'}
|
{if $params.type == 'bool'}
|
||||||
<select class="filter fixed-width-sm" onchange="$('#submitFilterButton{$list_id}').focus();$('#submitFilterButton{$list_id}').click();" name="{$list_id}Filter_{$key}">
|
<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="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>
|
<option value="0" {if $params.value == 0 && $params.value != ''} selected="selected" {/if}>{l s='No'}</option>
|
||||||
</select>
|
</select>
|
||||||
@@ -278,7 +278,7 @@
|
|||||||
{elseif $params.type == 'select'}
|
{elseif $params.type == 'select'}
|
||||||
{if isset($params.filter_key)}
|
{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}>
|
<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)}
|
{if isset($params.list) && is_array($params.list)}
|
||||||
{foreach $params.list AS $option_value => $option_display}
|
{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>
|
<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();
|
btn_submit.hide();
|
||||||
//bind enter key press to validate form
|
//bind enter key press to validate form
|
||||||
$('#{$table}_form').keypress(function (e) {
|
$('#{$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();
|
$('#desc-{$table}-save').click();
|
||||||
});
|
});
|
||||||
//submit the form
|
//submit the form
|
||||||
|
|||||||
@@ -1500,7 +1500,7 @@ abstract class AdminTabCore
|
|||||||
case 'bool':
|
case 'bool':
|
||||||
echo '
|
echo '
|
||||||
<select name="'.$this->table.'Filter_'.$key.'">
|
<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="1"'.($value == 1 ? ' selected="selected"' : '').'>'.$this->l('Yes').'</option>
|
||||||
<option value="0"'.(($value == 0 && $value != '') ? ' selected="selected"' : '').'>'.$this->l('No').'</option>
|
<option value="0"'.(($value == 0 && $value != '') ? ' selected="selected"' : '').'>'.$this->l('No').'</option>
|
||||||
</select>';
|
</select>';
|
||||||
@@ -1524,7 +1524,7 @@ abstract class AdminTabCore
|
|||||||
if (isset($params['filter_key']))
|
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"' : '').'>
|
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']))
|
if (isset($params['select']) && is_array($params['select']))
|
||||||
foreach ($params['select'] as $optionValue => $optionDisplay)
|
foreach ($params['select'] as $optionValue => $optionDisplay)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -124,5 +124,21 @@ class AliasCore extends ObjectModel
|
|||||||
{
|
{
|
||||||
return Configuration::get('PS_ALIAS_FEATURE_ACTIVE');
|
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 $index = array();
|
||||||
|
|
||||||
|
public $_include_override_path = true;
|
||||||
|
|
||||||
protected function __construct()
|
protected function __construct()
|
||||||
{
|
{
|
||||||
$this->root_dir = _PS_ROOT_DIR_.'/';
|
$this->root_dir = _PS_ROOT_DIR_.'/';
|
||||||
@@ -120,10 +122,16 @@ class Autoload
|
|||||||
{
|
{
|
||||||
$classes = array_merge(
|
$classes = array_merge(
|
||||||
$this->getClassesFromDir('classes/'),
|
$this->getClassesFromDir('classes/'),
|
||||||
$this->getClassesFromDir('override/classes/'),
|
$this->getClassesFromDir('controllers/')
|
||||||
$this->getClassesFromDir('controllers/'),
|
|
||||||
$this->getClassesFromDir('override/controllers/')
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if ($this->_include_override_path)
|
||||||
|
$classes = array_merge(
|
||||||
|
$classes,
|
||||||
|
$this->getClassesFromDir('override/classes/'),
|
||||||
|
$this->getClassesFromDir('override/controllers/')
|
||||||
|
);
|
||||||
|
|
||||||
ksort($classes);
|
ksort($classes);
|
||||||
$content = '<?php return '.var_export($classes, true).'; ?>';
|
$content = '<?php return '.var_export($classes, true).'; ?>';
|
||||||
|
|
||||||
@@ -189,4 +197,4 @@ class Autoload
|
|||||||
{
|
{
|
||||||
return isset($this->index[$classname]) ? $this->index[$classname] : null;
|
return isset($this->index[$classname]) ? $this->index[$classname] : null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ class CMSCore extends ObjectModel
|
|||||||
public $link_rewrite;
|
public $link_rewrite;
|
||||||
public $id_cms_category;
|
public $id_cms_category;
|
||||||
public $position;
|
public $position;
|
||||||
|
public $indexation;
|
||||||
public $active;
|
public $active;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -46,6 +47,7 @@ class CMSCore extends ObjectModel
|
|||||||
'fields' => array(
|
'fields' => array(
|
||||||
'id_cms_category' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
|
'id_cms_category' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
|
||||||
'position' => array('type' => self::TYPE_INT),
|
'position' => array('type' => self::TYPE_INT),
|
||||||
|
'indexation' => array('type' => self::TYPE_BOOL),
|
||||||
'active' => array('type' => self::TYPE_BOOL),
|
'active' => array('type' => self::TYPE_BOOL),
|
||||||
|
|
||||||
// Lang fields
|
// Lang fields
|
||||||
|
|||||||
+1
-1
@@ -3219,7 +3219,7 @@ class CartCore extends ObjectModel
|
|||||||
public function getWsCartRows()
|
public function getWsCartRows()
|
||||||
{
|
{
|
||||||
return Db::getInstance()->executeS('
|
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`
|
FROM `'._DB_PREFIX_.'cart_product`
|
||||||
WHERE id_cart = '.(int)$this->id.' AND id_shop = '.(int)Context::getContext()->shop->id
|
WHERE id_cart = '.(int)$this->id.' AND id_shop = '.(int)Context::getContext()->shop->id
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -255,6 +255,16 @@ class CartRuleCore extends ObjectModel
|
|||||||
else
|
else
|
||||||
$cart_rule['quantity_for_user'] = 0;
|
$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
|
// Retrocompatibility with 1.4 discounts
|
||||||
foreach ($result as &$cart_rule)
|
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),
|
'sign' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 8),
|
||||||
'format' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
|
'format' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
|
||||||
'decimals' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', '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'),
|
'deleted' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
|
||||||
'active' => 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 : '';
|
$this->suffix = $this->format % 2 == 0 ? ' '.$this->sign : '';
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Overriding check if currency with the same iso code already exists.
|
* Overriding check if currency rate is not empty and if currency with the same iso code already exists.
|
||||||
* If it's true, currency is doesn't added.
|
* If it's true, currency is not added.
|
||||||
*
|
*
|
||||||
* @see ObjectModelCore::add()
|
* @see ObjectModelCore::add()
|
||||||
*/
|
*/
|
||||||
public function add($autodate = true, $nullValues = false)
|
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)
|
public function updateGroup($list)
|
||||||
{
|
{
|
||||||
$this->cleanGroups();
|
|
||||||
if ($list && !empty($list))
|
if ($list && !empty($list))
|
||||||
|
{
|
||||||
|
$this->cleanGroups();
|
||||||
$this->addGroups($list);
|
$this->addGroups($list);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
$this->addGroups(array($this->id_default_group));
|
$this->addGroups(array($this->id_default_group));
|
||||||
}
|
}
|
||||||
@@ -606,7 +608,7 @@ class CustomerCore extends ObjectModel
|
|||||||
foreach ($groups as $group)
|
foreach ($groups as $group)
|
||||||
{
|
{
|
||||||
$row = array('id_customer' => (int)$this->id, 'id_group' => (int)$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(
|
'fields' => array(
|
||||||
'id_employee' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
|
'id_employee' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
|
||||||
'id_customer_thread' => array('type' => self::TYPE_INT),
|
'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),
|
'message' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml', 'required' => true, 'size' => 65000),
|
||||||
'file_name' => array('type' => self::TYPE_STRING),
|
'file_name' => array('type' => self::TYPE_STRING),
|
||||||
'user_agent' => 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 there are several languages, get language from uri
|
||||||
if ($this->use_routes && Language::isMultiLanguageActivated())
|
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];
|
$_GET['isolang'] = $m[1];
|
||||||
$this->request_uri = substr($this->request_uri, 3);
|
$this->request_uri = substr($this->request_uri, 3);
|
||||||
|
|||||||
+31
-10
@@ -312,16 +312,37 @@ class FeatureCore extends ObjectModel
|
|||||||
*/
|
*/
|
||||||
public static function cleanPositions()
|
public static function cleanPositions()
|
||||||
{
|
{
|
||||||
return Db::getInstance()->execute('
|
//Reordering positions to remove "holes" in them (after delete for instance)
|
||||||
UPDATE `'._DB_PREFIX_.'feature` f
|
$sql = "SELECT id_feature, position FROM "._DB_PREFIX_."feature ORDER BY id_feature";
|
||||||
LEFT JOIN (
|
$db = Db::getInstance();
|
||||||
SELECT @i := @i +1 AS rank, id_feature, position
|
$r = $db->executeS($sql, false);
|
||||||
FROM `'._DB_PREFIX_.'feature`
|
$shiftTable = array(); //List of update queries (one query is necessary for each "hole" in the table)
|
||||||
JOIN (SELECT @i :=1) dummy
|
$currentDelta = 0;
|
||||||
ORDER by position
|
$minId = 0;
|
||||||
) AS f2
|
$maxId = 0;
|
||||||
USING (id_feature)
|
$futurePosition = 1;
|
||||||
SET f.position = f2.rank - 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'];
|
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)
|
if (!is_null($id_product) && $id_product)
|
||||||
{
|
{
|
||||||
$id_feature_value = Db::getInstance()->getValue('
|
$id_feature_value = Db::getInstance()->getValue('
|
||||||
SELECT `id_feature_value`
|
SELECT fp.`id_feature_value`
|
||||||
FROM '._DB_PREFIX_.'feature_product
|
FROM '._DB_PREFIX_.'feature_product fp
|
||||||
WHERE `id_feature` = '.(int)$id_feature.'
|
INNER JOIN '._DB_PREFIX_.'feature_value fv USING (`id_feature_value`)
|
||||||
AND `id_product` = '.(int)$id_product);
|
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('
|
Db::getInstance()->execute('
|
||||||
UPDATE '._DB_PREFIX_.'feature_value_lang
|
UPDATE '._DB_PREFIX_.'feature_value_lang
|
||||||
SET `value` = \''.pSQL($value).'\'
|
SET `value` = \''.pSQL($value).'\'
|
||||||
WHERE `id_feature_value` = '.(int)$id_feature_value.'
|
WHERE `id_feature_value` = '.(int)$id_feature_value.'
|
||||||
|
AND `value` != \''.pSQL($value).'\'
|
||||||
AND `id_lang` = '.(int)$id_lang);
|
AND `id_lang` = '.(int)$id_lang);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (!$custom)
|
||||||
$id_feature_value = Db::getInstance()->getValue('
|
$id_feature_value = Db::getInstance()->getValue('
|
||||||
SELECT fv.`id_feature_value`
|
SELECT fv.`id_feature_value`
|
||||||
FROM '._DB_PREFIX_.'feature_value fv
|
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).'\'
|
WHERE `value` = \''.pSQL($value).'\'
|
||||||
AND fv.`id_feature` = '.(int)$id_feature.'
|
AND fv.`id_feature` = '.(int)$id_feature.'
|
||||||
|
AND fv.`custom` = 0
|
||||||
GROUP BY fv.`id_feature_value`');
|
GROUP BY fv.`id_feature_value`');
|
||||||
|
|
||||||
if ($id_feature_value)
|
if ($id_feature_value)
|
||||||
@@ -160,7 +166,7 @@ class FeatureValueCore extends ObjectModel
|
|||||||
// Feature doesn't exist, create it
|
// Feature doesn't exist, create it
|
||||||
$feature_value = new FeatureValue();
|
$feature_value = new FeatureValue();
|
||||||
$feature_value->id_feature = (int)$id_feature;
|
$feature_value->id_feature = (int)$id_feature;
|
||||||
$feature_value->custom = 0;
|
$feature_value->custom = (bool)$custom;
|
||||||
foreach (Language::getLanguages() as $language)
|
foreach (Language::getLanguages() as $language)
|
||||||
$feature_value->value[$language['id_lang']] = $value;
|
$feature_value->value[$language['id_lang']] = $value;
|
||||||
$feature_value->add();
|
$feature_value->add();
|
||||||
|
|||||||
@@ -102,6 +102,11 @@ class QqUploadedFileForm
|
|||||||
$image = new Image();
|
$image = new Image();
|
||||||
$image->id_product = (int)$product->id;
|
$image->id_product = (int)$product->id;
|
||||||
$image->position = Image::getHighestPosition($product->id) + 1;
|
$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))
|
if (!Image::getCover($image->id_product))
|
||||||
$image->cover = 1;
|
$image->cover = 1;
|
||||||
else
|
else
|
||||||
@@ -136,7 +141,7 @@ class QqUploadedFileForm
|
|||||||
|
|
||||||
if (!$image->update())
|
if (!$image->update())
|
||||||
return array('error' => Tools::displayError('Error while updating status'));
|
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);
|
return array('success' => $img);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,6 +189,11 @@ class QqUploadedFileXhr
|
|||||||
$image = new Image();
|
$image = new Image();
|
||||||
$image->id_product = (int)($product->id);
|
$image->id_product = (int)($product->id);
|
||||||
$image->position = Image::getHighestPosition($product->id) + 1;
|
$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))
|
if (!Image::getCover($image->id_product))
|
||||||
$image->cover = 1;
|
$image->cover = 1;
|
||||||
else
|
else
|
||||||
@@ -223,7 +233,7 @@ class QqUploadedFileXhr
|
|||||||
|
|
||||||
if (!$image->update())
|
if (!$image->update())
|
||||||
return array('error' => Tools::displayError('Error while updating status'));
|
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);
|
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
|
* @param boolean $unrestricted allows search without lang and includes first group and exact match
|
||||||
* @return array Corresponding groupes
|
* @return array Corresponding groupes
|
||||||
*/
|
*/
|
||||||
public static function searchByName($id_lang, $query)
|
public static function searchByName($query)
|
||||||
{
|
{
|
||||||
return Db::getInstance()->getRow('
|
return Db::getInstance()->getRow('
|
||||||
SELECT g.*, gl.*
|
SELECT g.*, gl.*
|
||||||
|
|||||||
+10
-1
@@ -56,6 +56,8 @@ class HookCore extends ObjectModel
|
|||||||
*/
|
*/
|
||||||
public static $executed_hooks = array();
|
public static $executed_hooks = array();
|
||||||
|
|
||||||
|
public static $native_module;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see ObjectModel::$definition
|
* @see ObjectModel::$definition
|
||||||
*/
|
*/
|
||||||
@@ -416,12 +418,19 @@ class HookCore extends ObjectModel
|
|||||||
// Look on modules list
|
// Look on modules list
|
||||||
$altern = 0;
|
$altern = 0;
|
||||||
$output = '';
|
$output = '';
|
||||||
|
|
||||||
|
if (!isset(Hook::$native_module))
|
||||||
|
Hook::$native_module = Module::getNativeModuleList();
|
||||||
|
|
||||||
foreach ($module_list as $array)
|
foreach ($module_list as $array)
|
||||||
{
|
{
|
||||||
// Check errors
|
// Check errors
|
||||||
if ($id_module && $id_module != $array['id_module'])
|
if ($id_module && $id_module != $array['id_module'])
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if ((bool)Configuration::get('PS_DISABLE_NON_NATIVE_MODULE') && !in_array($array['module'], self::$native_module))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (!($moduleInstance = Module::getInstanceByName($array['module'])))
|
if (!($moduleInstance = Module::getInstanceByName($array['module'])))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,9 @@ class ImageCore extends ObjectModel
|
|||||||
/** @var boolean Image is cover */
|
/** @var boolean Image is cover */
|
||||||
public $cover;
|
public $cover;
|
||||||
|
|
||||||
|
/** @var string Legend */
|
||||||
|
public $legend;
|
||||||
|
|
||||||
/** @var string image extension */
|
/** @var string image extension */
|
||||||
public $image_format = 'jpg';
|
public $image_format = 'jpg';
|
||||||
|
|
||||||
@@ -66,6 +69,7 @@ class ImageCore extends ObjectModel
|
|||||||
'id_product' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
|
'id_product' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
|
||||||
'position' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
|
'position' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
|
||||||
'cover' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'shop' => true),
|
'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 $name
|
||||||
* @param string $type
|
* @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`
|
SELECT `id_image_type`, `name`, `width`, `height`, `products`, `categories`, `manufacturers`, `suppliers`, `scenes`
|
||||||
FROM `'._DB_PREFIX_.'image_type`
|
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)
|
public static function getFormatedName($name)
|
||||||
|
|||||||
+1
-1
@@ -62,7 +62,7 @@ class LoggerCore extends ObjectModel
|
|||||||
'fields' => array(
|
'fields' => array(
|
||||||
'severity' => array('type' => self::TYPE_INT, 'validate' => 'isInt', 'required' => true),
|
'severity' => array('type' => self::TYPE_INT, 'validate' => 'isInt', 'required' => true),
|
||||||
'error_code' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
|
'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'),
|
'object_id' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
|
||||||
'id_employee' => 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'),
|
'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 !)
|
// Add modules controllers to list (this function is cool !)
|
||||||
foreach (glob(_PS_MODULE_DIR_.'*/controllers/front/*.php') as $file)
|
foreach (glob(_PS_MODULE_DIR_.'*/controllers/front/*.php') as $file)
|
||||||
{
|
{
|
||||||
$filename = basename($file, '.php');
|
$filename = Tools::strtolower(basename($file, '.php'));
|
||||||
if ($filename == 'index')
|
if ($filename == 'index')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
$module = basename(dirname(dirname(dirname($file))));
|
$module = Tools::strtolower(basename(dirname(dirname(dirname($file)))));
|
||||||
$selected_pages[$module.' - '.$filename] = 'module-'.$module.'-'.$filename;
|
$selected_pages[$module.' - '.$filename] = 'module-'.$module.'-'.$filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1139,7 +1139,7 @@ abstract class ObjectModelCore
|
|||||||
{
|
{
|
||||||
$vars = get_class_vars($class_name);
|
$vars = get_class_vars($class_name);
|
||||||
foreach ($vars['shopIDs'] as $id_shop)
|
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 = '';
|
$prepend = '';
|
||||||
if (count($or))
|
if (count($or))
|
||||||
@@ -1658,4 +1658,4 @@ abstract class ObjectModelCore
|
|||||||
{
|
{
|
||||||
$this->update_fields = $fields;
|
$this->update_fields = $fields;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -545,6 +545,13 @@ abstract class PaymentModuleCore extends Module
|
|||||||
if ($order_status->logable)
|
if ($order_status->logable)
|
||||||
ProductSale::addProductSale((int)$product['id_product'], (int)$product['cart_quantity']);
|
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())
|
if (Configuration::get('PS_STOCK_MANAGEMENT') && $order_detail->getStockState())
|
||||||
{
|
{
|
||||||
$history = new OrderHistory();
|
$history = new OrderHistory();
|
||||||
@@ -553,13 +560,6 @@ abstract class PaymentModuleCore extends Module
|
|||||||
$history->addWithemail();
|
$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);
|
unset($order_detail);
|
||||||
|
|
||||||
// Order is reloaded because the status just changed
|
// Order is reloaded because the status just changed
|
||||||
|
|||||||
@@ -3623,6 +3623,7 @@ class ProductCore extends ObjectModel
|
|||||||
if ($result3)
|
if ($result3)
|
||||||
{
|
{
|
||||||
$result3['id_feature_value'] = $new_id_feature_value;
|
$result3['id_feature_value'] = $new_id_feature_value;
|
||||||
|
$result3['value'] = pSQL($result3['value']);
|
||||||
$return &= Db::getInstance()->insert('feature_value_lang', $result3);
|
$return &= Db::getInstance()->insert('feature_value_lang', $result3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+33
-21
@@ -74,11 +74,22 @@ class ProductSaleCore
|
|||||||
$groups = FrontController::getCurrentCustomerGroups();
|
$groups = FrontController::getCurrentCustomerGroups();
|
||||||
$sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');
|
$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;
|
$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')
|
if ($order_by == 'date_add')
|
||||||
$prefix = 'p.';
|
|
||||||
|
|
||||||
$sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity,
|
$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.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`,
|
||||||
pl.`meta_keywords`, pl.`meta_title`, pl.`name`,
|
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`)
|
LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
|
||||||
'.Product::sqlStock('p').'
|
'.Product::sqlStock('p').'
|
||||||
WHERE product_shop.`active` = 1
|
WHERE product_shop.`active` = 1
|
||||||
AND product_shop.`visibility` != \'none\'
|
AND p.`visibility` != \'none\'
|
||||||
AND p.`id_product` IN (
|
AND p.`id_product` IN ('.$ids.')
|
||||||
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.'
|
|
||||||
)
|
|
||||||
GROUP BY product_shop.id_product
|
GROUP BY product_shop.id_product
|
||||||
ORDER BY '.(!empty($order_table) ? '`'.pSQL($order_table).'`.' : '').'`'.pSQL($order_by).'` '.pSQL($order_way).'
|
ORDER BY '.(!empty($order_table) ? '`'.pSQL($order_table).'`.' : '').'`'.pSQL($order_by).'` '.pSQL($order_way).'
|
||||||
LIMIT '.(int)($page_number * $nb_products).', '.(int)$nb_products;
|
LIMIT '.(int)($page_number * $nb_products).', '.(int)$nb_products;
|
||||||
@@ -141,16 +147,27 @@ class ProductSaleCore
|
|||||||
$groups = FrontController::getCurrentCustomerGroups();
|
$groups = FrontController::getCurrentCustomerGroups();
|
||||||
$sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');
|
$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`,
|
$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,
|
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
|
IFNULL(pa.minimal_quantity, p.minimal_quantity) as minimal_quantity, stock.out_of_stock
|
||||||
FROM `'._DB_PREFIX_.'product_sale` ps
|
FROM `'._DB_PREFIX_.'product_sale` ps
|
||||||
LEFT JOIN `'._DB_PREFIX_.'product` p ON ps.`id_product` = p.`id_product`
|
LEFT JOIN `'._DB_PREFIX_.'product` p ON ps.`id_product` = p.`id_product`
|
||||||
'.Shop::addSqlAssociation('product', 'p').'
|
'.Shop::addSqlAssociation('product', 'p').'
|
||||||
LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa
|
LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (ps.`id_product` = pa.`id_product` AND pa.default_on = 1)
|
||||||
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_lang` pl
|
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl
|
||||||
ON p.`id_product` = pl.`id_product`
|
ON p.`id_product` = pl.`id_product`
|
||||||
AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').'
|
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`
|
ON cl.`id_category` = product_shop.`id_category_default`
|
||||||
AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').'
|
AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').'
|
||||||
WHERE product_shop.`active` = 1
|
WHERE product_shop.`active` = 1
|
||||||
AND product_shop.`visibility` != \'none\'
|
AND p.`visibility` != \'none\'
|
||||||
AND p.`id_product` IN (
|
AND p.`id_product` IN ('.$ids.')
|
||||||
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.'
|
|
||||||
)
|
|
||||||
GROUP BY product_shop.id_product
|
GROUP BY product_shop.id_product
|
||||||
ORDER BY sales DESC
|
ORDER BY sales DESC
|
||||||
LIMIT '.(int)($page_number * $nb_products).', '.(int)$nb_products;
|
LIMIT '.(int)($page_number * $nb_products).', '.(int)$nb_products;
|
||||||
|
|||||||
+24
-13
@@ -94,7 +94,7 @@ class SpecificPriceCore extends ObjectModel
|
|||||||
if (parent::add($autodate, $nullValues))
|
if (parent::add($autodate, $nullValues))
|
||||||
{
|
{
|
||||||
// Flush cache when we adding a new specific price
|
// Flush cache when we adding a new specific price
|
||||||
self::$_specificPriceCache = array();
|
SpecificPrice::$_specificPriceCache = array();
|
||||||
Product::flushPriceCache();
|
Product::flushPriceCache();
|
||||||
// Set cache of feature detachable to true
|
// Set cache of feature detachable to true
|
||||||
Configuration::updateGlobalValue('PS_SPECIFIC_PRICE_FEATURE_ACTIVE', '1');
|
Configuration::updateGlobalValue('PS_SPECIFIC_PRICE_FEATURE_ACTIVE', '1');
|
||||||
@@ -108,7 +108,7 @@ class SpecificPriceCore extends ObjectModel
|
|||||||
if (parent::update($null_values))
|
if (parent::update($null_values))
|
||||||
{
|
{
|
||||||
// Flush cache when we updating a new specific price
|
// Flush cache when we updating a new specific price
|
||||||
self::$_specificPriceCache = array();
|
SpecificPrice::$_specificPriceCache = array();
|
||||||
Product::flushPriceCache();
|
Product::flushPriceCache();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -120,7 +120,7 @@ class SpecificPriceCore extends ObjectModel
|
|||||||
if (parent::delete())
|
if (parent::delete())
|
||||||
{
|
{
|
||||||
// Flush cache when we deletind a new specific price
|
// Flush cache when we deletind a new specific price
|
||||||
self::$_specificPriceCache = array();
|
SpecificPrice::$_specificPriceCache = array();
|
||||||
Product::flushPriceCache();
|
Product::flushPriceCache();
|
||||||
// Refresh cache of feature detachable
|
// Refresh cache of feature detachable
|
||||||
Configuration::updateGlobalValue('PS_SPECIFIC_PRICE_FEATURE_ACTIVE', SpecificPrice::isCurrentlyUsed($this->def['table']));
|
Configuration::updateGlobalValue('PS_SPECIFIC_PRICE_FEATURE_ACTIVE', SpecificPrice::isCurrentlyUsed($this->def['table']));
|
||||||
@@ -180,9 +180,9 @@ class SpecificPriceCore extends ObjectModel
|
|||||||
if (!SpecificPrice::isFeatureActive())
|
if (!SpecificPrice::isFeatureActive())
|
||||||
return explode(';', Configuration::get('PS_SPECIFIC_PRICE_PRIORITIES'));
|
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`
|
SELECT `priority`, `id_specific_price_priority`
|
||||||
FROM `'._DB_PREFIX_.'specific_price_priority`
|
FROM `'._DB_PREFIX_.'specific_price_priority`
|
||||||
WHERE `id_product` = '.(int)$id_product.'
|
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)
|
if (!$priority)
|
||||||
$priority = Configuration::get('PS_SPECIFIC_PRICE_PRIORITIES');
|
$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);
|
$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');
|
$now = date('Y-m-d H:i:s');
|
||||||
self::$_specificPriceCache[$key] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
|
$query = '
|
||||||
SELECT *, '.SpecificPrice::_getScoreQuery($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_customer).'
|
SELECT *, '.SpecificPrice::_getScoreQuery($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_customer).'
|
||||||
FROM `'._DB_PREFIX_.'specific_price`
|
FROM `'._DB_PREFIX_.'specific_price`
|
||||||
WHERE `id_product` IN (0, '.(int)$id_product.')
|
WHERE `id_product` IN (0, '.(int)$id_product.')
|
||||||
AND `id_product_attribute` IN (0, '.(int)$id_product_attribute.')
|
AND `id_product_attribute` IN (0, '.(int)$id_product_attribute.')
|
||||||
@@ -228,11 +228,22 @@ class SpecificPriceCore extends ObjectModel
|
|||||||
AND
|
AND
|
||||||
(`to` = \'0000-00-00 00:00:00\' OR \''.$now.'\' <= `to`)
|
(`to` = \'0000-00-00 00:00:00\' OR \''.$now.'\' <= `to`)
|
||||||
)
|
)
|
||||||
AND id_cart IN (0, '.(int)$id_cart.')'.
|
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');
|
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)
|
public static function setPriorities($priorities)
|
||||||
|
|||||||
+91
-54
@@ -357,13 +357,11 @@ class ToolsCore
|
|||||||
if (Validate::isLanguageIsoCode($string))
|
if (Validate::isLanguageIsoCode($string))
|
||||||
{
|
{
|
||||||
$lang = new Language(Language::getIdByIso($string));
|
$lang = new Language(Language::getIdByIso($string));
|
||||||
if (Validate::isLoadedObject($lang) && $lang->active)
|
if (Validate::isLoadedObject($lang) && $lang->active && $lang->isAssociatedToShop())
|
||||||
{
|
{
|
||||||
$language = new Language((int)$lang->id);
|
Context::getContext()->language = $lang;
|
||||||
if (Validate::isLoadedObject($language))
|
|
||||||
Context::getContext()->language = $language;
|
|
||||||
$cookie->id_lang = (int)$lang->id;
|
$cookie->id_lang = (int)$lang->id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -674,14 +672,20 @@ class ToolsCore
|
|||||||
public static function htmlentitiesUTF8($string, $type = ENT_QUOTES)
|
public static function htmlentitiesUTF8($string, $type = ENT_QUOTES)
|
||||||
{
|
{
|
||||||
if (is_array($string))
|
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');
|
return htmlentities((string)$string, $type, 'utf-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function htmlentitiesDecodeUTF8($string)
|
public static function htmlentitiesDecodeUTF8($string)
|
||||||
{
|
{
|
||||||
if (is_array($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');
|
return html_entity_decode((string)$string, ENT_QUOTES, 'utf-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1107,63 +1111,94 @@ class ToolsCore
|
|||||||
/* One source among others:
|
/* One source among others:
|
||||||
http://www.tachyonsoft.com/uc0000.htm
|
http://www.tachyonsoft.com/uc0000.htm
|
||||||
http://www.tachyonsoft.com/uc0001.htm
|
http://www.tachyonsoft.com/uc0001.htm
|
||||||
|
http://www.tachyonsoft.com/uc0004.htm
|
||||||
*/
|
*/
|
||||||
$patterns = array(
|
$patterns = array(
|
||||||
|
|
||||||
/* Lowercase */
|
/* Lowercase */
|
||||||
/* a */ '/[\x{00E0}\x{00E1}\x{00E2}\x{00E3}\x{00E4}\x{00E5}\x{0101}\x{0103}\x{0105}]/u',
|
/* a */ '/[\x{00E0}\x{00E1}\x{00E2}\x{00E3}\x{00E4}\x{00E5}\x{0101}\x{0103}\x{0105}\x{0430}]/u',
|
||||||
/* c */ '/[\x{00E7}\x{0107}\x{0109}\x{010D}]/u',
|
/* b */ '/[\x{0431}]/u',
|
||||||
/* d */ '/[\x{010F}\x{0111}]/u',
|
/* c */ '/[\x{00E7}\x{0107}\x{0109}\x{010D}\x{0446}]/u',
|
||||||
/* e */ '/[\x{00E8}\x{00E9}\x{00EA}\x{00EB}\x{0113}\x{0115}\x{0117}\x{0119}\x{011B}]/u',
|
/* d */ '/[\x{010F}\x{0111}\x{0434}]/u',
|
||||||
/* g */ '/[\x{011F}\x{0121}\x{0123}]/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',
|
||||||
/* h */ '/[\x{0125}\x{0127}]/u',
|
/* f */ '/[\x{0444}]/u',
|
||||||
/* i */ '/[\x{00EC}\x{00ED}\x{00EE}\x{00EF}\x{0129}\x{012B}\x{012D}\x{012F}\x{0131}]/u',
|
/* g */ '/[\x{011F}\x{0121}\x{0123}\x{0433}\x{0491}]/u',
|
||||||
/* j */ '/[\x{0135}]/u',
|
/* h */ '/[\x{0125}\x{0127}]/u',
|
||||||
/* k */ '/[\x{0137}\x{0138}]/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',
|
||||||
/* l */ '/[\x{013A}\x{013C}\x{013E}\x{0140}\x{0142}]/u',
|
/* j */ '/[\x{0135}\x{0439}]/u',
|
||||||
/* n */ '/[\x{00F1}\x{0144}\x{0146}\x{0148}\x{0149}\x{014B}]/u',
|
/* k */ '/[\x{0137}\x{0138}\x{043A}]/u',
|
||||||
/* o */ '/[\x{00F2}\x{00F3}\x{00F4}\x{00F5}\x{00F6}\x{00F8}\x{014D}\x{014F}\x{0151}]/u',
|
/* l */ '/[\x{013A}\x{013C}\x{013E}\x{0140}\x{0142}\x{043B}]/u',
|
||||||
/* r */ '/[\x{0155}\x{0157}\x{0159}]/u',
|
/* m */ '/[\x{043C}]/u',
|
||||||
/* s */ '/[\x{015B}\x{015D}\x{015F}\x{0161}]/u',
|
/* n */ '/[\x{00F1}\x{0144}\x{0146}\x{0148}\x{0149}\x{014B}\x{043D}]/u',
|
||||||
/* ss*/ '/[\x{00DF}]/u',
|
/* o */ '/[\x{00F2}\x{00F3}\x{00F4}\x{00F5}\x{00F6}\x{00F8}\x{014D}\x{014F}\x{0151}\x{043E}]/u',
|
||||||
/* t */ '/[\x{0163}\x{0165}\x{0167}]/u',
|
/* p */ '/[\x{043F}]/u',
|
||||||
/* u */ '/[\x{00F9}\x{00FA}\x{00FB}\x{00FC}\x{0169}\x{016B}\x{016D}\x{016F}\x{0171}\x{0173}]/u',
|
/* r */ '/[\x{0155}\x{0157}\x{0159}\x{0440}]/u',
|
||||||
/* w */ '/[\x{0175}]/u',
|
/* s */ '/[\x{015B}\x{015D}\x{015F}\x{0161}\x{0441}]/u',
|
||||||
/* y */ '/[\x{00FF}\x{0177}\x{00FD}]/u',
|
/* ss */ '/[\x{00DF}]/u',
|
||||||
/* z */ '/[\x{017A}\x{017C}\x{017E}]/u',
|
/* t */ '/[\x{0163}\x{0165}\x{0167}\x{0442}]/u',
|
||||||
/* ae*/ '/[\x{00E6}]/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',
|
||||||
/* oe*/ '/[\x{0153}]/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 */
|
/* Uppercase */
|
||||||
/* A */ '/[\x{0100}\x{0102}\x{0104}\x{00C0}\x{00C1}\x{00C2}\x{00C3}\x{00C4}\x{00C5}]/u',
|
/* A */ '/[\x{0100}\x{0102}\x{0104}\x{00C0}\x{00C1}\x{00C2}\x{00C3}\x{00C4}\x{00C5}\x{0410}]/u',
|
||||||
/* C */ '/[\x{00C7}\x{0106}\x{0108}\x{010A}\x{010C}]/u',
|
/* B */ '/[\x{0411}]]/u',
|
||||||
/* D */ '/[\x{010E}\x{0110}]/u',
|
/* C */ '/[\x{00C7}\x{0106}\x{0108}\x{010A}\x{010C}\x{0426}]/u',
|
||||||
/* E */ '/[\x{00C8}\x{00C9}\x{00CA}\x{00CB}\x{0112}\x{0114}\x{0116}\x{0118}\x{011A}]/u',
|
/* D */ '/[\x{010E}\x{0110}\x{0414}]/u',
|
||||||
/* G */ '/[\x{011C}\x{011E}\x{0120}\x{0122}]/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',
|
||||||
/* H */ '/[\x{0124}\x{0126}]/u',
|
/* F */ '/[\x{0424}]/u',
|
||||||
/* I */ '/[\x{0128}\x{012A}\x{012C}\x{012E}\x{0130}]/u',
|
/* G */ '/[\x{011C}\x{011E}\x{0120}\x{0122}\x{0413}\x{0490}]/u',
|
||||||
/* J */ '/[\x{0134}]/u',
|
/* H */ '/[\x{0124}\x{0126}]/u',
|
||||||
/* K */ '/[\x{0136}]/u',
|
/* I */ '/[\x{0128}\x{012A}\x{012C}\x{012E}\x{0130}\x{0418}\x{0406}]/u',
|
||||||
/* L */ '/[\x{0139}\x{013B}\x{013D}\x{0139}\x{0141}]/u',
|
/* J */ '/[\x{0134}\x{0419}]/u',
|
||||||
/* N */ '/[\x{00D1}\x{0143}\x{0145}\x{0147}\x{014A}]/u',
|
/* K */ '/[\x{0136}\x{041A}]/u',
|
||||||
/* O */ '/[\x{00D3}\x{014C}\x{014E}\x{0150}]/u',
|
/* L */ '/[\x{0139}\x{013B}\x{013D}\x{0139}\x{0141}\x{041B}]/u',
|
||||||
/* R */ '/[\x{0154}\x{0156}\x{0158}]/u',
|
/* M */ '/[\x{041C}]/u',
|
||||||
/* S */ '/[\x{015A}\x{015C}\x{015E}\x{0160}]/u',
|
/* N */ '/[\x{00D1}\x{0143}\x{0145}\x{0147}\x{014A}\x{041D}]/u',
|
||||||
/* T */ '/[\x{0162}\x{0164}\x{0166}]/u',
|
/* O */ '/[\x{00D3}\x{014C}\x{014E}\x{0150}\x{041E}]/u',
|
||||||
/* U */ '/[\x{00D9}\x{00DA}\x{00DB}\x{00DC}\x{0168}\x{016A}\x{016C}\x{016E}\x{0170}\x{0172}]/u',
|
/* P */ '/[\x{041F}]/u',
|
||||||
/* W */ '/[\x{0174}]/u',
|
/* R */ '/[\x{0154}\x{0156}\x{0158}\x{0420}]/u',
|
||||||
/* Y */ '/[\x{0176}]/u',
|
/* S */ '/[\x{015A}\x{015C}\x{015E}\x{0160}\x{0421}]/u',
|
||||||
/* Z */ '/[\x{0179}\x{017B}\x{017D}]/u',
|
/* T */ '/[\x{0162}\x{0164}\x{0166}\x{0422}]/u',
|
||||||
/* AE*/ '/[\x{00C6}]/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',
|
||||||
/* OE*/ '/[\x{0152}]/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 oe
|
||||||
// å to aa
|
// å to aa
|
||||||
// ä to ae
|
// ä to ae
|
||||||
|
|
||||||
$replacements = array(
|
$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', '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', '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', 'T', 'U', 'V', 'W', 'Y', 'Z', 'AE', 'CH', 'KH', 'OE', 'SH', 'SHH', 'YA', 'YE', 'YI', 'YO', 'YU', 'ZH'
|
||||||
);
|
);
|
||||||
|
|
||||||
return preg_replace($patterns, $replacements, $str);
|
return preg_replace($patterns, $replacements, $str);
|
||||||
@@ -1697,13 +1732,15 @@ class ToolsCore
|
|||||||
fwrite($write_fd, "AddType application/x-font-woff .woff\n");
|
fwrite($write_fd, "AddType application/x-font-woff .woff\n");
|
||||||
|
|
||||||
if ($disable_modsec)
|
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
|
// RewriteEngine
|
||||||
fwrite($write_fd, "<IfModule mod_rewrite.c>\n");
|
fwrite($write_fd, "<IfModule mod_rewrite.c>\n");
|
||||||
|
|
||||||
// Ensure HTTP_MOD_REWRITE variable is set in environment
|
// 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, "SetEnv HTTP_MOD_REWRITE On\n");
|
||||||
|
fwrite($write_fd, "</IfModule>\n\n");
|
||||||
|
|
||||||
// Disable multiviews ?
|
// Disable multiviews ?
|
||||||
if ($disable_multiviews)
|
if ($disable_multiviews)
|
||||||
|
|||||||
@@ -2120,7 +2120,10 @@ class AdminControllerCore extends Controller
|
|||||||
$this->context->shop = new Shop(Configuration::get('PS_SHOP_DEFAULT'));
|
$this->context->shop = new Shop(Configuration::get('PS_SHOP_DEFAULT'));
|
||||||
elseif ($this->context->shop->id != $shop_id)
|
elseif ($this->context->shop->id != $shop_id)
|
||||||
$this->context->shop = new Shop($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();
|
$this->initBreadcrumbs();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2379,8 +2382,10 @@ class AdminControllerCore extends Controller
|
|||||||
if (preg_match('/[.!]/', $order_by))
|
if (preg_match('/[.!]/', $order_by))
|
||||||
{
|
{
|
||||||
$order_by_split = preg_split('/[.!]/', $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);
|
$this->_orderWay = Tools::strtoupper($order_way);
|
||||||
|
|
||||||
@@ -2474,7 +2479,7 @@ class AdminControllerCore extends Controller
|
|||||||
(isset($this->_filter) ? $this->_filter : '').$where_shop.'
|
(isset($this->_filter) ? $this->_filter : '').$where_shop.'
|
||||||
'.(isset($this->_group) ? $this->_group.' ' : '').'
|
'.(isset($this->_group) ? $this->_group.' ' : '').'
|
||||||
'.$having_clause.'
|
'.$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 : '').
|
($this->_tmpTableFilter ? ') tmpTable WHERE 1'.$this->_tmpTableFilter : '').
|
||||||
(($use_limit === true) ? ' LIMIT '.(int)$start.','.(int)$limit : '');
|
(($use_limit === true) ? ' LIMIT '.(int)$start.','.(int)$limit : '');
|
||||||
|
|
||||||
@@ -2526,22 +2531,20 @@ class AdminControllerCore extends Controller
|
|||||||
public function getLanguages()
|
public function getLanguages()
|
||||||
{
|
{
|
||||||
$cookie = $this->context->cookie;
|
$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)
|
if ($this->allow_employee_form_lang && !$cookie->employee_form_lang)
|
||||||
$cookie->employee_form_lang = (int)Configuration::get('PS_LANG_DEFAULT');
|
$cookie->employee_form_lang = (int)$this->context->language->id;
|
||||||
$use_lang_from_cookie = false;
|
|
||||||
|
$lang_exists = false;
|
||||||
$this->_languages = Language::getLanguages(false);
|
$this->_languages = Language::getLanguages(false);
|
||||||
if ($this->allow_employee_form_lang)
|
foreach ($this->_languages as $lang)
|
||||||
foreach ($this->_languages as $lang)
|
if (isset($cookie->employee_form_lang) && $cookie->employee_form_lang == $lang['id_lang'])
|
||||||
if ($cookie->employee_form_lang == $lang['id_lang'])
|
$lang_exists = true;
|
||||||
$use_lang_from_cookie = true;
|
|
||||||
if (!$use_lang_from_cookie)
|
$this->default_form_language = $lang_exists ? (int)$cookie->employee_form_lang : (int)$this->context->language->id;
|
||||||
$this->default_form_language = (int)Configuration::get('PS_LANG_DEFAULT');
|
|
||||||
else
|
|
||||||
$this->default_form_language = (int)$cookie->employee_form_lang;
|
|
||||||
|
|
||||||
foreach ($this->_languages as $k => $language)
|
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;
|
return $this->_languages;
|
||||||
}
|
}
|
||||||
@@ -3269,4 +3272,4 @@ class AdminControllerCore extends Controller
|
|||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -214,20 +214,18 @@ class HelperCore
|
|||||||
|
|
||||||
$html = '
|
$html = '
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var inputName = "'.$input_name.'";
|
var inputName = \''.addcslashes($input_name, '\'').'\';'."\n";
|
||||||
';
|
|
||||||
if (count($selected_cat) > 0)
|
if (count($selected_cat) > 0)
|
||||||
{
|
{
|
||||||
if (isset($selected_cat[0]))
|
if (isset($selected_cat[0]))
|
||||||
$html .= 'var selectedCat = "'.implode(',', $selected_cat).'";';
|
$html .= ' var selectedCat = '.(int)implode(',', $selected_cat).';'."\n";
|
||||||
else
|
else
|
||||||
$html .= 'var selectedCat = "'.implode(',', array_keys($selected_cat)).'";';
|
$html .= ' var selectedCat = '.(int)implode(',', array_keys($selected_cat)).';'."\n";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
$html .= 'var selectedCat = "";';
|
$html .= ' var selectedCat = \'\';'."\n";
|
||||||
$html .= '
|
$html .= ' var selectedLabel = \''.$translations['selected'].'\';
|
||||||
var selectedLabel = \''.$translations['selected'].'\';
|
var home = \''.addcslashes($root['name'], '\'').'\';
|
||||||
var home = \''.$root['name'].'\';
|
|
||||||
var use_radio = '.(int)$use_radio.';';
|
var use_radio = '.(int)$use_radio.';';
|
||||||
if (!$use_in_popup)
|
if (!$use_in_popup)
|
||||||
$html .= '
|
$html .= '
|
||||||
|
|||||||
@@ -455,13 +455,13 @@ class HelperListCore extends Helper
|
|||||||
self::$cache_lang['Delete'] = $this->l('Delete', 'Helper');
|
self::$cache_lang['Delete'] = $this->l('Delete', 'Helper');
|
||||||
|
|
||||||
if (!array_key_exists('DeleteItem', self::$cache_lang))
|
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))
|
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))
|
if (!is_null($name))
|
||||||
$name = '\n\n'.self::$cache_lang['Name'].' '.$name;
|
$name = addcslashes('\n\n'.self::$cache_lang['Name'].' '.$name, '\'');
|
||||||
|
|
||||||
$data = array(
|
$data = array(
|
||||||
$this->identifier => $id,
|
$this->identifier => $id,
|
||||||
@@ -470,7 +470,8 @@ class HelperListCore extends Helper
|
|||||||
);
|
);
|
||||||
|
|
||||||
if ($this->specificConfirmDelete !== false)
|
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));
|
$tpl->assign(array_merge($this->tpl_delete_link_vars, $data));
|
||||||
|
|
||||||
return $tpl->fetch();
|
return $tpl->fetch();
|
||||||
@@ -523,7 +524,7 @@ class HelperListCore extends Helper
|
|||||||
if (Tools::getIsset($this->table.'Orderby'))
|
if (Tools::getIsset($this->table.'Orderby'))
|
||||||
$order = '&'.$this->table.'Orderby='.urlencode($this->orderBy).'&'.$this->table.'Orderway='.urlencode(strtolower($this->orderWay));
|
$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 */
|
/* Determine current page number */
|
||||||
$page = (int)Tools::getValue('submitFilter'.$this->list_id);
|
$page = (int)Tools::getValue('submitFilter'.$this->list_id);
|
||||||
|
|||||||
@@ -1247,11 +1247,7 @@ abstract class ModuleCore
|
|||||||
$module->interest = 0;
|
$module->interest = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
usort($module_list, create_function('$a,$b', '
|
usort($module_list, create_function('$a,$b', 'return strnatcasecmp($a->displayName, $b->displayName);'));
|
||||||
if ($a->displayName == $b->displayName)
|
|
||||||
return 0;
|
|
||||||
return ($a->displayName < $b->displayName) ? -1 : 1;
|
|
||||||
'));
|
|
||||||
|
|
||||||
if ($errors)
|
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).') ');
|
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
|
* Return installed modules
|
||||||
*
|
*
|
||||||
@@ -1593,6 +1606,18 @@ abstract class ModuleCore
|
|||||||
return Cache::retrieve('Module::isInstalled'.$module_name);
|
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)
|
public static function isEnabled($module_name)
|
||||||
{
|
{
|
||||||
if (!Cache::isStored('Module::isEnabled'.$module_name))
|
if (!Cache::isStored('Module::isEnabled'.$module_name))
|
||||||
@@ -1771,6 +1796,7 @@ abstract class ModuleCore
|
|||||||
@unlink($file);
|
@unlink($file);
|
||||||
@file_put_contents($file, $xml);
|
@file_put_contents($file, $xml);
|
||||||
}
|
}
|
||||||
|
@chmod($file, 0664);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -144,6 +144,7 @@ class OrderReturnCore extends ObjectModel
|
|||||||
$data[$k]['type'] = 'Return';
|
$data[$k]['type'] = 'Return';
|
||||||
$data[$k]['tracking_number'] = $or['id_order_return'];
|
$data[$k]['tracking_number'] = $or['id_order_return'];
|
||||||
$data[$k]['can_edit'] = false;
|
$data[$k]['can_edit'] = false;
|
||||||
|
$data[$k]['reference'] = Order::getUniqReferenceOf($or['id_order']);
|
||||||
}
|
}
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -799,7 +799,7 @@ class ShopCore extends ObjectModel
|
|||||||
{
|
{
|
||||||
if (Shop::getContext() == Shop::CONTEXT_SHOP)
|
if (Shop::getContext() == Shop::CONTEXT_SHOP)
|
||||||
$list = ($share) ? Shop::getSharedShops(Shop::getContextShopID(), $share) : array(Shop::getContextShopID());
|
$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);
|
$list = Shop::getShops(true, Shop::getContextShopGroupID(), true);
|
||||||
else
|
else
|
||||||
$list = Shop::getShops(true, null, true);
|
$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('stock', 's', 's.id_stock = sm.id_stock');
|
||||||
$query->innerJoin('warehouse', 'w', 'w.id_warehouse = s.id_warehouse');
|
$query->innerJoin('warehouse', 'w', 'w.id_warehouse = s.id_warehouse');
|
||||||
$query->where('sm.sign = 1');
|
$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');
|
$query->orderBy('date_add DESC');
|
||||||
|
|
||||||
$res = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
|
$res = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
|
||||||
|
|||||||
+4
-2
@@ -73,8 +73,10 @@ function bqSQL($string)
|
|||||||
|
|
||||||
function displayFatalError()
|
function displayFatalError()
|
||||||
{
|
{
|
||||||
$error = error_get_last();
|
$error = null;
|
||||||
if ($error !== NULL && in_array($error['type'], array(E_ERROR, E_PARSE)))
|
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'];
|
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', 'l', 'smartyTranslate', false);
|
||||||
smartyRegisterFunction($smarty, 'function', 'hook', 'smartyHook');
|
smartyRegisterFunction($smarty, 'function', 'hook', 'smartyHook');
|
||||||
smartyRegisterFunction($smarty, 'function', 'toolsConvertPrice', 'toolsConvertPrice');
|
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', 'dateFormat', array('Tools', 'dateFormat'));
|
||||||
smartyRegisterFunction($smarty, 'function', 'convertPrice', array('Product', 'convertPrice'));
|
smartyRegisterFunction($smarty, 'function', 'convertPrice', array('Product', 'convertPrice'));
|
||||||
smartyRegisterFunction($smarty, 'function', 'convertPriceWithCurrency', array('Product', 'convertPriceWithCurrency'));
|
smartyRegisterFunction($smarty, 'function', 'convertPriceWithCurrency', array('Product', 'convertPriceWithCurrency'));
|
||||||
|
|||||||
@@ -196,6 +196,8 @@ class AdminAttachmentsControllerCore extends AdminController
|
|||||||
$this->errors[] = $this->l('Failed to copy the file.');
|
$this->errors[] = $this->l('Failed to copy the file.');
|
||||||
$_POST['file_name'] = $_FILES['file']['name'];
|
$_POST['file_name'] = $_FILES['file']['name'];
|
||||||
@unlink($_FILES['file']['tmp_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['file'] = $uniqid;
|
||||||
$_POST['mime'] = $_FILES['file']['type'];
|
$_POST['mime'] = $_FILES['file']['type'];
|
||||||
}
|
}
|
||||||
@@ -211,11 +213,14 @@ class AdminAttachmentsControllerCore extends AdminController
|
|||||||
'<b>'.$upload_mb.'</b>'
|
'<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->errors[] = $this->l('Upload error. Please check your server configurations for the maximum upload size allowed.');
|
||||||
}
|
}
|
||||||
$this->validateRules();
|
$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');
|
$step_number = Tools::getValue('step_number');
|
||||||
|
|
||||||
if ($step_number == 4 && !Shop::isFeatureActive() || $step_number == 5 && Shop::isFeatureActive())
|
if ($step_number == 4 && !Shop::isFeatureActive() || $step_number == 5 && Shop::isFeatureActive())
|
||||||
return array();
|
return array('fields' => array());
|
||||||
|
|
||||||
$step_fields = array(
|
$step_fields = array(
|
||||||
1 => array('name', 'delay', 'grade', 'url'),
|
1 => array('name', 'delay', 'grade', 'url'),
|
||||||
@@ -896,7 +896,7 @@ class AdminCarrierWizardControllerCore extends AdminController
|
|||||||
foreach ($definition['fields'] as $field => $def)
|
foreach ($definition['fields'] as $field => $def)
|
||||||
if (!in_array($field, $step_fields[$step_number]))
|
if (!in_array($field, $step_fields[$step_number]))
|
||||||
unset($definition['fields'][$field]);
|
unset($definition['fields'][$field]);
|
||||||
|
|
||||||
return $definition;
|
return $definition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -566,6 +566,8 @@ class AdminCartsControllerCore extends AdminController
|
|||||||
if (count($summary['products']))
|
if (count($summary['products']))
|
||||||
foreach ($summary['products'] as &$product)
|
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['price'] = str_replace($currency->sign, '', Tools::displayPrice($product['price'], $currency));
|
||||||
$product['total'] = str_replace($currency->sign, '', Tools::displayPrice($product['total'], $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');
|
$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,
|
'cols' => 40,
|
||||||
'hint' => $this->l('Invalid characters:').' <>;=#{}'
|
'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(
|
array(
|
||||||
'type' => 'switch',
|
'type' => 'switch',
|
||||||
'label' => $this->l('Displayed:'),
|
'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')))
|
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.');
|
$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();
|
parent::initProcess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -393,7 +393,7 @@ class AdminCustomerThreadsControllerCore extends AdminController
|
|||||||
$contact = new Contact((int)$ct->id_contact, (int)$ct->id_lang);
|
$contact = new Contact((int)$ct->id_contact, (int)$ct->id_lang);
|
||||||
if (Validate::isLoadedObject($contact))
|
if (Validate::isLoadedObject($contact))
|
||||||
{
|
{
|
||||||
$from_name = $contact->name[(int)$ct->id_lang];
|
$from_name = $contact->name;
|
||||||
$from_email = $contact->email;
|
$from_email = $contact->email;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -401,6 +401,7 @@ class AdminCustomerThreadsControllerCore extends AdminController
|
|||||||
$from_name = null;
|
$from_name = null;
|
||||||
$from_email = null;
|
$from_email = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Mail::Send(
|
if (Mail::Send(
|
||||||
(int)$ct->id_lang,
|
(int)$ct->id_lang,
|
||||||
'reply_msg',
|
'reply_msg',
|
||||||
@@ -641,6 +642,12 @@ class AdminCustomerThreadsControllerCore extends AdminController
|
|||||||
ENT_QUOTES, 'UTF-8')
|
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(
|
$tpl->assign(array(
|
||||||
'current' => self::$currentIndex,
|
'current' => self::$currentIndex,
|
||||||
'token' => $this->token,
|
'token' => $this->token,
|
||||||
@@ -651,7 +658,8 @@ class AdminCustomerThreadsControllerCore extends AdminController
|
|||||||
'PS_SHOP_NAME' => Configuration::get('PS_SHOP_NAME'),
|
'PS_SHOP_NAME' => Configuration::get('PS_SHOP_NAME'),
|
||||||
'file_name' => file_exists(_PS_UPLOAD_DIR_.$message['file_name']),
|
'file_name' => file_exists(_PS_UPLOAD_DIR_.$message['file_name']),
|
||||||
'contacts' => $contacts,
|
'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();
|
return $tpl->fetch();
|
||||||
|
|||||||
@@ -308,7 +308,7 @@ class AdminCustomersControllerCore extends AdminController
|
|||||||
'name' => 'passwd',
|
'name' => 'passwd',
|
||||||
'required' => ($obj->id ? false : true),
|
'required' => ($obj->id ? false : true),
|
||||||
'col' => '4',
|
'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(
|
array(
|
||||||
'type' => 'birthday',
|
'type' => 'birthday',
|
||||||
@@ -678,9 +678,10 @@ class AdminCustomersControllerCore extends AdminController
|
|||||||
$carts[$i]['name'] = $carrier->name;
|
$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
|
FROM '._DB_PREFIX_.'cart_product cp
|
||||||
JOIN '._DB_PREFIX_.'cart c ON (c.id_cart = cp.id_cart)
|
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.'
|
WHERE c.id_customer = '.(int)$customer->id.'
|
||||||
AND cp.id_product NOT IN (
|
AND cp.id_product NOT IN (
|
||||||
SELECT product_id
|
SELECT product_id
|
||||||
@@ -693,6 +694,8 @@ class AdminCustomersControllerCore extends AdminController
|
|||||||
for ($i = 0; $i < $total_interested; $i++)
|
for ($i = 0; $i < $total_interested; $i++)
|
||||||
{
|
{
|
||||||
$product = new Product($interested[$i]['id_product'], false, $this->default_form_language, $interested[$i]['id_shop']);
|
$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(
|
$interested[$i]['url'] = $this->context->link->getProductLink(
|
||||||
$product->id,
|
$product->id,
|
||||||
$product->link_rewrite,
|
$product->link_rewrite,
|
||||||
@@ -706,15 +709,15 @@ class AdminCustomersControllerCore extends AdminController
|
|||||||
}
|
}
|
||||||
|
|
||||||
$connections = $customer->getLastConnections();
|
$connections = $customer->getLastConnections();
|
||||||
|
if (!is_array($connections))
|
||||||
|
$connections = array();
|
||||||
$total_connections = count($connections);
|
$total_connections = count($connections);
|
||||||
for ($i = 0; $i < $total_connections; $i++)
|
for ($i = 0; $i < $total_connections; $i++)
|
||||||
{
|
{
|
||||||
$connections[$i]['date_add'] = Tools::displayDate($connections[$i]['date_add'],null , true);
|
$connections[$i]['date_add'] = Tools::displayDate($connections[$i]['date_add'],null , true);
|
||||||
$connections[$i]['http_referer'] = $connections[$i]['http_referer'] ?
|
$connections[$i]['http_referer'] = $connections[$i]['http_referer'] ? preg_replace('/^www./', '', parse_url($connections[$i]['http_referer'], PHP_URL_HOST)) : $this->l('Direct link');
|
||||||
preg_replace('/^www./', '', parse_url($connections[$i]['http_referer'], PHP_URL_HOST)) :
|
|
||||||
$this->l('Direct link');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$referrers = Referrer::getReferrers($customer->id);
|
$referrers = Referrer::getReferrers($customer->id);
|
||||||
$total_referrers = count($referrers);
|
$total_referrers = count($referrers);
|
||||||
for ($i = 0; $i < $total_referrers; $i++)
|
for ($i = 0; $i < $total_referrers; $i++)
|
||||||
|
|||||||
@@ -63,7 +63,8 @@ class AdminEmailsControllerCore extends AdminController
|
|||||||
),
|
),
|
||||||
'js' => array(
|
'js' => array(
|
||||||
1 => 'onclick="$(\'#smtp\').slideUp();"',
|
1 => 'onclick="$(\'#smtp\').slideUp();"',
|
||||||
2 => 'onclick="$(\'#smtp\').slideDown();"'
|
2 => 'onclick="$(\'#smtp\').slideDown();"',
|
||||||
|
3 => 'onclick="$(\'#smtp\').slideUp();"'
|
||||||
),
|
),
|
||||||
'visibility' => Shop::CONTEXT_ALL
|
'visibility' => Shop::CONTEXT_ALL
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ class AdminEmployeesControllerCore extends AdminController
|
|||||||
'required' => true,
|
'required' => true,
|
||||||
'hint' => ($obj->id ?
|
'hint' => ($obj->id ?
|
||||||
$this->l('Leave this field blank if you do not want to change your password.') :
|
$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(
|
array(
|
||||||
'type' => 'text',
|
'type' => 'text',
|
||||||
|
|||||||
@@ -303,7 +303,7 @@ class AdminHomeControllerCore extends AdminController
|
|||||||
|
|
||||||
public function getMonthlyStatistics()
|
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('
|
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
|
||||||
SELECT IFNULL(SUM(`total_paid_real` / conversion_rate), "0") as total_sales, COUNT(*) as total_orders
|
SELECT IFNULL(SUM(`total_paid_real` / conversion_rate), "0") as total_sales, COUNT(*) as total_orders
|
||||||
FROM `'._DB_PREFIX_.'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->getCurve(1)->setPoint(strtotime($row['invoice_date'].' 02:00:00'), $row['total_converted']);
|
||||||
$chart->setSize(580, 170);
|
$chart->setSize(580, 170);
|
||||||
$chart->setTimeMode(strtotime('-7 DAYS', time()), time(), 'd');
|
$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).')');
|
$chart->getCurve(1)->setLabel($this->l('Sales + Tax').' ('.strtoupper($currency->iso_code).')');
|
||||||
|
|
||||||
$content .= $chart->fetch();
|
$content .= $chart->fetch();
|
||||||
|
|||||||
@@ -427,10 +427,11 @@ class AdminImagesControllerCore extends AdminController
|
|||||||
if (!is_dir($dir))
|
if (!is_dir($dir))
|
||||||
return false;
|
return false;
|
||||||
$toDel = scandir($dir);
|
$toDel = scandir($dir);
|
||||||
|
|
||||||
foreach ($toDel as $d)
|
foreach ($toDel as $d)
|
||||||
foreach ($type as $imageType)
|
foreach ($type as $imageType)
|
||||||
if (preg_match('/^[0-9]+\-'.($product ? '[0-9]+\-' : '').$imageType['name'].'\.jpg$/', $d) || preg_match('/^([[:lower:]]{2})\-default\-(.*)\.jpg$/', $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))
|
if (file_exists($dir.$d))
|
||||||
unlink($dir.$d);
|
unlink($dir.$d);
|
||||||
|
|
||||||
// delete product images using new filesystem.
|
// delete product images using new filesystem.
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ class AdminImportControllerCore extends AdminController
|
|||||||
$this->l('Addresses'),
|
$this->l('Addresses'),
|
||||||
$this->l('Manufacturers'),
|
$this->l('Manufacturers'),
|
||||||
$this->l('Suppliers'),
|
$this->l('Suppliers'),
|
||||||
|
$this->l('Alias'),
|
||||||
);
|
);
|
||||||
|
|
||||||
// @since 1.5.0
|
// @since 1.5.0
|
||||||
@@ -247,13 +248,13 @@ class AdminImportControllerCore extends AdminController
|
|||||||
'delete_existing_images' => array(
|
'delete_existing_images' => array(
|
||||||
'label' => $this->l('Delete existing images (0 = No, 1 = Yes)')
|
'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)')),
|
'online_only' => array('label' => $this->l('Available online only (0 = No, 1 = Yes)')),
|
||||||
'condition' => array('label' => $this->l('Condition')),
|
'condition' => array('label' => $this->l('Condition')),
|
||||||
'customizable' => array('label' => $this->l('Customizable (0 = No, 1 = Yes)')),
|
'customizable' => array('label' => $this->l('Customizable (0 = No, 1 = Yes)')),
|
||||||
'uploadable_files' => array('label' => $this->l('Uploadable files (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)')),
|
'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')),
|
'advanced_stock_management' => array('label' => $this->l('Advanced stock management')),
|
||||||
'shop' => array(
|
'shop' => array(
|
||||||
'label' => $this->l('ID / Name of shop'),
|
'label' => $this->l('ID / Name of shop'),
|
||||||
@@ -306,7 +307,8 @@ class AdminImportControllerCore extends AdminController
|
|||||||
'firstname' => array('label' => $this->l('First Name *')),
|
'firstname' => array('label' => $this->l('First Name *')),
|
||||||
'newsletter' => array('label' => $this->l('Newsletter (0/1)')),
|
'newsletter' => array('label' => $this->l('Newsletter (0/1)')),
|
||||||
'optin' => array('label' => $this->l('Opt-in (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(
|
'id_shop' => array(
|
||||||
'label' => $this->l('ID / Name of shop'),
|
'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.'),
|
'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'
|
'postcode' => 'X'
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case $this->entities[$this->l('Manufacturers')]:
|
case $this->entities[$this->l('Manufacturers')]:
|
||||||
case $this->entities[$this->l('Suppliers')]:
|
case $this->entities[$this->l('Suppliers')]:
|
||||||
//Overwrite validators AS name is not MultiLangField
|
//Overwrite validators AS name is not MultiLangField
|
||||||
@@ -383,6 +384,7 @@ class AdminImportControllerCore extends AdminController
|
|||||||
'meta_title' => array('label' => $this->l('Meta title')),
|
'meta_title' => array('label' => $this->l('Meta title')),
|
||||||
'meta_keywords' => array('label' => $this->l('Meta keywords')),
|
'meta_keywords' => array('label' => $this->l('Meta keywords')),
|
||||||
'meta_description' => array('label' => $this->l('Meta description')),
|
'meta_description' => array('label' => $this->l('Meta description')),
|
||||||
|
'image' => array('label' => $this->l('Image URL')),
|
||||||
'shop' => array(
|
'shop' => array(
|
||||||
'label' => $this->l('ID / Name of group shop'),
|
'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.'),
|
'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')),
|
'shop' => Shop::getGroupFromShop(Configuration::get('PS_SHOP_DEFAULT')),
|
||||||
);
|
);
|
||||||
break;
|
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
|
// @since 1.5.0
|
||||||
@@ -456,9 +475,8 @@ class AdminImportControllerCore extends AdminController
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->separator = substr(strval(trim(Tools::getValue('separator', ';'))), 0, 1);
|
$this->separator = ($separator = Tools::substr(strval(trim(Tools::getValue('separator'))), 0, 1)) ? $separator : ';';
|
||||||
$this->multiple_value_separator = substr(strval(trim(Tools::getValue('multiple_value_separator', ','))), 0, 1);
|
$this->multiple_value_separator = ($separator = Tools::substr(strval(trim(Tools::getValue('multiple_value_separator'))), 0, 1)) ? $separator : ',';
|
||||||
|
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -508,11 +526,11 @@ class AdminImportControllerCore extends AdminController
|
|||||||
if (isset($this->context->cookie->iso_lang_selected) && $this->context->cookie->iso_lang_selected)
|
if (isset($this->context->cookie->iso_lang_selected) && $this->context->cookie->iso_lang_selected)
|
||||||
$id_lang_selected = (int)Language::getIdByIso(base64_decode($this->context->cookie->iso_lang_selected));
|
$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)
|
if (isset($this->context->cookie->separator_selected) && $this->context->cookie->separator_selected)
|
||||||
$separator_selected = base64_decode($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)
|
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);
|
$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->entity_selected = (int)Tools::getValue('entity');
|
||||||
$this->context->cookie->iso_lang_selected = base64_encode(Tools::getValue('iso_lang'));
|
$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->separator_selected = base64_encode($this->separator);
|
||||||
$this->context->cookie->multiple_value_separator_selected = base64_encode(Tools::getValue('multiple_value_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->context->cookie->csv_selected = base64_encode(Tools::getValue('csv'));
|
||||||
|
|
||||||
$this->tpl_view_vars = array(
|
$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">';
|
$html .= '<tr id="table_'.$current_table.'_line_'.$current_line.'" style="padding: 4px">';
|
||||||
foreach ($line as $nb_c => $column)
|
foreach ($line as $nb_c => $column)
|
||||||
if ((MAX_COLUMNS * (int)$current_table <= $nb_c) && ((int)$nb_c < MAX_COLUMNS * ((int)$current_table + 1)))
|
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 .= '</tr>';
|
||||||
}
|
}
|
||||||
$html .= '</table>';
|
$html .= '</table>';
|
||||||
@@ -676,6 +694,8 @@ class AdminImportControllerCore extends AdminController
|
|||||||
protected static function rewindBomAware($handle)
|
protected static function rewindBomAware($handle)
|
||||||
{
|
{
|
||||||
// A rewind wrapper that skip BOM signature wrongly
|
// A rewind wrapper that skip BOM signature wrongly
|
||||||
|
if (!is_resource($handle))
|
||||||
|
return false;
|
||||||
rewind($handle);
|
rewind($handle);
|
||||||
if (($bom = fread($handle, 3)) != "\xEF\xBB\xBF")
|
if (($bom = fread($handle, 3)) != "\xEF\xBB\xBF")
|
||||||
rewind($handle);
|
rewind($handle);
|
||||||
@@ -871,6 +891,12 @@ class AdminImportControllerCore extends AdminController
|
|||||||
case 'categories':
|
case 'categories':
|
||||||
$path = _PS_CAT_IMG_DIR_.(int)$id_entity;
|
$path = _PS_CAT_IMG_DIR_.(int)$id_entity;
|
||||||
break;
|
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));
|
$url = str_replace(' ', '%20', trim($url));
|
||||||
|
|
||||||
@@ -947,7 +973,7 @@ class AdminImportControllerCore extends AdminController
|
|||||||
}
|
}
|
||||||
elseif (isset($category->parent) && is_string($category->parent))
|
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'])
|
if ($category_parent['id_category'])
|
||||||
{
|
{
|
||||||
$category->id_parent = (int)$category_parent['id_category'];
|
$category->id_parent = (int)$category_parent['id_category'];
|
||||||
@@ -968,7 +994,7 @@ class AdminImportControllerCore extends AdminController
|
|||||||
{
|
{
|
||||||
$this->errors[] = sprintf(
|
$this->errors[] = sprintf(
|
||||||
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
|
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'
|
(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 : '').
|
$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))
|
($lang_field_error = $category->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && empty($this->errors))
|
||||||
{
|
{
|
||||||
$category_already_created = Category::searchByNameAndParentCategoryId(
|
$category_already_created = Category::searchByNameAndParentCategoryId(
|
||||||
$default_language_id,
|
$id_lang,
|
||||||
$category->name[$default_language_id],
|
$category->name[$id_lang],
|
||||||
$category->id_parent
|
$category->id_parent
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -1074,11 +1100,11 @@ class AdminImportControllerCore extends AdminController
|
|||||||
|
|
||||||
// Get shops for each attributes
|
// Get shops for each attributes
|
||||||
$info['shop'] = explode($this->multiple_value_separator, $info['shop']);
|
$info['shop'] = explode($this->multiple_value_separator, $info['shop']);
|
||||||
|
|
||||||
foreach ($info['shop'] as $shop)
|
foreach ($info['shop'] as $shop)
|
||||||
if (!is_numeric($shop))
|
if (!empty($shop) && !is_numeric($shop))
|
||||||
$category->addShop(Shop::getIdByName($shop));
|
$category->addShop(Shop::getIdByName($shop));
|
||||||
else
|
elseif (!empty($shop))
|
||||||
$category->addShop($shop);
|
$category->addShop($shop);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1126,7 +1152,7 @@ class AdminImportControllerCore extends AdminController
|
|||||||
else
|
else
|
||||||
$product = new Product();
|
$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();
|
$product->loadStockData();
|
||||||
$category_data = Product::getProductCategories((int)$product->id);
|
$category_data = Product::getProductCategories((int)$product->id);
|
||||||
@@ -1150,9 +1176,9 @@ class AdminImportControllerCore extends AdminController
|
|||||||
// link product to shops
|
// link product to shops
|
||||||
$product->id_shop_list = array();
|
$product->id_shop_list = array();
|
||||||
foreach (explode($this->multiple_value_separator, $product->shop) as $shop)
|
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);
|
$product->id_shop_list[] = Shop::getIdByName($shop);
|
||||||
else
|
elseif (!empty($shop))
|
||||||
$product->id_shop_list[] = $shop;
|
$product->id_shop_list[] = $shop;
|
||||||
|
|
||||||
if ((int)$product->id_tax_rules_group != 0)
|
if ((int)$product->id_tax_rules_group != 0)
|
||||||
@@ -1275,7 +1301,7 @@ class AdminImportControllerCore extends AdminController
|
|||||||
}
|
}
|
||||||
else if (is_string($value) && !empty($value))
|
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'])
|
if ($category['id_category'])
|
||||||
$product->id_category[] = (int)$category['id_category'];
|
$product->id_category[] = (int)$category['id_category'];
|
||||||
else
|
else
|
||||||
@@ -1393,8 +1419,10 @@ class AdminImportControllerCore extends AdminController
|
|||||||
$product_shop = explode($this->multiple_value_separator, $product->shop);
|
$product_shop = explode($this->multiple_value_separator, $product->shop);
|
||||||
foreach ($product_shop as $shop)
|
foreach ($product_shop as $shop)
|
||||||
{
|
{
|
||||||
|
if (empty($shop))
|
||||||
|
continue;
|
||||||
$shop = trim($shop);
|
$shop = trim($shop);
|
||||||
if (!is_numeric($shop))
|
if (!empty($shop) && !is_numeric($shop))
|
||||||
$shop = Shop::getIdByName($shop);
|
$shop = Shop::getIdByName($shop);
|
||||||
|
|
||||||
if (in_array($shop, $shop_ids))
|
if (in_array($shop, $shop_ids))
|
||||||
@@ -1446,36 +1474,36 @@ class AdminImportControllerCore extends AdminController
|
|||||||
|
|
||||||
$id_shop_list = array();
|
$id_shop_list = array();
|
||||||
foreach ($info['shop'] as $shop)
|
foreach ($info['shop'] as $shop)
|
||||||
if (!is_numeric($shop))
|
if (!empty($shop) && !is_numeric($shop))
|
||||||
$id_shop_list[] = (int)Shop::getIdByName($shop);
|
$id_shop_list[] = (int)Shop::getIdByName($shop);
|
||||||
else
|
elseif (!empty($shop))
|
||||||
$id_shop_list[] = $shop;
|
$id_shop_list[] = $shop;
|
||||||
|
|
||||||
if ((isset($info['reduction_price']) && $info['reduction_price'] > 0) || (isset($info['reduction_percent']) && $info['reduction_percent'] > 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)
|
foreach($id_shop_list as $id_shop)
|
||||||
{
|
{
|
||||||
$specific_price = SpecificPrice::getSpecificPrice($product->id, $id_shop, 0, 0, 0, 1, 0, 0, 0, 0);
|
$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']))
|
if (is_array($specific_price) && isset($specific_price['id_specific_price']))
|
||||||
$specific_price = new SpecificPrice((int)$specific_price['id_specific_price']);
|
$specific_price = new SpecificPrice((int)$specific_price['id_specific_price']);
|
||||||
else
|
else
|
||||||
$specific_price = new SpecificPrice();
|
$specific_price = new SpecificPrice();
|
||||||
$specific_price->id_product = (int)$product->id;
|
$specific_price->id_product = (int)$product->id;
|
||||||
$specific_price->id_specific_price_rule = 0;
|
$specific_price->id_specific_price_rule = 0;
|
||||||
$specific_price->id_shop = $id_shop;
|
$specific_price->id_shop = $id_shop;
|
||||||
$specific_price->id_currency = 0;
|
$specific_price->id_currency = 0;
|
||||||
$specific_price->id_country = 0;
|
$specific_price->id_country = 0;
|
||||||
$specific_price->id_group = 0;
|
$specific_price->id_group = 0;
|
||||||
$specific_price->price = -1;
|
$specific_price->price = -1;
|
||||||
$specific_price->id_customer = 0;
|
$specific_price->id_customer = 0;
|
||||||
$specific_price->from_quantity = 1;
|
$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 = (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->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->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';
|
$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())
|
if (!$specific_price->save())
|
||||||
$this->addProductWarning(Tools::safeOutput($info['name']), $product->id, $this->l('Discount is invalid'));
|
$this->addProductWarning(Tools::safeOutput($info['name']), $product->id, $this->l('Discount is invalid'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($product->tags) && !empty($product->tags))
|
if (isset($product->tags) && !empty($product->tags))
|
||||||
{
|
{
|
||||||
@@ -1489,7 +1517,8 @@ class AdminImportControllerCore extends AdminController
|
|||||||
if (is_array($product->tags) && count($product->tags))
|
if (is_array($product->tags) && count($product->tags))
|
||||||
{
|
{
|
||||||
foreach ($product->tags as $key => $tag)
|
foreach ($product->tags as $key => $tag)
|
||||||
$product->tags[$key] = trim($tag);
|
if (!empty($tag))
|
||||||
|
$product->tags[$key] = trim($tag);
|
||||||
$tags[$id_lang] = $product->tags;
|
$tags[$id_lang] = $product->tags;
|
||||||
$product->tags = $tags;
|
$product->tags = $tags;
|
||||||
}
|
}
|
||||||
@@ -1497,7 +1526,7 @@ class AdminImportControllerCore extends AdminController
|
|||||||
}
|
}
|
||||||
// Delete tags for this id product, for no duplicating error
|
// Delete tags for this id product, for no duplicating error
|
||||||
Tag::deleteTagsForProduct($product->id);
|
Tag::deleteTagsForProduct($product->id);
|
||||||
if (!is_array($product->tags))
|
if (!is_array($product->tags) && !empty($product->tags))
|
||||||
{
|
{
|
||||||
$product->tags = AdminImportController::createMultiLangField($product->tags);
|
$product->tags = AdminImportController::createMultiLangField($product->tags);
|
||||||
foreach ($product->tags as $key => $tags)
|
foreach ($product->tags as $key => $tags)
|
||||||
@@ -1581,14 +1610,20 @@ class AdminImportControllerCore extends AdminController
|
|||||||
if (isset($features['features']) && !empty($features['features']))
|
if (isset($features['features']) && !empty($features['features']))
|
||||||
foreach (explode($this->multiple_value_separator, $features['features']) as $single_feature)
|
foreach (explode($this->multiple_value_separator, $features['features']) as $single_feature)
|
||||||
{
|
{
|
||||||
|
if (empty($single_feature))
|
||||||
|
continue;
|
||||||
$tab_feature = explode(':', $single_feature);
|
$tab_feature = explode(':', $single_feature);
|
||||||
$feature_name = trim($tab_feature[0]);
|
$feature_name = isset($tab_feature[0]) ? trim($tab_feature[0]) : '';
|
||||||
$feature_value = trim($tab_feature[1]);
|
$feature_value = isset($tab_feature[1]) ? trim($tab_feature[1]) : '';
|
||||||
$position = isset($tab_feature[2]) ? $tab_feature[2]: false;
|
$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))
|
if(!empty($feature_name) && !empty($feature_value))
|
||||||
{
|
{
|
||||||
$id_feature = Feature::addFeatureImport($feature_name, $position);
|
$id_feature = (int)Feature::addFeatureImport($feature_name, $position);
|
||||||
$id_feature_value = FeatureValue::addFeatureValueImport($id_feature, $feature_value, $product->id, $id_lang);
|
$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);
|
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);
|
StockAvailable::setQuantity((int)$product->id, 0, $product->quantity, $this->context->shop->id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->closeCsvFile($handle);
|
$this->closeCsvFile($handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1646,11 +1680,12 @@ class AdminImportControllerCore extends AdminController
|
|||||||
$info['shop'] = explode($this->multiple_value_separator, $info['shop']);
|
$info['shop'] = explode($this->multiple_value_separator, $info['shop']);
|
||||||
|
|
||||||
$id_shop_list = array();
|
$id_shop_list = array();
|
||||||
foreach ($info['shop'] as $shop)
|
if (is_array($info['shop']) && count($info['shop']))
|
||||||
if (!is_numeric($shop))
|
foreach ($info['shop'] as $shop)
|
||||||
$id_shop_list[] = Shop::getIdByName($shop);
|
if (!empty($shop) && !is_numeric($shop))
|
||||||
else
|
$id_shop_list[] = Shop::getIdByName($shop);
|
||||||
$id_shop_list[] = $shop;
|
elseif (!empty($shop))
|
||||||
|
$id_shop_list[] = $shop;
|
||||||
|
|
||||||
if(isset($info['id_product']))
|
if(isset($info['id_product']))
|
||||||
$product = new Product((int)$info['id_product'], false, $default_language);
|
$product = new Product((int)$info['id_product'], false, $default_language);
|
||||||
@@ -1724,12 +1759,14 @@ class AdminImportControllerCore extends AdminController
|
|||||||
if(isset($info['group']))
|
if(isset($info['group']))
|
||||||
foreach (explode($this->multiple_value_separator, $info['group']) as $key => $group)
|
foreach (explode($this->multiple_value_separator, $info['group']) as $key => $group)
|
||||||
{
|
{
|
||||||
|
if (empty($group))
|
||||||
|
continue;
|
||||||
$tab_group = explode(':', $group);
|
$tab_group = explode(':', $group);
|
||||||
$group = trim($tab_group[0]);
|
$group = trim($tab_group[0]);
|
||||||
if (!isset($tab_group[1]))
|
if (!isset($tab_group[1]))
|
||||||
$type = 'select';
|
$type = 'select';
|
||||||
else
|
else
|
||||||
$type = trim($tab_group[1]);
|
$type = trim($tab_group[1]);
|
||||||
|
|
||||||
// sets group
|
// sets group
|
||||||
$groups_attributes[$key]['group'] = $group;
|
$groups_attributes[$key]['group'] = $group;
|
||||||
@@ -1779,6 +1816,8 @@ class AdminImportControllerCore extends AdminController
|
|||||||
if(isset($info['attribute']))
|
if(isset($info['attribute']))
|
||||||
foreach (explode($this->multiple_value_separator, $info['attribute']) as $key => $attribute)
|
foreach (explode($this->multiple_value_separator, $info['attribute']) as $key => $attribute)
|
||||||
{
|
{
|
||||||
|
if (empty($attribute))
|
||||||
|
continue;
|
||||||
$tab_attribute = explode(':', $attribute);
|
$tab_attribute = explode(':', $attribute);
|
||||||
$attribute = trim($tab_attribute[0]);
|
$attribute = trim($tab_attribute[0]);
|
||||||
// if position is filled
|
// if position is filled
|
||||||
@@ -1925,6 +1964,9 @@ class AdminImportControllerCore extends AdminController
|
|||||||
$this->receiveTab();
|
$this->receiveTab();
|
||||||
$handle = $this->openCsvFile();
|
$handle = $this->openCsvFile();
|
||||||
$default_language_id = (int)Configuration::get('PS_LANG_DEFAULT');
|
$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();
|
AdminImportController::setLocale();
|
||||||
for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++)
|
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_exist = true;
|
||||||
$customer_groups = $customer->getGroups();
|
$customer_groups = $customer->getGroups();
|
||||||
$addresses = $customer->getAddresses((int)Configuration::get('PS_LANG_DEFAULT'));
|
$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
|
// Group Importation
|
||||||
if (isset($info['group']) && !empty($info['group']))
|
if (isset($info['group']) && !empty($info['group']))
|
||||||
{
|
{
|
||||||
if (!isset($customer_groups))
|
foreach (explode($this->multiple_value_separator, $info['group']) as $key => $group)
|
||||||
$customer_groups = array();
|
|
||||||
|
|
||||||
$myGroup = Group::searchByName($default_language_id, $info['group']);
|
|
||||||
|
|
||||||
if (!$myGroup)
|
|
||||||
{
|
{
|
||||||
$myGroup = new Group();
|
$group = trim($group);
|
||||||
$myGroup->name = Array($default_language_id => $info['group']);
|
if(empty($group))
|
||||||
$myGroup->price_display_method = 1;
|
continue;
|
||||||
$myGroup->add();
|
$id_group = false;
|
||||||
$myGroup = Group::searchByName($default_language_id, $info['group']);
|
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);
|
AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $customer);
|
||||||
|
|
||||||
if ($customer->passwd)
|
if ($customer->passwd)
|
||||||
@@ -1990,6 +2046,8 @@ class AdminImportControllerCore extends AdminController
|
|||||||
{
|
{
|
||||||
foreach ($id_shop_list as $id_shop)
|
foreach ($id_shop_list as $id_shop)
|
||||||
{
|
{
|
||||||
|
if (empty($id_shop))
|
||||||
|
continue;
|
||||||
$shop = new Shop((int)$id_shop);
|
$shop = new Shop((int)$id_shop);
|
||||||
$group_shop = $shop->getGroup();
|
$group_shop = $shop->getGroup();
|
||||||
if ($group_shop->share_customer)
|
if ($group_shop->share_customer)
|
||||||
@@ -2011,7 +2069,18 @@ class AdminImportControllerCore extends AdminController
|
|||||||
//set temporally for validate field
|
//set temporally for validate field
|
||||||
$customer->id_shop = $default_shop->id;
|
$customer->id_shop = $default_shop->id;
|
||||||
$customer->id_shop_group = $default_shop->getGroup()->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;
|
$res = true;
|
||||||
if (($field_error = $customer->validateFields(UNFRIENDLY_ERROR, true)) === true &&
|
if (($field_error = $customer->validateFields(UNFRIENDLY_ERROR, true)) === true &&
|
||||||
($lang_field_error = $customer->validateFieldsLang(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;
|
$customer->id = $current_id_customer;
|
||||||
$res &= $customer->update();
|
$res &= $customer->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$res &= $customer->add();
|
$res &= $customer->add();
|
||||||
if (isset($customer_groups))
|
|
||||||
$customer->addGroups($customer_groups);
|
|
||||||
if (isset($addresses))
|
if (isset($addresses))
|
||||||
foreach ($addresses as $address)
|
foreach ($addresses as $address)
|
||||||
{
|
{
|
||||||
@@ -2043,6 +2109,8 @@ class AdminImportControllerCore extends AdminController
|
|||||||
Db::getInstance()->insert('address', $address);
|
Db::getInstance()->insert('address', $address);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ($res && isset($customer_groups))
|
||||||
|
$customer->updateGroup($customer_groups);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -2057,8 +2125,6 @@ class AdminImportControllerCore extends AdminController
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
$res &= $customer->add();
|
$res &= $customer->add();
|
||||||
if (isset($customer_groups))
|
|
||||||
$customer->addGroups($customer_groups);
|
|
||||||
if (isset($addresses))
|
if (isset($addresses))
|
||||||
foreach ($addresses as $address)
|
foreach ($addresses as $address)
|
||||||
{
|
{
|
||||||
@@ -2067,9 +2133,12 @@ class AdminImportControllerCore extends AdminController
|
|||||||
Db::getInstance()->insert('address', $address);
|
Db::getInstance()->insert('address', $address);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ($res && isset($customer_groups))
|
||||||
|
$customer->updateGroup($customer_groups);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
unset($customer_groups);
|
||||||
$customer_exist = false;
|
$customer_exist = false;
|
||||||
if (!$res)
|
if (!$res)
|
||||||
{
|
{
|
||||||
@@ -2116,7 +2185,7 @@ class AdminImportControllerCore extends AdminController
|
|||||||
$country->active = 1;
|
$country->active = 1;
|
||||||
$country->name = AdminImportController::createMultiLangField($address->country);
|
$country->name = AdminImportController::createMultiLangField($address->country);
|
||||||
$country->id_zone = 0; // Default zone for country to create
|
$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
|
$country->contains_states = 0; // Default value for country to create
|
||||||
$lang_field_error = $country->validateFieldsLang(UNFRIENDLY_ERROR, true);
|
$lang_field_error = $country->validateFieldsLang(UNFRIENDLY_ERROR, true);
|
||||||
if (($field_error = $country->validateFields(UNFRIENDLY_ERROR, true)) === true &&
|
if (($field_error = $country->validateFields(UNFRIENDLY_ERROR, true)) === true &&
|
||||||
@@ -2147,7 +2216,7 @@ class AdminImportControllerCore extends AdminController
|
|||||||
$state->name = $address->state;
|
$state->name = $address->state;
|
||||||
$state->id_country = isset($country->id) ? (int)$country->id : 0;
|
$state->id_country = isset($country->id) ? (int)$country->id : 0;
|
||||||
$state->id_zone = 0; // Default zone for state to create
|
$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;
|
$state->tax_behavior = 0;
|
||||||
if (($field_error = $state->validateFields(UNFRIENDLY_ERROR, true)) === true &&
|
if (($field_error = $state->validateFields(UNFRIENDLY_ERROR, true)) === true &&
|
||||||
($lang_field_error = $state->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $state->add())
|
($lang_field_error = $state->validateFieldsLang(UNFRIENDLY_ERROR, true)) === true && $state->add())
|
||||||
@@ -2332,6 +2401,11 @@ class AdminImportControllerCore extends AdminController
|
|||||||
if (!$res)
|
if (!$res)
|
||||||
$res = $manufacturer->add();
|
$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)
|
if ($res)
|
||||||
{
|
{
|
||||||
// Associate supplier to group shop
|
// Associate supplier to group shop
|
||||||
@@ -2345,6 +2419,8 @@ class AdminImportControllerCore extends AdminController
|
|||||||
$shops = array();
|
$shops = array();
|
||||||
foreach ($manufacturer->shop as $shop)
|
foreach ($manufacturer->shop as $shop)
|
||||||
{
|
{
|
||||||
|
if (empty($shop))
|
||||||
|
continue;
|
||||||
$shop = trim($shop);
|
$shop = trim($shop);
|
||||||
if (!is_numeric($shop))
|
if (!is_numeric($shop))
|
||||||
$shop = ShopGroup::getIdByName($shop);
|
$shop = ShopGroup::getIdByName($shop);
|
||||||
@@ -2403,6 +2479,11 @@ class AdminImportControllerCore extends AdminController
|
|||||||
if (!$res)
|
if (!$res)
|
||||||
$res = $supplier->add();
|
$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)
|
if (!$res)
|
||||||
$this->errors[] = Db::getInstance()->getMsgError().' '.sprintf(
|
$this->errors[] = Db::getInstance()->getMsgError().' '.sprintf(
|
||||||
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
|
Tools::displayError('%1$s (ID: %2$s) cannot be saved'),
|
||||||
@@ -2422,6 +2503,8 @@ class AdminImportControllerCore extends AdminController
|
|||||||
$shops = array();
|
$shops = array();
|
||||||
foreach ($supplier->shop as $shop)
|
foreach ($supplier->shop as $shop)
|
||||||
{
|
{
|
||||||
|
if (empty($shop))
|
||||||
|
continue;
|
||||||
$shop = trim($shop);
|
$shop = trim($shop);
|
||||||
if (!is_numeric($shop))
|
if (!is_numeric($shop))
|
||||||
$shop = ShopGroup::getIdByName($shop);
|
$shop = ShopGroup::getIdByName($shop);
|
||||||
@@ -2440,6 +2523,56 @@ class AdminImportControllerCore extends AdminController
|
|||||||
$this->closeCsvFile($handle);
|
$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
|
* @since 1.5.0
|
||||||
*/
|
*/
|
||||||
@@ -2479,34 +2612,32 @@ class AdminImportControllerCore extends AdminController
|
|||||||
$date_delivery_expected = pSQL($info['date_delivery_expected']);
|
$date_delivery_expected = pSQL($info['date_delivery_expected']);
|
||||||
$discount_rate = (float)$info['discount_rate'];
|
$discount_rate = (float)$info['discount_rate'];
|
||||||
$is_template = (bool)$info['is_template'];
|
$is_template = (bool)$info['is_template'];
|
||||||
|
|
||||||
|
$error = '';
|
||||||
// checks parameters
|
// checks parameters
|
||||||
if (!Supplier::supplierExists($id_supplier))
|
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))
|
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))
|
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))
|
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))
|
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)))
|
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))
|
if (!Validate::isDateFormat($date_delivery_expected))
|
||||||
$this->errors[] = sprintf($this->l('Date (%s) is not valid (at line %d). Format: %s.'), $date_delivery_expected,
|
$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'));
|
||||||
$current_line + 1, $this->l('YYYY-MM-DD'));
|
|
||||||
else if (new DateTime($date_delivery_expected) <= new DateTime('yesterday'))
|
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,
|
$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'));
|
||||||
$current_line + 1, $this->l('YYYY-MM-DD'));
|
|
||||||
if ($discount_rate < 0 || $discount_rate > 100)
|
if ($discount_rate < 0 || $discount_rate > 100)
|
||||||
$this->errors[] = sprintf($this->l('Discount rate (%d) is not valid (at line %d). %s.'), $discount_rate,
|
$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'));
|
||||||
$current_line + 1, $this->l('Format: Between 0 and 100'));
|
|
||||||
if ($supply_order->id > 0 && !$supply_order->isEditable())
|
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 no errors, sets supply order
|
||||||
if (empty($this->errors))
|
if (empty($error))
|
||||||
{
|
{
|
||||||
// adds parameters
|
// adds parameters
|
||||||
$info['id_ref_currency'] = (int)Currency::getDefaultCurrency()->id;
|
$info['id_ref_currency'] = (int)Currency::getDefaultCurrency()->id;
|
||||||
@@ -2523,8 +2654,10 @@ class AdminImportControllerCore extends AdminController
|
|||||||
AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $supply_order);
|
AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $supply_order);
|
||||||
|
|
||||||
// updatesd($supply_order);
|
// updatesd($supply_order);
|
||||||
|
|
||||||
$res = true;
|
$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();
|
$res &= $supply_order->update();
|
||||||
else
|
else
|
||||||
$res &= $supply_order->add();
|
$res &= $supply_order->add();
|
||||||
@@ -2533,6 +2666,8 @@ class AdminImportControllerCore extends AdminController
|
|||||||
if (!$res)
|
if (!$res)
|
||||||
$this->errors[] = sprintf($this->l('Supply Order could not be saved (at line %d).'), $current_line + 1);
|
$this->errors[] = sprintf($this->l('Supply Order could not be saved (at line %d).'), $current_line + 1);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
$this->errors[] = $error;
|
||||||
}
|
}
|
||||||
|
|
||||||
// closes
|
// closes
|
||||||
@@ -2658,6 +2793,8 @@ class AdminImportControllerCore extends AdminController
|
|||||||
|
|
||||||
protected function getNbrColumn($handle, $glue)
|
protected function getNbrColumn($handle, $glue)
|
||||||
{
|
{
|
||||||
|
if (!is_resource($handle))
|
||||||
|
return false;
|
||||||
$tmp = fgetcsv($handle, MAX_LINE_SIZE, $glue);
|
$tmp = fgetcsv($handle, MAX_LINE_SIZE, $glue);
|
||||||
AdminImportController::rewindBomAware($handle);
|
AdminImportController::rewindBomAware($handle);
|
||||||
return count($tmp);
|
return count($tmp);
|
||||||
@@ -2672,7 +2809,10 @@ class AdminImportControllerCore extends AdminController
|
|||||||
|
|
||||||
protected function openCsvFile()
|
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)
|
if (!$handle)
|
||||||
$this->errors[] = Tools::displayError('Cannot read the .CSV file');
|
$this->errors[] = Tools::displayError('Cannot read the .CSV file');
|
||||||
@@ -2787,6 +2927,9 @@ class AdminImportControllerCore extends AdminController
|
|||||||
if (preg_match('/^[0-9]+(\-(.*))?\.jpg$/', $d))
|
if (preg_match('/^[0-9]+(\-(.*))?\.jpg$/', $d))
|
||||||
unlink(_PS_SUPP_IMG_DIR_.$d);
|
unlink(_PS_SUPP_IMG_DIR_.$d);
|
||||||
break;
|
break;
|
||||||
|
case $this->entities[$this->l('Alias')]:
|
||||||
|
Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'alias`');
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
Image::clearTmpDir();
|
Image::clearTmpDir();
|
||||||
return true;
|
return true;
|
||||||
@@ -2811,7 +2954,7 @@ class AdminImportControllerCore extends AdminController
|
|||||||
|
|
||||||
if (Tools::isSubmit('submitFileUpload'))
|
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']))
|
if (isset($_FILES['file']) && !empty($_FILES['file']['error']))
|
||||||
{
|
{
|
||||||
switch ($_FILES['file']['error'])
|
switch ($_FILES['file']['error'])
|
||||||
@@ -2885,6 +3028,9 @@ class AdminImportControllerCore extends AdminController
|
|||||||
$this->supplierImport();
|
$this->supplierImport();
|
||||||
$this->clearSmartyCache();
|
$this->clearSmartyCache();
|
||||||
break;
|
break;
|
||||||
|
case $this->entities[$import_type = $this->l('Alias')]:
|
||||||
|
$this->aliasImport();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @since 1.5.0
|
// @since 1.5.0
|
||||||
@@ -3002,3 +3148,4 @@ class AdminImportControllerCore extends AdminController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
?>
|
||||||
|
|||||||
@@ -225,6 +225,12 @@ class AdminMetaControllerCore extends AdminController
|
|||||||
public function renderForm()
|
public function renderForm()
|
||||||
{
|
{
|
||||||
$files = Meta::getPages(true, ($this->object->page ? $this->object->page : false));
|
$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(
|
$pages = array(
|
||||||
'common' => array(
|
'common' => array(
|
||||||
'name' => $this->l('Default pages'),
|
'name' => $this->l('Default pages'),
|
||||||
@@ -312,6 +318,7 @@ class AdminMetaControllerCore extends AdminController
|
|||||||
'name' => 'url_rewrite',
|
'name' => 'url_rewrite',
|
||||||
'lang' => true,
|
'lang' => true,
|
||||||
'required' => true,
|
'required' => true,
|
||||||
|
'disabled' => (bool)$is_index,
|
||||||
'hint' => array(
|
'hint' => array(
|
||||||
$this->l('Only letters and hyphens are allowed'),
|
$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'),
|
$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");
|
fwrite($write_fd, "# Directories\n");
|
||||||
foreach ($this->rb_data['Directories'] as $dir)
|
foreach ($this->rb_data['Directories'] as $dir)
|
||||||
fwrite($write_fd, 'Disallow: /*'.$dir."\n");
|
fwrite($write_fd, 'Disallow: */'.$dir."\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Files
|
// Files
|
||||||
|
|||||||
@@ -829,7 +829,7 @@ class AdminModulesControllerCore extends AdminController
|
|||||||
|
|
||||||
if (count($module_errors))
|
if (count($module_errors))
|
||||||
{
|
{
|
||||||
$html_error = '<ul style="line-height:20px">';
|
$html_error = '<ul>';
|
||||||
foreach ($module_errors as $module_error)
|
foreach ($module_errors as $module_error)
|
||||||
{
|
{
|
||||||
$html_error_description = '';
|
$html_error_description = '';
|
||||||
|
|||||||
@@ -317,7 +317,7 @@ class AdminOrdersControllerCore extends AdminController
|
|||||||
'{shipping_number}' => $order->shipping_number,
|
'{shipping_number}' => $order->shipping_number,
|
||||||
'{order_name}' => $order->getUniqReference()
|
'{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,
|
$customer->email, $customer->firstname.' '.$customer->lastname, null, null, null, null,
|
||||||
_PS_MAIL_DIR_, true, (int)$order->id_shop))
|
_PS_MAIL_DIR_, true, (int)$order->id_shop))
|
||||||
{
|
{
|
||||||
@@ -715,7 +715,7 @@ class AdminOrdersControllerCore extends AdminController
|
|||||||
@Mail::Send(
|
@Mail::Send(
|
||||||
(int)$order->id_lang,
|
(int)$order->id_lang,
|
||||||
'credit_slip',
|
'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,
|
$params,
|
||||||
$customer->email,
|
$customer->email,
|
||||||
$customer->firstname.' '.$customer->lastname,
|
$customer->firstname.' '.$customer->lastname,
|
||||||
@@ -1884,7 +1884,7 @@ class AdminOrdersControllerCore extends AdminController
|
|||||||
Mail::Send(
|
Mail::Send(
|
||||||
(int)$order->id_lang,
|
(int)$order->id_lang,
|
||||||
'order_changed',
|
'order_changed',
|
||||||
Mail::l('Your order has been changed', $order->id_lang),
|
Mail::l('Your order has been changed', (int)$order->id_lang),
|
||||||
$data,
|
$data,
|
||||||
$order->getCustomer()->email,
|
$order->getCustomer()->email,
|
||||||
$order->getCustomer()->firstname.' '.$order->getCustomer()->lastname,
|
$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');
|
$this->fields_value['smarty_console_key'] = Configuration::get('PS_SMARTY_CONSOLE_KEY');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function initFieldsetFeaturesDetachables()
|
public function initFieldsetDebugMode()
|
||||||
{
|
{
|
||||||
$this->fields_form[1]['form'] = array(
|
$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(
|
'legend' => array(
|
||||||
'title' => $this->l('Optional features'),
|
'title' => $this->l('Optional features'),
|
||||||
'icon' => 'icon-puzzle-piece'
|
'icon' => 'icon-puzzle-piece'
|
||||||
@@ -190,7 +249,7 @@ class AdminPerformanceControllerCore extends AdminController
|
|||||||
|
|
||||||
public function initFieldsetCCC()
|
public function initFieldsetCCC()
|
||||||
{
|
{
|
||||||
$this->fields_form[2]['form'] = array(
|
$this->fields_form[3]['form'] = array(
|
||||||
'legend' => array(
|
'legend' => array(
|
||||||
'title' => $this->l('CCC (Combine, Compress and Cache)'),
|
'title' => $this->l('CCC (Combine, Compress and Cache)'),
|
||||||
'icon' => 'icon-fullscreen'
|
'icon' => 'icon-fullscreen'
|
||||||
@@ -300,7 +359,7 @@ class AdminPerformanceControllerCore extends AdminController
|
|||||||
|
|
||||||
public function initFieldsetMediaServer()
|
public function initFieldsetMediaServer()
|
||||||
{
|
{
|
||||||
$this->fields_form[3]['form'] = array(
|
$this->fields_form[4]['form'] = array(
|
||||||
'legend' => array(
|
'legend' => array(
|
||||||
'title' => $this->l('Media servers (use only with CCC)'),
|
'title' => $this->l('Media servers (use only with CCC)'),
|
||||||
'icon' => 'icon-link'
|
'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 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);
|
$warning_mcrypt = str_replace('[/a]', '</a>', $warning_mcrypt);
|
||||||
|
|
||||||
$this->fields_form[4]['form'] = array(
|
$this->fields_form[5]['form'] = array(
|
||||||
|
|
||||||
'legend' => array(
|
'legend' => array(
|
||||||
'title' => $this->l('Ciphering'),
|
'title' => $this->l('Ciphering'),
|
||||||
'icon' => 'icon-desktop'
|
'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_));
|
$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(
|
'legend' => array(
|
||||||
'title' => $this->l('Caching'),
|
'title' => $this->l('Caching'),
|
||||||
'icon' => 'icon-desktop'
|
'icon' => 'icon-desktop'
|
||||||
@@ -481,12 +541,19 @@ class AdminPerformanceControllerCore extends AdminController
|
|||||||
{
|
{
|
||||||
// Initialize fieldset for a form
|
// Initialize fieldset for a form
|
||||||
$this->initFieldsetSmarty();
|
$this->initFieldsetSmarty();
|
||||||
|
|
||||||
|
if (_PS_MODE_DEV_)
|
||||||
|
$this->initFieldsetDebugMode();
|
||||||
|
|
||||||
$this->initFieldsetFeaturesDetachables();
|
$this->initFieldsetFeaturesDetachables();
|
||||||
$this->initFieldsetCCC();
|
$this->initFieldsetCCC();
|
||||||
$this->initFieldsetMediaServer();
|
$this->initFieldsetMediaServer();
|
||||||
$this->initFieldsetCiphering();
|
$this->initFieldsetCiphering();
|
||||||
$this->initFieldsetCaching();
|
$this->initFieldsetCaching();
|
||||||
|
|
||||||
|
// Reindex fields
|
||||||
|
$this->fields_form = array_values($this->fields_form);
|
||||||
|
|
||||||
// Activate multiple fieldset
|
// Activate multiple fieldset
|
||||||
$this->multiple_fieldsets = true;
|
$this->multiple_fieldsets = true;
|
||||||
|
|
||||||
@@ -781,6 +848,17 @@ class AdminPerformanceControllerCore extends AdminController
|
|||||||
Autoload::getInstance()->generateIndex();
|
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)))
|
if ($redirectAdmin && (!isset($this->errors) || !count($this->errors)))
|
||||||
{
|
{
|
||||||
Hook::exec('action'.get_class($this).ucfirst($this->action).'After', array('controller' => $this, 'return' => ''));
|
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_.'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.')';
|
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`';
|
$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)
|
if ($join_category)
|
||||||
@@ -331,12 +331,17 @@ class AdminProductsControllerCore extends AdminController
|
|||||||
$nb = count($this->_list);
|
$nb = count($this->_list);
|
||||||
if ($this->_list)
|
if ($this->_list)
|
||||||
{
|
{
|
||||||
|
$context = $this->context->cloneContext();
|
||||||
|
$context->shop = clone($context->shop);
|
||||||
/* update product final price */
|
/* update product final price */
|
||||||
for ($i = 0; $i < $nb; $i++)
|
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
|
// 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'] = 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))
|
if (is_array($default_product->$field_name))
|
||||||
foreach ($default_product->$field_name as $key => $value)
|
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
|
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();
|
$this->object->loadStockData();
|
||||||
@@ -1337,7 +1342,6 @@ class AdminProductsControllerCore extends AdminController
|
|||||||
if (isset($result['success']))
|
if (isset($result['success']))
|
||||||
{
|
{
|
||||||
$obj = new Image((int)$result['success']['id_image']);
|
$obj = new Image((int)$result['success']['id_image']);
|
||||||
|
|
||||||
// Associate image to shop from context
|
// Associate image to shop from context
|
||||||
$shops = Shop::getContextListShopID();
|
$shops = Shop::getContextListShopID();
|
||||||
$obj->associateTo($shops);
|
$obj->associateTo($shops);
|
||||||
@@ -1351,6 +1355,7 @@ class AdminProductsControllerCore extends AdminController
|
|||||||
'id'=>$obj->id,
|
'id'=>$obj->id,
|
||||||
'path' => $obj->getExistingImgPath(),
|
'path' => $obj->getExistingImgPath(),
|
||||||
'position' => $obj->position,
|
'position' => $obj->position,
|
||||||
|
'legend' => $obj->legend,
|
||||||
'cover' => $obj->cover,
|
'cover' => $obj->cover,
|
||||||
'shops' => $json_shops,
|
'shops' => $json_shops,
|
||||||
);
|
);
|
||||||
@@ -3676,6 +3681,7 @@ class AdminProductsControllerCore extends AdminController
|
|||||||
foreach ($images as $k => $image)
|
foreach ($images as $k => $image)
|
||||||
$images[$k] = new Image($image['id_image']);
|
$images[$k] = new Image($image['id_image']);
|
||||||
|
|
||||||
|
|
||||||
if ($this->context->shop->getContext() == Shop::CONTEXT_SHOP)
|
if ($this->context->shop->getContext() == Shop::CONTEXT_SHOP)
|
||||||
$current_shop_id = (int)$this->context->shop->id;
|
$current_shop_id = (int)$this->context->shop->id;
|
||||||
else
|
else
|
||||||
@@ -3694,8 +3700,16 @@ class AdminProductsControllerCore extends AdminController
|
|||||||
'max_image_size' => $this->max_image_size / 1024 / 1024,
|
'max_image_size' => $this->max_image_size / 1024 / 1024,
|
||||||
'up_filename' => (string)Tools::getValue('virtual_product_filename_attribute'),
|
'up_filename' => (string)Tools::getValue('virtual_product_filename_attribute'),
|
||||||
'currency' => $this->context->currency,
|
'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
|
else
|
||||||
$this->displayWarning($this->l('You must save the product in this shop before adding images.'));
|
$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');
|
$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;
|
$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);
|
$data->assign('imageWidth', (isset($image_type['width']) ? (int)($image_type['width']) : 64) + 25);
|
||||||
foreach ($images as $k => $image)
|
foreach ($images as $k => $image)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1410,7 +1410,9 @@ class AdminSupplyOrdersControllerCore extends AdminController
|
|||||||
true,
|
true,
|
||||||
$supply_order->id);
|
$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.'));
|
$this->errors[] = Tools::displayError($this->l('Something went wrong when adding products to the warehouse.'));
|
||||||
|
|
||||||
$location = Warehouse::getProductLocation($supply_order_detail->id_product,
|
$location = Warehouse::getProductLocation($supply_order_detail->id_product,
|
||||||
|
|||||||
@@ -1259,6 +1259,8 @@ class AdminTranslationsControllerCore extends AdminController
|
|||||||
// Set the path of selected theme
|
// Set the path of selected theme
|
||||||
if ($this->theme_selected)
|
if ($this->theme_selected)
|
||||||
define('_PS_THEME_SELECTED_DIR_', _PS_ROOT_DIR_.'/themes/'.$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
|
// Get type of translation
|
||||||
if (($type = Tools::getValue('type')) && !is_array($type))
|
if (($type = Tools::getValue('type')) && !is_array($type))
|
||||||
|
|||||||
@@ -227,19 +227,19 @@ class AddressControllerCore extends FrontController
|
|||||||
else // Update cart address
|
else // Update cart address
|
||||||
$this->context->cart->autosetProductAddress();
|
$this->context->cart->autosetProductAddress();
|
||||||
|
|
||||||
if ((bool)(Tools::getValue('select_address', false)) == true OR Tools::getValue('type') == 'invoice' && Configuration::get('PS_ORDER_PROCESS_TYPE'))
|
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->id_address_invoice = (int)$address->id;
|
elseif (Configuration::get('PS_ORDER_PROCESS_TYPE'))
|
||||||
$this->context->cart->update();
|
$this->context->cart->id_address_invoice = (int)$this->context->cart->id_address_delivery;
|
||||||
}
|
$this->context->cart->update();
|
||||||
|
|
||||||
if ($this->ajax)
|
if ($this->ajax)
|
||||||
{
|
{
|
||||||
$return = array(
|
$return = array(
|
||||||
'hasError' => (bool)$this->errors,
|
'hasError' => (bool)$this->errors,
|
||||||
'errors' => $this->errors,
|
'errors' => $this->errors,
|
||||||
'id_address_delivery' => $this->context->cart->id_address_delivery,
|
'id_address_delivery' => (int)$this->context->cart->id_address_delivery,
|
||||||
'id_address_invoice' => $this->context->cart->id_address_invoice
|
'id_address_invoice' => (int)$this->context->cart->id_address_invoice
|
||||||
);
|
);
|
||||||
die(Tools::jsonEncode($return));
|
die(Tools::jsonEncode($return));
|
||||||
}
|
}
|
||||||
@@ -247,6 +247,8 @@ class AddressControllerCore extends FrontController
|
|||||||
// Redirect to old page or current page
|
// Redirect to old page or current page
|
||||||
if ($back = Tools::getValue('back'))
|
if ($back = Tools::getValue('back'))
|
||||||
{
|
{
|
||||||
|
if ($back == Tools::secureReferrer(Tools::getValue('back')))
|
||||||
|
Tools::redirect(html_entity_decode($back));
|
||||||
$mod = Tools::getValue('mod');
|
$mod = Tools::getValue('mod');
|
||||||
Tools::redirect('index.php?controller='.$back.($mod ? '&back='.$mod : ''));
|
Tools::redirect('index.php?controller='.$back.($mod ? '&back='.$mod : ''));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ class AuthControllerCore extends FrontController
|
|||||||
if (!empty($key))
|
if (!empty($key))
|
||||||
$back .= (strpos($back, '?') !== false ? '&' : '?').'key='.$key;
|
$back .= (strpos($back, '?') !== false ? '&' : '?').'key='.$key;
|
||||||
if (!empty($back))
|
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'))
|
if (Tools::getValue('display_guest_checkout'))
|
||||||
{
|
{
|
||||||
@@ -329,7 +329,7 @@ class AuthControllerCore extends FrontController
|
|||||||
|
|
||||||
if (!$this->ajax)
|
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(html_entity_decode($back));
|
||||||
Tools::redirect('index.php?controller='.(($this->authRedirection !== false) ? urlencode($this->authRedirection) : 'my-account'));
|
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');
|
$firstnameAddress = Tools::getValue('firstname');
|
||||||
$_POST['lastname'] = Tools::getValue('customer_lastname');
|
$_POST['lastname'] = Tools::getValue('customer_lastname');
|
||||||
$_POST['firstname'] = Tools::getValue('customer_firstname');
|
$_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;
|
$error_phone = false;
|
||||||
if (Configuration::get('PS_ONE_PHONE_AT_LEAST'))
|
if (Configuration::get('PS_ONE_PHONE_AT_LEAST'))
|
||||||
{
|
{
|
||||||
@@ -404,10 +407,8 @@ class AuthControllerCore extends FrontController
|
|||||||
$error_phone = true;
|
$error_phone = true;
|
||||||
}
|
}
|
||||||
elseif (((Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && Configuration::get('PS_ORDER_PROCESS_TYPE'))
|
elseif (((Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && Configuration::get('PS_ORDER_PROCESS_TYPE'))
|
||||||
|| (Configuration::get('PS_ORDER_PROCESS_TYPE') && !Tools::getValue('email_create')))
|
|| (Configuration::get('PS_ORDER_PROCESS_TYPE') && !Tools::getValue('email_create'))
|
||||||
&& (!Tools::getValue('phone') && !Tools::getValue('phone_mobile')))
|
|| (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && Tools::getValue('email_create')))
|
||||||
$error_phone = true;
|
|
||||||
elseif (((Configuration::get('PS_REGISTRATION_PROCESS_TYPE') && Configuration::get('PS_ORDER_PROCESS_TYPE') && Tools::getValue('email_create')))
|
|
||||||
&& (!Tools::getValue('phone') && !Tools::getValue('phone_mobile')))
|
&& (!Tools::getValue('phone') && !Tools::getValue('phone_mobile')))
|
||||||
$error_phone = true;
|
$error_phone = true;
|
||||||
}
|
}
|
||||||
@@ -465,7 +466,7 @@ class AuthControllerCore extends FrontController
|
|||||||
die(Tools::jsonEncode($return));
|
die(Tools::jsonEncode($return));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($back = Tools::getValue('back'))
|
if (($back = Tools::getValue('back')) && $back == Tools::secureReferrer($back))
|
||||||
Tools::redirect(html_entity_decode($back));
|
Tools::redirect(html_entity_decode($back));
|
||||||
// redirection: if cart is not empty : redirection to the cart
|
// redirection: if cart is not empty : redirection to the cart
|
||||||
if (count($this->context->cart->getProducts(true)) > 0)
|
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
|
else // if registration type is in one step, we save the address
|
||||||
{
|
{
|
||||||
// Preparing address
|
|
||||||
$address = new Address();
|
|
||||||
$_POST['lastname'] = $lastnameAddress;
|
$_POST['lastname'] = $lastnameAddress;
|
||||||
$_POST['firstname'] = $firstnameAddress;
|
$_POST['firstname'] = $firstnameAddress;
|
||||||
$address->id_customer = 1;
|
$post_back = $_POST;
|
||||||
$this->errors = array_unique(array_merge($this->errors, $address->validateController()));
|
// Preparing addresses
|
||||||
|
foreach($addresses_types as $addresses_type)
|
||||||
// US customer: normalize the address
|
|
||||||
if ($address->id_country == Country::getByIso('US') && Configuration::get('PS_TAASC'))
|
|
||||||
{
|
{
|
||||||
include_once(_PS_TAASC_PATH_.'AddressStandardizationSolution.php');
|
$$addresses_type = new Address();
|
||||||
$normalize = new AddressStandardizationSolution;
|
$$addresses_type->id_customer = 1;
|
||||||
$address->address1 = $normalize->AddressLineStandardization($address->address1);
|
|
||||||
$address->address2 = $normalize->AddressLineStandardization($address->address2);
|
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') == ''))
|
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 (!count($this->errors))
|
||||||
{
|
{
|
||||||
// if registration type is in one step, we save the address
|
$customer->active = 1;
|
||||||
if (Tools::isSubmit('submitAccount') || Tools::isSubmit('submitGuestAccount'))
|
// New Guest customer
|
||||||
if (!($country = new Country($address->id_country, Configuration::get('PS_LANG_DEFAULT'))) || !Validate::isLoadedObject($country))
|
if (Tools::isSubmit('is_new_customer'))
|
||||||
die(Tools::displayError());
|
$customer->is_guest = !Tools::getValue('is_new_customer', 1);
|
||||||
$contains_state = isset($country) && is_object($country) ? (int)$country->contains_states: 0;
|
else
|
||||||
$id_state = isset($address) && is_object($address) ? (int)$address->id_state: 0;
|
$customer->is_guest = 0;
|
||||||
if ((Tools::isSubmit('submitAccount')|| Tools::isSubmit('submitGuestAccount')) && $contains_state && !$id_state)
|
if (!$customer->add())
|
||||||
$this->errors[] = Tools::displayError('This country requires you to choose a State.');
|
$this->errors[] = Tools::displayError('An error occurred while creating your account.');
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$customer->active = 1;
|
foreach($addresses_types as $addresses_type)
|
||||||
// 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
|
|
||||||
{
|
{
|
||||||
$address->id_customer = (int)$customer->id;
|
$$addresses_type->id_customer = (int)$customer->id;
|
||||||
$this->errors = array_unique(array_merge($this->errors, $address->validateController()));
|
if ($addresses_type == 'address_invoice')
|
||||||
if (!count($this->errors) && (Configuration::get('PS_REGISTRATION_PROCESS_TYPE') || $this->ajax || Tools::isSubmit('submitGuestAccount')) && !$address->add())
|
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.');
|
$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
|
else
|
||||||
{
|
{
|
||||||
if (!$customer->is_guest)
|
$customer->cleanGroups();
|
||||||
{
|
// we add the guest customer in the guest customer group
|
||||||
$this->context->customer = $customer;
|
$customer->addGroups(array((int)Configuration::get('PS_GUEST_GROUP')));
|
||||||
$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'));
|
|
||||||
}
|
}
|
||||||
|
$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')),
|
'content_only' => (int)(Tools::getValue('content_only')),
|
||||||
'path' => $path
|
'path' => $path
|
||||||
));
|
));
|
||||||
|
|
||||||
|
if ($this->cms->indexation == 0)
|
||||||
|
$this->context->smarty->assign('nobots', true);
|
||||||
}
|
}
|
||||||
else if ($this->assignCase == 2)
|
else if ($this->assignCase == 2)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -58,8 +58,8 @@ class OrderControllerCore extends ParentOrderController
|
|||||||
{
|
{
|
||||||
$this->step = 0;
|
$this->step = 0;
|
||||||
$this->errors[] = sprintf(
|
$this->errors[] = sprintf(
|
||||||
Tools::displayError('A minimum purchase total of %s is required in order to validate your order.'),
|
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($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)))
|
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),
|
'phone_mobile_invoice' => Tools::htmlentitiesUTF8($address_invoice->phone_mobile),
|
||||||
'id_country_invoice' => (int)($address_invoice->id_country),
|
'id_country_invoice' => (int)($address_invoice->id_country),
|
||||||
'id_state_invoice' => (int)($address_invoice->id_state),
|
'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)
|
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->addJS(_THEME_JS_DIR_.'order-address.js');
|
||||||
$this->addJqueryPlugin('fancybox');
|
$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->addJqueryPlugin('typewatch');
|
||||||
$this->addJS(_THEME_JS_DIR_.'cart-summary.js');
|
$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);
|
$address = new Address($this->context->cart->id_address_delivery);
|
||||||
$id_zone = Address::getZoneById($address->id);
|
$id_zone = Address::getZoneById($address->id);
|
||||||
$bad_delivery = false;
|
$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')
|
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();
|
$order_invoice_list = $this->order->getInvoicesCollection();
|
||||||
Hook::exec('actionPDFInvoiceRender', array('order_invoice_list' => $order_invoice_list));
|
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();
|
$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)
|
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;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
|
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
|
id;Active (0/1);Name*;Description;Short description;Meta-title;Meta-keywords;Meta-description;Image URL
|
||||||
1;1;Apple Computer, Inc;;;;;
|
1;1;Apple Computer, Inc;;;;;http://youdomain.com/img.jpg
|
||||||
2;1;Shure Incorporated;;;;;
|
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
|
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
|
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;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
|
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
|
id;Active (0/1);Name*;Description;Short description;Meta-title;Meta-keywords;Meta-description;Image URL
|
||||||
1;1;Applestore;;;;;
|
1;1;Applestore;;;;;http://youdomain.com/img.jpg
|
||||||
2;1;Shure Online Store;;;;;
|
2;1;Shure Online Store;;;;;http://youdomain.com/img.jpg
|
||||||
|
|||||||
|
@@ -95,6 +95,10 @@ abstract class InstallControllerHttp
|
|||||||
|
|
||||||
final public static function execute()
|
final public static function execute()
|
||||||
{
|
{
|
||||||
|
$session = InstallSession::getInstance();
|
||||||
|
if (!$session->last_step || $session->last_step == 'welcome')
|
||||||
|
Autoload::getInstance()->generateIndex();
|
||||||
|
|
||||||
if (Tools::getValue('compile_templates'))
|
if (Tools::getValue('compile_templates'))
|
||||||
{
|
{
|
||||||
require_once (_PS_INSTALL_CONTROLLERS_PATH_.'http/smarty_compile.php');
|
require_once (_PS_INSTALL_CONTROLLERS_PATH_.'http/smarty_compile.php');
|
||||||
@@ -111,7 +115,6 @@ abstract class InstallControllerHttp
|
|||||||
self::$instances[$step] = new $classname($step);
|
self::$instances[$step] = new $classname($step);
|
||||||
}
|
}
|
||||||
|
|
||||||
$session = InstallSession::getInstance();
|
|
||||||
if (!$session->last_step || !in_array($session->last_step, self::$steps))
|
if (!$session->last_step || !in_array($session->last_step, self::$steps))
|
||||||
$session->last_step = self::$steps[0];
|
$session->last_step = self::$steps[0];
|
||||||
|
|
||||||
|
|||||||
@@ -358,7 +358,7 @@ class InstallControllerHttpProcess extends InstallControllerHttp
|
|||||||
$install_modules['subtasks'][] = array('module' => $module);
|
$install_modules['subtasks'][] = array('module' => $module);
|
||||||
$this->process_steps[] = $install_modules;
|
$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(),
|
$params = array('iso_lang' => $this->language->getLanguageIso(),
|
||||||
'iso_country' => $this->session->shop_country,
|
'iso_country' => $this->session->shop_country,
|
||||||
|
|||||||
@@ -365,6 +365,7 @@ CREATE TABLE `PREFIX_cms` (
|
|||||||
`id_cms_category` int(10) unsigned NOT NULL,
|
`id_cms_category` int(10) unsigned NOT NULL,
|
||||||
`position` int(10) unsigned NOT NULL DEFAULT '0',
|
`position` int(10) unsigned NOT NULL DEFAULT '0',
|
||||||
`active` tinyint(1) 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`)
|
PRIMARY KEY (`id_cms`)
|
||||||
) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8;
|
) ENGINE=ENGINE_TYPE DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -66,7 +66,7 @@ echo '
|
|||||||
<body>
|
<body>
|
||||||
<form action="translate.php" method="post">
|
<form action="translate.php" method="post">
|
||||||
<select name="iso" onchange="document.location = \'translate.php?iso=\'+this.value;">
|
<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)
|
foreach ($languages as $language)
|
||||||
if (file_exists('../langs/'.$language.'/install.php'))
|
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";
|
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();
|
ob_start();
|
||||||
|
|
||||||
// Check PHP version
|
// 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);
|
die('You need at least PHP 5.1.3 to run PrestaShop. Your current PHP version is '.PHP_VERSION);
|
||||||
|
|
||||||
// Generate common constants
|
// Generate common constants
|
||||||
|
|||||||
@@ -62,9 +62,9 @@ return array(
|
|||||||
'Populate database tables' => 'ডাটাবেস টেবিল তথ্যপূর্ণ হয়েছে',
|
'Populate database tables' => 'ডাটাবেস টেবিল তথ্যপূর্ণ হয়েছে',
|
||||||
'Configure shop information' => 'দোকানের তথ্য কনফিগার হয়েছে',
|
'Configure shop information' => 'দোকানের তথ্য কনফিগার হয়েছে',
|
||||||
'Install modules' => 'মডিউল ইনস্টল হয়েছে',
|
'Install modules' => 'মডিউল ইনস্টল হয়েছে',
|
||||||
'Install modules Addons' => 'মডিউল অ্যাডঅনস ইনস্টল হয়েছে',
|
'Install Addons modules' => 'মডিউল অ্যাডঅনস ইনস্টল হয়েছে',
|
||||||
'Install demonstration data' => 'ডেমনেসট্রেসন তথ্য ইনস্টল হয়েছে',
|
'Install demonstration data' => 'ডেমনেসট্রেসন তথ্য ইনস্টল হয়েছে',
|
||||||
'PHP parameters:' => 'পিএইচপি পরামিতি:',
|
'PHP parameters:' => 'পিএইচপি পরামিতি',
|
||||||
'PHP 5.1.2 or later is not enabled' => 'পিএইচপি 5.1.2 অথবা পরবর্তী সংস্করণ সক্রিয় করা নেই',
|
'PHP 5.1.2 or later is not enabled' => 'পিএইচপি 5.1.2 অথবা পরবর্তী সংস্করণ সক্রিয় করা নেই',
|
||||||
'Cannot upload files' => 'ফাইল আপলোড করা যাচ্ছে না',
|
'Cannot upload files' => 'ফাইল আপলোড করা যাচ্ছে না',
|
||||||
'Cannot create new files and folders' => 'নতুন ফাইল এবং ফোল্ডার তৈরি করা যাচ্ছে না',
|
'Cannot create new files and folders' => 'নতুন ফাইল এবং ফোল্ডার তৈরি করা যাচ্ছে না',
|
||||||
@@ -106,52 +106,52 @@ return array(
|
|||||||
'Fixtures class "%s" not found' => '"%s" Fixtures class পাওয়া যায় নি',
|
'Fixtures class "%s" not found' => '"%s" Fixtures class পাওয়া যায় নি',
|
||||||
'"%s" must be an instane of "InstallXmlLoader"' => '"%s" কে অবশ্যই "InstallXmlLoader" এর একটি instaneহতে হবে',
|
'"%s" must be an instane of "InstallXmlLoader"' => '"%s" কে অবশ্যই "InstallXmlLoader" এর একটি instaneহতে হবে',
|
||||||
'Information about your Store' => 'আপনার দোকান সম্পর্কে তথ্য',
|
'Information about your Store' => 'আপনার দোকান সম্পর্কে তথ্য',
|
||||||
'Shop name:' => 'দোকানের নাম:',
|
'Shop name' => 'দোকানের নাম',
|
||||||
'Main activity:' => 'মুখ্য কার্যকলাপ:',
|
'Main activity' => 'মুখ্য কার্যকলাপ',
|
||||||
'Please choose your main activity' => 'আপনার প্রধান কার্যকলাপ বেছে নিন',
|
'Please choose your main activity' => 'আপনার প্রধান কার্যকলাপ বেছে নিন',
|
||||||
'Other activity...' => 'অন্য কার্যকলাপ ...',
|
'Other activity...' => 'অন্য কার্যকলাপ ...',
|
||||||
'Help us learn more about your store so we can offer you optimal guidance and the best features for your business!' => 'আমরা যাতে আপনাকে আপনার ব্যবসার জন্য অনুকূল নির্দেশিকা এবং সর্বোত্তম বৈশিষ্ট্য অফার করতে পারি সেজন্য আমাদের আপনার দোকান সম্বন্ধে আরও জানতে সাহায্য করুন!',
|
'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' => 'হ্যাঁ',
|
'Yes' => 'হ্যাঁ',
|
||||||
'No' => 'না ',
|
'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এর ব্যবহার শিখার একটি ভালো উপায়।আপনি যদি এটার সাথে পরিচিত না হন, তাহলে তাদের ইনস্টল করা উচিত।',
|
'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' => 'আপনার দেশ নির্বাচন করুন',
|
'Select your country' => 'আপনার দেশ নির্বাচন করুন',
|
||||||
'Shop timezone:' => 'দোকানের সময় অঞ্চল(timezone):',
|
'Shop timezone:' => 'দোকানের সময় অঞ্চল(timezone)',
|
||||||
'Select your timezone' => 'আপনার সময় অঞ্চল নির্বাচন করুন',
|
'Select your timezone' => 'আপনার সময় অঞ্চল নির্বাচন করুন',
|
||||||
'Shop logo:' => 'দোকান লোগো:',
|
'Shop logo:' => 'দোকান লোগো',
|
||||||
'Optional - You can add you logo at a later time.' => 'ঐচ্ছিক - পরবর্তী সময়ে লোগো যোগ করতে পারেন.',
|
'Optional - You can add you logo at a later time.' => 'ঐচ্ছিক - পরবর্তী সময়ে লোগো যোগ করতে পারেন.',
|
||||||
'Your Account' => 'আপনার অ্যাকাউন্ট',
|
'Your Account' => 'আপনার অ্যাকাউন্ট',
|
||||||
'First name:' => 'নামের ১ম অংশঃ',
|
'First name' => 'নামের ১ম অংশঃ',
|
||||||
'Last name:' => 'নামের শেষ অংশঃ',
|
'Last name' => 'নামের শেষ অংশঃ',
|
||||||
'E-mail address:' => 'ইমেইল ঠিকানা:',
|
'E-mail address' => 'ইমেইল ঠিকানা',
|
||||||
'This email address will be your username to access your store\'s back office.' => 'এই ইমেইল ঠিকানা আপনার দোকান এর ব্যাক অফিস অ্যাক্সেস করতে আপনার ইউজারনেম হবে',
|
'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' => 'কমপক্ষে ৮ অক্ষরের অক্ষর এবং সংখ্যায় হতে হবে',
|
'Must be letters and numbers with at least 8 characters' => 'কমপক্ষে ৮ অক্ষরের অক্ষর এবং সংখ্যায় হতে হবে',
|
||||||
'Re-type to confirm:' => 'নিশ্চিত করার জন্য আবার টাইপ করুন:',
|
'Re-type to confirm' => 'নিশ্চিত করার জন্য আবার টাইপ করুন',
|
||||||
'Sign-up to the newsletter' => 'নিউজলেটারে সাইন আপ করুন ',
|
'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 আপনার ব্যবসা বৃদ্ধি করতে সহায়তা করবে।আপনি এই টিপস পেতে না চাইলে এই বাক্সটি আনচেক করুন।',
|
'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>আপনার দোকান এর তথ্য সংক্রান্ত কার্যক্রম পূরণ করতে হবে',
|
'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 আপনার ডাটাবেসের সাথে সংযোগ করার জন্য নীচের ক্ষেত্রগুলি পূরণ করুন.',
|
'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". ',
|
'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 name' => 'ডেটাবেস নাম',
|
||||||
'Database login:' => 'ডাটাবেস লগইন:',
|
'Database login' => 'ডাটাবেস লগইন',
|
||||||
'Database password:' => 'ডাটাবেজ পাসওয়ার্ড:',
|
'Database password' => 'ডাটাবেজ পাসওয়ার্ড',
|
||||||
'Database Engine:' => 'ডাটাবেস ইঞ্জিন:',
|
'Database Engine:' => 'ডাটাবেস ইঞ্জিন',
|
||||||
'Tables prefix:' => 'টেবিল প্রিফিক্সঃ',
|
'Tables prefix' => 'টেবিল প্রিফিক্সঃ',
|
||||||
'Drop existing tables (mode dev):' => 'বিদ্যমান টেবিল ড্রপ করুন(mode dev):',
|
'Drop existing tables (mode dev)' => 'বিদ্যমান টেবিল ড্রপ করুন(mode dev)',
|
||||||
'Test your database connection now!' => 'এখন আপনার ডাটাবেস সংযোগ পরীক্ষা করুন!',
|
'Test your database connection now!' => 'এখন আপনার ডাটাবেস সংযোগ পরীক্ষা করুন!',
|
||||||
'E-mail delivery set-up' => 'ই মেইল বিতরণের সেট আপ',
|
'E-mail delivery set-up' => 'ই মেইল বিতরণের সেট আপ',
|
||||||
'Configure SMTP manually (advanced users only)' => 'নিজে SMTP-কনফিগার করুন(দক্ষ ব্যবহারকারীদের জন্য শুধুমাত্র)',
|
'Configure SMTP manually (advanced users only)' => 'নিজে SMTP-কনফিগার করুন(দক্ষ ব্যবহারকারীদের জন্য শুধুমাত্র)',
|
||||||
'By default, the PHP mail() function is used' => 'ডিফল্টরূপে পিএইচপি মেইল () ফাংশন ব্যবহার করা হয়েছে',
|
'By default, the PHP mail() function is used' => 'ডিফল্টরূপে পিএইচপি মেইল () ফাংশন ব্যবহার করা হয়েছে',
|
||||||
'SMTP server address:' => 'SMTP সার্ভারের ঠিকানা:',
|
'SMTP server address:' => 'SMTP সার্ভারের ঠিকানা',
|
||||||
'Encryption:' => 'এনক্রিপশন:',
|
'Encryption:' => 'এনক্রিপশন',
|
||||||
'None' => 'কোনোটা না',
|
'None' => 'কোনোটা না',
|
||||||
'Port:' => 'পোর্ট:',
|
'Port:' => 'পোর্ট',
|
||||||
'Login:' => 'লগইন:',
|
'Login:' => 'লগইন',
|
||||||
'Password:' => 'পাসওয়ার্ড:',
|
'Password' => 'পাসওয়ার্ড',
|
||||||
'enter@your.email' => 'enter@your.email ',
|
'enter@your.email' => 'enter@your.email ',
|
||||||
'Send me a test email!' => 'আমাকে একটা পরীক্ষামূলক ইমেল প্রেরণ করুন!',
|
'Send me a test email!' => 'আমাকে একটা পরীক্ষামূলক ইমেল প্রেরণ করুন!',
|
||||||
'Next' => 'পরবর্তী ',
|
'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>. হতে',
|
'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!' => 'আপনার ইনস্টলেশন সমাপ্ত!',
|
'Your installation is finished!' => 'আপনার ইনস্টলেশন সমাপ্ত!',
|
||||||
'You have just finished installing your shop. Thank you for using PrestaShop!' => ' আপনার দোকান ইনস্টল সমাপ্ত হয়েছে. PrestaShop ব্যবহারের জন্য আপনাকে ধন্যবাদ!',
|
'You have just finished installing your shop. Thank you for using PrestaShop!' => ' আপনার দোকান ইনস্টল সমাপ্ত হয়েছে. PrestaShop ব্যবহারের জন্য আপনাকে ধন্যবাদ!',
|
||||||
'Please remember your login information:' => 'আপনার লগইন তথ্য দয়া করে মনে রাখবেন:',
|
'Please remember your login information' => 'আপনার লগইন তথ্য দয়া করে মনে রাখবেন',
|
||||||
'E-mail:' => 'ই মেইল:',
|
'E-mail' => 'ই মেইল',
|
||||||
'Print my login information' => 'আপনার লগইন তথ্য মুদ্রণ করুন',
|
'Print my login information' => 'আপনার লগইন তথ্য মুদ্রণ করুন',
|
||||||
'Display' => 'প্রদর্শন ',
|
'Display' => 'প্রদর্শন ',
|
||||||
'For security purposes, you must delete the "install" folder.' => 'নিরাপত্তার জন্য "install" ফোল্ডার মুছে ফেলা আবশ্যক.',
|
'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" ক্লিক করুন',
|
'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' => 'এই সেটিংস রিফ্রেশ করুন',
|
'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 তে আপনার মেমরি চেক করুন অথবা অথবা আপনার হোস্ট সরবরাহকারীর সাথে যোগাযোগ করুন।',
|
'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 ইনস্টলেশনের দ্রুত এবং সহজ।মাত্র কয়েক মুহূর্তের মধ্যে, আপনি আরও ১৫০০০০ ব্যাবসায়ি নিয়ে গঠিত একটি কমিউনিটির অংশ হয়ে যাবেন।আপনি প্রতিদিন সহজে পরিচালনা করতে পারবেন এমন একটি নিজস্ব অনন্য অনলাইন দোকান নির্মাণ করতে যাচ্ছেন।',
|
'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 ',
|
'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!' => 'উপরোক্ত ভাষা নির্বাচন শুধুমাত্র ইনস্টলেশনের সহকারীর জন্য প্রযোজ্য।আপনার দোকান ইনস্টল করা হলে,আপনি উপর থেকে আপনার দোকানের ভাষা নির্বাচন করতে পারবেন একদম বিনামূল্যে!',
|
'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 ',
|
'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_database' => 'Configuração do Sistema',
|
||||||
'menu_configure' => 'Informação da Loja',
|
'menu_configure' => 'Informação da Loja',
|
||||||
'menu_process' => 'Instalaçã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',
|
'Field required' => 'Campos requeridos',
|
||||||
'Invalid shop name' => 'Nome da loja inválido',
|
'Invalid shop name' => 'Nome da loja inválido',
|
||||||
'Your firstname contains some invalid characters' => 'Seu primeiro nome contém alguns caractéres inválidos',
|
'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 demonstration data' => 'Demonstração de instalação do produto',
|
||||||
'Install theme' => 'Instale o tema',
|
'Install theme' => 'Instale o tema',
|
||||||
'Send information e-mail' => 'Envio de informações por e-mail',
|
'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 ?',
|
'Is PHP 5.1.2 or later installed ?' => 'PHP 5.1.2 ou posterior está instalado ?',
|
||||||
'Can upload files ?' => 'Pode enviar arquivos ?',
|
'Can upload files ?' => 'Pode enviar arquivos ?',
|
||||||
'Can create new files and folders ?' => 'Pode criar novos arquivos e pastas ?',
|
'Can create new files and folders ?' => 'Pode criar novos arquivos e pastas ?',
|
||||||
'Is GD Library installed ?' => 'Biblioteca GD está instalada ?',
|
'Is GD Library installed ?' => 'Biblioteca GD está instalada ?',
|
||||||
'Is MySQL support is on ?' => 'MySQL está instalado ?',
|
'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 ?',
|
'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 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) ?',
|
'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 Dom extension loaded ?' => 'A extensão DOM está carregada ?',
|
||||||
'Is PDO MySQL extension loaded ?' => 'A extensão PDO MySQL 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 settings and merchant account information' => 'Informações sobre o vendedor e a loja',
|
||||||
'Shop name:' => 'O nome da sua loja :',
|
'Shop name' => 'O nome da sua loja',
|
||||||
'Main activity:' => 'Principal atividade :',
|
'Main activity' => 'Principal atividade',
|
||||||
'Please choose your main activity' => 'Por favor escolha sua atividade principal',
|
'Please choose your main activity' => 'Por favor escolha sua atividade principal',
|
||||||
'Other activity...' => 'Outra atividade ...',
|
'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.',
|
'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',
|
'Yes' => 'Sim',
|
||||||
'No' => 'Não',
|
'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.',
|
'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',
|
'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',
|
'Select your timezone' => 'Selecione o seu fuso horário',
|
||||||
'Shop logo:' => 'Logo da loja',
|
'Shop logo:' => 'Logo da loja',
|
||||||
'Recommended dimensions:' => 'Dimensões recomendadas :',
|
'Recommended dimensions:' => 'Dimensões recomendadas',
|
||||||
'First name:' => 'Primeiro nome :',
|
'First name' => 'Primeiro nome',
|
||||||
'Last name:' => 'Sobrenome :',
|
'Last name' => 'Sobrenome',
|
||||||
'E-mail address:' => 'Endereço de e-mail :',
|
'E-mail address' => 'Endereço de e-mail',
|
||||||
'Shop password:' => 'Senha da loja :',
|
'Shop password' => 'Senha da loja',
|
||||||
'Re-type to confirm:' => 'Digite novamente para confirmar :',
|
'Re-type to confirm' => 'Digite novamente para confirmar ',
|
||||||
'Receive this information by e-mail' => 'Receba esta informação por e-mail',
|
'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.',
|
'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>.',
|
'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.',
|
'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 name' => 'Nome do banco de dados',
|
||||||
'Database login:' => 'Login do banco de dados :',
|
'Database login' => 'Login do banco de dados',
|
||||||
'Database password:' => 'Senha do banco de dados :',
|
'Database password' => 'Senha do banco de dados',
|
||||||
'Database Engine:' => 'Tipo do banco de dados :',
|
'Database Engine:' => 'Tipo do banco de dados',
|
||||||
'Tables prefix:' => 'Prefixo das tabelas :',
|
'Tables prefix' => 'Prefixo das tabelas',
|
||||||
'Drop existing tables (mode dev):' => 'Exclua as tabelas existentes (mode dev) :',
|
'Drop existing tables (mode dev)' => 'Exclua as tabelas existentes (mode dev)',
|
||||||
'Verify now!' => 'Verifique agora !',
|
'Verify now!' => 'Verifique agora !',
|
||||||
'E-mail delivery set-up' => 'Configuração de entrega de e-mails',
|
'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)',
|
'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()',
|
'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',
|
'SMTP server address:' => 'Endereço do servidor SMTP',
|
||||||
'Encryption:' => 'Encriptação :',
|
'Encryption:' => 'Encriptação',
|
||||||
'None' => 'Nenhum',
|
'None' => 'Nenhum',
|
||||||
'Port:' => 'Port :',
|
'Port:' => 'Port',
|
||||||
'Login:' => 'Identificação :',
|
'Login:' => 'Identificação',
|
||||||
'Password:' => 'Senha :',
|
'Password' => 'Senha',
|
||||||
'enter@your.email' => 'colocar@seu.email',
|
'enter@your.email' => 'colocar@seu.email',
|
||||||
'Send me a test email!' => 'Envie-me um email de teste !',
|
'Send me a test email!' => 'Envie-me um email de teste !',
|
||||||
'Next' => 'Próximo',
|
'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>.',
|
'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 !',
|
'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 !',
|
'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/".',
|
'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',
|
'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...',
|
'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',
|
'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.',
|
'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 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',
|
'Optional set-up' => 'Configuração opcional',
|
||||||
'Refresh these settings' => 'Atualize estas configurações',
|
'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! !',
|
'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',
|
'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 ?',
|
'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!',
|
'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.',
|
'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.',
|
'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 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',
|
'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',
|
'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',
|
'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á.',
|
'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!',
|
'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.',
|
'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',
|
'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',
|
'Database is created' => 'Banco de dados está criado',
|
||||||
'Cannot create the database automatically' => 'Não é possível criar o banco de dados automaticamente',
|
'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',
|
'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',
|
'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 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.',
|
'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"',
|
'For security purposes, you must delete the "install" folder.' => 'Por questões de segurança, você deve deletar a pasta "install"',
|
||||||
'Files' => 'Arquivos',
|
'Files' => 'Arquivos',
|
||||||
'All files are not successfuly uploaded on your server' => 'Todos os arquivos não foram carregados no seu servidor com sucesso',
|
'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 modules' => 'Module werden installiert',
|
||||||
'Install demonstration data' => 'Demo wird installiert',
|
'Install demonstration data' => 'Demo wird installiert',
|
||||||
'Install theme' => 'Thema 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 ?',
|
'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 upload files ?' => 'Können Dateien hochgeladen werden ?',
|
||||||
'Can create new files and folders ?' => 'Können neue Dateien und Ordner erstellt weden ?',
|
'Can create new files and folders ?' => 'Können neue Dateien und Ordner erstellt weden ?',
|
||||||
'Is GD Library installed ?' => 'Ist GD-Library installiert ?',
|
'Is GD Library installed ?' => 'Ist GD-Library installiert ?',
|
||||||
'Is MySQL support is on ?' => 'Ist MySQL-Support aktiviert ?',
|
'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',
|
'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 PHP register global option off (recommended) ?' => 'Ist register global auf off (emfohlen)?',
|
||||||
'Is GZIP compression activated (recommended) ?' => 'Ist GZIP Kompression aktiviert (empfohlen)?',
|
'Is GZIP compression activated (recommended) ?' => 'Ist GZIP Kompression aktiviert (empfohlen)?',
|
||||||
@@ -76,48 +76,48 @@ return array(
|
|||||||
'Is Dom extension loaded ?' => 'Ist DOM geladen ?',
|
'Is Dom extension loaded ?' => 'Ist DOM geladen ?',
|
||||||
'Is PDO MySQL extension loaded ?' => 'Ist PDO MySQL geladen ?',
|
'Is PDO MySQL extension loaded ?' => 'Ist PDO MySQL geladen ?',
|
||||||
'Shop settings and merchant account information' => 'Shopinformationen über den Verkäufer',
|
'Shop settings and merchant account information' => 'Shopinformationen über den Verkäufer',
|
||||||
'Shop name:' => 'Name Ihres Shops:',
|
'Shop name' => 'Name Ihres Shops',
|
||||||
'Main activity:' => 'Branchenzugehörigkeit',
|
'Main activity' => 'Branchenzugehörigkeit',
|
||||||
'Please choose your main activity' => 'Bitte wählen Sie Ihre Branchenzugehörigkeit',
|
'Please choose your main activity' => 'Bitte wählen Sie Ihre Branchenzugehörigkeit',
|
||||||
'Other activity...' => 'Andere...',
|
'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.',
|
'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',
|
'Yes' => 'Ja',
|
||||||
'No' => 'Nein',
|
'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',
|
'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',
|
'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',
|
'Select your timezone' => 'Wählen Sie Ihre Zeitzone',
|
||||||
'Shop logo:' => 'Shop-Logo:',
|
'Shop logo:' => 'Shop-Logo',
|
||||||
'Recommended dimensions:' => 'Empfohlene Abmessungen:',
|
'Recommended dimensions:' => 'Empfohlene Abmessungen',
|
||||||
'First name:' => 'Vorname:',
|
'First name' => 'Vorname',
|
||||||
'Last name:' => 'Name:',
|
'Last name' => 'Name',
|
||||||
'E-mail address:' => 'E-Mail-Adresse:',
|
'E-mail address' => 'E-Mail-Adresse',
|
||||||
'Shop password:' => 'Kennwort des Shops:',
|
'Shop password' => 'Kennwort des Shops',
|
||||||
'Re-type to confirm:' => 'Bestätigen Sie das Kennwort:',
|
'Re-type to confirm' => 'Bestätigen Sie das Kennwort',
|
||||||
'Receive this information by e-mail' => 'Meine Einstellungen per E-Mail erhalten',
|
'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',
|
'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>.' => '',
|
'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',
|
'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 name' => 'Name der Datenbank',
|
||||||
'Database login:' => 'Datenbank Benutzer:',
|
'Database login' => 'Datenbank Benutzer',
|
||||||
'Database password:' => 'Datenbank Kennwort:',
|
'Database password' => 'Datenbank Kennwort',
|
||||||
'Database Engine:' => 'Datenbank-Engine:',
|
'Database Engine:' => 'Datenbank-Engine',
|
||||||
'Tables prefix:' => 'Tabellen-Präfixe:',
|
'Tables prefix' => 'Tabellen-Präfixe',
|
||||||
'Drop existing tables (mode dev):' => 'Vorhandene Tabellen löschen:',
|
'Drop existing tables (mode dev)' => 'Vorhandene Tabellen löschen',
|
||||||
'Verify now!' => 'Jetz prüfen',
|
'Verify now!' => 'Jetz prüfen',
|
||||||
'E-mail delivery set-up' => 'E-Mail Einstellungen',
|
'E-mail delivery set-up' => 'E-Mail Einstellungen',
|
||||||
'Configure SMTP manually (advanced users only)' => 'Konfigurieren des SMTP-Mailversandes (nur für Fortgeschrittene Nutzer)',
|
'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',
|
'By default, the PHP mail() function is used' => 'Standardmäßig wird PHP mail () Funktion verwendet',
|
||||||
'SMTP server address:' => 'SMTP-Server-Adresse',
|
'SMTP server address:' => 'SMTP-Server-Adresse',
|
||||||
'Encryption:' => 'Verschlüsselung:',
|
'Encryption:' => 'Verschlüsselung',
|
||||||
'None' => 'Keine',
|
'None' => 'Keine',
|
||||||
'Port:' => 'Port:',
|
'Port:' => 'Port',
|
||||||
'Login:' => 'Benutzername:',
|
'Login:' => 'Benutzername',
|
||||||
'Password:' => 'Kennwort:',
|
'Password' => 'Kennwort',
|
||||||
'enter@your.email' => 'enter@your.email ',
|
'enter@your.email' => 'enter@your.email ',
|
||||||
'Send me a test email!' => 'Eine Test-E-Mail an mich senden!',
|
'Send me a test email!' => 'Eine Test-E-Mail an mich senden!',
|
||||||
'Next' => 'Weiter',
|
'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>.',
|
'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!',
|
'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',
|
'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\'.',
|
'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',
|
'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. ...',
|
'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',
|
'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',
|
'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 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',
|
'Optional set-up' => 'Optionale Einstellungen',
|
||||||
'Refresh these settings' => 'Einstellungen aktualisieren',
|
'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!',
|
'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',
|
'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?',
|
'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.',
|
'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.',
|
'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.',
|
'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!',
|
'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.',
|
'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.',
|
'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',
|
'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.',
|
'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!',
|
'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',
|
'Display' => 'Anzeige',
|
||||||
'PrestaShop compatibility with your system environment has been verified!' => 'Die Kompatibilität von PrestaShop mit Ihrem System wurde überprüft!',
|
'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.',
|
'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',
|
'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',
|
'Database is created' => 'Datenbank erstellt',
|
||||||
'Cannot create the database automatically' => 'Datenbank kann nicht automatisch erstellt werden',
|
'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',
|
'Files' => 'Dateien',
|
||||||
'All files are not successfuly uploaded on your server' => 'Es wurden nicht alle Dateien erfolgreich auf Ihren Server hochgeladen',
|
'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.',
|
'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.',
|
'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 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.',
|
'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.',
|
'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