Compare commits

..
2 Commits
Author SHA1 Message Date
Francois Gaillard 6c0867f314 // Release branch merged 2013-08-29 18:47:19 +02:00
Gregory RoussacandFrancois Gaillard 4bf773af65 Update .gitignore 2013-08-06 15:10:39 +02:00
620 changed files with 21541 additions and 15118 deletions
+1 -1
View File
@@ -104,4 +104,4 @@ modules/upscarrier
modules/uspscarrier modules/uspscarrier
modules/wexpay modules/wexpay
modules/yotpo modules/yotpo
modules/zingaya modules/zingaya
+7 -28
View File
@@ -16,14 +16,13 @@
- bMancone - bMancone
- bumbu - bumbu
- Burhan - Burhan
- Cédric Mouleyre
- Caleydon Media - Caleydon Media
- cam.lafit - cam.lafit
- Captain FLAM - Captain FLAM
- Captain-FLAM - Captain-FLAM
- ccauw - ccauw
- Cédric Mouleyre
- ChristopheBoucaut - ChristopheBoucaut
- CINS
- cippest - cippest
- cmouleyre - cmouleyre
- Corentin Delcourt - Corentin Delcourt
@@ -35,50 +34,42 @@
- David Gasperoni - David Gasperoni
- Davy Rolink - Davy Rolink
- djfm - djfm
- dlage
- dMetzger - dMetzger
- (d)oekia - (d)oekia
- Dragan Skrbic - Dragan Skrbic
- DrÿSs'
- dreammeup - dreammeup
- DrySs - DrySs
- DrÿSs
- DrÿSs'
- dSevere - dSevere
- Edouard Gaulué - Edouard Gaulué
- emily-d - emily-d
- Fabio Chelly - Fabio Chelly
- fBrignoli - fBrignoli
- fram - fram
- Francois Gaillard
- François Gaillard - François Gaillard
- Fran?s Gaillard
- fSerny - fSerny
- Gabriel Schwardy - Gabriel Schwardy
- gBrunier - gBrunier
- gCharmes - gCharmes
- gPoulain - gPoulain
- gr4devel
- Grégoire Bélorgey - Grégoire Bélorgey
- Gregory Roussac - Gregory Roussac
- gRoussac - gRoussac
- Guillaume DELOINCE - Guillaume DELOINCE
- ha99y
- hAitmansour - hAitmansour
- Ha!*!*y - Ha!*!*y
- indesign47 - indesign47
- inem0o - inem0o
- ivancasasempere - ivancasasempere
- Jérôme Nadaud
- jBreux - jBreux
- jeckyl
- jeromenadaud - jeromenadaud
- Jerome Nadaud - Jerome Nadaud
- Jérôme Nadaud
- jessylenne - jessylenne
- jmCollin - jmCollin
- jObregon - jObregon
- Jonathan Danse - Jonathan Danse
- joseantgv - joseantgv
- Julien
- Kevin Granger - Kevin Granger
- kpodemski - kpodemski
- Krystian Podemski - Krystian Podemski
@@ -86,11 +77,8 @@
- lCherifi - lCherifi
- ldecoker - ldecoker
- lLefevre - lLefevre
- LOIC ROSSET ltd
- makk1ntosh
- marcinsz101 - marcinsz101
- Marco Cervellin - Marco Cervellin
- matiasiglesias
- Mats Rynge - Mats Rynge
- MatthieuB - MatthieuB
- Maxence - Maxence
@@ -113,39 +101,32 @@
- PhpMadman - PhpMadman
- Pierre - Pierre
- Piotr Kaczor - Piotr Kaczor
- Piotr Mocko - Piotr Moćko
- PrestaEdit - PrestaEdit
- prestarocket - prestarocket
- Prestaspirit
- pxls - pxls
- Rémi Gaillard
- Raphaël Malié - Raphaël Malié
- raulgundin - raulgundin
- Rémi Gaillard
- rGaillard - rGaillard
- Rimas Kudelis - Rimas Kudelis
- rMalie - rMalie
- rMontagne - rMontagne
- romainberger
- root - root
- runningz - runningz
- sagaradonis - Sébastien
- Sébastien Bocahu
- Samy Rabih - Samy Rabih
- Sarah Lorenzini - Sarah Lorenzini
- Seb - Seb
- Sébastien
- Sébastien Bocahu
- Seynaeve - Seynaeve
- Shagshag - Shagshag
- sjousse
- sLorenzini - sLorenzini
- smartdatasoft
- soufyan
- soware - soware
- Staging - Staging
- sThiebaut - sThiebaut
- Sylvain WITMEYER - Sylvain WITMEYER
- tDidierjean - tDidierjean
- unknown
- vAugagneur - vAugagneur
- vChabot - vChabot
- Vincent Augagneur - Vincent Augagneur
@@ -157,5 +138,3 @@
- Xavier - Xavier
- Xavier POITAU - Xavier POITAU
- Yoozio - Yoozio
- zimmi1
+20 -21
View File
@@ -2,48 +2,47 @@ README
====== ======
![PrestaShop](http://www.prestashop.com/images/banners/general/prestashop_728x90.png "PrestaShop") ![PrestaShop](http://www.prestashop.com/images/banners/general/prestashop_728x90.png "PrestaShop")
ABOUT PREPARATION
-------- --------
PrestaShop is a free and open-source e-commerce web application, committed to providing the best shopping cart experience for both merchants and consumers. To install PrestaShop, you need a remote web server or on your computer (MAMP), with access to a database like MySQL.
You'll need access to phpMyAdmin to create a database and to indicate the information in the database in the installer.
SERVER CONFIGURATION
--------
To install PrestaShop, you need a web server running PHP5 and any flavor of MySQL5 (MySQL, MariaDB, Percona Server...).
You will also need a database administration tool, such as phpMyAdmin, in order to create a database for PrestaShop.
We recommend the Apache or Nginx web servers.
If your host does not offer PHP5 by default, here are a few [explanations][2] about PHP5 or the .htaccess file for certain hosting services (1&1, Free, Lycos, OVH, Infomaniak, Amen, GoDaddy, etc).
If you want your online store ready to go, visit [http://www.prestabox.com][1]: it lets you create your online store in less than 10 minutes without any technical knowledge.
If you do not host and unable to create your store, we offer a turnkey store, which lets you create your online store in less than 10 minutes without any technical knowledge.
We invite you to visit: [http://www.prestabox.com][1]
INSTALLATION INSTALLATION
-------- --------
With your web browser, go to the root of your PrestaShop directory, and the installer will start. Follow the instructions until PrestaShop is installed. Simply go to your PrestaShop web directory and use installer :-)
If you have any PHP error, perhaps you don't have PHP5 or you need to activate it on your web host. See the page linked above. If you have any PHP error, perhaps you don't have PHP5 or you need to activate it on your web host.
If you don't find any solution to start the installer, please post on [the PrestaShop forums][3]. Please go to our forum to find pre-installation settings (PHP 5, htaccess) for certain hosting services (1&1, Free, Lycos, OVH, Infomaniak, Amen, GoDaddy, etc).
English webhost [specifics settings][2]
If you don't find any solution to launch installer, please post on [our forum][3]
There are always solutions for your issues ;-)
DOCUMENTATION DOCUMENTATION
-------- --------
The official PrestaShop documentation is available online [on its own website][4]. For any extra documentation (how-to), please read our [Online documentation][4]
FORUMS FORUMS
-------- --------
You can discuss, help and contribute with PrestaShop community on [the PrestaShop forums][5]. You can also discuss, help and contribute with PrestaShop community on [our forums][5]
Thank you for downloading and using PrestaShop e-commerce Open-source solution!
Thanks for downloading and using PrestaShop e-commerce Open-source solution!
[1]: http://www.prestabox.com [1]: http://www.prestabox.com
[2]: http://www.prestashop.com/forums/topic/2946-pre-installation-settings-php-5-htaccess-for-certain-hosting-services/ [2]: http://www.prestashop.com/forums/topic/2946-pre-installation-settings-php-5-htaccess-for-certain-hosting-services/
[3]: http://www.prestashop.com/forums/forum/7-installing-prestashop/ [3]: http://www.prestashop.com/forums/forum/7-installing-prestashop/
[4]: http://doc.prestashop.com [4]: http://doc.prestashop.com
[5]: http://www.prestashop.com/forums/ [5]: http://www.prestashop.com/forums/
+92 -1
View File
@@ -26,12 +26,45 @@
define('_PS_ADMIN_DIR_', getcwd()); define('_PS_ADMIN_DIR_', getcwd());
include(_PS_ADMIN_DIR_.'/../config/config.inc.php'); include(_PS_ADMIN_DIR_.'/../config/config.inc.php');
/* Getting cookie or logout */ /* Getting cookie or logout */
require_once(_PS_ADMIN_DIR_.'/init.php'); require_once(_PS_ADMIN_DIR_.'/init.php');
$context = Context::getContext(); $context = Context::getContext();
if (Tools::isSubmit('changeParentUrl'))
echo '<script type="text/javascript">parent.parent.document.location.href = "'.addslashes(urldecode(Tools::getValue('changeParentUrl'))).'";</script>';
if (Tools::isSubmit('installBoughtModule'))
{
$file = false;
while ($file === false OR file_exists(_PS_MODULE_DIR_.$file))
$file = uniqid();
$file = _PS_MODULE_DIR_.$file.'.zip';
$sourceFile = 'http://addons.prestashop.com/iframe/getboughtfile.php?id_order_detail='.Tools::getValue('id_order_detail').'&token='.Tools::getValue('token');
if (!copy($sourceFile, $file))
{
if (!($content = file_get_contents($sourceFile)))
die(displayJavascriptAlert('Access denied: Please download your module directly from PrestaShop Addons website'));
elseif (!file_put_contents($file, $content))
die(displayJavascriptAlert('Local error: your module directory is not writable'));
}
$first6 = fread($fd = fopen($file, 'r'), 6);
if (!strncmp($first6, 'Error:', 6))
{
$displayJavascriptAlert = displayJavascriptAlert(fread($fd, 1024));
fclose($fd);
unlink($file);
die($displayJavascriptAlert);
}
fclose($fd);
if (!Tools::ZipExtract($file, _PS_MODULE_DIR_))
{
unlink($file);
die(displayJavascriptAlert('Cannot unzip file'));
}
unlink($file);
die(displayJavascriptAlert('Module copied to disk'));
}
if (Tools::isSubmit('ajaxReferrers')) if (Tools::isSubmit('ajaxReferrers'))
{ {
require(_PS_CONTROLLER_DIR_.'admin/AdminReferrersController.php'); require(_PS_CONTROLLER_DIR_.'admin/AdminReferrersController.php');
@@ -68,6 +101,39 @@ if (Tools::isSubmit('ajaxProductPackItems'))
die('['.implode(',', $jsonArray).']'); die('['.implode(',', $jsonArray).']');
} }
if (Tools::isSubmit('ajaxStates') AND Tools::isSubmit('id_country'))
{
$states = Db::getInstance()->executeS('
SELECT s.id_state, s.name
FROM '._DB_PREFIX_.'state s
LEFT JOIN '._DB_PREFIX_.'country c ON (s.`id_country` = c.`id_country`)
WHERE s.id_country = '.(int)(Tools::getValue('id_country')).' AND s.active = 1 AND c.`contains_states` = 1
ORDER BY s.`name` ASC');
if (is_array($states) AND !empty($states))
{
$list = '';
if (Tools::getValue('no_empty') != true)
{
$empty_value = (Tools::isSubmit('empty_value')) ? Tools::getValue('empty_value') : '----------';
$list = '<option value="0">'.Tools::htmlentitiesUTF8($empty_value).'</option>'."\n";
}
foreach ($states AS $state)
$list .= '<option value="'.(int)($state['id_state']).'"'.((isset($_GET['id_state']) AND $_GET['id_state'] == $state['id_state']) ? ' selected="selected"' : '').'>'.$state['name'].'</option>'."\n";
}
else
$list = 'false';
die($list);
}
if (Tools::getValue('form_language_id'))
{
if (!($context->cookie->employee_form_lang = (int)(Tools::getValue('form_language_id'))))
die ('Error while updating cookie.');
die ('Form language updated.');
}
if (Tools::isSubmit('submitTrackClickOnHelp')) if (Tools::isSubmit('submitTrackClickOnHelp'))
{ {
@@ -78,6 +144,15 @@ if (Tools::isSubmit('submitTrackClickOnHelp'))
HelpAccess::trackClick($label, $version); HelpAccess::trackClick($label, $version);
} }
if (Tools::isSubmit('toggleScreencast'))
{
if (Validate::isLoadedObject($context->employee))
{
$context->employee->bo_show_screencast = !$context->employee->bo_show_screencast;
$context->employee->update();
}
}
if (Tools::isSubmit('getChildrenCategories') && Tools::isSubmit('id_category_parent')) if (Tools::isSubmit('getChildrenCategories') && Tools::isSubmit('id_category_parent'))
{ {
$children_categories = Category::getChildrenWithNbSelectedSubCat(Tools::getValue('id_category_parent'), Tools::getValue('selectedCat'), Context::getContext()->language->id, null, Tools::getValue('use_shop_context')); $children_categories = Category::getChildrenWithNbSelectedSubCat(Tools::getValue('id_category_parent'), Tools::getValue('selectedCat'), Context::getContext()->language->id, null, Tools::getValue('use_shop_context'));
@@ -125,6 +200,17 @@ if (Tools::isSubmit('getParentCategoriesId') && $id_category = Tools::getValue('
die(Tools::jsonEncode($output)); die(Tools::jsonEncode($output));
} }
/* Update attribute */
if (Tools::isSubmit('ajaxUpdateTaxRule'))
{
$id_tax_rule = Tools::getValue('id_tax_rule');
$tax_rules = new TaxRule((int)$id_tax_rule);
$output = array();
foreach ($tax_rules as $key => $result)
$output[$key] = $result;
die(Tools::jsonEncode($output));
}
if (Tools::isSubmit('getZones')) if (Tools::isSubmit('getZones'))
{ {
$zones = Zone::getZones(); $zones = Zone::getZones();
@@ -137,3 +223,8 @@ if (Tools::isSubmit('getZones'))
$array = array('hasError' => false, 'errors' => '', 'data' => $html); $array = array('hasError' => false, 'errors' => '', 'data' => $html);
die(Tools::jsonEncode($html)); die(Tools::jsonEncode($html));
} }
function displayJavascriptAlert($s)
{
echo '<script type="text/javascript">alert(\''.addslashes($s).'\');</script>';
}
+15 -7
View File
@@ -22,18 +22,26 @@
$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;
elseif (!$upload->isFileUploaded('file')) }else if(!$upload->isFileUploaded('file'))
{
$error = ERR_FILE_NOT_UPLOADED; $error = ERR_FILE_NOT_UPLOADED;
elseif (!$upload->isPermittedFileExt(explode(",", CONFIG_UPLOAD_VALID_EXTS))) }else if(!$upload->moveUploadedFile($_GET['folder']))
$error = ERR_FILE_TYPE_NOT_ALLOWED; {
elseif (defined('CONFIG_UPLOAD_MAXSIZE') && CONFIG_UPLOAD_MAXSIZE && $upload->isSizeTooBig(CONFIG_UPLOAD_MAXSIZE))
$error = sprintf(ERROR_FILE_TOO_BID, transformFileSize(CONFIG_UPLOAD_MAXSIZE));
elseif (!$upload->moveUploadedFile($_GET['folder']))
$error = ERR_FILE_MOVE_FAILED; $error = ERR_FILE_MOVE_FAILED;
else }
elseif(!$upload->isPermittedFileExt(explode(",", CONFIG_UPLOAD_VALID_EXTS)))
{
$error = ERR_FILE_TYPE_NOT_ALLOWED;
}elseif(defined('CONFIG_UPLOAD_MAXSIZE') && CONFIG_UPLOAD_MAXSIZE && $upload->isSizeTooBig(CONFIG_UPLOAD_MAXSIZE))
{
$error = sprintf(ERROR_FILE_TOO_BID, transformFileSize(CONFIG_UPLOAD_MAXSIZE));
}else
{ {
include_once(CLASS_FILE); include_once(CLASS_FILE);
$path = $upload->getFilePath(); $path = $upload->getFilePath();
@@ -24,8 +24,7 @@
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,jpeg,png');// // define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,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,jpeg,jpeg,png'); define("CONFIG_VIEWABLE_VALID_EXTS", 'gif,jpg,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', '');
-3
View File
@@ -10,9 +10,6 @@
//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,jpeg,png,txt'); // define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,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,jpeg,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,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', '');
-3
View File
@@ -27,9 +27,6 @@
$timer_start = microtime(true); $timer_start = microtime(true);
define('_PS_ADMIN_DIR_', getcwd()); define('_PS_ADMIN_DIR_', getcwd());
if (!defined('PS_ADMIN_DIR'))
define('PS_ADMIN_DIR', _PS_ADMIN_DIR_);
require(_PS_ADMIN_DIR_.'/../config/config.inc.php'); require(_PS_ADMIN_DIR_.'/../config/config.inc.php');
require(_PS_ADMIN_DIR_.'/functions.php'); require(_PS_ADMIN_DIR_.'/functions.php');
+3 -6
View File
@@ -49,12 +49,9 @@ try
AdminTab::$currentIndex = $currentIndex; AdminTab::$currentIndex = $currentIndex;
$iso = $context->language->iso_code; $iso = $context->language->iso_code;
if (file_exists(_PS_TRANSLATIONS_DIR_.$iso.'/errors.php')) include(_PS_TRANSLATIONS_DIR_.$iso.'/errors.php');
include(_PS_TRANSLATIONS_DIR_.$iso.'/errors.php'); include(_PS_TRANSLATIONS_DIR_.$iso.'/fields.php');
if (file_exists(_PS_TRANSLATIONS_DIR_.$iso.'/fields.php')) include(_PS_TRANSLATIONS_DIR_.$iso.'/admin.php');
include(_PS_TRANSLATIONS_DIR_.$iso.'/fields.php');
if (file_exists(_PS_TRANSLATIONS_DIR_.$iso.'/admin.php'))
include(_PS_TRANSLATIONS_DIR_.$iso.'/admin.php');
/* Server Params */ /* Server Params */
$protocol_link = (Configuration::get('PS_SSL_ENABLED')) ? 'https://' : 'http://'; $protocol_link = (Configuration::get('PS_SSL_ENABLED')) ? 'https://' : 'http://';
+1 -2
View File
@@ -30,7 +30,6 @@ select[disabled="disabled"], input[disabled="disabled"],textarea[disabled="disab
/*BUTTON*/ /*BUTTON*/
.button{ .button{
cursor: pointer;
background: #e3e3e3 url('../img/bg-button-degrade.png') repeat-x scroll left top; background: #e3e3e3 url('../img/bg-button-degrade.png') repeat-x scroll left top;
background: -moz-linear-gradient(center top , #F9F9F9, #E3E3E3) repeat scroll 0 0 transparent; background: -moz-linear-gradient(center top , #F9F9F9, #E3E3E3) repeat scroll 0 0 transparent;
background: -webkit-gradient(linear, center top ,center bottom, from(#F9F9F9), to(#E3E3E3)) repeat scroll 0 0 transparent; background: -webkit-gradient(linear, center top ,center bottom, from(#F9F9F9), to(#E3E3E3)) repeat scroll 0 0 transparent;
@@ -674,4 +673,4 @@ ul.listForm li {padding-bottom:3px;}
/************** SCENE *****************/ /************** SCENE *****************/
#large_scene_image{clear:both;border:1px solid transparent;} #large_scene_image{clear:both;border:1px solid transparent;}
+1 -1
View File
@@ -34,7 +34,7 @@
.toolbarBox .process-icon-new-module { background-image: url('../img/process-icon-new-module.png')} .toolbarBox .process-icon-new-module { background-image: url('../img/process-icon-new-module.png')}
.toolbarBox .process-icon-new-module-addon { background-image: url('../img/process-icon-new-module-addon.png')} .toolbarBox .process-icon-new-module-addon { background-image: url('../img/process-icon-new-module-addon.png')}
div.fix-toolbar {border-bottom: 1px solid #E0E0E0;position:fixed;top:0;opacity:0.9;z-index:11} div.fix-toolbar {border-bottom: 1px solid #E0E0E0;position:fixed;top:0;opacity:0.9;z-index:1}
/*FILTER MODULE*/ /*FILTER MODULE*/
@@ -66,8 +66,7 @@
{ {
if (msg) if (msg)
{ {
var infos = msg.infos.replace("\\'", "'").split('_'); var infos = msg.infos.split('_');
$('input[name=firstname]').val(infos[0]); $('input[name=firstname]').val(infos[0]);
$('input[name=lastname]').val(infos[1]); $('input[name=lastname]').val(infos[1]);
$('input[name=company]').val(infos[2]); $('input[name=company]').val(infos[2]);
@@ -40,7 +40,7 @@
</td> </td>
{foreach from=$ranges key=r item=range} {foreach from=$ranges key=r item=range}
<td class="center"> <td class="center">
<input name="fees[{$zone.id_zone|intval}][{$range.id_range|intval}]" type="text" <input name="fees[{$zone.id_zone|intval}][{$range.id_range|intval}]" type="text"
{if !isset($fields_value['zones'][$zone.id_zone]) || (isset($fields_value['zones'][$zone.id_zone]) && !$fields_value['zones'][$zone.id_zone])} disabled="disabled"{/if} {if isset($price_by_range[$range.id_range][$zone.id_zone]) && $price_by_range[$range.id_range][$zone.id_zone] && isset($fields_value['zones'][$zone.id_zone]) && $fields_value['zones'][$zone.id_zone]} value="{$price_by_range[$range.id_range][$zone.id_zone]|string_format:'%.6f'}" {else} value="" {/if} /> &nbsp; {$currency_sign} {if !isset($fields_value['zones'][$zone.id_zone]) || (isset($fields_value['zones'][$zone.id_zone]) && !$fields_value['zones'][$zone.id_zone])} disabled="disabled"{/if} {if isset($price_by_range[$range.id_range][$zone.id_zone]) && $price_by_range[$range.id_range][$zone.id_zone] && isset($fields_value['zones'][$zone.id_zone]) && $fields_value['zones'][$zone.id_zone]} value="{$price_by_range[$range.id_range][$zone.id_zone]|string_format:'%.6f'}" {else} value="" {/if} /> &nbsp; {$currency_sign}
</td> </td>
{/foreach} {/foreach}
@@ -53,7 +53,7 @@
{if $smarty.foreach.ranges.first} {if $smarty.foreach.ranges.first}
<td class="center">&nbsp;</td> <td class="center">&nbsp;</td>
{else} {else}
<td class="center"><button class="button">{l s='Delete'}</button></td> <td class="center"><button class="button">{l s='Delete'}</button</td>
{/if} {/if}
{/foreach} {/foreach}
</tr> </tr>
@@ -50,7 +50,7 @@
<h2><img src="../img/admin/cart.gif" /> {l s='Order information'}</h2> <h2><img src="../img/admin/cart.gif" /> {l s='Order information'}</h2>
<span> <span>
{if $order->id} {if $order->id}
<a href="{$link->getAdminLink('AdminOrders')|escape:'htmlall':'UTF-8'}&id_order={$order->id}&vieworder"> {l s='Order #%s' sprintf=$order->reference}</a></span> <a href="{$link->getAdminLink('AdminOrders')|escape:'htmlall':'UTF-8'}&id_order={$order->id}&vieworder"> {l s='Order #%d' sprintf=$order->id|string_format:"%06d"}</a></span>
<br /><br /> <br /><br />
{l s='Made on:'} {dateFormat date=$order->date_add}<br /><br /><br /><br /> {l s='Made on:'} {dateFormat date=$order->date_add}<br /><br /><br /><br />
{else} {else}
@@ -187,4 +187,4 @@
<div class="clear" style="height:20px;">&nbsp;</div> <div class="clear" style="height:20px;">&nbsp;</div>
{/block} {/block}
</div> </div>
@@ -57,14 +57,14 @@
<dl> <dl>
<dt>{l s='Sent on:'}</dt> <dt>{l s='Sent on:'}</dt>
<dd>{$message.date_add}&nbsp;</dd> <dd>{$message.date_add}</dd>
</dl> </dl>
{if empty($message.id_employee)} {if empty($message.id_employee)}
<dl> <dl>
<dt>{l s='Browser:'}</dt> <dt>{l s='Browser:'}</dt>
<dd>{$message.user_agent}&nbsp;</dd> <dd>{$message.user_agent}</dd>
</dl> </dl>
{/if} {/if}
@@ -79,35 +79,34 @@
</dl> </dl>
{/if} {/if}
{if !empty($message.id_order) && $is_valid_order_id && empty($message.id_employee)} {if !empty($message.id_order) && empty($message.id_employee)}
<dl> <dl>
<dt>{l s='Order #'}</dt> <dt>{l s='Order #'}</dt>
<dd><a href="index.php?tab=AdminOrders&id_order={$message.id_order}&vieworder&token={getAdminToken tab='AdminOrders'}" title="{l s='View order'}">{$message.id_order} <img src="../img/admin/search.gif" alt="{l s='View'}" /></a> <dd><a href="index.php?tab=AdminOrders&id_order={$message.id_order}&vieworder&token={getAdminToken tab='AdminOrders'}" title="{l s='View order'}">
</dd> {$message.id_order} <img src="../img/admin/search.gif" alt="{l s='View'}" />
</a></dd>
</dl> </dl>
{/if} {/if}
{if !empty($message.id_product) && empty($message.id_employee)} {if !empty($message.id_product) && empty($message.id_employee)}
<dl> <dl>
<dt>{l s='Product #'}</dt> <dt>{l s='Product #'}</dt>
<dd><a href="index.php?tab=AdminProducts&id_product={$message.id_product}&updateproduct&token={getAdminToken tab='AdminProducts'}" title="{l s='View order'}">{$message.id_product} <img src="../img/admin/search.gif" alt="{l s='View'}" /></a></dd> <dd><a href="index.php?tab=AdminProducts&id_product={$message.id_product}&updateproduct&token={getAdminToken tab='AdminProducts'}" title="{l s='View order'}">
{$message.id_product} <img src="../img/admin/search.gif" alt="{l s='View'}" />
</a></dd>
</dl> </dl>
{/if} {/if}
<form action="{$current}&token={$token}&id_customer_thread={$message.id_customer_thread}&viewcustomer_thread" method="post"> <form action="{$current}&token={$token}&id_customer_thread={$message.id_customer_thread}&viewcustomer_thread" method="post">
<b>{l s='Subject:'}</b>
<input type="hidden" name="id_customer_message" value="{$message.id_customer_message}" /> <input type="hidden" name="id_customer_message" value="{$message.id_customer_message}" />
<dl> <select name="id_contact" onchange="this.form.submit();">
<dt>{l s='Subject:'}</dt> {foreach $contacts as $contact}
<dd> <option value="{$contact.id_contact}" {if $contact.id_contact == $message.id_contact}selected="selected"{/if}>
<select name="id_contact" onchange="this.form.submit();"> {$contact.name}
{foreach $contacts as $contact} </option>
<option value="{$contact.id_contact}" {if $contact.id_contact == $message.id_contact}selected="selected"{/if}> {/foreach}
{$contact.name} </select>
</option>
{/foreach}
</select>
</dd>
</dl>
</form> </form>
@@ -35,7 +35,7 @@
$.ajax({ $.ajax({
type: "POST", type: "POST",
url: "index.php", url: "index.php",
data: "token={getAdminToken tab='AdminCustomers'}&tab=AdminCustomers&ajax=1&action=updateCustomerNote&id_customer={$customer->id}&note="+encodeURIComponent(noteContent), data: "token={getAdminToken tab='AdminCustomers'}&tab=AdminCustomers&ajax=1&action=updateCustomerNote&id_customer={$customer->id}&note="+noteContent,
async : true, async : true,
success: function(r) { success: function(r) {
$('#note_feedback').html('').hide(); $('#note_feedback').html('').hide();
@@ -48,11 +48,11 @@
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() { $(document).ready(function() {
$("#group_discount_category").fancybox({ $("#group_discount_category").fancybox({
beforeLoad: function () { onStart: function () {
$('#group_discount_category_fancybox').show(); $('#group_discount_category_fancybox').show();
initFancyBox(); initFancyBox();
}, },
beforeClose: function () { onClosed: function () {
$('#group_discount_category_fancybox').hide(); $('#group_discount_category_fancybox').hide();
} }
}); });
@@ -138,7 +138,7 @@
} }
else else
{ {
$('#group_discount_category_table').append('<tr class="alt_row" id="'+jsonData.id_category+'"><td>'+jsonData.catPath+'</td><td>{l s='Discount:'}' + ' ' + jsonData.discount+'{l s='%'}</td><td><a href="#" onclick="deleteCategoryReduction('+jsonData.id_category+');"><img src="../img/admin/delete.gif"></a></td></tr>'); $('#group_discount_category_table').append('<tr class="alt_row" id="'+jsonData.id_category+'"><td>'+jsonData.catPath+'</td><td>{l s='Discount:'}'+jsonData.discount+'{l s='%'}</td><td><a href="#" onclick="deleteCategoryReduction('+jsonData.id_category+');"><img src="../img/admin/delete.gif"></a></td></tr>');
var input_hidden = document.createElement("input"); var input_hidden = document.createElement("input");
input_hidden.setAttribute('type', 'hidden'); input_hidden.setAttribute('type', 'hidden');
@@ -168,7 +168,7 @@
{foreach $input['values'] key=key item=category } {foreach $input['values'] key=key item=category }
<tr class="alt_row" id="{$category.id_category}"> <tr class="alt_row" id="{$category.id_category}">
<td>{$category.path}</td> <td>{$category.path}</td>
<td>{l s='Discount: %.2f%%' sprintf=$category.reduction}</td> <td>{l s='Discount: %d%%' sprintf=$category.reduction}</td>
<td> <td>
<a href="#" onclick="deleteCategoryReduction({$category.id_category});"><img src="../img/admin/delete.gif"></a> <a href="#" onclick="deleteCategoryReduction({$category.id_category});"><img src="../img/admin/delete.gif"></a>
<input type="hidden" class="category_reduction" name="category_reduction[{$category.id_category}]" value="{$category.reduction}"> <input type="hidden" class="category_reduction" name="category_reduction[{$category.id_category}]" value="{$category.reduction}">
@@ -30,7 +30,7 @@
<fieldset> <fieldset>
<ul> <ul>
<li><span style="font-weight: bold; font-size: 13px; color:#000;">{l s='Name:'}</span> {$group->name[$language->id]}</li> <li><span style="font-weight: bold; font-size: 13px; color:#000;">{l s='Name:'}</span> {$group->name[$language->id]}</li>
<li><span style="font-weight: bold; font-size: 13px; color:#000;">{l s='Discount: %.2f%%' sprintf=$group->reduction}</span></li> <li><span style="font-weight: bold; font-size: 13px; color:#000;">{l s='Discount: %d%%' sprintf=$group->reduction}</span></li>
<li><span style="font-weight: bold; font-size: 13px; color:#000;">{l s='Current category discount:'}</span> <li><span style="font-weight: bold; font-size: 13px; color:#000;">{l s='Current category discount:'}</span>
{if !$categorieReductions} {if !$categorieReductions}
{l s='None'} {l s='None'}
@@ -39,7 +39,7 @@
{foreach $categorieReductions key=key item=category } {foreach $categorieReductions key=key item=category }
<tr class="alt_row"> <tr class="alt_row">
<td>{$category.path}</td> <td>{$category.path}</td>
<td>{l s='Discount: %.2f%%' sprintf=$category.reduction}</td> <td>{l s='Discount: %d%%' sprintf=$category.reduction}</td>
</tr> </tr>
{/foreach} {/foreach}
</table> </table>
@@ -58,7 +58,6 @@
</ul> </ul>
</fieldset> </fieldset>
<h2>{l s='Members of this customer group'}</h2> <h2>{l s='Members of this customer group'}</h2>
<p>{l s='Limited to the first 100 customers.'} {l s='Please use filters to narrow your search.'}</p>
{$customerList} {$customerList}
{/block} {/block}
@@ -110,14 +110,14 @@ $(document).ready(function() {
</ul> </ul>
<div id="partner_preactivation"> <div id="partner_preactivation">
<p class="center"><img src="../img/loader.gif" alt="" /> {l s='Loading...'}</p> <p class="center"><img src="../img/loader.gif" alt="" /></p>
</div> </div>
<div class="separation"></div> <div class="separation"></div>
{$tips_optimization} {$tips_optimization}
<div id="discover_prestashop"><p class="center"><img src="../img/loader.gif" alt="" /> {l s='Loading...'}</p></div> <div id="discover_prestashop"><p class="center"><img src="../img/loader.gif" alt="" />{l s='Loading...'}</p></div>
{hook h="displayAdminHomeInfos"} {hook h="displayAdminHomeInfos"}
{hook h="displayBackOfficeHome"} {*old name of the hook*} {hook h="displayBackOfficeHome"} {*old name of the hook*}
@@ -212,7 +212,7 @@ $(document).ready(function() {
{ {
// don't show/hide screencast if it's deactivated // don't show/hide screencast if it's deactivated
{if $employee->bo_show_screencast} {if $employee->bo_show_screencast}
$('#adminpresentation').fadeOut('slow'); $('#adminpresentation').fadeOut('slow');
{/if} {/if}
$('#partner_preactivation').fadeOut('slow'); $('#partner_preactivation').fadeOut('slow');
$('#discover_prestashop').fadeOut('slow'); $('#discover_prestashop').fadeOut('slow');
@@ -1,8 +1,8 @@
{* {*
* 2007-2013 PrestaShop * 2007-2013 PrestaShop
** *
* NOTICE OF LICENSE * NOTICE OF LICENSE
** *
* This source file is subject to the Academic Free License (AFL 3.0) * This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt. * that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL: * It is also available through the world-wide-web at this URL:
@@ -10,25 +10,72 @@
* If you did not receive a copy of the license and are unable to * If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email * obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately. * to license@prestashop.com so we can send you a copy immediately.
** *
* DISCLAIMER * DISCLAIMER
** *
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your * versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information. * needs please refer to http://www.prestashop.com for more information.
** *
* @author PrestaShop SA <contact@prestashop.com> * @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA * @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA * International Registered Trademark & Property of PrestaShop SA
*} *}
{include file="toolbar.tpl" toolbar_btn=$toolbar_btn toolbar_scroll=$toolbar_scroll title=$title} {include file="toolbar.tpl" toolbar_btn=$toolbar_btn toolbar_scroll=$toolbar_scroll title=$title}
<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. Don\'t forget to Re-build the products search index.'} {l s='Your .CSV file has been sucessfully imported into your shop.'}
</div> </div>
{/if} {/if}
<script type="text/javascript">
var truncateAuthorized = {$truncateAuthorized|intval};
$(document).ready(function(){
activeClueTip();
$("a#upload_file_import_link").fancybox({
'titleShow' : false,
'transitionIn' : 'elastic',
'transitionOut' : 'elastic'
});
$('#preview_import').submit(function(e) {
if ($('#truncate').get(0).checked)
{
console.log(truncateAuthorized);
if (truncateAuthorized)
{
if (!confirm('{l s='Are you sure that you would like to delete this' js=1}' + ' ' + $.trim($('#entity > option:selected').text().toLowerCase()) + '?'))
{
e.preventDefault();
}
}
else
{
jAlert('{l s='You do not have permission to delete here. When the multistore is enabled, only a SuperAdmin can delete all items before an import.' js=1}');
return false;
}
}
});
});
function activeClueTip()
{
$('.info_import').cluetip({
splitTitle: '|',
showTitle: false
});
};
</script>
{**
* Upload fancybox
*}
<div style="display: none"> <div style="display: none">
<div id="upload_file_import" style="padding-left: 10px; background-color: #EBEDF4; border: 1px solid #CCCED7"> <div id="upload_file_import" style="padding-left: 10px; background-color: #EBEDF4; border: 1px solid #CCCED7">
<div class="clear">&nbsp;</div> <div class="clear">&nbsp;</div>
@@ -50,16 +97,28 @@
</form> </form>
</div> </div>
</div> </div>
<div class="clear">&nbsp;</div> <div class="clear">&nbsp;</div>
<form id="preview_import" action="{$current}&token={$token}" method="post" style="display:inline" enctype="multipart/form-data" class="clear">
{**
* Import fieldset
*}
<form id="preview_import"
action="{$current}&token={$token}"
method="post"
style="display:inline"
enctype="multipart/form-data"
class="clear">
<fieldset style="float: left; margin: 0pt 20px 0pt 0pt; width: 70%;"> <fieldset style="float: left; margin: 0pt 20px 0pt 0pt; width: 70%;">
<legend><img src="../img/admin/import.gif" />{l s='Import '}</legend> <legend><img src="../img/admin/import.gif" />{l s='Import '}</legend>
<label class="clear">{if count($files_to_import) > 1}{l s='Your CSV file (%d files):' sprintf=count($files_to_import)}{else}{l s='Your CSV file (%d file):' sprintf=count($files_to_import)}{/if}</label> <label class="clear">{if count($files_to_import) > 1}{l s='Your CSV file (%d files):' sprintf=count($files_to_import)}{else}{l s='Your CSV file (%d file):' sprintf=count($files_to_import)}{/if}</label>
<div class="margin-form"> <div class="margin-form">
{if count($files_to_import)} {if count($files_to_import)}
<select name="csv"> <select name="csv">
{foreach $files_to_import AS $filename} {foreach $files_to_import AS $filename}
<option value="{$filename}"{if $csv_selected == $filename} selected="selected"{/if}>{$filename|escape:'htmlall':'UTF-8'}</option> <option value="{$filename}">{$filename}</option>
{/foreach} {/foreach}
</select> </select>
{/if} {/if}
@@ -67,44 +126,33 @@
<a href="#upload_file_import" id="upload_file_import_link" class="button"><img src="../img/admin/add.gif" alt="Uplaod" title="Upload" />{l s='Upload'}</a> <a href="#upload_file_import" id="upload_file_import_link" class="button"><img src="../img/admin/add.gif" alt="Uplaod" title="Upload" />{l s='Upload'}</a>
</div> </div>
<div style="width:50%; margin: 0 auto;"> <div style="width:50%; margin: 0 auto;">
<div style="width:50%; display: inline-block; float :left;"> <a href="#" onclick="$('#sample_files_import').slideToggle(); return false;">{l s='Click to view our sample import csv files.'}</a>
<a href="#" onclick="$('#sample_files_import').slideToggle(); return false;">{l s='Click to view our sample import csv files.'}</a> <ul id="sample_files_import" style="display:none">
<ul id="sample_files_import" style="display:none;"> <li><a href="../docs/csv_import/categories_import.csv">{l s='Sample Categories file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/categories_import.csv">{l s='Sample Categories file'}</a></li> <li><a href="../docs/csv_import/products_import.csv">{l s='Sample Products file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/products_import.csv">{l s='Sample Products file'}</a></li> <li><a href="../docs/csv_import/combinations_import.csv">{l s='Sample Combinations file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/combinations_import.csv">{l s='Sample Combinations file'}</a></li> <li><a href="../docs/csv_import/customers_import.csv">{l s='Sample Customers file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/customers_import.csv">{l s='Sample Customers file'}</a></li> <li><a href="../docs/csv_import/addresses_import.csv">{l s='Sample Addresses file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/addresses_import.csv">{l s='Sample Addresses file'}</a></li> <li><a href="../docs/csv_import/manufacturers_import.csv">{l s='Sample Manufacturers file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/manufacturers_import.csv">{l s='Sample Manufacturers file'}</a></li> <li><a href="../docs/csv_import/suppliers_import.csv">{l s='Sample Suppliers file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/suppliers_import.csv">{l s='Sample Suppliers file'}</a></li> {if $PS_ADVANCED_STOCK_MANAGEMENT}
<li><a class="_blank" href="../docs/csv_import/alias_import.csv">{l s='Sample Alias file'}</a></li> <li><a href="../docs/csv_import/supply_orders_import.csv">{l s='Supply Orders sample file'}</a></li>
{if $PS_ADVANCED_STOCK_MANAGEMENT} <li><a href="../docs/csv_import/supply_orders_details_import.csv">{l s='Supply Orders Details sample file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/supply_orders_import.csv">{l s='Supply Orders sample file'}</a></li> {/if}
<li><a class="_blank" href="../docs/csv_import/supply_orders_details_import.csv">{l s='Supply Orders Details sample file'}</a></li> </ul>
{/if}
</ul>
</div>
<div style="width:50%; float:left;">
<a href="#" onclick="$('#csv_files_import').slideToggle(); return false;">{l s='Click to view your csv files.'}</a>
<ul id="csv_files_import" style="display:none;">
{foreach $files_to_import AS $filename}
<li><a href="{$current}&token={$token}&csvfilename={$filename|@base64_encode}">{$filename}</a>&nbsp;&nbsp;
<a href="{$current}&token={$token}&csvfilename={$filename|@base64_encode}&delete=1"><img src="../img/admin/delete.gif" /></a></li>
{/foreach}
</ul>
</div>
<div class="clear">&nbsp;</div> <div class="clear">&nbsp;</div>
</div> </div>
<label class="clear">{l s='What kind of entity would you like to import?'} </label> <label class="clear">{l s='What kind of entity would you like to import?'} </label>
<div class="margin-form"> <div class="margin-form">
<select name="entity" id="entity"> <select name="entity" id="entity">
{foreach $entities AS $entity => $i} {foreach $entities AS $entity => $i}
<option value="{$i}"{if $entity_selected == $i} selected="selected"{/if}> <option value="{$i}" {if $entity == $i}selected="selected"{/if}>
{$entity} {$entity}
</option> </option>
{/foreach} {/foreach}
</select> </select>
</div> </div>
<label class="clear">{l s='Language of the file'}</label> <label class="clear">{l s='Language of the file'}</label>
<div class="margin-form"> <div class="margin-form">
<select name="iso_lang"> <select name="iso_lang">
@@ -120,30 +168,26 @@
</div> </div>
<label class="clear">{l s='Field separator'} </label> <label class="clear">{l s='Field separator'} </label>
<div class="margin-form"> <div class="margin-form">
<input type="text" size="2" value="{if isset($separator_selected)}{$separator_selected|escape:'htmlall':'UTF-8'}{else};{/if}" name="separator"/> <input type="text" size="2" value=";" name="separator"/>
{l s='e.g. '}"1<span class="bold" style="color: red">;</span>Ipod<span class="bold" style="color: red">;</span>129.90<span class="bold" style="color: red">;</span>5" {l s='e.g. '}"1<span class="bold" style="color: red">;</span>Ipod<span class="bold" style="color: red">;</span>129.90<span class="bold" style="color: red">;</span>5"
</div> </div>
<label class="clear">{l s='Multiple value separator'} </label> <label class="clear">{l s='Multiple value separator'} </label>
<div class="margin-form"> <div class="margin-form">
<input type="text" size="2" value="{if isset($multiple_value_separator_selected)}{$multiple_value_separator_selected|escape:'htmlall':'UTF-8'}{else},{/if}" name="multiple_value_separator"/> <input type="text" size="2" value="," name="multiple_value_separator"/>
{l s='e.g. '}"Ipod;red.jpg<span class="bold" style="color: red">,</span>blue.jpg<span class="bold" style="color: red">,</span>green.jpg;129.90" {l s='e.g. '}"Ipod;red.jpg<span class="bold" style="color: red">,</span>blue.jpg<span class="bold" style="color: red">,</span>green.jpg;129.90"
</div> </div>
<label for="truncate" class="clear">{l s='Delete all'} <span id="entitie">{l s='categories'}</span> {l s='before import?'} </label> <label for="truncate" class="clear">{l s='Delete all'} <span id="entitie">{l s='categories'}</span> {l s='before import?'} </label>
<div class="margin-form"> <div class="margin-form">
<input name="truncate" id="truncate" type="checkbox"/> <input name="truncate" id="truncate" type="checkbox"/>
</div> </div>
<label for="regenerate" class="clear">{l s='No thumbnails regeneration'}</label> <label for="match_ref" class="clear" style="display: none">{l s='Use product reference as key?'}</label>
<div class="margin-form"> <div class="margin-form">
<input name="regenerate" id="regenerate" type="checkbox" /> <input name="match_ref" id="match_ref" type="checkbox" style="margin-top: 6px; display:none"/>
</div> </div>
<label for="forceIDs" class="clear">{l s='Force all ID\'s during import?'} </label> <label for="forceIDs" class="clear">{l s='Force all ID\'s during import?'} </label>
<div class="margin-form"> <div class="margin-form">
<input name="forceIDs" id="forceIDs" type="checkbox"/> {l s='If you don\'t use this option, all ID\'s will be auto-incremented.'} <input name="forceIDs" id="forceIDs" type="checkbox"/> {l s='If you don\'t use this option, all ID\'s will be auto-incremented.'}
</div> </div>
<label for="match_ref" class="clear" style="display: none">{l s='Use product reference as key?'}</label>
<div class="margin-form">
<input name="match_ref" id="match_ref" type="checkbox" style="margin-top: 6px; display:none"/>
</div>
<div class="space margin-form"> <div class="space margin-form">
<input type="submit" name="submitImportFile" value="{l s='Next step'}" class="button" {if empty($files_to_import)}disabled{/if}/> <input type="submit" name="submitImportFile" value="{l s='Next step'}" class="button" {if empty($files_to_import)}disabled{/if}/>
{if empty($files_to_import)}<span style="color:red;">{l s='You must upload a file in order to proceed to the next step'}</span>{/if} {if empty($files_to_import)}<span style="color:red;">{l s='You must upload a file in order to proceed to the next step'}</span>{/if}
@@ -166,10 +210,13 @@
{/if} {/if}
</fieldset> </fieldset>
</form> </form>
<fieldset style="display:block;"> <fieldset style="display:block;">
<legend> <legend>
<img src="../img/admin/import.gif" />{l s='Available fields'} <img src="../img/admin/import.gif" />{l s='Available fields'}
</legend> </legend>
<div id="availableFields"> <div id="availableFields">
{$available_fields} {$available_fields}
</div> </div>
@@ -177,93 +224,74 @@
<div class="clear"> <div class="clear">
<br /><br />{l s='* Required field'} <br /><br />{l s='* Required field'}
</div> </div>
</fieldset> </fieldset>
<div class="clear">&nbsp;</div> <div class="clear">&nbsp;</div>
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function(){ $("select#entity").change( function() {
var truncateAuthorized = {$truncateAuthorized|intval};
activeClueTip();
$("a#upload_file_import_link").fancybox({
'titleShow' : false,
'transitionIn' : 'elastic',
'transitionOut' : 'elastic'
});
$('#preview_import').submit(function(e){ if ($("#entity > option:selected").val() == 7 || $("#entity > option:selected").val() == 8)
if ($('#truncate').get(0).checked)
if (truncateAuthorized)
{
if (!confirm('{l s='Are you sure that you would like to delete this' js=1}' + ' ' + $.trim($('#entity > option:selected').text().toLowerCase()) + '?'))
e.preventDefault();
}
else
{
jAlert('{l s='You do not have permission to delete here. When the multistore is enabled, only a SuperAdmin can delete all items before an import.' js=1}');
return false;
}
});
$("select#entity").change(function(){
if ($("#entity > option:selected").val() == 8 || $("#entity > option:selected").val() == 9)
$("label[for=truncate],#truncate").hide();
else
$("label[for=truncate],#truncate").show();
if ($("#entity > option:selected").val() == 9)
$(".import_supply_orders_details").show();
else
{
$(".import_supply_orders_details").hide();
$('input[name=multiple_value_separator]').val('{if isset($multiple_value_separator_selected)}{$multiple_value_separator_selected}{else},{/if}');
}
if ($("#entity > option:selected").val() == 1)
$("label[for=match_ref], #match_ref").show();
else
$("label[for=match_ref], #match_ref").hide();
if ($("#entity > option:selected").val() == 1 || $("#entity > option:selected").val() == 0)
$(".import_products_categories").show();
else
$(".import_products_categories").hide();
if ($("#entity > option:selected").val() == 0 || $("#entity > option:selected").val() == 1 ||
$("#entity > option:selected").val() == 5 || $("#entity > option:selected").val() == 6)
$("label[for=regenerate], #regenerate").show()
else
$("label[for=regenerate], #regenerate").hide();
if ($("#entity > option:selected").val() == 0 || $("#entity > option:selected").val() == 1 || $("#entity > option:selected").val() == 3 || $("#entity > option:selected").val() == 5 || $("#entity > option:selected").val() == 6 || $("#entity > option:selected").val() == 7)
$("label[for=forceIDs], #forceIDs").show();
else
$("label[for=forceIDs], #forceIDs").hide();
$("#entitie").html($("#entity > option:selected").text().toLowerCase());
$.ajax({
url: 'ajax.php',
data: {
getAvailableFields:1,
entity: $("#entity").val()
},
dataType: 'json',
success: function(j){
var fields = "";
$("#availableFields").empty();
for (var i = 0; i < j.length; i++)
fields += j[i].field;
$("#availableFields").html(fields);
activeClueTip();
},
error: function(j){}
});
});
$("select#entity").trigger('change');
function activeClueTip()
{ {
$('.info_import').cluetip({ $("label[for=truncate],#truncate").hide();
splitTitle: '|', }
showTitle: false else
}); $("label[for=truncate],#truncate").show();
};
if ($("#entity > option:selected").val() == 8)
{
$(".import_supply_orders_details").show();
$('input[name=multiple_value_separator]').val('|');
}
else
{
$(".import_supply_orders_details").hide();
$('input[name=multiple_value_separator]').val(',');
}
if ($("#entity > option:selected").val() == 1)
{
$("label[for=match_ref],#match_ref").show();
}
else
$("label[for=match_ref],#match_ref").hide();
if ($("#entity > option:selected").val() == 1 || $("#entity > option:selected").val() == 0)
{
$(".import_products_categories").show();
}
else
$(".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)
$("label[for=forceIDs],#forceIDs").show();
else
$("label[for=forceIDs],#forceIDs").hide();
$("#entitie").html($("#entity > option:selected").text().toLowerCase());
$.ajax({
url: 'ajax.php',
data: {
getAvailableFields:1,
entity: $("#entity").val()
},
dataType: 'json',
success: function(j) {
var fields = "";
$("#availableFields").empty();
for (var i = 0; i < j.length; i++)
fields += j[i].field;
$("#availableFields").html(fields);
activeClueTip();
},
error: function(j) {
}
});
}); });
</script> </script>
@@ -22,52 +22,20 @@
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA * International Registered Trademark & Property of PrestaShop SA
*} *}
{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">
var errorEmpty = '{l s='Please name your matching configuration to save.' js=1}'; var errorEmpty = "{l s='Please name your matching configuration to save.'}"
var token = '{$token}'; var token = '{$token}';
var current = 0;
function showTable(nb)
{
$('#btn_left').disabled = null;
$('#btn_right').disabled = null;
if (nb <= 0)
{
nb = 0;
$('#btn_left').disabled = 'true';
}
if (nb >= {$nb_table} - 1)
{
nb = {$nb_table} - 1;
$('#btn_right').disabled = 'true';
}
$('#table' + current).hide();
current = nb;
$('#table' + current).show();
}
$(document).ready(function(){
var btn_save_import = $('span[class~="process-icon-save-import"]').parent();
var btn_submit_import = $('#import');
if (btn_save_import.length > 0 && btn_submit_import.length > 0)
{
btn_submit_import.hide();
btn_save_import.find('span').removeClass('process-icon-save-import');
btn_save_import.find('span').addClass('process-icon-save');
btn_save_import.click(function(){
btn_submit_import.before('<input type="hidden" name="' + btn_submit_import.attr("name") + '" value="1" />');
$('#import_form').submit();
});
}
showTable(current);
});
</script> </script>
<div id="container-customer"> <div id="container-customer">
<h2>{l s='View your data'}</h2> <h2>{l s='View your data'}</h2>
<div> <div>
<b>{l s='Save and load your configuration for importing files'} : </b><br/><br/> <b>{l s='Save and load your configuration for importing files'} : </b><br><br>
<input type="text" name="newImportMatchs" id="newImportMatchs" /> <input type="text" name="newImportMatchs" id="newImportMatchs">
<a id="saveImportMatchs" class="button" href="#">{l s='Save'}</a><br /><br /> <a id="saveImportMatchs" class="button" href="#">{l s='Save'}</a><br><br>
<div id="selectDivImportMatchs" {if !$import_matchs}style="display:none"{/if}> <div id="selectDivImportMatchs" {if !$import_matchs}style="display:none"{/if}>
<select id="valueImportMatchs"> <select id="valueImportMatchs">
{foreach $import_matchs as $match} {foreach $import_matchs as $match}
@@ -78,18 +46,21 @@
<a class="button" id="deleteImportMatchs" href="#">{l s='Delete'}</a> <a class="button" id="deleteImportMatchs" href="#">{l s='Delete'}</a>
</div> </div>
</div> </div>
<h3>{l s='Please set the value type of each column'}</h3> <h3>{l s='Please set the value type of each column'}</h3>
<div id="error_duplicate_type" class="warning warn" style="display:none;"> <div id="error_duplicate_type" class="warning warn" style="display:none;">
<h3>{l s='Columns cannot have the same value type'}</h3> <h3>{l s='Columns cannot have the same value type'}</h3>
</div> </div>
<div id="required_column" class="warning warn" style="display:none;"> <div id="required_column" class="warning warn" style="display:none;">
<h3>{l s='Column'} <span id="missing_column">&nbsp;</span> {l s='must be set'}</h3> <h3>{l s='Column'} <span id="missing_column">&nbsp;</span> {l s='must be set'}</h3>
</div> </div>
<form action="{$current}&token={$token}" method="post" id="import_form" name="import_form"> <form action="{$current}&token={$token}" method="post" id="import_form" name="import_form">
{l s='Skip'} <input type="text" size="2" name="skip" value="1" /> {l s='lines'} {l s='Skip'} <input type="text" size="2" name="skip" value="1" /> {l s='lines'}
<input type="hidden" name="csv" value="{$fields_value.csv}" /> <input type="hidden" name="csv" value="{$fields_value.csv}" />
<input type="hidden" name="convert" value="{$fields_value.convert}" /> <input type="hidden" name="convert" value="{$fields_value.convert}" />
<input type="hidden" name="regenerate" value="{$fields_value.regenerate}" />
<input type="hidden" name="entity" value="{$fields_value.entity}" /> <input type="hidden" name="entity" value="{$fields_value.entity}" />
<input type="hidden" name="iso_lang" value="{$fields_value.iso_lang}" /> <input type="hidden" name="iso_lang" value="{$fields_value.iso_lang}" />
{if $fields_value.truncate} {if $fields_value.truncate}
@@ -101,8 +72,49 @@
{if $fields_value.match_ref} {if $fields_value.match_ref}
<input type="hidden" name="match_ref" value="1" /> <input type="hidden" name="match_ref" value="1" />
{/if} {/if}
<input type="hidden" name="separator" value="{$fields_value.separator}" /> <input type="hidden" name="separator" value="{$fields_value.separator}">
<input type="hidden" name="multiple_value_separator" value="{$fields_value.multiple_value_separator}" /> <input type="hidden" name="multiple_value_separator" value="{$fields_value.multiple_value_separator}">
<script type="text/javascript">
var current = 0;
function showTable(nb)
{
getE('btn_left').disabled = null;
getE('btn_right').disabled = null;
if (nb <= 0)
{
nb = 0;
getE('btn_left').disabled = 'true';
}
if (nb >= {$nb_table} - 1)
{
nb = {$nb_table} - 1;
getE('btn_right').disabled = 'true';
}
toggle(getE('table'+current), false);
current = nb;
toggle(getE('table'+current), true);
}
$(function() {
var btn_save_import = $('span[class~="process-icon-save-import"]').parent();
var btn_submit_import = $('#import');
if (btn_save_import.length > 0 && btn_submit_import.length > 0)
{
btn_submit_import.hide();
btn_save_import.find('span').removeClass('process-icon-save-import');
btn_save_import.find('span').addClass('process-icon-save');
btn_save_import.click(function() {
btn_submit_import.before('<input type="hidden" name="'+btn_submit_import.attr("name")+'" value="1" />');
$('#import_form').submit();
});
}
});
</script>
<table> <table>
<tr> <tr>
<td colspan="3" align="center"> <td colspan="3" align="center">
@@ -111,7 +123,7 @@
</tr> </tr>
<tr> <tr>
<td valign="top" align="center"> <td valign="top" align="center">
<input id="btn_left" value="{l s='<<'}" type="button" class="button" onclick="showTable(current - 1);" /> <input id="btn_left" value="{l s='<<'}" type="button" class="button" onclick="showTable(current - 1)" />
</td> </td>
<td align="left"> <td align="left">
{section name=nb_i start=0 loop=$nb_table step=1} {section name=nb_i start=0 loop=$nb_table step=1}
@@ -120,10 +132,12 @@
{/section} {/section}
</td> </td>
<td valign="top" align="center"> <td valign="top" align="center">
<input id="btn_right" value="{l s='>>'}" type="button" class="button" onclick="showTable(current + 1);" /> <input id="btn_right" value="{l s='>>'}" type="button" class="button" onclick="showTable(current + 1)" />
</td> </td>
</tr> </tr>
</table> </table>
<script type="text/javascript">showTable(current);</script>
</form> </form>
</div> </div>
{/block} {/block}
@@ -24,9 +24,9 @@
*} *}
<div class="width4"> <div class="width4">
{if isset($localization_form)}{$localization_form}{/if} {$localization_form}
</div> </div>
<br /> <br />
<div class="width4"> <div class="width4">
{if isset($localization_options)}{$localization_options}{/if} {$localization_options}
</div> </div>
@@ -59,14 +59,14 @@
<td>{$module->categoryName}</td> <td>{$module->categoryName}</td>
<td> <td>
<select name="i_{$module->name}" class="moduleFavorite" style="width:50px"> <select name="i_{$module->name}" class="moduleFavorite" style="width:50px">
<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" style="width:50px"> <select name="f_{$module->name}" class="moduleFavorite" style="width:50px">
<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>
@@ -22,7 +22,7 @@
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA * International Registered Trademark & Property of PrestaShop SA
*} *}
<script type="text/javascript" src="../js/jquery/plugins/jquery.uitablefilter.js"></script>
{if $add_permission eq '1'} {if $add_permission eq '1'}
{if isset($logged_on_addons)} {if isset($logged_on_addons)}
<!--start addons login--> <!--start addons login-->
@@ -62,7 +62,10 @@
<!--start filter module--> <!--start filter module-->
<style>.ac_results { border:1px solid #C2C4D9; }</style> <style>.ac_results { border:1px solid #C2C4D9; }</style>
<div class="filter-module"> <div class="filter-module">
<input style="float: left; margin-right: 15px" placeholder="{l s='Search'}" type="text" value="" name="quicksearch" autocomplete="off" onkeyup="$.uiTableFilter($('#moduleContainer').find('table'), this.value);"> <form id="filternameForm" method="post">
<input type="text" value="" name="filtername" autocomplete="off" class="ac_input">
<input type="submit" class="button" value="{l s='Search'}">
</form>
<form method="post"> <form method="post">
<div class="select-filter"> <div class="select-filter">
<label class="search-filter">{l s='Sort by'}:</label> <label class="search-filter">{l s='Sort by'}:</label>
@@ -87,7 +87,7 @@
}); });
// Method to check / uncheck all modules checkbox // Method to check / uncheck all modules checkbox
$('#moduleContainer').on("click", "#checkme", function() $('#checkme').click(function()
{ {
if ($(this).attr("rel") == 'false') if ($(this).attr("rel") == 'false')
{ {
@@ -321,8 +321,8 @@
catch(e){} catch(e){}
return false; return false;
}); });
$('#moduleContainer').on("click", ".toggle_favorite", function() $('.toggle_favorite').live('click', function(event)
{ {
var el = $(this); var el = $(this);
var value_pref = el.data('value'); var value_pref = el.data('value');
@@ -46,8 +46,8 @@
</td> </td>
<td><img class="imgm" alt="" src="{if isset($module->image)}{$module->image}{else}../modules/{$module->name}/{$module->logo}{/if}"></td> <td><img class="imgm" alt="" src="{if isset($module->image)}{$module->image}{else}../modules/{$module->name}/{$module->logo}{/if}"></td>
<td> <td>
<div class="moduleDesc" id="anchor{$module->name|ucfirst}" title="{$module->name}"> <div class="moduleDesc" id="anchor{$module->name|ucfirst}">
<h3>{$module->displayName}<span style="display:none">{$module->name}</span> <h3>{$module->displayName}
{if isset($module->type) && $module->type == 'addonsMustHave'} {if isset($module->type) && $module->type == 'addonsMustHave'}
<span class="setup must-have">{l s='Must Have'}</span> <span class="setup must-have">{l s='Must Have'}</span>
{else} {else}
@@ -77,7 +77,7 @@
</dl> </dl>
</div> </div>
<p class="desc">{if isset($module->description) && $module->description ne ''}{l s='Description'} : {$module->description}{else}&nbsp;{/if}</p> <p class="desc">{if isset($module->description) && $module->description ne ''}{l s='Description'} : {$module->description}{else}&nbsp;{/if}</p>
{if isset($module->message) && (empty($module->name) === false) && (!isset($module->type) || ($module->type != 'addonsMustHave' || $module->type !== 'addonsNative'))}<div class="conf">{$module->message}</div>{/if} {if isset($module->message) && (!isset($module->type) || ($module->type != 'addonsMustHave' || $module->type !== 'addonsNative'))}<div class="conf">{$module->message}</div>{/if}
<div class="row-actions-module"> <div class="row-actions-module">
{if !isset($module->not_on_disk)} {if !isset($module->not_on_disk)}
{$module->optionsHtml} {$module->optionsHtml}
@@ -101,7 +101,7 @@
<a href="{$module->addons_buy_url}" target="_blank" class="button updated"><span><img src="../img/admin/cart_addons.png">&nbsp;&nbsp;{if isset($module->id_currency) && isset($module->price)}{displayPrice price=$module->price currency=$module->id_currency}{/if}</span></a> <a href="{$module->addons_buy_url}" target="_blank" class="button updated"><span><img src="../img/admin/cart_addons.png">&nbsp;&nbsp;{if isset($module->id_currency) && isset($module->price)}{displayPrice price=$module->price currency=$module->id_currency}{/if}</span></a>
</li> </li>
{else} {else}
{if isset($module->version_addons) && $module->version_addons} {if $module->id && isset($module->version_addons) && $module->version_addons}
<li><a href="{$module->options.update_url}" class="button updated"><span>{l s='Update it!'}</span></a></li> <li><a href="{$module->options.update_url}" class="button updated"><span>{l s='Update it!'}</span></a></li>
{/if} {/if}
<li> <li>
@@ -34,7 +34,6 @@
<td valign="top"> <td valign="top">
<div class="moduleDesc" id="anchor{$module->name|ucfirst}"> <div class="moduleDesc" id="anchor{$module->name|ucfirst}">
<h3> <h3>
<span style="display:none">{$module->name}</span>
{$module->displayName|truncate:36:'…'} {$module->version} {$module->displayName|truncate:36:'…'} {$module->version}
{if isset($module->id) && $module->id gt 0 } {if isset($module->id) && $module->id gt 0 }
{if $module->active} {if $module->active}
@@ -37,7 +37,7 @@
{l s='Show'} : {l s='Show'} :
<select id="show_modules" onChange="autoUrl('show_modules', '{$url_show_modules}')"> <select id="show_modules" onChange="autoUrl('show_modules', '{$url_show_modules}')">
<option value="all">{l s='All modules'}&nbsp;</option> <option value="all">{l s='All modules'}&nbsp;</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>
@@ -26,7 +26,7 @@
{* Generate HTML code for printing Invoice Icon with link *} {* Generate HTML code for printing Invoice Icon with link *}
<span style="width:20px; margin-right:5px;"> <span style="width:20px; margin-right:5px;">
{if ($order_state->invoice || $order->invoice_number)} {if ($order_state->invoice || $order->invoice_number)}
<a href="{$link->getAdminLink('AdminPdf')|escape:'htmlall':'UTF-8'}&submitAction=generateInvoicePDF&id_order={$order->id}"><img src="../img/admin/tab-invoice.gif" alt="invoice" /></a> <a target="_blank" href="{$link->getAdminLink('AdminPdf')|escape:'htmlall':'UTF-8'}&submitAction=generateInvoicePDF&id_order={$order->id}"><img src="../img/admin/tab-invoice.gif" alt="invoice" /></a>
{else} {else}
- -
{/if} {/if}
@@ -35,7 +35,7 @@
{* Generate HTML code for printing Delivery Icon with link *} {* Generate HTML code for printing Delivery Icon with link *}
<span style="width:20px;"> <span style="width:20px;">
{if ($order_state->delivery || $order->delivery_number)} {if ($order_state->delivery || $order->delivery_number)}
<a href="{$link->getAdminLink('AdminPdf')|escape:'htmlall':'UTF-8'}&submitAction=generateDeliverySlipPDF&id_order={$order->id}"><img src="../img/admin/delivery.gif" alt="delivery" /></a> <a target="_blank" href="{$link->getAdminLink('AdminPdf')|escape:'htmlall':'UTF-8'}&submitAction=generateDeliverySlipPDF&id_order={$order->id}"><img src="../img/admin/delivery.gif" alt="delivery" /></a>
{else} {else}
- -
{/if} {/if}
@@ -56,7 +56,7 @@
</span> </span>
{/if} {/if}
</td> </td>
{if $display_warehouse}<td align="center">{$product.warehouse_name|escape:'htmlall':'UTF-8'}</td>{/if} {if $display_warehouse}<td>{$product.warehouse_name|escape:'htmlall':'UTF-8'}</td>{/if}
{if ($order->hasBeenPaid())} {if ($order->hasBeenPaid())}
<td align="center" class="productQuantity"> <td align="center" class="productQuantity">
{$product['product_quantity_refunded']} {$product['product_quantity_refunded']}
@@ -38,11 +38,6 @@
var defaults_order_state = new Array(); var defaults_order_state = new Array();
var customization_errors = false; var customization_errors = false;
var pic_dir = '{$pic_dir}'; var pic_dir = '{$pic_dir}';
var currency_format = 5;
var currency_sign = '';
var currency_blank = false;
var priceDisplayPrecision = 2;
{foreach from=$defaults_order_state key='module' item='id_order_state'} {foreach from=$defaults_order_state key='module' item='id_order_state'}
defaults_order_state['{$module}'] = '{$id_order_state}'; defaults_order_state['{$module}'] = '{$id_order_state}';
{/foreach} {/foreach}
@@ -122,7 +117,7 @@
$('#vouchers_err').hide(); $('#vouchers_err').hide();
var mytab = new Array(); var mytab = new Array();
for (var i = 0; i < data.vouchers.length; i++) for (var i = 0; i < data.vouchers.length; i++)
mytab[mytab.length] = { data: data.vouchers[i], value: data.vouchers[i].name + (data.vouchers[i].code.length > 0 ? ' - ' + data.vouchers[i].code : '')}; mytab[mytab.length] = { data: data.vouchers[i], value: data.vouchers[i].name+' - '+data.vouchers[i].description };
return mytab; return mytab;
}, },
extraParams: { extraParams: {
@@ -510,6 +505,7 @@
} }
displaySummary(res); displaySummary(res);
resetBind(); resetBind();
updateCurrencySign();
} }
}); });
} }
@@ -656,12 +652,11 @@
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" size="7" rel="'+this.id_product+'_'+this.id_product_attribute+'" class="product_unit_price" value="'+this.numeric_price+'" /></td><td>'; cart_content += '<tr><td><img src="'+this.image_link+'" title="'+this.name+'" /></td><td>'+this.name+'<br />'+this.attributes_small+'</td><td>'+this.reference+'</td><td><input type="text" size="7" rel="'+this.id_product+'_'+this.id_product_attribute+'" class="product_unit_price" value="'+this.price+'" />&nbsp;<span class="currency_sign"></span></td><td>';
cart_content += (!this.id_customization ? '<div style="float:left;"><a href="#" class="increaseqty_product" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" ><img src="../img/admin/up.gif" /></a><br /><a href="#" class="decreaseqty_product" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'"><img src="../img/admin/down.gif" /></a></div>' : ''); cart_content += (!this.id_customization ? '<div style="float:left;"><a href="#" class="increaseqty_product" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" ><img src="../img/admin/up.gif" /></a><br /><a href="#" class="decreaseqty_product" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'"><img src="../img/admin/down.gif" /></a></div>' : '');
cart_content += (!this.id_customization ? '<div style="float:left;"><input type="text" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" class="cart_quantity" size="2" value="'+this.cart_quantity+'" />' : ''); cart_content += (!this.id_customization ? '<div style="float:left;"><input type="text" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" class="cart_quantity" size="2" value="'+this.cart_quantity+'" />' : '');
cart_content += (!this.id_customization ? '<a href="#" class="delete_product" rel="delete_'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" ><img src="../img/admin/delete.gif" /></a></div>' : ''); cart_content += (!this.id_customization ? '<a href="#" class="delete_product" rel="delete_'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" ><img src="../img/admin/delete.gif" /></a></div>' : '');
cart_content += '</td><td>' + formatCurrency(this.numeric_total, currency_format, currency_sign, currency_blank) + '</td></tr>'; cart_content += '</td><td>'+this.total+'&nbsp;<span class="currency_sign"></span></td></tr>';
if (this.id_customization && this.id_customization != 0) if (this.id_customization && this.id_customization != 0)
{ {
$.each(this.customized_datas[this.id_product][this.id_product_attribute][id_address_delivery], function() { $.each(this.customized_datas[this.id_product][this.id_product_attribute][id_address_delivery], function() {
@@ -699,15 +694,17 @@
function updateCartVouchers(vouchers) function updateCartVouchers(vouchers)
{ {
var vouchers_html = ''; var vouchers_html = '';
if (typeof(vouchers) == 'object') if (vouchers.length > 0)
$.each(vouchers, function(){ {
$.each(vouchers, function() {
vouchers_html += '<tr><td>'+this.name+'</td><td>'+this.description+'</td><td>'+this.value_real+'</td><td><a href="#" class="delete_discount" rel="'+this.id_discount+'"><img src="../img/admin/delete.gif" /></a></td></tr>'; vouchers_html += '<tr><td>'+this.name+'</td><td>'+this.description+'</td><td>'+this.value_real+'</td><td><a href="#" class="delete_discount" rel="'+this.id_discount+'"><img src="../img/admin/delete.gif" /></a></td></tr>';
}); });
$('#voucher_list tbody').html($.trim(vouchers_html));
if ($('#voucher_list tbody').html().length == 0)
$('#voucher_list').hide();
else
$('#voucher_list').show(); $('#voucher_list').show();
}
else
$('#voucher_list').hide();
$('#voucher_list tbody').html(vouchers_html);
} }
function updateCartPaymentList(payment_list) function updateCartPaymentList(payment_list)
@@ -715,23 +712,8 @@
$('#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_sign = jsonSummary.currency.sign;
currency_blank = jsonSummary.currency.blank;
priceDisplayPrecision = jsonSummary.currency.decimals ? 2 : 0;
updateCartProducts(jsonSummary.summary.products, jsonSummary.summary.gift_products, jsonSummary.cart.id_address_delivery); updateCartProducts(jsonSummary.summary.products, jsonSummary.summary.gift_products, jsonSummary.cart.id_address_delivery);
updateCartVouchers(jsonSummary.summary.discounts); updateCartVouchers(jsonSummary.summary.discounts);
updateAddressesList(jsonSummary.addresses, jsonSummary.cart.id_address_delivery, jsonSummary.cart.id_address_invoice); updateAddressesList(jsonSummary.addresses, jsonSummary.cart.id_address_delivery, jsonSummary.cart.id_address_invoice);
@@ -757,19 +739,20 @@
$('#free_shipping').removeAttr('checked'); $('#free_shipping').removeAttr('checked');
$('#gift_message').html(jsonSummary.cart.gift_message); $('#gift_message').html(jsonSummary.cart.gift_message);
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>'+jsonSummary.summary.total_shipping+'</b>');
shipping_price_selected_carrier = jsonSummary.summary.total_shipping; shipping_price_selected_carrier = jsonSummary.summary.total_shipping;
$('#total_vouchers').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_discounts_tax_exc)), currency_format, currency_sign, currency_blank)); $('#total_vouchers').html(jsonSummary.summary.total_discounts_tax_exc);
$('#total_shipping').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_shipping_tax_exc)), currency_format, currency_sign, currency_blank)); $('#total_shipping').html(jsonSummary.summary.total_shipping_tax_exc);
$('#total_taxes').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_tax)), currency_format, currency_sign, currency_blank)); $('#total_taxes').html(jsonSummary.summary.total_tax);
$('#total_without_taxes').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_price_without_tax)), currency_format, currency_sign, currency_blank)); $('#total_without_taxes').html(jsonSummary.summary.total_price_without_tax);
$('#total_with_taxes').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_price)), currency_format, currency_sign, currency_blank)); $('#total_with_taxes').html(jsonSummary.summary.total_price);
$('#total_products').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_products)), currency_format, currency_sign, currency_blank)); $('#total_products').html(jsonSummary.summary.total_products);
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);
updateCurrencySign();
id_lang = jsonSummary.cart.id_lang; id_lang = jsonSummary.cart.id_lang;
$('#id_lang option').removeAttr('selected'); $('#id_lang option').removeAttr('selected');
$('#id_lang option[value="'+id_lang+'"]').attr('selected', true); $('#id_lang option[value="'+id_lang+'"]').attr('selected', true);
@@ -797,21 +780,21 @@
qty: qty, qty: qty,
id_customer: id_customer, id_customer: id_customer,
id_cart: id_cart, id_cart: id_cart,
}, },
success : function(res) success : function(res)
{ {
displaySummary(res); displaySummary(res);
var errors = ''; var errors = '';
if (res.errors.length) if(res.errors.length)
{ {
$.each(res.errors, function() { $.each(res.errors, function() {
errors += this + '<br />'; errors += this+'<br />';
}); });
$('#products_err').show(); $('#products_err').show();
} }
else else
$('#products_err').hide(); $('#products_err').hide();
$('#products_err').html(errors); $('#products_err').html(errors);
} }
}); });
} }
@@ -907,6 +890,11 @@
}); });
} }
function updateCurrencySign()
{
$('.currency_sign').html(currencies[id_currency]);
}
function sendMailToCustomer() function sendMailToCustomer()
{ {
$.ajax({ $.ajax({
@@ -939,33 +927,11 @@
var addresses_invoice_options = ''; var addresses_invoice_options = '';
var address_invoice_detail = ''; var address_invoice_detail = '';
var address_delivery_detail = ''; var address_delivery_detail = '';
var delivery_address_edit_link = '';
var invoice_address_edit_link = '';
$.each(addresses, function() { $.each(addresses, function() {
if (this.id_address == id_address_invoice) if (this.id_address == id_address_invoice)
{ address_invoice_detail = this.company+' '+this.firstname+' '+this.lastname+'<br />'+this.address1+'<br />'+this.address2+'<br />'+this.postcode+' '+this.city+' '+this.country;
address_invoice_detail = this.company+' '+this.firstname+' '+this.lastname+'<br />'+this.address1+'<br />'+this.address2+'<br />'+this.postcode+' '+this.city;
if (this.state != null)
address_invoice_detail += ' '+this.state;
address_invoice_detail += '</br>'+this.country;
invoice_address_edit_link = "{$link->getAdminLink('AdminAddresses')}&id_address="+this.id_address+"&updateaddress&realedit=1&liteDisplaying=1&submitFormAjax=1#";
}
if(this.id_address == id_address_delivery) if(this.id_address == id_address_delivery)
{ address_delivery_detail = this.company+' '+this.firstname+' '+this.lastname+'<br />'+this.address1+'<br />'+this.address2+'<br />'+this.postcode+' '+this.city+' '+this.country;
address_delivery_detail = this.company+' '+this.firstname+' '+this.lastname+'<br />'+this.address1+'<br />'+this.address2+'<br />'+this.postcode+' '+this.city;
if (this.state != null)
address_delivery_detail += ' '+this.state;
address_delivery_detail += '</br>'+this.country;
delivery_address_edit_link = "{$link->getAdminLink('AdminAddresses')}&id_address="+this.id_address+"&updateaddress&realedit=1&liteDisplaying=1&submitFormAjax=1#";
}
addresses_delivery_options += '<option value="'+this.id_address+'" '+(this.id_address == id_address_delivery ? 'selected="selected"' : '')+'>'+this.alias+'</option>'; addresses_delivery_options += '<option value="'+this.id_address+'" '+(this.id_address == id_address_delivery ? 'selected="selected"' : '')+'>'+this.alias+'</option>';
addresses_invoice_options += '<option value="'+this.id_address+'" '+(this.id_address == id_address_invoice ? 'selected="selected"' : '')+'>'+this.alias+'</option>'; addresses_invoice_options += '<option value="'+this.id_address+'" '+(this.id_address == id_address_invoice ? 'selected="selected"' : '')+'>'+this.alias+'</option>';
@@ -985,8 +951,6 @@
$('#id_address_invoice').html(addresses_invoice_options); $('#id_address_invoice').html(addresses_invoice_options);
$('#address_delivery_detail').html(address_delivery_detail); $('#address_delivery_detail').html(address_delivery_detail);
$('#address_invoice_detail').html(address_invoice_detail); $('#address_invoice_detail').html(address_invoice_detail);
$('#edit_delivery_address').attr('href', delivery_address_edit_link);
$('#edit_invoice_address').attr('href', invoice_address_edit_link);
} }
function updateAddresses() function updateAddresses()
@@ -1022,7 +986,7 @@
<label>{l s='Search customers'}</label> <label>{l s='Search customers'}</label>
<div class="margin-form"> <div class="margin-form">
<input type="text" id="customer" value="" /> <input type="text" id="customer" value="" />
<p>{l s='Search a customer by typing the first letters of his/her name'}</p> <p>{l s='Search a customer by tapping the first letters of his/her name'}</p>
<a class="fancybox button" href="{$link->getAdminLink('AdminCustomers')|escape:'htmlall':'UTF-8'}&addcustomer&liteDisplaying=1&submitFormAjax=1#"> <a class="fancybox button" href="{$link->getAdminLink('AdminCustomers')|escape:'htmlall':'UTF-8'}&addcustomer&liteDisplaying=1&submitFormAjax=1#">
<img src="../img/admin/add.gif" title="new"/><span>{l s='Add new customer'}</span> <img src="../img/admin/add.gif" title="new"/><span>{l s='Add new customer'}</span>
</a> </a>
@@ -1037,7 +1001,7 @@
<div class="margin-form"> <div class="margin-form">
<input type="hidden" value="" id="id_cart" name="id_cart" /> <input type="hidden" value="" id="id_cart" name="id_cart" />
<input type="text" id="product" value="" /> <input type="text" id="product" value="" />
<p>{l s='Search a product by typing the first letters of his/her name.'}</p> <p>{l s='Search a product by tapping the first letters of his/her name.'}</p>
</div> </div>
<div id="products_found"> <div id="products_found">
<div id="product_list"> <div id="product_list">
@@ -1197,14 +1161,14 @@
<div id="address_delivery"> <div id="address_delivery">
<h3>{l s='Delivery'}</h3> <h3>{l s='Delivery'}</h3>
<select id="id_address_delivery" name="id_address_delivery"> <select id="id_address_delivery" name="id_address_delivery">
</select>&nbsp;<a class="fancybox" id="edit_delivery_address" href="#"><img src="../img/admin/edit.gif" /></a> </select>
<div id="address_delivery_detail"> <div id="address_delivery_detail">
</div> </div>
</div> </div>
<div id="address_invoice"> <div id="address_invoice">
<h3>{l s='Invoice'}</h3> <h3>{l s='Invoice'}</h3>
<select id="id_address_invoice" name="id_address_invoice"> <select id="id_address_invoice" name="id_address_invoice">
</select>&nbsp;<a class="fancybox" id="edit_invoice_address" href="#"><img src="../img/admin/edit.gif" /></a> </select>
<div id="address_invoice_detail"> <div id="address_invoice_detail">
</div> </div>
</div> </div>
@@ -1222,7 +1186,7 @@
</select> </select>
</p> </p>
<p> <p>
<label for="shipping_price">{l s='Shipping price'}</label> <span id="shipping_price" name="shipping_price"></span> <label for="shipping_price">{l s='Shipping price'}</label> <span id="shipping_price" name="shipping_price"></span>&nbsp;<span class="currency_sign"></span>&nbsp;
</p> </p>
<p> <p>
<label for="free_shipping">{l s='Free shipping'}</label> <label for="free_shipping">{l s='Free shipping'}</label>
@@ -1246,12 +1210,12 @@
<div id="send_email_feedback"></div> <div id="send_email_feedback"></div>
<div id="cart_summary" style="clear:both;float:left;"> <div id="cart_summary" style="clear:both;float:left;">
<ul> <ul>
<li><span class="total_cart">{l s='Total products'}</span><span id="total_products"></span></li> <li><span class="total_cart">{l s='Total products'}</span><span id="total_products"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total vouchers'}</span><span id="total_vouchers"></span></li> <li><span class="total_cart">{l s='Total vouchers'}</span><span id="total_vouchers"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total shipping'}</span><span id="total_shipping"></span></li> <li><span class="total_cart">{l s='Total shipping'}</span><span id="total_shipping"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total taxes'}</span><span id="total_taxes"></span></li> <li><span class="total_cart">{l s='Total taxes'}</span><span id="total_taxes"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total without taxes'}</span><span id="total_without_taxes"></span></li> <li><span class="total_cart">{l s='Total without taxes'}</span><span id="total_without_taxes"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total with taxes'}</span><span id="total_with_taxes"></span></li> <li><span class="total_cart">{l s='Total with taxes'}</span><span id="total_with_taxes"></span><span class="currency_sign"></span></li>
</ul> </ul>
</div> </div>
<div class="order_message_right"> <div class="order_message_right">
@@ -65,7 +65,7 @@
<div class="bloc-command"> <div class="bloc-command">
<div class="button-command"> <div class="button-command">
{if (count($invoices_collection))} {if (count($invoices_collection))}
<a class="button" href="{$link->getAdminLink('AdminPdf')|escape:'htmlall':'UTF-8'}&submitAction=generateInvoicePDF&id_order={$order->id}"> <a class="button" href="{$link->getAdminLink('AdminPdf')|escape:'htmlall':'UTF-8'}&submitAction=generateInvoicePDF&id_order={$order->id}" target="_blank">
<img src="../img/admin/charged_ok.gif" alt="{l s='View invoice'}" /> {l s='View invoice'} <img src="../img/admin/charged_ok.gif" alt="{l s='View invoice'}" /> {l s='View invoice'}
</a> </a>
{else} {else}
@@ -73,7 +73,7 @@
{/if} {/if}
| |
{if (($currentState && $currentState->delivery) || $order->delivery_number)} {if (($currentState && $currentState->delivery) || $order->delivery_number)}
<a class="button" href="{$link->getAdminLink('AdminPdf')|escape:'htmlall':'UTF-8'}&submitAction=generateDeliverySlipPDF&id_order={$order->id}"> <a class="button" href="{$link->getAdminLink('AdminPdf')|escape:'htmlall':'UTF-8'}&submitAction=generateDeliverySlipPDF&id_order={$order->id}" target="_blank">
<img src="../img/admin/delivery.gif" alt="{l s='View delivery slip'}" /> {l s='View delivery slip'} <img src="../img/admin/delivery.gif" alt="{l s='View delivery slip'}" /> {l s='View delivery slip'}
</a> </a>
{else} {else}
@@ -124,10 +124,10 @@
<!-- History of status --> <!-- History of status -->
<table cellspacing="0" cellpadding="0" class="table history-status" style="width: 100%;"> <table cellspacing="0" cellpadding="0" class="table history-status" style="width: 100%;">
<colgroup> <colgroup>
<col width="1%"/> <col width="1%">
<col width=""/> <col width="">
<col width="20%"/> <col width="20%">
<col width="20%"/> <col width="20%">
</colgroup> </colgroup>
{foreach from=$history item=row key=key} {foreach from=$history item=row key=key}
{if ($key == 0)} {if ($key == 0)}
@@ -153,7 +153,7 @@
<br /> <br />
<fieldset> <fieldset>
<legend><img src="../img/admin/tab-customers.gif" /> {l s='Customer information'}</legend> <legend><img src="../img/admin/tab-customers.gif" /> {l s='Customer information'}</legend>
<span style="font-weight: bold; font-size: 14px;"><a href="?tab=AdminCustomers&id_customer={$customer->id}&viewcustomer&token={getAdminToken tab='AdminCustomers'}"> {$gender->name|escape:'htmlall':'UTF-8'} {$customer->firstname} {$customer->lastname}</a></span> ({l s='#'}{$customer->id})<br /> <span style="font-weight: bold; font-size: 14px;"><a href="?tab=AdminCustomers&id_customer={$customer->id}&viewcustomer&token={getAdminToken tab='AdminCustomers'}"> {$customer->firstname} {$customer->lastname}</a></span> ({l s='#'}{$customer->id})<br />
(<a href="mailto:{$customer->email}">{$customer->email}</a>)<br /><br /> (<a href="mailto:{$customer->email}">{$customer->email}</a>)<br /><br />
{if ($customer->isGuest())} {if ($customer->isGuest())}
{l s='This order has been placed by a guest.'} {l s='This order has been placed by a guest.'}
@@ -299,12 +299,12 @@
<form id="formAddPayment" method="post" action="{$current_index}&vieworder&id_order={$order->id}&token={$smarty.get.token|escape:'htmlall':'UTF-8'}"> <form id="formAddPayment" method="post" action="{$current_index}&vieworder&id_order={$order->id}&token={$smarty.get.token|escape:'htmlall':'UTF-8'}">
<table class="table" width="100%" cellspacing="0" cellpadding="0"> <table class="table" width="100%" cellspacing="0" cellpadding="0">
<colgroup> <colgroup>
<col width="15%"/> <col width="15%">
<col width=""/> <col width="">
<col width="20%"/> <col width="20%">
<col width="10%"/> <col width="10%">
<col width="10%"/> <col width="10%">
<col width="1%"/> <col width="1%">
</colgroup> </colgroup>
<thead> <thead>
<tr> <tr>
@@ -751,7 +751,7 @@
<a href="{$link->getAdminLink('AdminCustomerThreads')|escape:'htmlall':'UTF-8'}"><b>{l s='Click here'}</b> {l s='to see all messages.'}</a><br> <a href="{$link->getAdminLink('AdminCustomerThreads')|escape:'htmlall':'UTF-8'}"><b>{l s='Click here'}</b> {l s='to see all messages.'}</a><br>
<div id="message" style="display: {if Tools::getValue('message')}block{else}none{/if}"> <div id="message" style="display: {if Tools::getValue('message')}block{else}none{/if}">
<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">- {l s='Choose a standard message'} -</option> <option value="0" selected="selected">-- {l s='Choose a standard message'} --</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}
@@ -787,6 +787,8 @@
</fieldset> </fieldset>
{/if} {/if}
</div> </div>
<div class="clear">&nbsp;</div> <div class="clear">&nbsp;</div>
<br /><br /><a href="{$current_index}&token={$smarty.get.token}"><img src="../img/admin/arrow2.gif" /> {l s='Back to list'}</a><br /> <br /><br /><a href="{$current_index}&token={$smarty.get.token}"><img src="../img/admin/arrow2.gif" /> {l s='Back to list'}</a><br />
{/block} {/block}
@@ -41,7 +41,7 @@
{/if} {/if}
{$smarty.block.parent} {$smarty.block.parent}
{if $input.type == 'radio' && $input.name == 'smarty_cache'} {if $input.type == 'radio' && $input.name == 'smarty_cache'}
<a href="{$current}&token={$token}&empty_smarty_cache=1" class="clear button" href="">{l s='Clear Smarty cache & Autoload cache'}</a> <a href="{$current}&token={$token}&empty_smarty_cache=1" class="clear button" href="">{l s='Clear Smarty cache'}</a>
{/if} {/if}
{/block} {/block}
@@ -103,11 +103,11 @@
<td class="col-left"><label>{l s='Manufacturer:'}</label></td> <td class="col-left"><label>{l s='Manufacturer:'}</label></td>
<td style="padding-bottom:5px;"> <td style="padding-bottom:5px;">
<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>&nbsp;&nbsp;&nbsp; </select>&nbsp;&nbsp;&nbsp;
<a class="button bt-icon confirm_leave" style="margin-bottom:0" href="{$link->getAdminLink('AdminManufacturers')|escape:'htmlall':'UTF-8'}&addmanufacturer"> <a class="button bt-icon confirm_leave" style="margin-bottom:0" href="{$link->getAdminLink('AdminManufacturers')|escape:'htmlall':'UTF-8'}&addmanufacturer">
<img src="../img/admin/add.gif" alt="{l s='Create new manufacturer'}" title="{l s='Create new manufacturer'}" /> <img src="../img/admin/add.gif" alt="{l s='Create new manufacturer'}" title="{l s='Create new manufacturer'}" />
@@ -85,7 +85,7 @@
</td> </td>
<td style="padding-bottom:5px;"> <td style="padding-bottom:5px;">
<select name="attribute" id="attribute" style="width: 200px;"> <select name="attribute" id="attribute" style="width: 200px;">
<option value="0">-</option> <option value="0">---</option>
</select> </select>
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function(){ $(document).ready(function(){
@@ -252,7 +252,7 @@
<li style="float: left; width: {$imageWidth}px;"> <li style="float: left; width: {$imageWidth}px;">
<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}" style="float: none;"> <label for="id_image_attr_{$image.id_image}" style="float: none;">
<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'}" /> <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'}" />
</label> </label>
</li> </li>
{/foreach} {/foreach}
@@ -29,19 +29,6 @@
<h4>{if isset($id_image)}{l s='Edit this product image'}{else}{l s='Add a new image to this product'}{/if}</h4> <div class="separation"></div><br /> <h4>{if isset($id_image)}{l s='Edit this product image'}{else}{l s='Add a new image to this product'}{/if}</h4> <div class="separation"></div><br />
<table cellpadding="5" style="width:100%"> <table cellpadding="5" style="width:100%">
<tr>
<td class="col-left">
<label>{l s='Legend:'}</label>
</td>
<td style="padding-bottom:5px;" class="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" size="43" 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'}"/>
<span class="hint" name="help_box">{l s='Invalid characters:'} <>;=#{}<span class="hint-pointer">&nbsp;</span></span>
</div>
{/foreach}
</td>
</tr>
<tr> <tr>
<td class="col-left"><label class="file_upload_label">{l s='File:'}</label></td> <td class="col-left"><label class="file_upload_label">{l s='File:'}</label></td>
<td style="padding-bottom:5px;"> <td style="padding-bottom:5px;">
@@ -70,7 +57,6 @@
<thead> <thead>
<tr class="nodrag nodrop"> <tr class="nodrag nodrop">
<th style="width: 100px;">{l s='Image'}</th> <th style="width: 100px;">{l s='Image'}</th>
<th>{l s='Legend'}</th>
<th>{l s='Position'}</th> <th>{l s='Position'}</th>
{if $shops} {if $shops}
{foreach from=$shops item=shop} {foreach from=$shops item=shop}
@@ -92,10 +78,9 @@
<tr id="image_id"> <tr id="image_id">
<td style="padding: 4px;"> <td style="padding: 4px;">
<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-{$imageType}.jpg" alt="legend" title="legend" /> <img src="{$smarty.const._THEME_PROD_DIR_}{$iso_lang}-default-small_default.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>
@@ -116,6 +101,7 @@
</td> </td>
</tr> </tr>
</table> </table>
<script type="text/javascript"> <script type="text/javascript">
var upbutton = '{l s='Upload an image'}'; var upbutton = '{l s='Upload an image'}';
var token = '{$token}'; var token = '{$token}';
@@ -142,7 +128,7 @@
} }
else else
assoc = false; assoc = false;
imageLine({$image->id}, "{$image->getExistingImgPath()}", {$image->position}, "{if $image->cover}enabled{else}forbbiden{/if}", assoc, "{$image->legend[$default_language]|@addcslashes:'\"'}"); imageLine({$image->id}, "{$image->getExistingImgPath()}", {$image->position}, "{if $image->cover}enabled{else}forbbiden{/if}", assoc);
{/foreach} {/foreach}
{literal} {literal}
$("#imageTable").tableDnD( $("#imageTable").tableDnD(
@@ -161,20 +147,20 @@
updateImagePosition(image_up); updateImagePosition(image_up);
} }
}); });
var filecheck = 1; var filecheck = 1;
var params = new Array; var uploader = new qq.FileUploader(
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);
@@ -199,7 +185,7 @@
cover = "forbbiden"; cover = "forbbiden";
if (responseJSON.cover == "1") if (responseJSON.cover == "1")
cover = "enabled"; cover = "enabled";
imageLine(responseJSON.id, responseJSON.path, responseJSON.position, cover, responseJSON.shops, responseJSON.legend[{/literal}{$default_language|intval}{literal}]) imageLine(responseJSON.id, responseJSON.path, responseJSON.position, cover, responseJSON.shops)
$("#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();
@@ -212,12 +198,6 @@
}, },
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 class=\"float\" >" + filename + "</div></div><a style=\"margin-left:10px\"href=\"javascript:delQueue(" + id +");\"><img src=\"../img/admin/disabled.gif\" alt=\"\" border=\"0\"></a><p class=\"errorImg\"></p></li>"); $("#listImage").append("<li id='img"+id+"'><div class=\"float\" >" + filename + "</div></div><a style=\"margin-left:10px\"href=\"javascript:delQueue(" + id +");\"><img src=\"../img/admin/disabled.gif\" alt=\"\" border=\"0\"></a><p class=\"errorImg\"></p></li>");
} }
@@ -329,14 +309,13 @@
$("#img" + id).remove(); $("#img" + id).remove();
} }
function imageLine(id, path, position, cover, shops, legend) function imageLine(id, path, position, cover, shops)
{ {
line = $("#lineType").html(); line = $("#lineType").html();
line = line.replace(/image_id/g, id); line = line.replace(/image_id/g, id);
line = line.replace(/[a-z]{0,2}-default/g, path); line = line.replace(/[a-z]{2}-default/g, path);
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(/blank/g, cover); line = line.replace(/blank/g, cover);
line = line.replace(/<tbody>/gi, ""); line = line.replace(/<tbody>/gi, "");
line = line.replace(/<\/tbody>/gi, ""); line = line.replace(/<\/tbody>/gi, "");
@@ -351,6 +330,7 @@
$("#imageList").append(line); $("#imageList").append(line);
} }
$('.fancybox').fancybox(); $('.fancybox').fancybox();
}); });
{/literal} {/literal}
@@ -166,7 +166,7 @@
</tr> </tr>
<tr class="redirect_product_options" style="display:none"> <tr class="redirect_product_options" style="display:none">
<td class="col-left"> <td class="col-left">
{include file="controllers/products/multishop/checkbox.tpl" field="redirect_type" type="radio" onclick=""} {include file="controllers/products/multishop/checkbox.tpl" field="active" type="radio" onclick=""}
<label class="text">{l s='Redirect:'}</label> <label class="text">{l s='Redirect:'}</label>
</td> </td>
<td style="padding-bottom:5px;"> <td style="padding-bottom:5px;">
@@ -184,7 +184,7 @@
</tr> </tr>
<tr class="redirect_product_options redirect_product_options_product_choise" style="display:none"> <tr class="redirect_product_options redirect_product_options_product_choise" style="display:none">
<td class="col-left"> <td class="col-left">
{include file="controllers/products/multishop/checkbox.tpl" field="id_product_redirected" type="radio" onclick=""} {include file="controllers/products/multishop/checkbox.tpl" field="active" type="radio" onclick=""}
<label class="text">{l s='Related product:'}</label> <label class="text">{l s='Related product:'}</label>
</td> </td>
<td style="padding-bottom:5px;"> <td style="padding-bottom:5px;">
@@ -375,19 +375,8 @@
<td style="padding-bottom:5px;" class="translatable"> <td style="padding-bottom:5px;" class="translatable">
{foreach from=$languages item=language} {foreach from=$languages item=language}
<div class="lang_{$language.id_lang}" style="{if !$language.is_default}display: none;{/if}float: left;"> <div class="lang_{$language.id_lang}" style="{if !$language.is_default}display: none;{/if}float: left;">
{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}
<input size="55" type="text" id="tags_{$language.id_lang}" name="tags_{$language.id_lang}" <input size="55" type="text" id="tags_{$language.id_lang}" name="tags_{$language.id_lang}"
value="{$product->getTags($language.id_lang, true)|htmlentitiesUTF8}" class="tagify" /> value="{$product->getTags($language.id_lang, true)|htmlentitiesUTF8}" />
<span class="hint" name="help_box">{l s='Forbidden characters:'} !&lt;;&gt;;?=+#&quot;&deg;{}_$%<span class="hint-pointer">&nbsp;</span></span> <span class="hint" name="help_box">{l s='Forbidden characters:'} !&lt;;&gt;;?=+#&quot;&deg;{}_$%<span class="hint-pointer">&nbsp;</span></span>
</div> </div>
{/foreach} {/foreach}
@@ -29,7 +29,7 @@
<input size="30" type="text" id="{$input_name}_{$language.id_lang}" <input size="30" type="text" id="{$input_name}_{$language.id_lang}"
name="{$input_name}_{$language.id_lang}" name="{$input_name}_{$language.id_lang}"
value="{$input_value[$language.id_lang]|htmlentitiesUTF8|default:''}" value="{$input_value[$language.id_lang]|htmlentitiesUTF8|default:''}"
onkeyup="if (isArrowKey(event)) return ;updateFriendlyURL();" onblur="updateLinkRewrite();"/> onkeyup="if (isArrowKey(event)) return ;updateFriendlyURL();"/>
</div> </div>
{/foreach} {/foreach}
</div> </div>
@@ -178,7 +178,7 @@ $(document).ready(function () {
</tr> </tr>
<tr {if !$ps_use_ecotax} style="display:none;"{/if}> <tr {if !$ps_use_ecotax} style="display:none;"{/if}>
<td class="col-left"> <td class="col-left">
{include file="controllers/products/multishop/checkbox.tpl" field="ecotax" type="default"} {include file="controllers/products/multishop/checkbox.tpl" field="ecot" type="default"}
<label>{l s='Eco-tax (tax incl.):'}</label> <label>{l s='Eco-tax (tax incl.):'}</label>
</td> </td>
<td> <td>
@@ -223,7 +223,7 @@ $(document).ready(function () {
<tr> <tr>
<td class="col-left"><label><b>{l s='Final retail price:'}</b></label></td> <td class="col-left"><label><b>{l s='Final retail price:'}</b></label></td>
<td> <td>
<span> <span {if !$country_display_tax_label}style="display:none"{/if} >
{$currency->prefix}<span id="finalPrice" style="font-weight: bold;">0.00</span>{$currency->suffix}<span {if $ps_tax}style="display:none;"{/if}> ({l s='tax incl.'})</span> {$currency->prefix}<span id="finalPrice" style="font-weight: bold;">0.00</span>{$currency->suffix}<span {if $ps_tax}style="display:none;"{/if}> ({l s='tax incl.'})</span>
</span> </span>
<span {if $ps_tax}style="display:none;"{/if} > <span {if $ps_tax}style="display:none;"{/if} >
@@ -249,7 +249,7 @@ $(document).ready(function () {
<script type="text/javascript"> <script type="text/javascript">
var product_prices = new Array(); var product_prices = new Array();
{foreach from=$combinations item='combination'} {foreach from=$combinations item='combination'}
product_prices['{$combination.id_product_attribute}'] = '{$combination.price|@addcslashes:'\''}'; product_prices['{$combination.id_product_attribute}'] = '{$combination.price}';
{/foreach} {/foreach}
</script> </script>
<div id="add_specific_price" style="display: none;"> <div id="add_specific_price" style="display: none;">
@@ -375,7 +375,7 @@ $(document).ready(function () {
<div class="margin-form"> <div class="margin-form">
<input type="text" name="sp_reduction" value="0.00" size="11" /> <input type="text" name="sp_reduction" value="0.00" size="11" />
<select name="sp_reduction_type"> <select name="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>
@@ -75,7 +75,7 @@
<p>{l s='Click "Save and Stay" after changing selected suppliers to display the associated product references.'}</p> <p>{l s='Click "Save and Stay" after changing selected suppliers to display the associated product references.'}</p>
<div id="suppliers_accordion" style="margin-top:10px; display:block;"> <div id="suppliers_accordion" style="margin-top:10px; display:block;">
{foreach from=$associated_suppliers item=supplier} {foreach from=$associated_suppliers item=supplier}
<h3 style="margin-bottom:0;"><a href="#">{if isset($supplier->name)}{$supplier->name}{/if}</a></h3> <h3 style="margin-bottom:0;"><a href="#">{$supplier->name}</a></h3>
<div style="display:block;"> <div style="display:block;">
<table cellpadding="10" cellspacing="0" class="table"> <table cellpadding="10" cellspacing="0" class="table">
@@ -58,7 +58,6 @@
$('#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'}&nbsp;"<a class="link" href="get-file-admin.php?file='+msg+'&filename='+fileName+'">'+fileName+'</a>"&nbsp;{l s='has successfully been uploaded'}' + $('#upload-confirmation div').prepend('<span>{l s='The file'}&nbsp;"<a class="link" href="get-file-admin.php?file='+msg+'&filename='+fileName+'">'+fileName+'</a>"&nbsp;{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();
@@ -45,7 +45,7 @@
{l s='The field `request_uri` is the URL from which the customers come to your website.'}<br /> {l s='The field `request_uri` is the URL from which the customers come to your website.'}<br />
{l s='For example, if the visitor accesses a product page, the URL will be'} "{$uri}music-ipods/1-ipod-nano.html".<br /> {l s='For example, if the visitor accesses a product page, the URL will be'} "{$uri}music-ipods/1-ipod-nano.html".<br />
{l s='This is helpful because you can add tags or tokens in the links pointing to your website.'} {l s='This is helpful because you can add tags or tokens in the links pointing to your website.'}
{l s='For example, you can post a link "%1$sindex.php?prestashop" in the forum and get statistics by entering "%%prestashop" in the field `request_uri`. ' sprintf=[$uri]} {l s='For example, you can post a link "%dindex.php?prestashop" in the forum and get statistics by entering "%prestashop" in the field `request_uri`. '}
{l s='This method is more reliable than the `http_referer`, but there is one disadvantage. If a search engine references a page with your link, then it will be displayed in the search results and you will not only have visitors from the forum, but also those from the search engine.'} {l s='This method is more reliable than the `http_referer`, but there is one disadvantage. If a search engine references a page with your link, then it will be displayed in the search results and you will not only have visitors from the forum, but also those from the search engine.'}
</li> </li>
<br /> <br />
@@ -112,7 +112,7 @@
<label>{l s='Filter by product:'}</label> <label>{l s='Filter by product:'}</label>
<div class="margin-left"> <div class="margin-left">
<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>
<br class="clear" /> <br class="clear" />
@@ -41,7 +41,7 @@
<div class="margin-form"> <div class="margin-form">
<select id="id_category" name="id_category"> <select id="id_category" name="id_category">
{foreach from=$categories item='category'} {foreach from=$categories item='category'}
<option value="{$category.id_category|intval}">({$category.id_category|intval}) {$category.name}</option> <option value="{$category.id_category}">{$category.name}</option>
{/foreach} {/foreach}
</select> </select>
<a class="button bt-icon" href="#" id="add_condition_category"> <a class="button bt-icon" href="#" id="add_condition_category">
@@ -30,9 +30,9 @@
function ajaxStoreStates(id_state_selected) function ajaxStoreStates(id_state_selected)
{ {
$.ajax({ $.ajax({
url: "index.php", url: "ajax.php",
cache: false, cache: false,
data: "ajax=1&tab=AdminStates&token={getAdminToken tab='AdminStates'}&action=states&id_country="+$('#PS_SHOP_COUNTRY_ID').val() + "&id_state=" + $('#PS_SHOP_STATE_ID').val(), data: "ajaxStates=1&id_country="+$('#PS_SHOP_COUNTRY_ID').val() + "&id_state=" + $('#PS_SHOP_STATE_ID').val(),
success: function(html) success: function(html)
{ {
if (html == 'false') if (html == 'false')
@@ -54,7 +54,7 @@ $(document).ready(function() {
</div> </div>
<div class="margin-form"> <div class="margin-form">
<input type="submit" id="{$table}_form_submit_btn" value="{l s='Save'}" name="submitChangestate" class="button" style="display: none;"> <input type="submit" id="_form_submit_btn" value="{l s='Save'}" name="submitChangestate" class="button" style="display: none;">
</div> </div>
{/if} {/if}
{/block} {/block}
@@ -60,9 +60,9 @@
$("#states-label").hide(); $("#states-label").hide();
} else { } else {
$.ajax({ $.ajax({
url: "index.php", url: "ajax.php",
cache: false, cache: false,
data: "ajax=1&tab=AdminStates&token={getAdminToken tab='AdminStates'}&action=states&id_country="+id_country+"&id_state="+id_state+"&empty_value={l s='All'}", data: "ajaxStates=1&id_country="+id_country+"&id_state="+id_state+"&empty_value={l s='All'}",
success: function(html){ success: function(html){
if (html == "false") if (html == "false")
{ {
@@ -88,10 +88,10 @@
{ {
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
url: 'index.php', url: 'ajax.php',
async: true, async: true,
dataType: 'json', dataType: 'json',
data: 'ajax=1&tab=AdminTaxRulesGroup&token={getAdminToken tab='AdminTaxRulesGroup'}&ajaxStates=1&action=updateTaxRule&id_tax_rule='+id_tax_rule, data: 'ajaxStates=1&ajaxUpdateTaxRule=1&id_tax_rule='+id_tax_rule,
success: function(data){ success: function(data){
$('#tax_rule_form').show(); $('#tax_rule_form').show();
$('#id_tax_rule').val(data.id); $('#id_tax_rule').val(data.id);
@@ -33,22 +33,22 @@
{/if} {/if}
<form method="post" action="{$currentIndex}&{$identifier}&token={$token}&id_tax_rules_group={$id_tax_rules_group}&updatetax_rules_group#{$table}" class="form"> <form method="post" action="{$currentIndex}&{$identifier}&token={$token}&id_tax_rules_group={$id_tax_rules_group}&updatetax_rules_group#{$table}" class="form">
<input type="hidden" id="submitFilter{$list_id}" name="submitFilter{$list_id}" value="0"/> <input type="hidden" id="submitFilter{$table}" name="submitFilter{$table}" value="0"/>
<table class="table_grid"> <table class="table_grid">
<tr> <tr>
<td style="vertical-align: bottom;"> <td style="vertical-align: bottom;">
<span style="float: left;"> <span style="float: left;">
{if $page > 1} {if $page > 1}
<input type="image" src="../img/admin/list-prev2.gif" onclick="getE('submitFilter{$list_id}').value=1"/>&nbsp; <input type="image" src="../img/admin/list-prev2.gif" onclick="getE('submitFilter{$table}').value=1"/>&nbsp;
<input type="image" src="../img/admin/list-prev.gif" onclick="getE('submitFilter{$list_id}').value={$page - 1}"/> <input type="image" src="../img/admin/list-prev.gif" onclick="getE('submitFilter{$table}').value={$page - 1}"/>
{/if} {/if}
{l s='Page'} <b>{$page}</b> / {$total_pages} {l s='Page'} <b>{$page}</b> / {$total_pages}
{if $page < $total_pages} {if $page < $total_pages}
<input type="image" src="../img/admin/list-next.gif" onclick="getE('submitFilter{$list_id}').value={$page + 1};"/>&nbsp; <input type="image" src="../img/admin/list-next.gif" onclick="getE('submitFilter{$table}').value={$page + 1};"/>&nbsp;
<input type="image" src="../img/admin/list-next2.gif" onclick="getE('submitFilter{$list_id}').value={$total_pages}"/> <input type="image" src="../img/admin/list-next2.gif" onclick="getE('submitFilter{$table}').value={$total_pages}"/>
{/if} {/if}
| {l s='Display'} | {l s='Display'}
<select name="{$list_id}_pagination" onchange="submit()"> <select name="pagination" onchange="submit()">
{* Choose number of results per page *} {* Choose number of results per page *}
{foreach $pagination AS $value} {foreach $pagination AS $value}
<option value="{$value|intval}"{if $selected_pagination == $value} selected="selected" {elseif $selected_pagination == NULL && $value == $pagination[1]} selected="selected2"{/if}>{$value|intval}</option> <option value="{$value|intval}"{if $selected_pagination == $value} selected="selected" {elseif $selected_pagination == NULL && $value == $pagination[1]} selected="selected2"{/if}>{$value|intval}</option>
@@ -57,7 +57,7 @@
/ {$list_total} {l s='result(s)'} / {$list_total} {l s='result(s)'}
</span> </span>
<span style="float: right;"> <span style="float: right;">
<input type="submit" name="submitReset{$list_id}" value="{l s='Reset'}" class="button" /> <input type="submit" name="submitReset{$table}" value="{l s='Reset'}" class="button" />
</span> </span>
<span class="clear"></span> <span class="clear"></span>
</td> </td>
@@ -66,7 +66,7 @@
<td> <td>
<table <table
{if $table_id} id={$table_id}{/if} {if $table_id} id={$table_id}{/if}
class="table {if $table_dnd}tableDnD{/if} {$list_id}" class="table {if $table_dnd}tableDnD{/if} {$table}"
cellpadding="0" cellspacing="0" cellpadding="0" cellspacing="0"
style="width: 100%; margin-bottom:10px;" style="width: 100%; margin-bottom:10px;"
> >
@@ -84,7 +84,7 @@
<tr class="nodrag nodrop"> <tr class="nodrag nodrop">
<th class="center"> <th class="center">
{if $has_bulk_actions} {if $has_bulk_actions}
<input type="checkbox" name="checkme" class="noborder" onclick="checkDelBoxes(this.form, '{$list_id}Box[]', this.checked)" /> <input type="checkbox" name="checkme" class="noborder" onclick="checkDelBoxes(this.form, '{$table}Box[]', this.checked)" />
{/if} {/if}
</th> </th>
{foreach $fields_display AS $key => $params} {foreach $fields_display AS $key => $params}
+43 -40
View File
@@ -34,51 +34,54 @@
<title>{$meta_title} - PrestaShop&trade;</title> <title>{$meta_title} - PrestaShop&trade;</title>
{if $display_header} {if $display_header}
<script type="text/javascript"> <script type="text/javascript">
var help_class_name = '{$controller_name|@addcslashes:'\''}'; var help_class_name = '{$controller_name}';
var iso_user = '{$iso_user|@addcslashes:'\''}'; var iso_user = '{$iso_user}';
var country_iso_code = '{$country_iso_code|@addcslashes:'\''}'; var country_iso_code = '{$country_iso_code}';
var _PS_VERSION_ = '{$smarty.const._PS_VERSION_|@addcslashes:'\''}'; var _PS_VERSION_ = '{$smarty.const._PS_VERSION_}';
var helpboxes = {$help_box|intval};
var roundMode = {$round_mode|intval}; var helpboxes = {$help_box};
{if isset($shop_context)} var roundMode = {$round_mode};
{if $shop_context == Shop::CONTEXT_ALL} {if isset($shop_context)}
var youEditFieldFor = '{l s='A modification of this field will be applied for all shops' js=1}'; {if $shop_context == Shop::CONTEXT_ALL}
{elseif $shop_context == Shop::CONTEXT_GROUP} 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 of group' js=1} <b>{$shop_name|@addcslashes:'\''}</b>'; {elseif $shop_context == Shop::CONTEXT_GROUP}
{else} 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 the shop' js=1} <b>{$shop_name|@addcslashes:'\''}</b>'; {else}
{/if} var youEditFieldFor = "{l s='A modification of this field will be applied for the shop ' slashes=1 }<b>{$shop_name}</b>";
{else} {/if}
var youEditFieldFor = ''; {else}
{/if} var youEditFieldFor = '';
var autorefresh_notifications = '{$autorefresh_notifications|@addcslashes:'\''}'; {/if}
var new_order_msg = '{l s='A new order has been placed on your shop.' js=1}'; {* Notifications vars *}
var order_number_msg = '{l s='Order number: ' js=1}'; var autorefresh_notifications = '{$autorefresh_notifications}';
var total_msg = '{l s='Total: ' js=1}'; var new_order_msg = '{l s='A new order has been placed on your shop.' slashes=1}';
var from_msg = '{l s='From: ' js=1}'; var order_number_msg = '{l s='Order number: ' slashes=1}';
var see_order_msg = '{l s='View this order' js=1}'; var total_msg = '{l s='Total: ' slashes=1}';
var new_customer_msg = '{l s='A new customer registered on your shop.' js=1}'; var from_msg = '{l s='From: ' slashes=1}';
var customer_name_msg = '{l s='Customer name: ' js=1}'; var see_order_msg = '{l s='View this order' slashes=1}';
var see_customer_msg = '{l s='View this customer' js=1}'; var new_customer_msg = '{l s='A new customer registered on your shop.' slashes=1}';
var new_msg = '{l s='A new message posted on your shop.' js=1}'; var customer_name_msg = '{l s='Customer name: ' slashes=1}';
var excerpt_msg = '{l s='Excerpt: ' js=1}'; var see_customer_msg = '{l s='View this customer' slashes=1}';
var see_msg = '{l s='Read this message' js=1}'; var new_msg = '{l s='A new message posted on your shop.' slashes=1}';
var token_admin_orders = '{getAdminToken tab='AdminOrders'}'; var excerpt_msg = '{l s='Excerpt: ' slashes=1}';
var token_admin_customers = '{getAdminToken tab='AdminCustomers'}'; var see_msg = '{l s='Read this message' slashes=1}';
var token_admin_customer_threads = '{getAdminToken tab='AdminCustomerThreads'}'; var token_admin_orders = '{getAdminToken tab='AdminOrders' slashes=1}';
var currentIndex = '{$currentIndex|@addcslashes:'\''}'; var token_admin_customers = '{getAdminToken tab='AdminCustomers' slashes=1}';
var choose_language_translate = '{l s='Choose language' js=1}'; var token_admin_customer_threads = '{getAdminToken tab='AdminCustomerThreads' slashes=1}';
var currentIndex = '{$currentIndex}';
var choose_language_translate = "{l s='Choose language' slashes=1 }";
</script> </script>
{/if} {/if}
{if isset($css_files)} {if isset($css_files)}
{foreach from=$css_files key=css_uri item=media} {foreach from=$css_files key=css_uri item=media}
<link href="{$css_uri}" rel="stylesheet" type="text/css" media="{$media}" /> <link href="{$css_uri}" rel="stylesheet" type="text/css" media="{$media}" />
{/foreach} {/foreach}
{/if} {/if}
{if isset($js_files)} {if isset($js_files)}
{foreach from=$js_files item=js_uri} {foreach from=$js_files item=js_uri}
<script type="text/javascript" src="{$js_uri}"></script> <script type="text/javascript" src="{$js_uri}"></script>
{/foreach} {/foreach}
{/if} {/if}
<link rel="icon" type="image/vnd.microsoft.icon" href="{$img_dir}favicon.ico" /> <link rel="icon" type="image/vnd.microsoft.icon" href="{$img_dir}favicon.ico" />
<link rel="shortcut icon" type="image/x-icon" href="{$img_dir}favicon.ico" /> <link rel="shortcut icon" type="image/x-icon" href="{$img_dir}favicon.ico" />
@@ -30,7 +30,7 @@
{if isset($fields.title)}<h2>{$fields.title}</h2>{/if} {if isset($fields.title)}<h2>{$fields.title}</h2>{/if}
{block name="defaultForm"} {block name="defaultForm"}
<form id="{if isset($fields.form.form.id_form)}{$fields.form.form.id_form|escape:'htmlall':'UTF-8'}{else}{if $table == null}configuration_form{else}{$table}_form{/if}{/if}" class="defaultForm {$name_controller}" action="{$current}&{if !empty($submit_action)}{$submit_action}=1{/if}&token={$token}" method="post" enctype="multipart/form-data" {if isset($style)}style="{$style}"{/if}> <form id="{if isset($fields.form.form.id_form)}{$fields.form.form.id_form|escape:'htmlall':'UTF-8'}{else}{$table}_form{/if}" class="defaultForm {$name_controller}" action="{$current}&{if !empty($submit_action)}{$submit_action}=1{/if}&token={$token}" method="post" enctype="multipart/form-data" {if isset($style)}style="{$style}"{/if}>
{if $form_id} {if $form_id}
<input type="hidden" name="{$identifier}" id="{$identifier}" value="{$form_id}" /> <input type="hidden" name="{$identifier}" id="{$identifier}" value="{$form_id}" />
{/if} {/if}
@@ -68,7 +68,7 @@
<script type="text/javascript"> <script type="text/javascript">
$().ready(function () { $().ready(function () {
var input_id = '{/literal}{if isset($input.id)}{$input.id}_{$language.id_lang}{else}{$input.name}_{$language.id_lang}{/if}{literal}'; var input_id = '{/literal}{if isset($input.id)}{$input.id}_{$language.id_lang}{else}{$input.name}_{$language.id_lang}{/if}{literal}';
$('#'+input_id).tagify({delimiters: [13,44], addTagPrompt: '{/literal}{l s='Add tag' js=1}{literal}'}); $('#'+input_id).tagify({addTagPrompt: '{/literal}{l s='Add tag' js=1}{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'));
}); });
@@ -97,7 +97,8 @@
<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({delimiters: [13,44], addTagPrompt: '{/literal}{l s='Add tag'}{literal}'}); $('#'+input_id).tagify();
$('#'+input_id).tagify({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'));
}); });
@@ -167,7 +168,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)}
@@ -191,7 +192,7 @@
{/if} {/if}
{elseif $input.type == 'radio'} {elseif $input.type == 'radio'}
{foreach $input.values as $value} {foreach $input.values as $value}
<input type="radio" name="{$input.name}" id="{$value.id}" value="{$value.value|escape:'htmlall':'UTF-8'}" <input type="radio" name="{$input.name}"id="{$value.id}" value="{$value.value|escape:'htmlall':'UTF-8'}"
{if $fields_value[$input.name] == $value.value}checked="checked"{/if} {if $fields_value[$input.name] == $value.value}checked="checked"{/if}
{if isset($input.disabled) && $input.disabled}disabled="disabled"{/if} /> {if isset($input.disabled) && $input.disabled}disabled="disabled"{/if} />
<label {if isset($input.class)}class="{$input.class}"{/if} for="{$value.id}"> <label {if isset($input.class)}class="{$input.class}"{/if} for="{$value.id}">
@@ -236,7 +237,7 @@
{if isset($fields_value[$input.name].image) && $fields_value[$input.name].image} {if isset($fields_value[$input.name].image) && $fields_value[$input.name].image}
<div id="image"> <div id="image">
{$fields_value[$input.name].image} {$fields_value[$input.name].image}
<p align="center">{l s='File size'} {$fields_value[$input.name].size}{l s='kb'}</p> <p align="center">{l s='File size'} {$fields_value[$input.name].size}kb</p>
<a href="{$current}&{$identifier}={$form_id}&token={$token}&deleteImage=1"> <a href="{$current}&{$identifier}={$form_id}&token={$token}&deleteImage=1">
<img src="../img/admin/delete.gif" alt="{l s='Delete'}" /> {l s='Delete'} <img src="../img/admin/delete.gif" alt="{l s='Delete'}" /> {l s='Delete'}
</a> </a>
@@ -431,8 +432,7 @@
}; };
{/foreach} {/foreach}
// we need allowEmployeeFormLang var in ajax request // we need allowEmployeeFormLang var in ajax request
allowEmployeeFormLang = {$allowEmployeeFormLang|intval}; allowEmployeeFormLang = {$allowEmployeeFormLang};
employee_token = '{getAdminToken tab='AdminEmployees'}';
displayFlags(languages, id_language, allowEmployeeFormLang); displayFlags(languages, id_language, allowEmployeeFormLang);
$(document).ready(function() { $(document).ready(function() {
@@ -454,7 +454,6 @@
}); });
}); });
state_token = '{getAdminToken tab='AdminStates'}';
{block name="script"}{/block} {block name="script"}{/block}
</script> </script>
{/if} {/if}
@@ -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|@addcslashes:'\''}'; var inputName = '{$categories.input_name}';
var use_radio = {if $categories.use_radio}1{else}0{/if}; var use_radio = {if $categories.use_radio}1{else}0{/if};
var selectedCat = {$categories.selected_cat|@implode|intval}; var selectedCat = '{implode value=$categories.selected_cat}';
var selectedLabel = '{$categories.trads.selected|@addcslashes:'\''}'; var selectedLabel = '{$categories.trads.selected}';
var home = '{$categories.trads.Root.name|@addcslashes:'\''}'; var home = '{$categories.trads.Root.name}';
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(){
@@ -49,7 +49,6 @@
{/if} {/if}
class="{if !$no_link}pointer{/if} class="{if !$no_link}pointer{/if}
{if isset($params.position) && $order_by == 'position' && $order_way != 'DESC'} dragHandle{/if} {if isset($params.position) && $order_by == 'position' && $order_way != 'DESC'} dragHandle{/if}
{if isset($params.class)} {$params.class}{/if}
{if isset($params.align)} {$params.align}{/if}" {if isset($params.align)} {$params.align}{/if}"
{if (!isset($params.position) && !$no_link && !isset($params.remove_onclick))} {if (!isset($params.position) && !$no_link && !isset($params.remove_onclick))}
onclick="document.location = '{$current_index}&{$identifier}={$tr.$identifier}{if $view}&view{else}&update{/if}{$table}&token={$token}'"> onclick="document.location = '{$current_index}&{$identifier}={$tr.$identifier}{if $view}&view{else}&update{/if}{$table}&token={$token}'">
@@ -187,7 +187,7 @@
{else} {else}
{if $params.type == 'bool'} {if $params.type == 'bool'}
<select onchange="$('#submitFilterButton{$list_id}').focus();$('#submitFilterButton{$list_id}').click();" name="{$list_id}Filter_{$key}"> <select 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>
@@ -197,7 +197,7 @@
{elseif $params.type == 'select'} {elseif $params.type == 'select'}
{if isset($params.filter_key)} {if isset($params.filter_key)}
<select 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 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 $option_display == $params.value || $option_value == $params.value} selected="selected"{/if}>{$option_display}</option> <option value="{$option_value}" {if $option_display == $params.value || $option_value == $params.value} selected="selected"{/if}>{$option_display}</option>
@@ -34,7 +34,7 @@
{block name="defaultOptions"} {block name="defaultOptions"}
<form action="{$current}&token={$token}" <form action="{$current}&token={$token}"
id="{if $table == null}configuration_form{else}{$table}_form{/if}" id="{$table}_form"
{if isset($categoryData['name'])} name={$categoryData['name']}{/if} {if isset($categoryData['name'])} name={$categoryData['name']}{/if}
{if isset($categoryData['id'])} id={$categoryData['id']} {/if} {if isset($categoryData['id'])} id={$categoryData['id']} {/if}
method="post" method="post"
@@ -36,7 +36,7 @@
{if $k == 'modules-list'} {if $k == 'modules-list'}
<div id="modules_list_container" style="display:none"> <div id="modules_list_container" style="display:none">
<div style="float:right;margin:5px"> <div style="float:right;margin:5px">
<a href="#" onclick="$('#modules_list_container').slideUp();return false;"><img alt="X" src="../img/admin/close.png" /></a> <a href="#" onclick="$('#modules_list_container').slideUp();return false;"><img alt="X" src="../img/admin/close.png"></a>
</div> </div>
<div id="modules_list_loader"><img src="../img/loader.gif" alt="" border="0" /></div> <div id="modules_list_loader"><img src="../img/loader.gif" alt="" border="0" /></div>
<div id="modules_list_container_tab" style="display:none;"></div> <div id="modules_list_container_tab" style="display:none;"></div>
@@ -87,7 +87,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' && !e.target.hasClass('tagify')) if (e.which == 13 && e.target.localName != 'textarea')
$('#desc-{$table}-save').click(); $('#desc-{$table}-save').click();
}); });
//submit the form //submit the form
+15 -23
View File
@@ -264,17 +264,13 @@ class AddressCore extends ObjectModel
if(!isset($id_address) || empty($id_address)) if(!isset($id_address) || empty($id_address))
return false; return false;
$cache_id = 'Address::isCountryActiveById_'.(int)$id_address; if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
if (!Cache::isStored($cache_id)) SELECT c.`active`
{ FROM `'._DB_PREFIX_.'address` a
$result = (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getvalue(' LEFT JOIN `'._DB_PREFIX_.'country` c ON c.`id_country` = a.`id_country`
SELECT c.`active` WHERE a.`id_address` = '.(int)$id_address))
FROM `'._DB_PREFIX_.'address` a return false;
LEFT JOIN `'._DB_PREFIX_.'country` c ON c.`id_country` = a.`id_country` return ($result['active']);
WHERE a.`id_address` = '.(int)$id_address);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
/** /**
@@ -328,17 +324,12 @@ class AddressCore extends ObjectModel
{ {
if (!$id_customer) if (!$id_customer)
return false; return false;
$cache_id = 'Address::getFirstCustomerAddressId_'.(int)$id_customer.'-'.(bool)$active;
if (!Cache::isStored($cache_id)) return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
{ SELECT `id_address`
$result = (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' FROM `'._DB_PREFIX_.'address`
SELECT `id_address` WHERE `id_customer` = '.(int)$id_customer.' AND `deleted` = 0'.($active ? ' AND `active` = 1' : '')
FROM `'._DB_PREFIX_.'address` );
WHERE `id_customer` = '.(int)$id_customer.' AND `deleted` = 0'.($active ? ' AND `active` = 1' : '')
);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
/** /**
@@ -388,4 +379,5 @@ class AddressCore extends ObjectModel
$query->where('id_warehouse = 0'); $query->where('id_warehouse = 0');
return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query); return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query);
} }
} }
+3 -3
View File
@@ -1303,7 +1303,7 @@ abstract class AdminTabCore
} }
$asso = Shop::getAssoTable($this->table); $asso = Shop::getAssoTable($this->table);
if ($asso !== false && $asso['type'] == 'shop') if ($asso !== false && $assos['type'] == 'shop')
{ {
$filterKey = $asso['type']; $filterKey = $asso['type'];
$idenfierShop = Shop::getContextListShopID(); $idenfierShop = Shop::getContextListShopID();
@@ -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)
{ {
-16
View File
@@ -124,21 +124,5 @@ 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']);
}
} }
+2 -2
View File
@@ -139,7 +139,7 @@ class AttributeCore extends ObjectModel
ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = '.(int)$id_lang.') ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = '.(int)$id_lang.')
'.Shop::addSqlAssociation('attribute_group', 'ag').' '.Shop::addSqlAssociation('attribute_group', 'ag').'
'.Shop::addSqlAssociation('attribute', 'a').' '.Shop::addSqlAssociation('attribute', 'a').'
'.($not_null ? 'WHERE a.`id_attribute` IS NOT NULL AND al.`name` IS NOT NULL AND agl.`id_attribute_group` IS NOT NULL' : '').' '.($not_null ? 'WHERE a.`id_attribute` IS NOT NULL AND al.`name` IS NOT NULL' : '').'
ORDER BY agl.`name` ASC, a.`position` ASC ORDER BY agl.`name` ASC, a.`position` ASC
'); ');
} }
@@ -343,4 +343,4 @@ class AttributeCore extends ObjectModel
return (is_numeric($position)) ? $position : -1; return (is_numeric($position)) ? $position : -1;
} }
} }
+25 -23
View File
@@ -49,15 +49,11 @@ class Autoload
*/ */
public $index = array(); public $index = array();
public $_include_override_path = true;
protected function __construct() protected function __construct()
{ {
$this->root_dir = dirname(dirname(__FILE__)).'/'; $this->root_dir = dirname(dirname(__FILE__)).'/';
if (file_exists($this->root_dir.Autoload::INDEX_FILE)) if (file_exists($this->root_dir.Autoload::INDEX_FILE))
$this->index = include($this->root_dir.Autoload::INDEX_FILE); $this->index = include($this->root_dir.Autoload::INDEX_FILE);
else
$this->generateIndex();
} }
/** /**
@@ -84,8 +80,9 @@ class Autoload
if (strpos(strtolower($classname), 'smarty_') === 0) if (strpos(strtolower($classname), 'smarty_') === 0)
return; return;
// regenerate the class index if the requested file doesn't exists // regenerate the class index if the requested class is not found in the index or if the requested file doesn't exists
if ((isset($this->index[$classname]) && $this->index[$classname] && !is_file($this->root_dir.$this->index[$classname])) if (!isset($this->index[$classname])
|| ($this->index[$classname] && !is_file($this->root_dir.$this->index[$classname]))
|| (isset($this->index[$classname.'Core']) && $this->index[$classname.'Core'] && !is_file($this->root_dir.$this->index[$classname.'Core']))) || (isset($this->index[$classname.'Core']) && $this->index[$classname.'Core'] && !is_file($this->root_dir.$this->index[$classname.'Core'])))
$this->generateIndex(); $this->generateIndex();
@@ -122,32 +119,36 @@ class Autoload
{ {
$classes = array_merge( $classes = array_merge(
$this->getClassesFromDir('classes/'), $this->getClassesFromDir('classes/'),
$this->getClassesFromDir('controllers/') $this->getClassesFromDir('override/classes/'),
$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).'; ?>';
// Write classes index on disc to cache it // Write classes index on disc to cache it
$filename = $this->root_dir.Autoload::INDEX_FILE; $filename = $this->root_dir.Autoload::INDEX_FILE;
$filename_tmp = tempnam(dirname($filename), basename($filename.'.')); if ((file_exists($filename) && !is_writable($filename)) || !is_writable(dirname($filename)))
if ($filename_tmp !== false && file_put_contents($filename_tmp, $content, LOCK_EX) !== false)
{ {
if (!rename($filename_tmp, $filename)) header('HTTP/1.1 503 temporarily overloaded');
unlink($filename_tmp); // Cannot use PrestaShopException in this context
else die('/cache/class_index.php is not writable, please give write permissions (chmod 666) on this file.');
@chmod($filename, 0666);
} }
// $filename_tmp couldn't be written. $filename should be there anyway (even if outdated), no need to die.
else else
error_log('Cannot write temporary file '.$filename_tmp); {
$filename_tmp = tempnam(dirname($filename), basename($filename.'.'));
if($filename_tmp !== FALSE and file_put_contents($filename_tmp, $content, LOCK_EX) !== FALSE)
{
rename($filename_tmp, $filename);
@chmod($filename, 0664);
}
else
{
// $filename_tmp couldn't be written. $filename should be there anyway (even if outdated),
// no need to die.
error_log('Cannot write temporary file '.$filename_tmp);
}
}
$this->index = $classes; $this->index = $classes;
} }
@@ -191,3 +192,4 @@ class Autoload
return isset($this->index[$classname]) ? $this->index[$classname] : null; return isset($this->index[$classname]) ? $this->index[$classname] : null;
} }
} }
+1 -6
View File
@@ -34,7 +34,6 @@ 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;
/** /**
@@ -47,7 +46,6 @@ 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
@@ -190,7 +188,7 @@ class CMSCore extends ObjectModel
return (Db::getInstance()->getValue($sql)); return (Db::getInstance()->getValue($sql));
} }
public static function getCMSPages($id_lang = null, $id_cms_category = null, $active = true, $id_shop = null) public static function getCMSPages($id_lang = null, $id_cms_category = null, $active = true)
{ {
$sql = new DbQuery(); $sql = new DbQuery();
$sql->select('*'); $sql->select('*');
@@ -198,9 +196,6 @@ class CMSCore extends ObjectModel
if ($id_lang) if ($id_lang)
$sql->innerJoin('cms_lang', 'l', 'c.id_cms = l.id_cms AND l.id_lang = '.(int)$id_lang); $sql->innerJoin('cms_lang', 'l', 'c.id_cms = l.id_cms AND l.id_lang = '.(int)$id_lang);
if ($id_shop)
$sql->innerJoin('cms_shop', 'cs', 'c.id_cms = cs.id_cms AND cs.id_shop = '.(int)$id_shop);
if ($active) if ($active)
$sql->where('c.active = 1'); $sql->where('c.active = 1');
+28 -47
View File
@@ -277,20 +277,17 @@ class CarrierCore extends ObjectModel
public function getMaxDeliveryPriceByWeight($id_zone) public function getMaxDeliveryPriceByWeight($id_zone)
{ {
$cache_id = 'Carrier::getMaxDeliveryPriceByWeight_'.(int)$this->id.'-'.(int)$id_zone; $sql = 'SELECT d.`price`
if (!Cache::isStored($cache_id)) FROM `'._DB_PREFIX_.'delivery` d
{ INNER JOIN `'._DB_PREFIX_.'range_weight` w ON d.`id_range_weight` = w.`id_range_weight`
$sql = 'SELECT d.`price` WHERE d.`id_zone` = '.(int)$id_zone.'
FROM `'._DB_PREFIX_.'delivery` d AND d.`id_carrier` = '.(int)$this->id.'
INNER JOIN `'._DB_PREFIX_.'range_weight` w ON d.`id_range_weight` = w.`id_range_weight` '.Carrier::sqlDeliveryRangeShop('range_weight').'
WHERE d.`id_zone` = '.(int)$id_zone.' ORDER BY w.`delimiter2` DESC LIMIT 1';
AND d.`id_carrier` = '.(int)$this->id.' $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
'.Carrier::sqlDeliveryRangeShop('range_weight').' if (!isset($result[0]['price']))
ORDER BY w.`delimiter2` DESC'; return false;
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql); return $result[0]['price'];
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
/** /**
@@ -360,20 +357,17 @@ class CarrierCore extends ObjectModel
public function getMaxDeliveryPriceByPrice($id_zone) public function getMaxDeliveryPriceByPrice($id_zone)
{ {
$cache_id = 'Carrier::getMaxDeliveryPriceByPrice_'.(int)$this->id.'-'.(int)$id_zone; $sql = 'SELECT d.`price`
if (!Cache::isStored($cache_id)) FROM `'._DB_PREFIX_.'delivery` d
{ INNER JOIN `'._DB_PREFIX_.'range_price` r ON d.`id_range_price` = r.`id_range_price`
$sql = 'SELECT d.`price` WHERE d.`id_zone` = '.(int)$id_zone.'
FROM `'._DB_PREFIX_.'delivery` d AND d.`id_carrier` = '.(int)$this->id.'
INNER JOIN `'._DB_PREFIX_.'range_price` r ON d.`id_range_price` = r.`id_range_price` '.Carrier::sqlDeliveryRangeShop('range_price').'
WHERE d.`id_zone` = '.(int)$id_zone.' ORDER BY r.`delimiter2` DESC LIMIT 1';
AND d.`id_carrier` = '.(int)$this->id.' $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
'.Carrier::sqlDeliveryRangeShop('range_price').' if (!isset($result[0]['price']))
ORDER BY r.`delimiter2` DESC'; return false;
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql); return $result[0]['price'];
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
/** /**
@@ -455,13 +449,7 @@ class CarrierCore extends ObjectModel
GROUP BY c.`id_carrier` GROUP BY c.`id_carrier`
ORDER BY c.`position` ASC'; ORDER BY c.`position` ASC';
$cache_id = 'Carrier::getCarriers_'.md5($sql); $carriers = Db::getInstance()->executeS($sql);
if (!Cache::isStored($cache_id))
{
$carriers = Db::getInstance()->executeS($sql);
Cache::store($cache_id, $carriers);
}
$carriers = Cache::retrieve($cache_id);
if (is_array($carriers) && count($carriers)) if (is_array($carriers) && count($carriers))
{ {
@@ -787,11 +775,11 @@ class CarrierCore extends ObjectModel
if ($delete) if ($delete)
Db::getInstance()->execute(' Db::getInstance()->execute('
DELETE FROM `'._DB_PREFIX_.'delivery` DELETE FROM `'._DB_PREFIX_.'delivery`
WHERE '.(is_null($values['id_shop']) ? 'ISNULL(`id_shop`) ' : 'id_shop = '.(int)$values['id_shop']).' WHERE id_shop = '.(int)$values['id_shop'].'
AND '.(is_null($values['id_shop_group']) ? 'ISNULL(`id_shop`) ' : 'id_shop_group='.(int)$values['id_shop_group']).' AND id_shop_group='.(int)$values['id_shop_group'].'
AND id_carrier='.(int)$values['id_carrier']. AND id_carrier='.(int)$values['id_carrier'].
($values['id_range_price'] !== null ? ' AND id_range_price='.(int)$values['id_range_price'] : ' AND (ISNULL(`id_range_price`) OR `id_range_price` = 0)'). ($values['id_range_price'] !== null ? ' AND id_range_price='.(int)$values['id_range_price'] : '').
($values['id_range_weight'] !== null ? ' AND id_range_weight='.(int)$values['id_range_weight'] : ' AND (ISNULL(`id_range_weight`) OR `id_range_weight` = 0)').' ($values['id_range_weight'] !== null ? ' AND id_range_weight='.(int)$values['id_range_weight'] : '').'
AND id_zone='.(int)$values['id_zone'] AND id_zone='.(int)$values['id_zone']
); );
@@ -1211,14 +1199,7 @@ class CarrierCore extends ObjectModel
$query->where('pc.id_product = '.(int)$product->id); $query->where('pc.id_product = '.(int)$product->id);
$query->where('pc.id_shop = '.(int)$id_shop); $query->where('pc.id_shop = '.(int)$id_shop);
$cache_id = 'Carrier::getAvailableCarrierList_'.(int)$product->id.'-'.(int)$id_shop; $carriers_for_product = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
if (!Cache::isStored($cache_id))
{
$carriers_for_product = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
Cache::store($cache_id, $carriers_for_product);
}
$carriers_for_product = Cache::retrieve($cache_id);
$carrier_list = array(); $carrier_list = array();
if (!empty($carriers_for_product)) if (!empty($carriers_for_product))
{ {
+40 -77
View File
@@ -325,7 +325,7 @@ class CartCore extends ObjectModel
if (!CartRule::isFeatureActive() || !$this->id) if (!CartRule::isFeatureActive() || !$this->id)
return array(); return array();
$cache_key = 'Cart::getCartRules_'.$this->id.'-'.$filter; $cache_key = 'Cart::getCartRules'.$this->id.'-'.$filter;
if (!Cache::isStored($cache_key)) if (!Cache::isStored($cache_key))
{ {
$result = Db::getInstance()->executeS(' $result = Db::getInstance()->executeS('
@@ -340,7 +340,6 @@ class CartCore extends ObjectModel
'.($filter == CartRule::FILTER_ACTION_SHIPPING ? 'AND free_shipping = 1' : '').' '.($filter == CartRule::FILTER_ACTION_SHIPPING ? 'AND free_shipping = 1' : '').'
'.($filter == CartRule::FILTER_ACTION_GIFT ? 'AND gift_product != 0' : '').' '.($filter == CartRule::FILTER_ACTION_GIFT ? 'AND gift_product != 0' : '').'
'.($filter == CartRule::FILTER_ACTION_REDUCTION ? 'AND (reduction_percent != 0 OR reduction_amount != 0)' : '') '.($filter == CartRule::FILTER_ACTION_REDUCTION ? 'AND (reduction_percent != 0 OR reduction_amount != 0)' : '')
.' ORDER by cr.priority ASC'
); );
Cache::store($cache_key, $result); Cache::store($cache_key, $result);
} }
@@ -368,16 +367,12 @@ class CartCore extends ObjectModel
{ {
if (!CartRule::isFeatureActive()) if (!CartRule::isFeatureActive())
return 0; return 0;
$cache_id = 'Cart::getDiscountsCustomer_'.(int)$this->id.'-'.(int)$id_cart_rule;
if (!Cache::isStored($cache_id)) return Db::getInstance()->getValue('
{ SELECT COUNT(*)
$result = (int)Db::getInstance()->getValue(' FROM `'._DB_PREFIX_.'cart_cart_rule`
SELECT COUNT(*) WHERE `id_cart_rule` = '.(int)$id_cart_rule.' AND `id_cart` = '.(int)$this->id
FROM `'._DB_PREFIX_.'cart_cart_rule` );
WHERE `id_cart_rule` = '.(int)$id_cart_rule.' AND `id_cart` = '.(int)$this->id);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
public function getLastProduct() public function getLastProduct()
@@ -434,7 +429,7 @@ class CartCore extends ObjectModel
product_shop.`available_for_order`, product_shop.`price`, product_shop.`active`, product_shop.`unity`, product_shop.`unit_price_ratio`, product_shop.`available_for_order`, product_shop.`price`, product_shop.`active`, product_shop.`unity`, product_shop.`unit_price_ratio`,
stock.`quantity` AS quantity_available, p.`width`, p.`height`, p.`depth`, stock.`out_of_stock`, p.`weight`, stock.`quantity` AS quantity_available, p.`width`, p.`height`, p.`depth`, stock.`out_of_stock`, p.`weight`,
p.`date_add`, p.`date_upd`, IFNULL(stock.quantity, 0) as quantity, pl.`link_rewrite`, cl.`link_rewrite` AS category, p.`date_add`, p.`date_upd`, IFNULL(stock.quantity, 0) as quantity, pl.`link_rewrite`, cl.`link_rewrite` AS category,
CONCAT(LPAD(cp.`id_product`, 10, 0), LPAD(IFNULL(cp.`id_product_attribute`, 0), 10, 0), IFNULL(cp.`id_address_delivery`, 0)) AS unique_id, cp.id_address_delivery, CONCAT(cp.`id_product`, IFNULL(cp.`id_product_attribute`, 0), IFNULL(cp.`id_address_delivery`, 0)) AS unique_id, cp.id_address_delivery,
product_shop.`wholesale_price`, product_shop.advanced_stock_management, ps.product_supplier_reference supplier_reference'); product_shop.`wholesale_price`, product_shop.advanced_stock_management, ps.product_supplier_reference supplier_reference');
// Build FROM // Build FROM
@@ -636,19 +631,14 @@ class CartCore extends ObjectModel
if (!isset($row['pai_id_image']) || $row['pai_id_image'] == 0) if (!isset($row['pai_id_image']) || $row['pai_id_image'] == 0)
{ {
$cache_id = 'Cart::getProducts_'.'-pai_id_image-'.(int)$row['id_product'].'-'.(int)$this->id_lang.'-'.(int)$row['id_shop']; $row2 = Db::getInstance()->getRow('
if (!Cache::isStored($cache_id)) SELECT image_shop.`id_image` id_image, il.`legend`
{ FROM `'._DB_PREFIX_.'image` i
$row2 = Db::getInstance()->getRow(' JOIN `'._DB_PREFIX_.'image_shop` image_shop ON (i.id_image = image_shop.id_image AND image_shop.cover=1 AND image_shop.id_shop='.(int)$row['id_shop'].')
SELECT image_shop.`id_image` id_image, il.`legend` LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (image_shop.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$this->id_lang.')
FROM `'._DB_PREFIX_.'image` i WHERE i.`id_product` = '.(int)$row['id_product'].' AND image_shop.`cover` = 1'
JOIN `'._DB_PREFIX_.'image_shop` image_shop ON (i.id_image = image_shop.id_image AND image_shop.cover=1 AND image_shop.id_shop='.(int)$row['id_shop'].') );
LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (image_shop.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$this->id_lang.')
WHERE i.`id_product` = '.(int)$row['id_product'].' AND image_shop.`cover` = 1'
);
Cache::store($cache_id, $row2);
}
$row2 = Cache::retrieve($cache_id);
if (!$row2) if (!$row2)
$row2 = array('id_image' => false, 'legend' => false); $row2 = array('id_image' => false, 'legend' => false);
else else
@@ -736,7 +726,7 @@ class CartCore extends ObjectModel
* *
* @result integer Products quantity * @result integer Products quantity
*/ */
public function nbProducts() public function nbProducts()
{ {
if (!$this->id) if (!$this->id)
return 0; return 0;
@@ -772,11 +762,10 @@ class CartCore extends ObjectModel
{ {
// You can't add a cart rule that does not exist // You can't add a cart rule that does not exist
$cartRule = new CartRule($id_cart_rule, Context::getContext()->language->id); $cartRule = new CartRule($id_cart_rule, Context::getContext()->language->id);
if (!Validate::isLoadedObject($cartRule)) if (!Validate::isLoadedObject($cartRule))
return false; return false;
if (Db::getInstance()->getValue('SELECT id_cart_rule FROM '._DB_PREFIX_.'cart_cart_rule WHERE id_cart_rule = '.(int)$id_cart_rule.' AND id_cart = '.(int)$this->id)) if (Db::getInstance()->getValue('SELECT id_cart_rule FROM '._DB_PREFIX_.'cart_cart_rule WHERE id_cart = '.(int)$this->id))
return false; return false;
// Add the cart rule to the cart // Add the cart rule to the cart
@@ -1087,9 +1076,9 @@ class CartCore extends ObjectModel
); );
$id_customization = Db::getInstance()->Insert_ID(); $id_customization = Db::getInstance()->Insert_ID();
} }
$query = 'INSERT INTO `'._DB_PREFIX_.'customized_data` (`id_customization`, `type`, `index`, `value`) $query = 'INSERT INTO `'._DB_PREFIX_.'customized_data` (`id_customization`, `type`, `index`, `value`)
VALUES ('.(int)$id_customization.', '.(int)$type.', '.(int)$index.', \''.pSQL($field).'\')'; VALUES ('.(int)$id_customization.', '.(int)$type.', '.(int)$index.', \''.pSql($field).'\')';
if (!Db::getInstance()->execute($query)) if (!Db::getInstance()->execute($query))
return false; return false;
@@ -1103,13 +1092,7 @@ class CartCore extends ObjectModel
*/ */
public function orderExists() public function orderExists()
{ {
$cache_id = 'Cart::orderExists_'.(int)$this->id; return (bool)Db::getInstance()->getValue('SELECT count(*) FROM `'._DB_PREFIX_.'orders` WHERE `id_cart` = '.(int)$this->id);
if (!Cache::isStored($cache_id))
{
$result = (bool)Db::getInstance()->getValue('SELECT count(*) FROM `'._DB_PREFIX_.'orders` WHERE `id_cart` = '.(int)$this->id);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
/** /**
@@ -1276,7 +1259,7 @@ class CartCore extends ObjectModel
return true; return true;
} }
public static function getTotalCart($id_cart, $use_tax_display = false, $type = Cart::BOTH) public static function getTotalCart($id_cart, $use_tax_display = false, $type = CART::BOTH)
{ {
$cart = new Cart($id_cart); $cart = new Cart($id_cart);
if (!Validate::isLoadedObject($cart)) if (!Validate::isLoadedObject($cart))
@@ -1692,7 +1675,6 @@ class CartCore extends ObjectModel
$warehouse_count_by_address[$product['id_address_delivery']][$warehouse['id_warehouse']]++; $warehouse_count_by_address[$product['id_address_delivery']][$warehouse['id_warehouse']]++;
} }
} }
unset($product);
arsort($warehouse_count_by_address); arsort($warehouse_count_by_address);
@@ -1710,12 +1692,9 @@ class CartCore extends ObjectModel
$id_warehouse = 0; $id_warehouse = 0;
foreach ($warehouse_count_by_address[$product['id_address_delivery']] as $id_war => $val) foreach ($warehouse_count_by_address[$product['id_address_delivery']] as $id_war => $val)
{ {
if (in_array((int)$id_war, $product['warehouse_list'])) $product['carrier_list'] = array_merge($product['carrier_list'], Carrier::getAvailableCarrierList(new Product($product['id_product']), $id_war, $product['id_address_delivery'], null, $this));
{ if (in_array((int)$id_war, $product['warehouse_list']) && $id_warehouse == 0)
$product['carrier_list'] = array_merge($product['carrier_list'], Carrier::getAvailableCarrierList(new Product($product['id_product']), $id_war, $product['id_address_delivery'], null, $this)); $id_warehouse = (int)$id_war;
if (!$id_warehouse)
$id_warehouse = (int)$id_war;
}
} }
if (!isset($grouped_by_warehouse[$product['id_address_delivery']]['in_stock'][$id_warehouse])) if (!isset($grouped_by_warehouse[$product['id_address_delivery']]['in_stock'][$id_warehouse]))
@@ -1734,7 +1713,6 @@ class CartCore extends ObjectModel
$grouped_by_warehouse[$product['id_address_delivery']][$key][$id_warehouse][] = $product; $grouped_by_warehouse[$product['id_address_delivery']][$key][$id_warehouse][] = $product;
} }
unset($product);
// Step 3 : grouped product from grouped_by_warehouse by available carriers // Step 3 : grouped product from grouped_by_warehouse by available carriers
$grouped_by_carriers = array(); $grouped_by_carriers = array();
@@ -1753,6 +1731,7 @@ class CartCore extends ObjectModel
{ {
if (!isset($grouped_by_carriers[$id_address_delivery][$key][$id_warehouse])) if (!isset($grouped_by_carriers[$id_address_delivery][$key][$id_warehouse]))
$grouped_by_carriers[$id_address_delivery][$key][$id_warehouse] = array(); $grouped_by_carriers[$id_address_delivery][$key][$id_warehouse] = array();
foreach ($product_list as $product) foreach ($product_list as $product)
{ {
$package_carriers_key = implode(',', $product['carrier_list']); $package_carriers_key = implode(',', $product['carrier_list']);
@@ -1817,6 +1796,7 @@ class CartCore extends ObjectModel
); );
$package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['carrier_list'] = $package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['carrier_list'] =
array_intersect($package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['carrier_list'], $data['carrier_list']); array_intersect($package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['carrier_list'], $data['carrier_list']);
$package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['product_list'] = $package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['product_list'] =
array_merge($package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['product_list'], $data['product_list']); array_merge($package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['product_list'], $data['product_list']);
@@ -2292,23 +2272,18 @@ class CartCore extends ObjectModel
public function getAddressCollection() public function getAddressCollection()
{ {
$collection = array(); $collection = array();
$cache_id = 'Cart::getAddressCollection'.(int)$this->id; $result = Db::getInstance()->executeS(
if (!Cache::isStored($cache_id)) 'SELECT DISTINCT `id_address_delivery`
{ FROM `'._DB_PREFIX_.'cart_product`
$result = Db::getInstance()->executeS( WHERE id_cart = '.(int)$this->id
'SELECT DISTINCT `id_address_delivery` );
FROM `'._DB_PREFIX_.'cart_product`
WHERE id_cart = '.(int)$this->id
);
Cache::store($cache_id, $result);
}
$result = Cache::retrieve($cache_id);
$result[] = array('id_address_delivery' => (int)$this->id_address_delivery); $result[] = array('id_address_delivery' => (int)$this->id_address_delivery);
foreach ($result as $row) foreach ($result as $row)
if ((int)$row['id_address_delivery'] != 0) if ((int)$row['id_address_delivery'] != 0)
$collection[(int)$row['id_address_delivery']] = new Address((int)$row['id_address_delivery']); $collection[(int)$row['id_address_delivery']] = new Address((int)$row['id_address_delivery']);
return $collection; return $collection;
} }
@@ -3058,6 +3033,7 @@ class CartCore extends ObjectModel
*/ */
public function addTextFieldToProduct($id_product, $index, $type, $text_value) public function addTextFieldToProduct($id_product, $index, $type, $text_value)
{ {
$text_value = str_replace(array("\n", "\r"), '', nl2br($text_value));
if (!_PS_MAGIC_QUOTES_GPC_){ if (!_PS_MAGIC_QUOTES_GPC_){
$text_value = str_replace('\\', '\\\\', $text_value); $text_value = str_replace('\\', '\\\\', $text_value);
$text_value = str_replace('\'', '\\\'', $text_value); $text_value = str_replace('\'', '\\\'', $text_value);
@@ -3238,7 +3214,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, id_address_delivery SELECT id_product, id_product_attribute, quantity
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
); );
@@ -3439,7 +3415,6 @@ class CartCore extends ObjectModel
*/ */
public function setNoMultishipping() public function setNoMultishipping()
{ {
$emptyCache = $result = false;
if (Configuration::get('PS_ALLOW_MULTISHIPPING')) if (Configuration::get('PS_ALLOW_MULTISHIPPING'))
{ {
// Upgrading quantities // Upgrading quantities
@@ -3458,9 +3433,7 @@ class CartCore extends ObjectModel
AND `id_shop` = '.(int)$this->id_shop.' AND `id_shop` = '.(int)$this->id_shop.'
AND id_product = '.$product['id_product'].' AND id_product = '.$product['id_product'].'
AND id_product_attribute = '.$product['id_product_attribute']; AND id_product_attribute = '.$product['id_product_attribute'];
$result = Db::getInstance()->execute($sql); Db::getInstance()->execute($sql);
if ($result)
$emptyCache = true;
} }
// Merging multiple lines // Merging multiple lines
@@ -3478,22 +3451,15 @@ class CartCore extends ObjectModel
} }
// Update delivery address for each product line // Update delivery address for each product line
$sql = 'UPDATE `'._DB_PREFIX_.'cart_product` Db::getInstance()->execute('
UPDATE `'._DB_PREFIX_.'cart_product`
SET `id_address_delivery` = ( SET `id_address_delivery` = (
SELECT `id_address_delivery` FROM `'._DB_PREFIX_.'cart` SELECT `id_address_delivery` FROM `'._DB_PREFIX_.'cart`
WHERE `id_cart` = '.(int)$this->id.' AND `id_shop` = '.(int)$this->id_shop.' WHERE `id_cart` = '.(int)$this->id.' AND `id_shop` = '.(int)$this->id_shop.'
) )
WHERE `id_cart` = '.(int)$this->id.' WHERE `id_cart` = '.(int)$this->id.'
'.(Configuration::get('PS_ALLOW_MULTISHIPPING') ? ' AND `id_shop` = '.(int)$this->id_shop : ''); '.(Configuration::get('PS_ALLOW_MULTISHIPPING') ? ' AND `id_shop` = '.(int)$this->id_shop : ''));
$cache_id = 'Cart::setNoMultishipping'.(int)$this->id.'-'.(int)$this->id_shop;
if (!Cache::isStored($cache_id))
{
if ($result = (bool)Db::getInstance()->execute($sql))
$emptyCache = true;
Cache::store($cache_id, $result);
}
if (Customization::isFeatureActive()) if (Customization::isFeatureActive())
Db::getInstance()->execute(' Db::getInstance()->execute('
UPDATE `'._DB_PREFIX_.'customization` UPDATE `'._DB_PREFIX_.'customization`
@@ -3502,9 +3468,6 @@ class CartCore extends ObjectModel
WHERE `id_cart` = '.(int)$this->id.' WHERE `id_cart` = '.(int)$this->id.'
) )
WHERE `id_cart` = '.(int)$this->id); WHERE `id_cart` = '.(int)$this->id);
if ($emptyCache)
$this->_products = null;
} }
/** /**
+3 -19
View File
@@ -254,17 +254,6 @@ class CartRuleCore extends ObjectModel
} }
else else
$cart_rule['quantity_for_user'] = 0; $cart_rule['quantity_for_user'] = 0;
unset($cart_rule);
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)
@@ -475,7 +464,7 @@ class CartRuleCore extends ObjectModel
// Check if the products chosen by the customer are usable with the cart rule // Check if the products chosen by the customer are usable with the cart rule
if ($this->product_restriction) if ($this->product_restriction)
{ {
$r = $this->checkProductRestrictions($context, false, $display_error, $alreadyInCart); $r = $this->checkProductRestrictions($context, false, $display_error);
if ($r !== false && $display_error) if ($r !== false && $display_error)
return $r; return $r;
elseif (!$r && !$display_error) elseif (!$r && !$display_error)
@@ -534,7 +523,6 @@ class CartRuleCore extends ObjectModel
return (!$display_error) ? false : Tools::displayError('This voucher is already in your cart'); return (!$display_error) ? false : Tools::displayError('This voucher is already in your cart');
if ($otherCartRule['gift_product']) if ($otherCartRule['gift_product'])
--$nb_products; --$nb_products;
if ($this->cart_rule_restriction && $otherCartRule['cart_rule_restriction'] && $otherCartRule['id_cart_rule'] != $this->id) if ($this->cart_rule_restriction && $otherCartRule['cart_rule_restriction'] && $otherCartRule['id_cart_rule'] != $this->id)
{ {
$combinable = Db::getInstance()->getValue(' $combinable = Db::getInstance()->getValue('
@@ -562,7 +550,7 @@ class CartRuleCore extends ObjectModel
return true; return true;
} }
protected function checkProductRestrictions(Context $context, $return_products = false, $display_error = true, $alreadyInCart = false) protected function checkProductRestrictions(Context $context, $return_products = false, $display_error = true)
{ {
$selectedProducts = array(); $selectedProducts = array();
@@ -597,8 +585,6 @@ class CartRuleCore extends ObjectModel
if (in_array($cartAttribute['id_attribute'], $productRule['values'])) if (in_array($cartAttribute['id_attribute'], $productRule['values']))
{ {
$countMatchingProducts += $cartAttribute['quantity']; $countMatchingProducts += $cartAttribute['quantity'];
if ($alreadyInCart && $this->gift_product == $cartProduct['id_product']&& $this->gift_product_attribute == $cartProduct['id_product_attribute'])
--$countMatchingProducts;
$matchingProductsList[] = $cartAttribute['id_product'].'-'.$cartAttribute['id_product_attribute']; $matchingProductsList[] = $cartAttribute['id_product'].'-'.$cartAttribute['id_product_attribute'];
} }
if ($countMatchingProducts < $productRuleGroup['quantity']) if ($countMatchingProducts < $productRuleGroup['quantity'])
@@ -617,8 +603,6 @@ class CartRuleCore extends ObjectModel
if (in_array($cartProduct['id_product'], $productRule['values'])) if (in_array($cartProduct['id_product'], $productRule['values']))
{ {
$countMatchingProducts += $cartProduct['quantity']; $countMatchingProducts += $cartProduct['quantity'];
if ($alreadyInCart && $this->gift_product == $cartProduct['id_product'])
--$countMatchingProducts;
$matchingProductsList[] = $cartProduct['id_product'].'-0'; $matchingProductsList[] = $cartProduct['id_product'].'-0';
} }
if ($countMatchingProducts < $productRuleGroup['quantity']) if ($countMatchingProducts < $productRuleGroup['quantity'])
@@ -1201,7 +1185,7 @@ class CartRuleCore extends ObjectModel
SELECT cr.*, crl.* SELECT cr.*, crl.*
FROM '._DB_PREFIX_.'cart_rule cr FROM '._DB_PREFIX_.'cart_rule cr
LEFT JOIN '._DB_PREFIX_.'cart_rule_lang crl ON (cr.id_cart_rule = crl.id_cart_rule AND crl.id_lang = '.(int)$id_lang.') LEFT JOIN '._DB_PREFIX_.'cart_rule_lang crl ON (cr.id_cart_rule = crl.id_cart_rule AND crl.id_lang = '.(int)$id_lang.')
WHERE code LIKE \'%'.pSQL($name).'%\' OR name LIKE \'%'.pSQL($name).'%\' WHERE code LIKE \'%'.pSQL($name).'%\'
'); ');
} }
} }
+50 -76
View File
@@ -107,8 +107,8 @@ class CategoryCore extends ObjectModel
'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'), 'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
// Lang fields // Lang fields
'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 128), 'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 64),
'link_rewrite' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isLinkRewrite', 'required' => true, 'size' => 128), 'link_rewrite' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isLinkRewrite', 'required' => true, 'size' => 64),
'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'), 'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),
'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128), 'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128),
'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255), 'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),
@@ -666,9 +666,9 @@ class CategoryCore extends ObjectModel
* @param boolean $active return only active categories * @param boolean $active return only active categories
* @return array categories * @return array categories
*/ */
public static function getHomeCategories($id_lang, $active = true, $id_shop = false) public static function getHomeCategories($id_lang, $active = true)
{ {
return self::getChildren(Configuration::get('PS_HOME_CATEGORY'), $id_lang, $active, $id_shop); return self::getChildren(Configuration::get('PS_HOME_CATEGORY'), $id_lang, $active);
} }
public static function getRootCategory($id_lang = null, Shop $shop = null) public static function getRootCategory($id_lang = null, Shop $shop = null)
@@ -704,22 +704,16 @@ class CategoryCore extends ObjectModel
if (!Validate::isBool($active)) if (!Validate::isBool($active))
die(Tools::displayError()); die(Tools::displayError());
$cache_id = 'Category::getChildren_'.(int)$id_parent.'-'.(int)$id_lang.'-'.(bool)$active.'-'.(int)$id_shop; $query = 'SELECT c.`id_category`, cl.`name`, cl.`link_rewrite`, category_shop.`id_shop`
if (!Cache::isStored($cache_id)) FROM `'._DB_PREFIX_.'category` c
{ LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category`'.Shop::addSqlRestrictionOnLang('cl').')
$query = 'SELECT c.`id_category`, cl.`name`, cl.`link_rewrite`, category_shop.`id_shop` '.Shop::addSqlAssociation('category', 'c').'
FROM `'._DB_PREFIX_.'category` c WHERE `id_lang` = '.(int)$id_lang.'
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category`'.Shop::addSqlRestrictionOnLang('cl').') AND c.`id_parent` = '.(int)$id_parent.'
'.Shop::addSqlAssociation('category', 'c').' '.($active ? 'AND `active` = 1' : '').'
WHERE `id_lang` = '.(int)$id_lang.' GROUP BY c.`id_category`
AND c.`id_parent` = '.(int)$id_parent.' ORDER BY category_shop.`position` ASC';
'.($active ? 'AND `active` = 1' : '').' return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
GROUP BY c.`id_category`
ORDER BY category_shop.`position` ASC';
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
/** /**
@@ -1014,20 +1008,14 @@ class CategoryCore extends ObjectModel
public function getGroups() public function getGroups()
{ {
$groups = array(); $groups = array();
$cache_id = 'Category::getGroups_'.(int)$this->id; $result = Db::getInstance()->executeS('
if (!Cache::isStored($cache_id)) SELECT cg.`id_group`
{ FROM '._DB_PREFIX_.'category_group cg
$result = Db::getInstance()->executeS(' WHERE cg.`id_category` = '.(int)$this->id
SELECT cg.`id_group` );
FROM '._DB_PREFIX_.'category_group cg foreach ($result as $group)
WHERE cg.`id_category` = '.(int)$this->id $groups[] = $group['id_group'];
); return $groups;
$groups = array();
foreach ($result as $group)
$groups[] = $group['id_group'];
Cache::store($cache_id, $groups);
}
return Cache::retrieve($cache_id);
} }
public function addGroupsIfNoExist($id_group) public function addGroupsIfNoExist($id_group)
@@ -1048,23 +1036,24 @@ class CategoryCore extends ObjectModel
*/ */
public function checkAccess($id_customer) public function checkAccess($id_customer)
{ {
$cache_id = 'Category::checkAccess_'.(int)$this->id.'-'.$id_customer.(!$id_customer ? '-'.(int)Group::getCurrent()->id : ''); if (!$id_customer)
if (!Cache::isStored($cache_id))
{ {
if (!$id_customer) $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
$result = (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT ctg.`id_group` SELECT ctg.`id_group`
FROM '._DB_PREFIX_.'category_group ctg FROM '._DB_PREFIX_.'category_group ctg
WHERE ctg.`id_category` = '.(int)$this->id.' AND ctg.`id_group` = '.(int)Group::getCurrent()->id); WHERE ctg.`id_category` = '.(int)$this->id.' AND ctg.`id_group` = '.(int)Group::getCurrent()->id.'
else ');
$result = (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' } else {
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
SELECT ctg.`id_group` SELECT ctg.`id_group`
FROM '._DB_PREFIX_.'category_group ctg FROM '._DB_PREFIX_.'category_group ctg
INNER JOIN '._DB_PREFIX_.'customer_group cg on (cg.`id_group` = ctg.`id_group` AND cg.`id_customer` = '.(int)$id_customer.') INNER JOIN '._DB_PREFIX_.'customer_group cg on (cg.`id_group` = ctg.`id_group` AND cg.`id_customer` = '.(int)$id_customer.')
WHERE ctg.`id_category` = '.(int)$this->id); WHERE ctg.`id_category` = '.(int)$this->id
Cache::store($cache_id, $result); );
} }
return Cache::retrieve($cache_id); if ($result && isset($result['id_group']) && $result['id_group'])
return true;
return false;
} }
/** /**
@@ -1210,16 +1199,12 @@ class CategoryCore extends ObjectModel
*/ */
public static function getInterval($id) public static function getInterval($id)
{ {
$cache_id = 'Category::getInterval_'.(int)$id; $sql = 'SELECT nleft, nright, level_depth
if (!Cache::isStored($cache_id)) FROM '._DB_PREFIX_.'category
{ WHERE id_category = '.(int)$id;
$sql = 'SELECT nleft, nright, level_depth if (!$result = Db::getInstance()->getRow($sql))
FROM '._DB_PREFIX_.'category return false;
WHERE id_category = '.(int)$id; return $result;
$result = Db::getInstance()->getRow($sql);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
/** /**
@@ -1401,17 +1386,11 @@ class CategoryCore extends ObjectModel
public static function getCategoriesWithoutParent() public static function getCategoriesWithoutParent()
{ {
$cache_id = 'Category::getCategoriesWithoutParent_'.(int)Context::getContext()->language->id; return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
if (!Cache::isStored($cache_id)) SELECT DISTINCT c.*
{ FROM `'._DB_PREFIX_.'category` c
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND cl.`id_lang` = '.(int)Context::getContext()->language->id.')
SELECT DISTINCT c.* WHERE `level_depth` = 1');
FROM `'._DB_PREFIX_.'category` c
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND cl.`id_lang` = '.(int)Context::getContext()->language->id.')
WHERE `level_depth` = 1');
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
public function isRootCategoryForAShop() public function isRootCategoryForAShop()
@@ -1430,17 +1409,12 @@ class CategoryCore extends ObjectModel
public static function getTopCategory($id_lang = null) public static function getTopCategory($id_lang = null)
{ {
if (is_null($id_lang)) if (is_null($id_lang))
$id_lang = (int)Context::getContext()->language->id; $id_lang = Context::getContext()->language->id;
$cache_id = 'Category::getTopCategory_'.(int)$id_lang; $id_category = Db::getInstance()->getValue('
if (!Cache::isStored($cache_id)) SELECT `id_category`
{ FROM `'._DB_PREFIX_.'category`
$id_category = (int)Db::getInstance()->getValue(' WHERE `id_parent` = 0');
SELECT `id_category` return new Category($id_category, $id_lang);
FROM `'._DB_PREFIX_.'category`
WHERE `id_parent` = 0');
Cache::store($cache_id, new Category($id_category, $id_lang));
}
return Cache::retrieve($cache_id);
} }
public function addPosition($position, $id_shop = null) public function addPosition($position, $id_shop = null)
+1 -19
View File
@@ -58,8 +58,7 @@ class ConfigurationTestCore
'theme_cache_dir' => 'themes/'._THEME_NAME_.'/cache/', 'theme_cache_dir' => 'themes/'._THEME_NAME_.'/cache/',
'translations_dir' => 'translations', 'translations_dir' => 'translations',
'customizable_products_dir' => 'upload', 'customizable_products_dir' => 'upload',
'virtual_products_dir' => 'download', 'virtual_products_dir' => 'download'
'files' => false
); );
} }
@@ -319,21 +318,4 @@ class ConfigurationTestCore
{ {
return extension_loaded('Dom'); return extension_loaded('Dom');
} }
public static function test_files()
{
$files = array(
'/cache/smarty/compile/index.php',
'/classes/log/index.php',
'/classes/cache/index.php',
'/config/index.php',
'/tools/tar/Archive_Tar.php',
'/tools/pear/PEAR.php',
'/index.php'
);
foreach ($files as $file)
if (!file_exists(rtrim(_PS_ROOT_DIR_, DIRECTORY_SEPARATOR).str_replace('/', DIRECTORY_SEPARATOR, $file)))
return false;
return true;
}
} }
+3 -3
View File
@@ -97,7 +97,7 @@ class ConnectionCore extends ObjectModel
'id_connections' => (int)$cookie->id_connections, 'id_connections' => (int)$cookie->id_connections,
'id_page' => (int)$id_page, 'id_page' => (int)$id_page,
'time_start' => $time_start 'time_start' => $time_start
), false, true, Db::INSERT_IGNORE); ));
// This array is serialized and used by the ajax request to identify the page // This array is serialized and used by the ajax request to identify the page
return array( return array(
@@ -114,7 +114,7 @@ class ConnectionCore extends ObjectModel
// This is a bot and we have to retrieve its connection ID // This is a bot and we have to retrieve its connection ID
$sql = 'SELECT `id_connections` FROM `'._DB_PREFIX_.'connections` $sql = 'SELECT `id_connections` FROM `'._DB_PREFIX_.'connections`
WHERE ip_address = '.ip2long(Tools::getRemoteAddr()).' WHERE ip_address = '.ip2long(Tools::getRemoteAddr()).'
AND `date_add` > \''.pSQL(date('Y-m-d H:i:00', time() - 1800)).'\' AND DATE_ADD(`date_add`, INTERVAL 30 MINUTE) > \''.pSQL(date('Y-m-d H:i:00')).'\'
'.Shop::addSqlRestriction(Shop::SHARE_CUSTOMER).' '.Shop::addSqlRestriction(Shop::SHARE_CUSTOMER).'
ORDER BY `date_add` DESC'; ORDER BY `date_add` DESC';
if ($id_connections = Db::getInstance()->getValue($sql)) if ($id_connections = Db::getInstance()->getValue($sql))
@@ -128,7 +128,7 @@ class ConnectionCore extends ObjectModel
$sql = 'SELECT `id_guest` $sql = 'SELECT `id_guest`
FROM `'._DB_PREFIX_.'connections` FROM `'._DB_PREFIX_.'connections`
WHERE `id_guest` = '.(int)$cookie->id_guest.' WHERE `id_guest` = '.(int)$cookie->id_guest.'
AND `date_add` > \''.pSQL(date('Y-m-d H:i:00', time() - 1800)).'\' AND DATE_ADD(`date_add`, INTERVAL 30 MINUTE) > \''.pSQL(date('Y-m-d H:i:00')).'\'
'.Shop::addSqlRestriction(Shop::SHARE_CUSTOMER).' '.Shop::addSqlRestriction(Shop::SHARE_CUSTOMER).'
ORDER BY `date_add` DESC'; ORDER BY `date_add` DESC';
$result = Db::getInstance()->getRow($sql); $result = Db::getInstance()->getRow($sql);
+11 -46
View File
@@ -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' => 'isUnsignedFloat', 'required' => true, 'shop' => true), 'conversion_rate' =>array('type' => self::TYPE_FLOAT, 'validate' => 'isFloat', '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'),
), ),
@@ -81,7 +81,6 @@ class CurrencyCore extends ObjectModel
/** @var array Currency cache */ /** @var array Currency cache */
static protected $currencies = array(); static protected $currencies = array();
protected static $countActiveCurrencies = array();
protected $webserviceParameters = array( protected $webserviceParameters = array(
'objectsNodeName' => 'currencies', 'objectsNodeName' => 'currencies',
@@ -107,23 +106,14 @@ class CurrencyCore extends ObjectModel
$this->suffix = $this->format % 2 == 0 ? ' '.$this->sign : ''; $this->suffix = $this->format % 2 == 0 ? ' '.$this->sign : '';
} }
/** /**
* Overriding check if currency rate is not empty and if currency with the same iso code already exists. * Overriding check if currency with the same iso code already exists.
* If it's true, currency is not added. * If it's true, currency is doesn't added.
* *
* @see ObjectModelCore::add() * @see ObjectModelCore::add()
*/ */
public function add($autodate = true, $nullValues = false) public function add($autodate = true, $nullValues = false)
{ {
if ((float)$this->conversion_rate <= 0) return Currency::exists($this->iso_code, $this->iso_code_num) ? false : parent::add();
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);
} }
/** /**
@@ -197,9 +187,8 @@ class CurrencyCore extends ObjectModel
4 => array('left' => '', 'right' => &$formated_strings['right']), 4 => array('left' => '', 'right' => &$formated_strings['right']),
5 => array('left' => '', 'right' => &$formated_strings['right']) 5 => array('left' => '', 'right' => &$formated_strings['right'])
); );
if (isset($formats[$this->format][$side]))
return ($formats[$this->format][$side]); return ($formats[$this->format][$side]);
return $this->sign;
} }
/** /**
@@ -296,16 +285,10 @@ class CurrencyCore extends ObjectModel
*/ */
public static function getIdByIsoCode($iso_code, $id_shop = 0) public static function getIdByIsoCode($iso_code, $id_shop = 0)
{ {
$cache_id = 'Currency::getIdByIsoCode_'.pSQL($iso_code).'-'.(int)$id_shop; $query = Currency::getIdByQuery($id_shop);
if (!Cache::isStored($cache_id)) $query->where('iso_code = \''.pSQL($iso_code).'\'');
{
$query = Currency::getIdByQuery($id_shop); return (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query->build());
$query->where('iso_code = \''.pSQL($iso_code).'\'');
$result = (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query->build());
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
/** /**
@@ -431,23 +414,5 @@ class CurrencyCore extends ObjectModel
self::$currencies[(int)($id)] = new Currency($id); self::$currencies[(int)($id)] = new Currency($id);
return self::$currencies[(int)($id)]; return self::$currencies[(int)($id)];
} }
}
public static function countActiveCurrencies($id_shop = null)
{
if ($id_shop === null)
$id_shop = (int)Context::getContext()->shop->id;
if (!isset(self::$countActiveCurrencies[$id_shop]))
self::$countActiveCurrencies[$id_shop] = Db::getInstance()->getValue('
SELECT COUNT(DISTINCT c.id_currency) FROM `'._DB_PREFIX_.'currency` c
LEFT JOIN '._DB_PREFIX_.'currency_shop cs ON (cs.id_currency = c.id_currency AND cs.id_shop = '.(int)$id_shop.')
WHERE c.`active` = 1
');
return self::$countActiveCurrencies[$id_shop];
}
public static function isMultiCurrencyActivated($id_shop = null)
{
return (Currency::countActiveCurrencies($id_shop) > 1);
}
}
+31 -52
View File
@@ -362,18 +362,15 @@ class CustomerCore extends ObjectModel
{ {
if (!Validate::isUnsignedId($id_customer)) if (!Validate::isUnsignedId($id_customer))
return true; return true;
$cache_id = 'Customer::isBanned_'.(int)$id_customer; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
if (!Cache::isStored($cache_id)) SELECT `id_customer`
{ FROM `'._DB_PREFIX_.'customer`
$result = (bool)!Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' WHERE `id_customer` = \''.(int)$id_customer.'\'
SELECT `id_customer` AND active = 1
FROM `'._DB_PREFIX_.'customer` AND `deleted` = 0');
WHERE `id_customer` = \''.(int)$id_customer.'\' if (isset($result['id_customer']))
AND active = 1 return false;
AND `deleted` = 0'); return true;
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
/** /**
@@ -416,7 +413,7 @@ class CustomerCore extends ObjectModel
public static function customerHasAddress($id_customer, $id_address) public static function customerHasAddress($id_customer, $id_address)
{ {
$key = (int)$id_customer.'-'.(int)$id_address; $key = (int)$id_customer.'-'.(int)$id_address;
if (!array_key_exists($key, self::$_customerHasAddress)) if (!array_key_exists($id_address, self::$_customerHasAddress))
{ {
self::$_customerHasAddress[$key] = (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' self::$_customerHasAddress[$key] = (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT `id_address` SELECT `id_address`
@@ -442,22 +439,15 @@ class CustomerCore extends ObjectModel
*/ */
public function getAddresses($id_lang) public function getAddresses($id_lang)
{ {
$share_order = (bool)Context::getContext()->shop->getGroup()->share_order; $sql = 'SELECT DISTINCT a.*, cl.`name` AS country, s.name AS state, s.iso_code AS state_iso
$cache_id = 'Customer::getAddresses'.(int)$this->id.'-'.(int)$id_lang.'-'.$share_order; FROM `'._DB_PREFIX_.'address` a
if (!Cache::isStored($cache_id)) LEFT JOIN `'._DB_PREFIX_.'country` c ON (a.`id_country` = c.`id_country`)
{ LEFT JOIN `'._DB_PREFIX_.'country_lang` cl ON (c.`id_country` = cl.`id_country`)
$sql = 'SELECT DISTINCT a.*, cl.`name` AS country, s.name AS state, s.iso_code AS state_iso LEFT JOIN `'._DB_PREFIX_.'state` s ON (s.`id_state` = a.`id_state`)
FROM `'._DB_PREFIX_.'address` a '.(Context::getContext()->shop->getGroup()->share_order ? '' : Shop::addSqlAssociation('country', 'c')).'
LEFT JOIN `'._DB_PREFIX_.'country` c ON (a.`id_country` = c.`id_country`) WHERE `id_lang` = '.(int)$id_lang.' AND `id_customer` = '.(int)$this->id.' AND a.`deleted` = 0';
LEFT JOIN `'._DB_PREFIX_.'country_lang` cl ON (c.`id_country` = cl.`id_country`)
LEFT JOIN `'._DB_PREFIX_.'state` s ON (s.`id_state` = a.`id_state`)
'.($share_order ? '' : Shop::addSqlAssociation('country', 'c')).'
WHERE `id_lang` = '.(int)$id_lang.' AND `id_customer` = '.(int)$this->id.' AND a.`deleted` = 0';
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
/** /**
@@ -486,17 +476,12 @@ class CustomerCore extends ObjectModel
{ {
if (!Validate::isUnsignedId($id_customer) || !Validate::isMd5($passwd)) if (!Validate::isUnsignedId($id_customer) || !Validate::isMd5($passwd))
die (Tools::displayError()); die (Tools::displayError());
$cache_id = 'Customer::checkPassword'.(int)$id_customer.'-'.$passwd;
if (!Cache::isStored($cache_id)) $sql = 'SELECT `id_customer`
{ FROM `'._DB_PREFIX_.'customer`
$sql = 'SELECT `id_customer` WHERE `id_customer` = '.$id_customer.'
FROM `'._DB_PREFIX_.'customer`
WHERE `id_customer` = '.$id_customer.'
AND `passwd` = \''.$passwd.'\''; AND `passwd` = \''.$passwd.'\'';
$result = (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql); return (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
/** /**
@@ -589,16 +574,12 @@ class CustomerCore extends ObjectModel
public static function customerIdExistsStatic($id_customer) public static function customerIdExistsStatic($id_customer)
{ {
$cache_id = 'Customer::customerIdExistsStatic'.(int)$id_customer; $row = Db::getInstance()->getRow('
if (!Cache::isStored($cache_id)) SELECT `id_customer`
{ FROM '._DB_PREFIX_.'customer c
$result = (int)Db::getInstance()->getValue(' WHERE c.`id_customer` = '.(int)$id_customer);
SELECT `id_customer`
FROM '._DB_PREFIX_.'customer c return isset($row['id_customer']);
WHERE c.`id_customer` = '.(int)$id_customer);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
/** /**
@@ -608,11 +589,9 @@ 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));
} }
@@ -627,7 +606,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, false, true, Db::INSERT_IGNORE); Db::getInstance()->insert('customer_group', $row);
} }
} }
+1 -1
View File
@@ -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_STRING, 'validate' => 'isIp2Long', 'size' => 15), 'ip_address' => array('type' => self::TYPE_INT, 'validate' => 'isIp2Long'),
'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),
+5 -5
View File
@@ -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);
@@ -549,7 +549,7 @@ class DispatcherCore
if ($id_shop === null) if ($id_shop === null)
$id_shop = (int)Context::getContext()->shop->id; $id_shop = (int)Context::getContext()->shop->id;
if (!isset($this->routes[$id_shop])) if ($this->use_routes && !isset($this->routes[$id_shop]))
$this->loadRoutes($id_shop); $this->loadRoutes($id_shop);
if (!isset($this->routes[$id_shop]) || !isset($this->routes[$id_shop][$id_lang]) || !isset($this->routes[$id_shop][$id_lang][$route_id])) if (!isset($this->routes[$id_shop]) || !isset($this->routes[$id_shop][$id_lang]) || !isset($this->routes[$id_shop][$id_lang][$route_id]))
@@ -594,14 +594,14 @@ class DispatcherCore
if ($id_shop === null) if ($id_shop === null)
$id_shop = (int)Context::getContext()->shop->id; $id_shop = (int)Context::getContext()->shop->id;
if (!isset($this->routes[$id_shop])) if ($this->use_routes && !isset($this->routes[$id_shop]))
$this->loadRoutes($id_shop); $this->loadRoutes($id_shop);
if (!isset($this->routes[$id_shop][$id_lang][$route_id])) if (!isset($this->routes[$id_shop][$id_lang][$route_id]))
{ {
$query = http_build_query($params, '', '&'); $query = http_build_query($params, '', '&');
$index_link = $this->use_routes ? '' : 'index.php'; $index_link = $this->use_routes ? '' : 'index.php';
return ($route_id == 'index') ? $index_link.(($query) ? '?'.$query : '') : ((trim($route_id) == '') ? '' : 'index.php?controller='.$route_id).(($query) ? '&'.$query : '').$anchor; return ($route_id == 'index') ? $index_link.(($query) ? '?'.$query : '') : 'index.php?controller='.$route_id.(($query) ? '&'.$query : '').$anchor;
} }
$route = $this->routes[$id_shop][$id_lang][$route_id]; $route = $this->routes[$id_shop][$id_lang][$route_id];
// Check required fields // Check required fields
+10 -31
View File
@@ -312,37 +312,16 @@ class FeatureCore extends ObjectModel
*/ */
public static function cleanPositions() public static function cleanPositions()
{ {
//Reordering positions to remove "holes" in them (after delete for instance) return Db::getInstance()->execute('
$sql = "SELECT id_feature, position FROM "._DB_PREFIX_."feature ORDER BY id_feature"; UPDATE `'._DB_PREFIX_.'feature` f
$db = Db::getInstance(); LEFT JOIN (
$r = $db->executeS($sql, false); SELECT @i := @i +1 AS rank, id_feature, position
$shiftTable = array(); //List of update queries (one query is necessary for each "hole" in the table) FROM `'._DB_PREFIX_.'feature`
$currentDelta = 0; JOIN (SELECT @i :=1) dummy
$minId = 0; ORDER by position
$maxId = 0; ) AS f2
$futurePosition = 1; USING (id_feature)
while ($line = $db->nextRow($r)) { SET f.position = f2.rank - 1');
$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);
}
} }
/** /**
+23 -39
View File
@@ -128,50 +128,34 @@ class FeatureValueCore extends ObjectModel
return $tab['value']; return $tab['value'];
} }
public static function addFeatureValueImport($id_feature, $value, $id_product = null, $id_lang = null, $custom = false) public static function addFeatureValueImport($id_feature, $name)
{ {
$id_feature_value = false; $rq = Db::getInstance()->executeS('
if (!is_null($id_product) && $id_product) SELECT fv.`id_feature_value`
{ FROM '._DB_PREFIX_.'feature_value fv
$id_feature_value = Db::getInstance()->getValue(' LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl
SELECT fp.`id_feature_value` ON (fvl.`id_feature_value` = fv.`id_feature_value`)
FROM '._DB_PREFIX_.'feature_product fp WHERE `value` = \''.pSQL($name).'\'
INNER JOIN '._DB_PREFIX_.'feature_value fv USING (`id_feature_value`)
WHERE fp.`id_feature` = '.(int)$id_feature.'
AND fv.`custom` = '.(int)$custom.'
AND fp.`id_product` = '.(int)$id_product);
if ($custom && $id_feature_value && !is_null($id_lang) && $id_lang)
Db::getInstance()->execute('
UPDATE '._DB_PREFIX_.'feature_value_lang
SET `value` = \''.pSQL($value).'\'
WHERE `id_feature_value` = '.(int)$id_feature_value.'
AND `value` != \''.pSQL($value).'\'
AND `id_lang` = '.(int)$id_lang);
}
if (!$custom)
$id_feature_value = Db::getInstance()->getValue('
SELECT fv.`id_feature_value`
FROM '._DB_PREFIX_.'feature_value fv
LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.`id_feature_value` = fv.`id_feature_value` AND fvl.`id_lang` = '.(int)$id_lang.')
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` LIMIT 1
GROUP BY fv.`id_feature_value`'); ');
if ($id_feature_value) if (!isset($rq[0]['id_feature_value']) || !$id_feature_value = (int)$rq[0]['id_feature_value'])
return (int)$id_feature_value; {
// Feature doesn't exist, create it
$feature_value = new FeatureValue();
// Feature doesn't exist, create it $languages = Language::getLanguages();
$feature_value = new FeatureValue(); foreach ($languages as $language)
$feature_value->id_feature = (int)$id_feature; $feature_value->value[$language['id_lang']] = strval($name);
$feature_value->custom = (bool)$custom;
foreach (Language::getLanguages() as $language)
$feature_value->value[$language['id_lang']] = $value;
$feature_value->add();
return (int)$feature_value->id; $feature_value->id_feature = (int)$id_feature;
$feature_value->custom = 1;
$feature_value->add();
return (int)$feature_value->id;
}
return (int)$id_feature_value;
} }
public function add($autodate = true, $nullValues = false) public function add($autodate = true, $nullValues = false)
+2 -16
View File
@@ -102,13 +102,6 @@ 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) && Validate::isGenericName($legend))
$image->legend[(int)$key] = $legend;
else
return array('error' => sprintf(Tools::displayError('Error on image legend "%1s." is not a valid legend.'), Tools::safeOutput($legend)));
if (!Image::getCover($image->id_product)) if (!Image::getCover($image->id_product))
$image->cover = 1; $image->cover = 1;
else else
@@ -143,7 +136,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(), 'legend' => $image->legend); $img = array('id_image' => $image->id, 'position' => $image->position, 'cover' => $image->cover, 'name' => $this->getName());
return array('success' => $img); return array('success' => $img);
} }
@@ -191,13 +184,6 @@ 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) && Validate::isGenericName($legend))
$image->legend[(int)$key] = $legend;
else
return array('error' => sprintf(Tools::displayError('Error on image legend "%1s." is not a valid legend.'), Tools::safeOutput($legend)));
if (!Image::getCover($image->id_product)) if (!Image::getCover($image->id_product))
$image->cover = 1; $image->cover = 1;
else else
@@ -237,7 +223,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(), 'legend' => $image->legend); $img = array('id_image' => $image->id, 'position' => $image->position, 'cover' => $image->cover, 'name' => $this->getName());
return array('success' => $img); return array('success' => $img);
} }
+3 -29
View File
@@ -305,43 +305,17 @@ class GroupCore extends ObjectModel
public static function getCurrent() public static function getCurrent()
{ {
static $groups = array(); static $groups = array();
$customer = Context::getContext()->customer; $customer = Context::getContext()->customer;
if (Validate::isLoadedObject($customer)) if (Validate::isLoadedObject($customer))
{
$id_group = (int)$customer->id_default_group; $id_group = (int)$customer->id_default_group;
$group = new Group((int)$id_group);
if (!$group->isAssociatedToShop(Context::getContext()->shop->id))
$group = new Group((int)Configuration::get('PS_CUSTOMER_GROUP'));
}
else else
$id_group = (int)Configuration::get('PS_UNIDENTIFIED_GROUP'); $id_group = (int)Configuration::get('PS_UNIDENTIFIED_GROUP');
if (!isset($groups[$id_group]) && isset($group))
$groups[$id_group] = $group;
if (!isset($groups[$id_group])) if (!isset($groups[$id_group]))
$groups[$id_group] = new Group($id_group); $groups[$id_group] = new Group($id_group);
return $groups[$id_group]; return $groups[$id_group];
} }
}
/**
* Light back office search for Group
*
* @param integer $id_lang Language ID
* @param string $query Searched string
* @param boolean $unrestricted allows search without lang and includes first group and exact match
* @return array Corresponding groupes
*/
public static function searchByName($query)
{
return Db::getInstance()->getRow('
SELECT g.*, gl.*
FROM `'._DB_PREFIX_.'group` g
LEFT JOIN `'._DB_PREFIX_.'group_lang` gl
ON (g.`id_group` = gl.`id_group`)
WHERE `name` LIKE \''.pSQL($query).'\'
');
}
}
-1
View File
@@ -137,7 +137,6 @@ class GroupReductionCore extends ObjectModel
SELECT `reduction` SELECT `reduction`
FROM `'._DB_PREFIX_.'product_group_reduction_cache` FROM `'._DB_PREFIX_.'product_group_reduction_cache`
WHERE `id_product` = '.(int)$id_product.' AND `id_group` = '.(int)$id_group); WHERE `id_product` = '.(int)$id_product.' AND `id_group` = '.(int)$id_group);
// Should return string (decimal in database) and not a float
return self::$reduction_cache[$id_product.'-'.$id_group]; return self::$reduction_cache[$id_product.'-'.$id_group];
} }
+3 -19
View File
@@ -56,8 +56,6 @@ class HookCore extends ObjectModel
*/ */
public static $executed_hooks = array(); public static $executed_hooks = array();
public static $native_module;
/** /**
* @see ObjectModel::$definition * @see ObjectModel::$definition
*/ */
@@ -318,7 +316,7 @@ class HookCore extends ObjectModel
if (Validate::isLoadedObject($context->country)) if (Validate::isLoadedObject($context->country))
$sql->where('(h.name = "displayPayment" AND (SELECT id_country FROM '._DB_PREFIX_.'module_country mc WHERE mc.id_module = m.id_module AND id_country = '.(int)$context->country->id.' AND id_shop = '.(int)$context->shop->id.' LIMIT 1) = '.(int)$context->country->id.')'); $sql->where('(h.name = "displayPayment" AND (SELECT id_country FROM '._DB_PREFIX_.'module_country mc WHERE mc.id_module = m.id_module AND id_country = '.(int)$context->country->id.' AND id_shop = '.(int)$context->shop->id.' LIMIT 1) = '.(int)$context->country->id.')');
if (Validate::isLoadedObject($context->currency)) if (Validate::isLoadedObject($context->currency))
$sql->where('(h.name = "displayPayment" AND (SELECT id_currency FROM '._DB_PREFIX_.'module_currency mcr WHERE mcr.id_module = m.id_module AND id_currency IN ('.(int)$context->currency->id.', -1, -2) LIMIT 1) IN ('.(int)$context->currency->id.', -1, -2))'); $sql->where('(h.name = "displayPayment" AND (SELECT id_currency FROM '._DB_PREFIX_.'module_currency mcr WHERE mcr.id_module = m.id_module AND id_currency IN ('.(int)$context->currency->id.', -2) LIMIT 1) IN ('.(int)$context->currency->id.', -2))');
} }
if (Validate::isLoadedObject($context->shop)) if (Validate::isLoadedObject($context->shop))
$sql->where('hm.id_shop = '.(int)$context->shop->id); $sql->where('hm.id_shop = '.(int)$context->shop->id);
@@ -326,10 +324,7 @@ class HookCore extends ObjectModel
if ($frontend) if ($frontend)
{ {
$sql->leftJoin('module_group', 'mg', 'mg.`id_module` = m.`id_module`'); $sql->leftJoin('module_group', 'mg', 'mg.`id_module` = m.`id_module`');
if (Validate::isLoadedObject($context->shop)) $sql->where('mg.`id_group` IN ('.implode(', ', $groups).')');
$sql->where('mg.id_shop = '.((int)$context->shop->id).' AND mg.`id_group` IN ('.implode(', ', $groups).')');
else
$sql->where('mg.`id_group` IN ('.implode(', ', $groups).')');
$sql->groupBy('hm.id_hook, hm.id_module'); $sql->groupBy('hm.id_hook, hm.id_module');
} }
@@ -393,10 +388,6 @@ class HookCore extends ObjectModel
*/ */
public static function exec($hook_name, $hook_args = array(), $id_module = null, $array_return = false, $check_exceptions = true) public static function exec($hook_name, $hook_args = array(), $id_module = null, $array_return = false, $check_exceptions = true)
{ {
static $disable_non_native_modules = null;
if ($disable_non_native_modules === null)
$disable_non_native_modules = (bool)Configuration::get('PS_DISABLE_NON_NATIVE_MODULE');
// Check arguments validity // Check arguments validity
if (($id_module && !is_numeric($id_module)) || !Validate::isHookName($hook_name)) if (($id_module && !is_numeric($id_module)) || !Validate::isHookName($hook_name))
throw new PrestaShopException('Invalid id_module or hook_name'); throw new PrestaShopException('Invalid id_module or hook_name');
@@ -425,19 +416,12 @@ class HookCore extends ObjectModel
// Look on modules list // Look on modules list
$altern = 0; $altern = 0;
$output = ''; $output = '';
if ($disable_non_native_modules && !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)$disable_non_native_modules && Hook::$native_module && count(Hook::$native_module) && !in_array($array['module'], self::$native_module))
continue;
if (!($moduleInstance = Module::getInstanceByName($array['module']))) if (!($moduleInstance = Module::getInstanceByName($array['module'])))
continue; continue;
+8 -18
View File
@@ -40,9 +40,6 @@ 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';
@@ -69,7 +66,6 @@ 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),
), ),
); );
@@ -124,22 +120,16 @@ class ImageCore extends ObjectModel
* *
* @param integer $id_lang Language ID * @param integer $id_lang Language ID
* @param integer $id_product Product ID * @param integer $id_product Product ID
* @param integer $id_product_attribute Product Attribute ID
* @return array Images * @return array Images
*/ */
public static function getImages($id_lang, $id_product, $id_product_attribute = NULL) public static function getImages($id_lang, $id_product)
{ {
$attribute_filter = ($id_product_attribute ? ' AND ai.`id_product_attribute` = '.(int)$id_product_attribute : ''); return Db::getInstance()->executeS('
$sql = 'SELECT * SELECT *
FROM `'._DB_PREFIX_.'image` i FROM `'._DB_PREFIX_.'image` i
LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image`)'; LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image`)
WHERE i.`id_product` = '.(int)$id_product.' AND il.`id_lang` = '.(int)$id_lang.'
if ($id_product_attribute) ORDER BY i.`position` ASC');
$sql .= ' LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` ai ON (i.`id_image` = ai.`id_image`)';
$sql .= ' WHERE i.`id_product` = '.(int)$id_product.' AND il.`id_lang` = '.(int)$id_lang . $attribute_filter.'
ORDER BY i.`position` ASC';
return Db::getInstance()->executeS($sql);
} }
/** /**
@@ -654,7 +644,7 @@ class ImageCore extends ObjectModel
*/ */
public static function testFileSystem() public static function testFileSystem()
{ {
$safe_mode = Tools::getSafeModeStatus(); $safe_mode = ini_get('safe_mode');
if ($safe_mode) if ($safe_mode)
return false; return false;
$folder1 = _PS_PROD_IMG_DIR_.'testfilesystem/'; $folder1 = _PS_PROD_IMG_DIR_.'testfilesystem/';
+5 -9
View File
@@ -127,20 +127,16 @@ class ImageTypeCore extends ObjectModel
* @param string $name * @param string $name
* @param string $type * @param string $type
*/ */
public static function getByNameNType($name, $type = null, $order = null) public static function getByNameNType($name, $type = null)
{ {
if (!isset(self::$images_types_name_cache[$name.'_'.$type.'_'.$order])) if (!isset(self::$images_types_name_cache[$name.'_'.$type]))
{ {
self::$images_types_name_cache[$name.'_'.$type.'_'.$order] = Db::getInstance()->getRow(' self::$images_types_name_cache[$name.'_'.$type] = 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 WHERE `name` = \''.pSQL($name).'\' '.(!is_null($type) ? 'AND `'.pSQL($type).'` = 1' : ''));
`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.'_'.$order]; return self::$images_types_name_cache[$name.'_'.$type];
} }
public static function getFormatedName($name) public static function getFormatedName($name)
+49 -88
View File
@@ -111,22 +111,18 @@ class LanguageCore extends ObjectModel
$iso_code = $newIso ? $newIso : $this->iso_code; $iso_code = $newIso ? $newIso : $this->iso_code;
if (!file_exists(_PS_TRANSLATIONS_DIR_.$iso_code)) if (!file_exists(_PS_TRANSLATIONS_DIR_.$iso_code))
{ mkdir(_PS_TRANSLATIONS_DIR_.$iso_code);
if (@mkdir(_PS_TRANSLATIONS_DIR_.$iso_code))
@chmod(_PS_TRANSLATIONS_DIR_.$iso_code, 0777);
}
foreach ($this->translationsFilesAndVars as $file => $var) foreach ($this->translationsFilesAndVars as $file => $var)
{ {
$path_file = _PS_TRANSLATIONS_DIR_.$iso_code.'/'.$file.'.php'; $path_file = _PS_TRANSLATIONS_DIR_.$iso_code.'/'.$file.'.php';
if (!file_exists($path_file)) if (!file_exists($path_file))
if ($file != 'tabs') if ($file != 'tabs')
@file_put_contents($path_file, '<?php file_put_contents($path_file, '<?php
global $'.$var.'; global $'.$var.';
$'.$var.' = array(); $'.$var.' = array();
?>'); ?>');
else else
@file_put_contents($path_file, '<?php file_put_contents($path_file, '<?php
$'.$var.' = array(); $'.$var.' = array();
return $'.$var.'; return $'.$var.';
?>'); ?>');
@@ -196,7 +192,7 @@ class LanguageCore extends ObjectModel
public function add($autodate = true, $nullValues = false, $only_add = false) public function add($autodate = true, $nullValues = false, $only_add = false)
{ {
if (!parent::add($autodate, $nullValues)) if (!parent::add($autodate))
return false; return false;
if ($only_add) if ($only_add)
@@ -206,9 +202,10 @@ class LanguageCore extends ObjectModel
$this->_generateFiles(); $this->_generateFiles();
// @todo Since a lot of modules are not in right format with their primary keys name, just get true ... // @todo Since a lot of modules are not in right format with their primary keys name, just get true ...
$this->loadUpdateSQL(); $resUpdateSQL = $this->loadUpdateSQL();
$resUpdateSQL = true;
return Tools::generateHtaccess(); Tools::generateHtaccess();
return $resUpdateSQL;
} }
public function toggleStatus() public function toggleStatus()
@@ -464,8 +461,7 @@ class LanguageCore extends ObjectModel
} }
closedir($handle); closedir($handle);
} }
if (is_writable($dir)) rmdir($dir);
rmdir($dir);
} }
public function delete() public function delete()
@@ -492,8 +488,7 @@ class LanguageCore extends ObjectModel
// Files deletion // Files deletion
foreach (Language::getFilesList($this->iso_code, _THEME_NAME_, false, false, false, true, true) as $key => $file) foreach (Language::getFilesList($this->iso_code, _THEME_NAME_, false, false, false, true, true) as $key => $file)
if (file_exists($key)) if (file_exists($key))
unlink($key); unlink($key);
$modList = scandir(_PS_MODULE_DIR_); $modList = scandir(_PS_MODULE_DIR_);
foreach ($modList as $mod) foreach ($modList as $mod)
{ {
@@ -515,32 +510,37 @@ class LanguageCore extends ObjectModel
Language::recurseDeleteDir(_PS_MAIL_DIR_.$this->iso_code); Language::recurseDeleteDir(_PS_MAIL_DIR_.$this->iso_code);
if (file_exists(_PS_TRANSLATIONS_DIR_.$this->iso_code)) if (file_exists(_PS_TRANSLATIONS_DIR_.$this->iso_code))
Language::recurseDeleteDir(_PS_TRANSLATIONS_DIR_.$this->iso_code); Language::recurseDeleteDir(_PS_TRANSLATIONS_DIR_.$this->iso_code);
}
$images = array(
'.jpg', if (!parent::delete())
'-default-'.ImageType::getFormatedName('thickbox').'.jpg', return false;
'-default-'.ImageType::getFormatedName('home').'.jpg', if (!$this->hasMultishopEntries() || Shop::getContext() == Shop::CONTEXT_ALL)
'-default-'.ImageType::getFormatedName('large').'.jpg', {
'-default-'.ImageType::getFormatedName('medium').'.jpg', // delete images
'-default-'.ImageType::getFormatedName('small').'.jpg' $files_copy = array(
'/en.jpg',
'/en-default-'.ImageType::getFormatedName('thickbox').'.jpg',
'/en-default-'.ImageType::getFormatedName('home').'.jpg',
'/en-default-'.ImageType::getFormatedName('large').'.jpg',
'/en-default-'.ImageType::getFormatedName('medium').'.jpg',
'/en-default-'.ImageType::getFormatedName('small').'.jpg'
); );
$images_directories = array(_PS_CAT_IMG_DIR_, _PS_MANU_IMG_DIR_, _PS_PROD_IMG_DIR_, _PS_SUPP_IMG_DIR_); $tos = array(_PS_CAT_IMG_DIR_, _PS_MANU_IMG_DIR_, _PS_PROD_IMG_DIR_, _PS_SUPP_IMG_DIR_);
foreach ($images_directories as $image_directory) foreach ($tos as $to)
foreach ($images as $image) foreach ($files_copy as $file)
{ {
if (file_exists($image_directory.$this->iso_code.$image)) $name = str_replace('/en', ''.$this->iso_code, $file);
unlink($image_directory.$this->iso_code.$image);
if (file_exists($to.$name))
unlink($to.$name);
if (file_exists(dirname(__FILE__).'/../img/l/'.$this->id.'.jpg')) if (file_exists(dirname(__FILE__).'/../img/l/'.$this->id.'.jpg'))
unlink(dirname(__FILE__).'/../img/l/'.$this->id.'.jpg'); unlink(dirname(__FILE__).'/../img/l/'.$this->id.'.jpg');
} }
} }
if (!parent::delete())
return false;
return Tools::generateHtaccess(); return Tools::generateHtaccess();
} }
public function deleteSelection($selection) public function deleteSelection($selection)
{ {
if (!is_array($selection)) if (!is_array($selection))
@@ -549,10 +549,11 @@ class LanguageCore extends ObjectModel
$result = true; $result = true;
foreach ($selection as $id) foreach ($selection as $id)
{ {
$language = new Language($id); $this->id = (int)($id);
$result = $result && $language->delete(); $result = $result && $this->delete();
} }
Tools::generateHtaccess();
return $result; return $result;
} }
@@ -619,35 +620,6 @@ class LanguageCore extends ObjectModel
return Db::getInstance()->getValue('SELECT `language_code` FROM `'._DB_PREFIX_.'lang` WHERE `iso_code` = \''.pSQL(strtolower($iso_code)).'\''); return Db::getInstance()->getValue('SELECT `language_code` FROM `'._DB_PREFIX_.'lang` WHERE `iso_code` = \''.pSQL(strtolower($iso_code)).'\'');
} }
public static function getLanguageByIETFCode($code)
{
if (!Validate::isLanguageCode($code))
die(sprintf(Tools::displayError('Fatal error: IETF code %s is not correct'), $code));
// $code is in the form of 'xx-YY' where xx is the language code
// and 'YY' a country code identifying a variant of the language.
$lang_country = explode('-', $code);
// Get the language component of the code
$lang = $lang_country[0];
// Find the id_lang of the language.
// We look for anything with the correct language code
// and sort on equality with the exact IETF code wanted.
// That way using only one query we get either the exact wanted language
// or a close match.
$id_lang = Db::getInstance()->getValue(
'SELECT `id_lang` FROM '
.'`'._DB_PREFIX_.'lang` WHERE LEFT(`language_code`,2) = \''.pSQL($lang).'\' '
.'ORDER BY language_code = \''.pSQL($code).'\' DESC'
);
// Instantiate the Language object if we found it.
if ($id_lang)
return new Language($id_lang);
else
return false;
}
/** /**
* Return array (id_lang, iso_code) * Return array (id_lang, iso_code)
* *
@@ -717,28 +689,26 @@ class LanguageCore extends ObjectModel
if (Language::getIdByIso($iso_code)) if (Language::getIdByIso($iso_code))
return true; return true;
// Initialize the language
$lang = new Language(); $lang = new Language();
$lang->iso_code = $iso_code; $lang->iso_code = $iso_code;
$lang->language_code = $iso_code;
$lang->active = true; $lang->active = true;
// If the language pack has not been provided, retrieve it from prestashop.com
if (!$lang_pack) if (!$lang_pack)
$lang_pack = Tools::jsonDecode(Tools::file_get_contents('http://www.prestashop.com/download/lang_packs/get_language_pack.php?version='._PS_VERSION_.'&iso_lang='.$iso_code)); $lang_pack = Tools::jsonDecode(Tools::file_get_contents('http://www.prestashop.com/download/lang_packs/get_language_pack.php?version='._PS_VERSION_.'&iso_lang='.$iso_code));
// If a language pack has been found or provided, prefill the language object with the value
if ($lang_pack) if ($lang_pack)
foreach (get_object_vars($lang_pack) as $key => $value) {
if ($key != 'iso_code' && isset(Language::$definition['fields'][$key])) if (isset($lang_pack->name)
$lang->$key = $value; && isset($lang_pack->version)
&& isset($lang_pack->iso_code))
// Use the values given in parameters to override the data retrieved automatically $lang->name = $lang_pack->name;
if ($params_lang !== null && is_array($params_lang)) }
elseif ($params_lang !== null && is_array($params_lang))
foreach ($params_lang as $key => $value) foreach ($params_lang as $key => $value)
if ($key != 'iso_code' && isset(Language::$definition['fields'][$key])) $lang->$key = $value;
$lang->$key = $value; else
return false;
if (!$lang->add(true, false, $only_add)) if (!$lang->add(true, false, $only_add))
return false; return false;
@@ -756,7 +726,7 @@ class LanguageCore extends ObjectModel
} }
else else
Language::_copyNoneFlag((int)$lang->id); Language::_copyNoneFlag((int)$lang->id);
$files_copy = array( $files_copy = array(
'/en.jpg', '/en.jpg',
'/en-default-'.ImageType::getFormatedName('thickbox').'.jpg', '/en-default-'.ImageType::getFormatedName('thickbox').'.jpg',
@@ -766,7 +736,7 @@ class LanguageCore extends ObjectModel
'/en-default-'.ImageType::getFormatedName('small').'.jpg', '/en-default-'.ImageType::getFormatedName('small').'.jpg',
'/en-default-'.ImageType::getFormatedName('scene').'.jpg' '/en-default-'.ImageType::getFormatedName('scene').'.jpg'
); );
foreach (array(_PS_CAT_IMG_DIR_, _PS_MANU_IMG_DIR_, _PS_PROD_IMG_DIR_, _PS_SUPP_IMG_DIR_) as $to) foreach (array(_PS_CAT_IMG_DIR_, _PS_MANU_IMG_DIR_, _PS_PROD_IMG_DIR_, _PS_SUPP_IMG_DIR_) as $to)
foreach ($files_copy as $file) foreach ($files_copy as $file)
@copy(dirname(__FILE__).'/../img/l'.$file, $to.str_replace('/en', '/'.$iso_code, $file)); @copy(dirname(__FILE__).'/../img/l'.$file, $to.str_replace('/en', '/'.$iso_code, $file));
@@ -819,22 +789,13 @@ class LanguageCore extends ObjectModel
$lang_pack_ok = false; $lang_pack_ok = false;
$errors = array(); $errors = array();
$file = _PS_TRANSLATIONS_DIR_.$iso.'.gzip'; $file = _PS_TRANSLATIONS_DIR_.$iso.'.gzip';
if (!$lang_pack_link = Tools::file_get_contents('http://www.prestashop.com/download/lang_packs/get_language_pack.php?version='.$version.'&iso_lang='.Tools::strtolower($iso))) if (!$lang_pack_link = Tools::file_get_contents('http://www.prestashop.com/download/lang_packs/get_language_pack.php?version='.$version.'&iso_lang='.Tools::strtolower($iso)))
$errors[] = Tools::displayError('Archive cannot be downloaded from prestashop.com.'); $errors[] = Tools::displayError('Archive cannot be downloaded from prestashop.com.');
elseif (!$lang_pack = Tools::jsonDecode($lang_pack_link)) elseif (!$lang_pack = Tools::jsonDecode($lang_pack_link))
$errors[] = Tools::displayError('Error occurred when language was checked according to your Prestashop version.'); $errors[] = Tools::displayError('Error occurred when language was checked according to your Prestashop version.');
elseif ($content = Tools::file_get_contents('http://translations.prestashop.com/download/lang_packs/gzip/'.$lang_pack->version.'/'.Tools::strtolower($lang_pack->iso_code.'.gzip'))) elseif ($content = Tools::file_get_contents('http://translations.prestashop.com/download/lang_packs/gzip/'.$lang_pack->version.'/'.Tools::strtolower($lang_pack->iso_code.'.gzip')))
if (!@file_put_contents($file, $content)) if (!@file_put_contents($file, $content))
{ $errors[] = Tools::displayError('Server does not have permissions for writing.');
if (is_writable(dirname($file)))
{
@unlink($file);
@file_put_contents($file, $content);
}
elseif (!is_writable($file))
$errors[] = Tools::displayError('Server does not have permissions for writing.').' ('.$file.')';
}
if (file_exists($file)) if (file_exists($file))
{ {
$gz = new Archive_Tar($file, true); $gz = new Archive_Tar($file, true);
+54 -44
View File
@@ -91,8 +91,12 @@ class LinkCore
if (!$id_lang) if (!$id_lang)
$id_lang = Context::getContext()->language->id; $id_lang = Context::getContext()->language->id;
if (Configuration::get('PS_MULTISHOP_FEATURE_ACTIVE') && $id_shop !== null)
$url = $this->getBaseLink($id_shop).$this->getLangLink($id_lang, null, $id_shop); $shop = new Shop($id_shop);
else
$shop = Context::getContext()->shop;
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop);
if (!is_object($product)) if (!is_object($product))
{ {
@@ -159,7 +163,11 @@ class LinkCore
if (!$id_lang) if (!$id_lang)
$id_lang = Context::getContext()->language->id; $id_lang = Context::getContext()->language->id;
$url = $this->getBaseLink($id_shop).$this->getLangLink($id_lang, null, $id_shop); if ($id_shop === null)
$shop = Context::getContext()->shop;
else
$shop = new Shop($id_shop);
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop);
if (!is_object($category)) if (!is_object($category))
$category = new Category($category, $id_lang); $category = new Category($category, $id_lang);
@@ -198,7 +206,11 @@ class LinkCore
if (!$id_lang) if (!$id_lang)
$id_lang = Context::getContext()->language->id; $id_lang = Context::getContext()->language->id;
$url = $this->getBaseLink($id_shop).$this->getLangLink($id_lang, null, $id_shop); if ($id_shop === null)
$shop = Context::getContext()->shop;
else
$shop = new Shop($id_shop);
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop);
$dispatcher = Dispatcher::getInstance(); $dispatcher = Dispatcher::getInstance();
if (!is_object($cms_category)) if (!is_object($cms_category))
@@ -227,12 +239,19 @@ class LinkCore
* @param int $id_lang * @param int $id_lang
* @return string * @return string
*/ */
public function getCMSLink($cms, $alias = null, $ssl = null, $id_lang = null, $id_shop = null) public function getCMSLink($cms, $alias = null, $ssl = false, $id_lang = null, $id_shop = null)
{ {
$base = (($ssl && $this->ssl_enable) ? 'https://' : 'http://');
if (!$id_lang) if (!$id_lang)
$id_lang = Context::getContext()->language->id; $id_lang = Context::getContext()->language->id;
if ($id_shop === null)
$shop = Context::getContext()->shop;
else
$shop = new Shop($id_shop);
$url = $base.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop);
$url = $this->getBaseLink($id_shop, $ssl).$this->getLangLink($id_lang, null, $id_shop);
$dispatcher = Dispatcher::getInstance(); $dispatcher = Dispatcher::getInstance();
if (!is_object($cms)) if (!is_object($cms))
@@ -271,8 +290,11 @@ class LinkCore
if (!$id_lang) if (!$id_lang)
$id_lang = Context::getContext()->language->id; $id_lang = Context::getContext()->language->id;
if ($id_shop === null)
$url = $this->getBaseLink($id_shop).$this->getLangLink($id_lang, null, $id_shop); $shop = Context::getContext()->shop;
else
$shop = new Shop($id_shop);
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop);
$dispatcher = Dispatcher::getInstance(); $dispatcher = Dispatcher::getInstance();
if (!is_object($supplier)) if (!is_object($supplier))
@@ -305,7 +327,11 @@ class LinkCore
if (!$id_lang) if (!$id_lang)
$id_lang = Context::getContext()->language->id; $id_lang = Context::getContext()->language->id;
$url = $this->getBaseLink($id_shop).$this->getLangLink($id_lang, null, $id_shop); if ($id_shop === null)
$shop = Context::getContext()->shop;
else
$shop = new Shop($id_shop);
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop);
$dispatcher = Dispatcher::getInstance(); $dispatcher = Dispatcher::getInstance();
if (!is_object($manufacturer)) if (!is_object($manufacturer))
@@ -334,12 +360,18 @@ class LinkCore
* @param int $id_lang * @param int $id_lang
* @return string * @return string
*/ */
public function getModuleLink($module, $controller = 'default', array $params = array(), $ssl = null, $id_lang = null, $id_shop = null) public function getModuleLink($module, $controller = 'default', array $params = array(), $ssl = false, $id_lang = null, $id_shop = null)
{ {
$base = (($ssl && $this->ssl_enable) ? 'https://' : 'http://');
if (!$id_lang) if (!$id_lang)
$id_lang = Context::getContext()->language->id; $id_lang = Context::getContext()->language->id;
$url = $this->getBaseLink($id_shop, $ssl).$this->getLangLink($id_lang, null, $id_shop); if ($id_shop === null)
$shop = Context::getContext()->shop;
else
$shop = new Shop($id_shop);
$url = $base.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop);
// If the module has its own route ... just use it ! // If the module has its own route ... just use it !
if (Dispatcher::getInstance()->hasRoute('module-'.$module.'-'.$controller, $id_lang, $id_shop)) if (Dispatcher::getInstance()->hasRoute('module-'.$module.'-'.$controller, $id_lang, $id_shop))
@@ -421,18 +453,10 @@ class LinkCore
* *
* @return string Page link * @return string Page link
*/ */
public function getPageLink($controller, $ssl = null, $id_lang = null, $request = null, $request_url_encode = false, $id_shop = null) public function getPageLink($controller, $ssl = false, $id_lang = null, $request = null, $request_url_encode = false, $id_shop = null)
{ {
//If $controller contains '&' char, it means that $controller contains request data and must be parsed first
$p = strpos($controller, '&');
if ($p !== false) {
$request = substr($controller, $p + 1);
$request_url_encode = false;
$controller = substr($controller, 0, $p);
}
$controller = Tools::strReplaceFirst('.php', '', $controller); $controller = Tools::strReplaceFirst('.php', '', $controller);
if (!$id_lang) if (!$id_lang)
$id_lang = (int)Context::getContext()->language->id; $id_lang = (int)Context::getContext()->language->id;
@@ -445,9 +469,16 @@ class LinkCore
parse_str($request, $request); parse_str($request, $request);
} }
$uri_path = Dispatcher::getInstance()->createUrl($controller, $id_lang, $request, false, '', $id_shop); if ($id_shop === null)
$shop = Context::getContext()->shop;
else
$shop = new Shop($id_shop);
return $this->getBaseLink($id_shop, $ssl).$this->getLangLink($id_lang, null, $id_shop).ltrim($uri_path, '/'); $uri_path = Dispatcher::getInstance()->createUrl($controller, $id_lang, $request, false, '', $id_shop);
$url = ($ssl && $this->ssl_enable) ? 'https://' : 'http://';
$url .= $shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop).ltrim($uri_path, '/');
return $url;
} }
public function getCatImageLink($name, $id_category, $type = null) public function getCatImageLink($name, $id_category, $type = null)
@@ -611,26 +642,5 @@ class LinkCore
return Language::getIsoById($id_lang).'/'; return Language::getIsoById($id_lang).'/';
} }
protected function getBaseLink($id_shop = null, $ssl = null)
{
static $force_ssl = null;
if ($ssl === null)
{
if ($force_ssl === null)
$force_ssl = (Configuration::get('PS_SSL_ENABLED') && Configuration::get('PS_SSL_ENABLED_EVERYWHERE'));
$ssl = $force_ssl;
}
if (Configuration::get('PS_MULTISHOP_FEATURE_ACTIVE') && $id_shop !== null)
$shop = new Shop($id_shop);
else
$shop = Context::getContext()->shop;
$base = (($ssl && $this->ssl_enable) ? 'https://'.$shop->domain_ssl : 'http://'.$shop->domain);
return $base.$shop->getBaseURI();
}
} }
-1
View File
@@ -63,7 +63,6 @@ class LocalizationPackCore
if ($install_mode && $res && isset($this->iso_currency)) if ($install_mode && $res && isset($this->iso_currency))
{ {
Cache::clean('Currency::getIdByIsoCode_*');
$res &= Configuration::updateValue('PS_CURRENCY_DEFAULT', (int)Currency::getIdByIsoCode($this->iso_currency)); $res &= Configuration::updateValue('PS_CURRENCY_DEFAULT', (int)Currency::getIdByIsoCode($this->iso_currency));
Currency::refreshCurrencies(); Currency::refreshCurrencies();
} }
+1 -6
View File
@@ -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' => 'isString', 'required' => true), 'message' => array('type' => self::TYPE_STRING, 'validate' => 'isMessage', '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'),
@@ -149,11 +149,6 @@ class LoggerCore extends ObjectModel
return $this->hash; return $this->hash;
} }
public static function eraseAllLogs()
{
return Db::getInstance()->execute('TRUNCATE TABLE '._DB_PREFIX_.'log');
}
/** /**
* check if this log message already exists in database. * check if this log message already exists in database.
+12 -104
View File
@@ -50,11 +50,9 @@ class MailCore
* @param bool $modeSMTP * @param bool $modeSMTP
* @param string $template_path * @param string $template_path
* @param bool $die * @param bool $die
* @param string $bcc Bcc recipient
*/ */
public static function Send($id_lang, $template, $subject, $template_vars, $to, public static function Send($id_lang, $template, $subject, $template_vars, $to,
$to_name = null, $from = null, $from_name = null, $file_attachment = null, $mode_smtp = null, $to_name = null, $from = null, $from_name = null, $file_attachment = null, $mode_smtp = null, $template_path = _PS_MAIL_DIR_, $die = false, $id_shop = null)
$template_path = _PS_MAIL_DIR_, $die = false, $id_shop = null, $bcc = null)
{ {
$configuration = Configuration::getMultiple(array( $configuration = Configuration::getMultiple(array(
'PS_SHOP_EMAIL', 'PS_SHOP_EMAIL',
@@ -128,56 +126,37 @@ class MailCore
} }
/* Construct multiple recipients list if needed */ /* Construct multiple recipients list if needed */
$to_list = new Swift_RecipientList();
if (is_array($to) && isset($to)) if (is_array($to) && isset($to))
{ {
$to_list = new Swift_RecipientList();
foreach ($to as $key => $addr) foreach ($to as $key => $addr)
{ {
$to_name = null;
$addr = trim($addr); $addr = trim($addr);
if (!Validate::isEmail($addr)) if (!Validate::isEmail($addr))
{ {
Tools::dieOrLog(Tools::displayError('Error: invalid e-mail address'), $die); Tools::dieOrLog(Tools::displayError('Error: invalid e-mail address'), $die);
return false; return false;
} }
if (is_array($to_name)) if (is_array($to_name))
{ {
if ($to_name && is_array($to_name) && Validate::isGenericName($to_name[$key])) if ($to_name && is_array($to_name) && Validate::isGenericName($to_name[$key]))
$to_name = $to_name[$key]; $to_name = $to_name[$key];
} }
if ($to_name == null)
if ($to_name == null || $to_name == $addr) $to_name = $addr;
$to_name = ''; /* Encode accentuated chars */
else $to_list->addTo($addr, '=?UTF-8?B?'.base64_encode($to_name).'?=');
{
if (function_exists('mb_encode_mimeheader'))
$to_name = mb_encode_mimeheader($to_name, 'utf-8');
else
$to_name = self::mimeEncode($to_name);
}
$to_list->addTo($addr, $to_name);
} }
$to_plugin = $to[0]; $to_plugin = $to[0];
$to = $to_list;
} else { } else {
/* Simple recipient, one address */ /* Simple recipient, one address */
$to_plugin = $to; $to_plugin = $to;
if ($to_name == null || $to_name == $to) if ($to_name == null)
$to_name = ''; $to_name = $to;
else $to = new Swift_Address($to, '=?UTF-8?B?'.base64_encode($to_name).'?=');
{
if (function_exists('mb_encode_mimeheader'))
$to_name = mb_encode_mimeheader($to_name, 'utf-8');
else
$to_name = self::mimeEncode($to_name);
}
$to_list->addTo($to, $to_name);
} }
if(isset($bcc)) {
$to_list->addBcc($bcc);
}
$to = $to_list;
try { try {
/* Connect with the appropriate configuration */ /* Connect with the appropriate configuration */
if ($configuration['PS_MAIL_METHOD'] == 2) if ($configuration['PS_MAIL_METHOD'] == 2)
@@ -245,19 +224,12 @@ class MailCore
include_once($template_path.$iso.'/lang.php'); include_once($template_path.$iso.'/lang.php');
else if ($module_name && file_exists($theme_path.'mails/'.$iso.'/lang.php')) else if ($module_name && file_exists($theme_path.'mails/'.$iso.'/lang.php'))
include_once($theme_path.'mails/'.$iso.'/lang.php'); include_once($theme_path.'mails/'.$iso.'/lang.php');
else if (file_exists(_PS_MAIL_DIR_.$iso.'/lang.php'))
include_once(_PS_MAIL_DIR_.$iso.'/lang.php');
else else
{ include_once(_PS_MAIL_DIR_.$iso.'/lang.php');
Tools::dieOrLog(Tools::displayError('Error - The lang file is missing for :').' '.$iso, $die);
return false;
}
/* Create mail and attach differents parts */ /* Create mail and attach differents parts */
$message = new Swift_Message('['.Configuration::get('PS_SHOP_NAME', null, null, $id_shop).'] '.$subject); $message = new Swift_Message('['.Configuration::get('PS_SHOP_NAME', null, null, $id_shop).'] '.$subject);
$message->setCharset('utf-8');
/* Set Message-ID - getmypid() is blocked on some hosting */ /* Set Message-ID - getmypid() is blocked on some hosting */
$message->setId(Mail::generateId()); $message->setId(Mail::generateId());
@@ -400,68 +372,4 @@ class MailCore
return vsprintf("<%s.%d.%s@%s>", $midparams); return vsprintf("<%s.%d.%s@%s>", $midparams);
} }
public static function isMultibyte($data)
{
$length = strlen($data);
for ($i = 0; $i < $length; $i++)
{
$result = ord(($data[$i]));
if ($result > 128)
{
return true;
}
}
return false;
}
public static function mimeEncode($string, $charset = 'UTF-8', $newline = "\r\n")
{
if (!self::isMultibyte($string) && strlen($string) < 75)
{
return $string;
}
$charset = strtoupper($charset);
$start = '=?' . $charset . '?B?';
$end = '?=';
$sep = $end . $newline . ' ' . $start;
$length = 75 - strlen($start) - strlen($end);
$length = $length - ($length % 4);
if ($charset === 'UTF-8')
{
$parts = array();
$maxchars = floor(($length * 3) / 4);
$stringLength = strlen($string);
while ($stringLength > $maxchars)
{
$i = (int)$maxchars;
$result = ord($string[$i]);
while ($result >= 128 && $result <= 191)
{
$i--;
$result = ord($string[$i]);
}
$parts[] = base64_encode(substr($string, 0, $i));
$string = substr($string, $i);
$stringLength = strlen($string);
}
$parts[] = base64_encode($string);
$string = implode($sep, $parts);
}
else
{
$string = chunk_split(base64_encode($string), $length, $sep);
$string = preg_replace('/' . preg_quote($sep) . '$/', '', $string);
}
return $start . $string . $end;
}
} }
+1 -1
View File
@@ -79,7 +79,7 @@ class ManufacturerCore extends ObjectModel
// Lang fields // Lang fields
'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'), 'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),
'short_description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'), 'short_description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml', 'size' => 254),
'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128), 'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128),
'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255), 'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),
'meta_keywords' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName'), 'meta_keywords' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName'),
+5 -5
View File
@@ -39,7 +39,7 @@ class MediaCore
'ui.accordion' => array('fileName' => 'jquery.ui.accordion.min.js', 'dependencies' => array('ui.core', 'ui.widget'), 'theme' => true), 'ui.accordion' => array('fileName' => 'jquery.ui.accordion.min.js', 'dependencies' => array('ui.core', 'ui.widget'), 'theme' => true),
'ui.autocomplete' => array('fileName' => 'jquery.ui.autocomplete.min.js', 'dependencies' => array('ui.core', 'ui.widget', 'ui.position'), 'theme' => true), 'ui.autocomplete' => array('fileName' => 'jquery.ui.autocomplete.min.js', 'dependencies' => array('ui.core', 'ui.widget', 'ui.position'), 'theme' => true),
'ui.button' => array('fileName' => 'jquery.ui.button.min.js', 'dependencies' => array('ui.core', 'ui.widget'), 'theme' => true), 'ui.button' => array('fileName' => 'jquery.ui.button.min.js', 'dependencies' => array('ui.core', 'ui.widget'), 'theme' => true),
'ui.dialog' => array('fileName' => 'jquery.ui.dialog.min.js', 'dependencies' => array('ui.core', 'ui.widget', 'ui.position','ui.button'), 'theme' => true), 'ui.dialog' => array('fileName' => 'jquery.ui.dialog.min.js', 'dependencies' => array('ui.core', 'ui.widget', 'ui.position'), 'theme' => true),
'ui.slider' => array('fileName' => 'jquery.ui.slider.min.js', 'dependencies' => array('ui.core', 'ui.widget', 'ui.mouse'), 'theme' => true), 'ui.slider' => array('fileName' => 'jquery.ui.slider.min.js', 'dependencies' => array('ui.core', 'ui.widget', 'ui.mouse'), 'theme' => true),
'ui.tabs' => array('fileName' => 'jquery.ui.tabs.min.js', 'dependencies' => array('ui.core', 'ui.widget'), 'theme' => true), 'ui.tabs' => array('fileName' => 'jquery.ui.tabs.min.js', 'dependencies' => array('ui.core', 'ui.widget'), 'theme' => true),
'ui.datepicker' => array('fileName' => 'jquery.ui.datepicker.min.js', 'dependencies' => array('ui.core'), 'theme' => true), 'ui.datepicker' => array('fileName' => 'jquery.ui.datepicker.min.js', 'dependencies' => array('ui.core'), 'theme' => true),
@@ -109,7 +109,7 @@ class MediaCore
// If the string is too big preg_replace return an error // If the string is too big preg_replace return an error
// In this case, we don't compress the content // In this case, we don't compress the content
if (function_exists('preg_last_error') && preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR) if (preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR)
{ {
if (_PS_MODE_DEV_) if (_PS_MODE_DEV_)
error_log('ERROR: PREG_BACKTRACK_LIMIT_ERROR in function packJSinHTML'); error_log('ERROR: PREG_BACKTRACK_LIMIT_ERROR in function packJSinHTML');
@@ -201,7 +201,7 @@ class MediaCore
if (!preg_match('/^http(s?):\/\//i', $file_uri) && !@filemtime($file_uri)) if (!preg_match('/^http(s?):\/\//i', $file_uri) && !@filemtime($file_uri))
return false; return false;
if (Context::getContext()->controller->controller_type == 'admin' && !array_key_exists('host', $url_data)) if (Context::getContext()->controller->controller_type == 'admin')
{ {
$js_uri = preg_replace('/^'.preg_quote(__PS_BASE_URI__, '/').'/', '/', $js_uri); $js_uri = preg_replace('/^'.preg_quote(__PS_BASE_URI__, '/').'/', '/', $js_uri);
$js_uri = dirname(preg_replace('/\?.+$/', '', $_SERVER['REQUEST_URI']).'a').'/..'.$js_uri; $js_uri = dirname(preg_replace('/\?.+$/', '', $_SERVER['REQUEST_URI']).'a').'/..'.$js_uri;
@@ -271,10 +271,10 @@ class MediaCore
if ($add_no_conflict) if ($add_no_conflict)
$return[] = Media::getJSPath(_PS_JS_DIR_.'jquery/jquery.noConflict.php?version='.$version); $return[] = Media::getJSPath(_PS_JS_DIR_.'jquery/jquery.noConflict.php?version='.$version);
//added query migrate for compatibility with new version of jquery will be removed in ps 1.6 //added query migrate for compatibility with new version of jquery will be removed in ps 1.6
$return[] = Media::getJSPath(_PS_JS_DIR_.'jquery/jquery-migrate-1.2.1.js'); $return[] = Media::getJSPath(_PS_JS_DIR_.'jquery/jquery-migrate-1.2.1.js');
return $return; return $return;
} }
+19 -29
View File
@@ -68,11 +68,8 @@ class MetaCore extends ObjectModel
{ {
if ($file != 'index.php' && !in_array(strtolower(str_replace('Controller.php', '', $file)), $exlude_pages)) if ($file != 'index.php' && !in_array(strtolower(str_replace('Controller.php', '', $file)), $exlude_pages))
{ {
$class_name = str_replace('.php', '', $file); $reflection = new ReflectionClass(str_replace('.php', '', $file));
if (class_exists($class_name)) $properties = $reflection->getDefaultProperties();
$reflection = new ReflectionClass(str_replace('.php', '', $file));
if (isset($reflection) && $reflection)
$properties = $reflection->getDefaultProperties();
if (isset($properties['php_self'])) if (isset($properties['php_self']))
$selected_pages[$properties['php_self']] = $properties['php_self']; $selected_pages[$properties['php_self']] = $properties['php_self'];
else if (preg_match('/^[a-z0-9_.-]*\.php$/i', $file)) else if (preg_match('/^[a-z0-9_.-]*\.php$/i', $file))
@@ -85,11 +82,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 = Tools::strtolower(basename($file, '.php')); $filename = basename($file, '.php');
if ($filename == 'index') if ($filename == 'index')
continue; continue;
$module = Tools::strtolower(basename(dirname(dirname(dirname($file))))); $module = basename(dirname(dirname(dirname($file))));
$selected_pages[$module.' - '.$filename] = 'module-'.$module.'-'.$filename; $selected_pages[$module.' - '.$filename] = 'module-'.$module.'-'.$filename;
} }
@@ -277,31 +274,24 @@ class MetaCore extends ObjectModel
FROM `'._DB_PREFIX_.'category_lang` cl FROM `'._DB_PREFIX_.'category_lang` cl
WHERE cl.`id_lang` = '.(int)$id_lang.' WHERE cl.`id_lang` = '.(int)$id_lang.'
AND cl.`id_category` = '.(int)$id_category.Shop::addSqlRestrictionOnLang('cl'); AND cl.`id_category` = '.(int)$id_category.Shop::addSqlRestrictionOnLang('cl');
if ($row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql))
$cache_id = 'Meta::getCategoryMetas'.(int)$id_category.'-'.(int)$id_lang;
if (!Cache::isStored($cache_id))
{ {
if ($row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql)) if (empty($row['meta_description']))
{ $row['meta_description'] = strip_tags($row['description']);
if (empty($row['meta_description']))
$row['meta_description'] = strip_tags($row['description']); // Paginate title
if (!empty($row['meta_title']))
// Paginate title $row['meta_title'] = $title.$row['meta_title'].(!empty($page_number) ? ' ('.$page_number.')' : '').' - '.Configuration::get('PS_SHOP_NAME');
if (!empty($row['meta_title']))
$row['meta_title'] = $title.$row['meta_title'].(!empty($page_number) ? ' ('.$page_number.')' : '').' - '.Configuration::get('PS_SHOP_NAME');
else
$row['meta_title'] = $row['name'].(!empty($page_number) ? ' ('.$page_number.')' : '').' - '.Configuration::get('PS_SHOP_NAME');
if (!empty($title))
$row['meta_title'] = $title.(!empty($page_number) ? ' ('.$page_number.')' : '').' - '.Configuration::get('PS_SHOP_NAME');
$result = Meta::completeMetaTags($row, $row['name']);
}
else else
$result = Meta::getHomeMetas($id_lang, $page_name); $row['meta_title'] = $row['name'].(!empty($page_number) ? ' ('.$page_number.')' : '').' - '.Configuration::get('PS_SHOP_NAME');
Cache::store($cache_id, $result);
if (!empty($title))
$row['meta_title'] = $title.(!empty($page_number) ? ' ('.$page_number.')' : '').' - '.Configuration::get('PS_SHOP_NAME');
return Meta::completeMetaTags($row, $row['name']);
} }
return Cache::retrieve($cache_id);
return Meta::getHomeMetas($id_lang, $page_name);
} }
/** /**
+17 -43
View File
@@ -191,7 +191,7 @@ abstract class ObjectModelCore
if ($id) if ($id)
{ {
// Load object from database if object id is present // Load object from database if object id is present
$cache_id = 'objectmodel_'.$this->def['classname'].'_'.(int)$id.'_'.(int)$this->id_shop.'_'.(int)$id_lang; $cache_id = 'objectmodel_'.$this->def['classname'].'_'.(int)$id.'_'.(int)$id_shop.'_'.(int)$id_lang;
if (!Cache::isStored($cache_id)) if (!Cache::isStored($cache_id))
{ {
$sql = new DbQuery(); $sql = new DbQuery();
@@ -893,7 +893,7 @@ abstract class ObjectModelCore
* @param int $id_lang * @param int $id_lang
* @return bool|string * @return bool|string
*/ */
public function validateField($field, $value, $id_lang = null, $skip = array(), $human_errors = false) public function validateField($field, $value, $id_lang = null)
{ {
$this->cacheFieldsRequiredDatabase(); $this->cacheFieldsRequiredDatabase();
$data = $this->def['fields'][$field]; $data = $this->def['fields'][$field];
@@ -901,12 +901,9 @@ abstract class ObjectModelCore
// Check if field is required // Check if field is required
$required_fields = (isset(self::$fieldsRequiredDatabase[get_class($this)])) ? self::$fieldsRequiredDatabase[get_class($this)] : array(); $required_fields = (isset(self::$fieldsRequiredDatabase[get_class($this)])) ? self::$fieldsRequiredDatabase[get_class($this)] : array();
if (!$id_lang || $id_lang == Configuration::get('PS_LANG_DEFAULT')) if (!$id_lang || $id_lang == Configuration::get('PS_LANG_DEFAULT'))
if (!in_array('required', $skip) && (!empty($data['required']) || in_array($field, $required_fields))) if (!empty($data['required']) || in_array($field, $required_fields))
if (Tools::isEmpty($value)) if (Tools::isEmpty($value))
if ($human_errors) return 'Property '.get_class($this).'->'.$field.' is empty';
return sprintf(Tools::displayError('The %s field is required.'), $this->displayFieldName($field, get_class($this)));
else
return 'Property '.get_class($this).'->'.$field.' is empty';
// Default value // Default value
if (!$value && !empty($data['default'])) if (!$value && !empty($data['default']))
@@ -916,11 +913,11 @@ abstract class ObjectModelCore
} }
// Check field values // Check field values
if (!in_array('values', $skip) && !empty($data['values']) && is_array($data['values']) && !in_array($value, $data['values'])) if (!empty($data['values']) && is_array($data['values']) && !in_array($value, $data['values']))
return 'Property '.get_class($this).'->'.$field.' has bad value (allowed values are: '.implode(', ', $data['values']).')'; return 'Property '.get_class($this).'->'.$field.' has bad value (allowed values are: '.implode(', ', $data['values']).')';
// Check field size // Check field size
if (!in_array('size', $skip) && !empty($data['size'])) if (!empty($data['size']))
{ {
$size = $data['size']; $size = $data['size'];
if (!is_array($data['size'])) if (!is_array($data['size']))
@@ -928,24 +925,11 @@ abstract class ObjectModelCore
$length = Tools::strlen($value); $length = Tools::strlen($value);
if ($length < $size['min'] || $length > $size['max']) if ($length < $size['min'] || $length > $size['max'])
{ return 'Property '.get_class($this).'->'.$field.' length ('.$length.') must be between '.$size['min'].' and '.$size['max'];
if ($human_errors)
{
if (isset($data['lang']) && $data['lang'])
{
$language = new Language((int)$id_lang);
return sprintf(Tools::displayError('The field %1$s (%2$s) is too long (%3$d chars max, html chars including).'), $this->displayFieldName($field, get_class($this)), $language->name, $size['max']);
}
else
return sprintf(Tools::displayError('The %1$s field is too long (%2$d chars max).'), $this->displayFieldName($field, get_class($this)), $size['max']);
}
else
return 'Property '.get_class($this).'->'.$field.' length ('.$length.') must be between '.$size['min'].' and '.$size['max'];
}
} }
// Check field validator // Check field validator
if (!in_array('validate', $skip) && !empty($data['validate'])) if (!empty($data['validate']))
{ {
if (!method_exists('Validate', $data['validate'])) if (!method_exists('Validate', $data['validate']))
throw new PrestaShopException('Validation function not found. '.$data['validate']); throw new PrestaShopException('Validation function not found. '.$data['validate']);
@@ -964,12 +948,7 @@ abstract class ObjectModelCore
$res = false; $res = false;
} }
if (!$res) if (!$res)
{ return 'Property '.get_class($this).'->'.$field.' is not valid';
if ($human_errors)
return sprintf(Tools::displayError('The %s field is invalid.'), $this->displayFieldName($field, get_class($this)));
else
return 'Property '.get_class($this).'->'.$field.' is not valid';
}
} }
} }
@@ -1139,7 +1118,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.(isset($this->def['fields']['id_shop_group']) ? ' OR (id_shop = 0 AND id_shop_group='.(int)Shop::getGroupFromShop((int)$id_shop).')' : '').')'; $or[] = ' main.id_shop = '.(int)$id_shop.' ';
$prepend = ''; $prepend = '';
if (count($or)) if (count($or))
@@ -1234,16 +1213,11 @@ abstract class ObjectModelCore
if ($id_shop === null) if ($id_shop === null)
$id_shop = Context::getContext()->shop->id; $id_shop = Context::getContext()->shop->id;
$cache_id = 'objectmodel_shop_'.$this->def['classname'].'_'.(int)$this->id.'-'.(int)$id_shop; $sql = 'SELECT id_shop
if (!Cache::isStored($cache_id)) FROM `'.pSQL(_DB_PREFIX_.$this->def['table']).'_shop`
{ WHERE `'.$this->def['primary'].'` = '.(int)$this->id.'
$sql = 'SELECT id_shop AND id_shop = '.(int)$id_shop;
FROM `'.pSQL(_DB_PREFIX_.$this->def['table']).'_shop` return (bool)Db::getInstance()->getValue($sql);
WHERE `'.$this->def['primary'].'` = '.(int)$this->id.'
AND id_shop = '.(int)$id_shop;
Cache::store($cache_id, (bool)Db::getInstance()->getValue($sql));
}
return Cache::retrieve($cache_id);
} }
/** /**
@@ -1663,4 +1637,4 @@ abstract class ObjectModelCore
{ {
$this->update_fields = $fields; $this->update_fields = $fields;
} }
} }
+10 -16
View File
@@ -399,8 +399,6 @@ abstract class PaymentModuleCore extends Module
} // end foreach ($products) } // end foreach ($products)
$cart_rules_list = ''; $cart_rules_list = '';
$total_reduction_value_ti = 0;
$total_reduction_value_tex = 0;
foreach ($cart_rules as $cart_rule) foreach ($cart_rules as $cart_rule)
{ {
$package = array('id_carrier' => $order->id_carrier, 'id_address' => $order->id_address_delivery, 'products' => $order->product_list); $package = array('id_carrier' => $order->id_carrier, 'id_address' => $order->id_address_delivery, 'products' => $order->product_list);
@@ -421,8 +419,7 @@ abstract class PaymentModuleCore extends Module
** THEN ** THEN
** The voucher is cloned with a new value corresponding to the remainder ** The voucher is cloned with a new value corresponding to the remainder
*/ */
if (count($order_list) == 1 && $values['tax_incl'] > $order->total_products_wt && $cart_rule['obj']->partial_use == 1 && $cart_rule['obj']->reduction_amount > 0)
if (count($order_list) == 1 && $values['tax_incl'] > ($order->total_products_wt - $total_reduction_value_ti) && $cart_rule['obj']->partial_use == 1 && $cart_rule['obj']->reduction_amount > 0)
{ {
// Create a new voucher from the original // Create a new voucher from the original
$voucher = new CartRule($cart_rule['obj']->id); // We need to instantiate the CartRule without lang parameter to allow saving it $voucher = new CartRule($cart_rule['obj']->id); // We need to instantiate the CartRule without lang parameter to allow saving it
@@ -435,9 +432,9 @@ abstract class PaymentModuleCore extends Module
// Set the new voucher value // Set the new voucher value
if ($voucher->reduction_tax) if ($voucher->reduction_tax)
$voucher->reduction_amount = $values['tax_incl'] - ($order->total_products_wt - $total_reduction_value_ti) - ($voucher->free_shipping == 1 ? $order->total_shipping_tax_incl : 0); $voucher->reduction_amount = $values['tax_incl'] - $order->total_products_wt - ($voucher->free_shipping == 1 ? $order->total_shipping_tax_incl : 0);
else else
$voucher->reduction_amount = $values['tax_excl'] - ($order->total_products - $total_reduction_value_tex) - ($voucher->free_shipping == 1 ? $order->total_shipping_tax_excl : 0); $voucher->reduction_amount = $values['tax_excl'] - $order->total_products - ($voucher->free_shipping == 1 ? $order->total_shipping_tax_excl : 0);
$voucher->id_customer = $order->id_customer; $voucher->id_customer = $order->id_customer;
$voucher->quantity = 1; $voucher->quantity = 1;
@@ -469,10 +466,7 @@ abstract class PaymentModuleCore extends Module
$values['tax_incl'] -= $values['tax_incl'] - $order->total_products_wt; $values['tax_incl'] -= $values['tax_incl'] - $order->total_products_wt;
$values['tax_excl'] -= $values['tax_excl'] - $order->total_products; $values['tax_excl'] -= $values['tax_excl'] - $order->total_products;
} }
$total_reduction_value_ti += $values['tax_incl'];
$total_reduction_value_tex += $values['tax_excl'];
$order->addCartRule($cart_rule['obj']->id, $cart_rule['obj']->name, $values, 0, $cart_rule['obj']->free_shipping); $order->addCartRule($cart_rule['obj']->id, $cart_rule['obj']->name, $values, 0, $cart_rule['obj']->free_shipping);
@@ -536,13 +530,6 @@ 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();
@@ -551,6 +538,13 @@ 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
+75 -98
View File
@@ -229,13 +229,7 @@ class ProductCore extends ObjectModel
protected static $_prices = array(); protected static $_prices = array();
protected static $_pricesLevel2 = array(); protected static $_pricesLevel2 = array();
protected static $_incat = array(); protected static $_incat = array();
/**
* @since 1.5.6.1
* @var array $_cart_quantity is deprecated since 1.5.6.1
*/
protected static $_cart_quantity = array(); protected static $_cart_quantity = array();
protected static $_tax_rules_group = array(); protected static $_tax_rules_group = array();
protected static $_cacheFeatures = array(); protected static $_cacheFeatures = array();
protected static $_frontFeaturesCache = array(); protected static $_frontFeaturesCache = array();
@@ -525,17 +519,6 @@ class ProductCore extends ObjectModel
if (!Validate::isLoadedObject($customer)) if (!Validate::isLoadedObject($customer))
die(Tools::displayError()); die(Tools::displayError());
self::$_taxCalculationMethod = Group::getPriceDisplayMethod((int)$customer->id_default_group); self::$_taxCalculationMethod = Group::getPriceDisplayMethod((int)$customer->id_default_group);
$cur_cart = Context::getContext()->cart;
$id_address = 0;
if (Validate::isLoadedObject($cur_cart))
$id_address = (int)$cur_cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')};
$address_infos = Address::getCountryAndState($id_address);
if (self::$_taxCalculationMethod != PS_TAX_EXC
&& !empty($address_infos['vat_number'])
&& $address_infos['id_country'] != Configuration::get('VATNUMBER_COUNTRY')
&& Configuration::get('VATNUMBER_MANAGEMENT'))
self::$_taxCalculationMethod = PS_TAX_EXC;
} }
else else
self::$_taxCalculationMethod = Group::getPriceDisplayMethod(Group::getCurrent()->id); self::$_taxCalculationMethod = Group::getPriceDisplayMethod(Group::getCurrent()->id);
@@ -747,10 +730,10 @@ class ProductCore extends ObjectModel
/** /**
* @see ObjectModel::validateField() * @see ObjectModel::validateField()
*/ */
public function validateField($field, $value, $id_lang = null, $skip = array(), $human_errors = false) public function validateField($field, $value, $id_lang = null)
{ {
$value = ($field == 'description_short' ? strip_tags($value) : $value); $value = ($field == 'description_short' ? strip_tags($value) : $value);
return parent::validateField($field, $value, $id_lang, $skip, $human_errors); return parent::validateField($field, $value, $id_lang);
} }
public function toggleStatus() public function toggleStatus()
@@ -1385,8 +1368,8 @@ class ProductCore extends ObjectModel
} }
$product_supplier->product_supplier_reference = pSQL($supplier_reference); $product_supplier->product_supplier_reference = pSQL($supplier_reference);
$product_supplier->product_supplier_price_te = !is_null($price) ? (float)$price : (float)$product_supplier->product_supplier_price_te; $product_supplier->product_supplier_price_te = (float)$price;
$product_supplier->id_currency = !is_null($id_currency) ? (int)$id_currency : (int)$product_supplier->id_currency; $product_supplier->id_currency = (int)$id_currency;
$product_supplier->save(); $product_supplier->save();
} }
} }
@@ -2440,18 +2423,13 @@ class ProductCore extends ObjectModel
{ {
if (!$context) if (!$context)
$context = Context::getContext(); $context = Context::getContext();
$cache_id = 'Product::getOrderStates_'.(int)$id_product.'-'.(int)$context->shop->id;
if (!Cache::isStored($cache_id)) $sql = 'SELECT image_shop.`id_image`
{ FROM `'._DB_PREFIX_.'image` i
$sql = 'SELECT image_shop.`id_image` '.Shop::addSqlAssociation('image', 'i').'
FROM `'._DB_PREFIX_.'image` i WHERE i.`id_product` = '.(int)$id_product.'
'.Shop::addSqlAssociation('image', 'i').' AND image_shop.`cover` = 1';
WHERE i.`id_product` = '.(int)$id_product.' return Db::getInstance()->getRow($sql);
AND image_shop.`cover` = 1';
$result = Db::getInstance()->getRow($sql);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
/** /**
@@ -2490,9 +2468,8 @@ class ProductCore extends ObjectModel
if (!Validate::isBool($usetax) || !Validate::isUnsignedId($id_product)) if (!Validate::isBool($usetax) || !Validate::isUnsignedId($id_product))
die(Tools::displayError()); die(Tools::displayError());
// Initializations // Initializations
$id_group = (int)Group::getCurrent()->id; $id_group = (isset($context->customer) ? $context->customer->id_default_group : (int)Configuration::get('PS_CUSTOMER_GROUP'));
// If there is cart in context or if the specified id_cart is different from the context cart id // If there is cart in context or if the specified id_cart is different from the context cart id
if (!is_object($cur_cart) || (Validate::isUnsignedInt($id_cart) && $id_cart && $cur_cart->id != $id_cart)) if (!is_object($cur_cart) || (Validate::isUnsignedInt($id_cart) && $id_cart && $cur_cart->id != $id_cart))
@@ -2513,17 +2490,15 @@ class ProductCore extends ObjectModel
$cart_quantity = 0; $cart_quantity = 0;
if ((int)$id_cart) if ((int)$id_cart)
{ {
$cache_id = 'Product::getPriceStatic_'.(int)$id_product.'-'.(int)$id_cart; $condition = '';
if (!Cache::isStored($cache_id)) $cache_name = (int)$id_cart.'_'.(int)$id_product;
{ if (!isset(self::$_cart_quantity[$cache_name]) || self::$_cart_quantity[$cache_name] != (int)$quantity)
$sql = 'SELECT SUM(`quantity`) self::$_cart_quantity[$cache_name] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT SUM(`quantity`)
FROM `'._DB_PREFIX_.'cart_product` FROM `'._DB_PREFIX_.'cart_product`
WHERE `id_product` = '.(int)$id_product.' WHERE `id_product` = '.(int)$id_product.'
AND `id_cart` = '.(int)$id_cart; AND `id_cart` = '.(int)$id_cart);
$cart_quantity = (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql); $cart_quantity = self::$_cart_quantity[$cache_name];
Cache::store($cache_id, $cart_quantity);
}
$cart_quantity = Cache::retrieve($cache_id);
} }
$id_currency = (int)Validate::isLoadedObject($context->currency) ? $context->currency->id : Configuration::get('PS_CURRENCY_DEFAULT'); $id_currency = (int)Validate::isLoadedObject($context->currency) ? $context->currency->id : Configuration::get('PS_CURRENCY_DEFAULT');
@@ -2533,7 +2508,7 @@ class ProductCore extends ObjectModel
$id_state = 0; $id_state = 0;
$zipcode = 0; $zipcode = 0;
if (!$id_address && Validate::isLoadedObject($cur_cart)) if (!$id_address)
$id_address = $cur_cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}; $id_address = $cur_cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')};
if ($id_address) if ($id_address)
@@ -2744,7 +2719,8 @@ class ProductCore extends ObjectModel
if ($use_group_reduction) if ($use_group_reduction)
{ {
$reduction_from_category = GroupReduction::getValueForProduct($id_product, $id_group); $reduction_from_category = GroupReduction::getValueForProduct($id_product, $id_group);
if ($reduction_from_category !== false)
if (!empty($reduction_from_category) && (float)$reduction_from_category == 0)
$price -= $price * (float)$reduction_from_category; $price -= $price * (float)$reduction_from_category;
else // apply group reduction if there is no group reduction for this category else // apply group reduction if there is no group reduction for this category
$price *= ((100 - Group::getReductionByIdGroup($id_group)) / 100); $price *= ((100 - Group::getReductionByIdGroup($id_group)) / 100);
@@ -2938,7 +2914,7 @@ class ProductCore extends ObjectModel
* @param Shop $shop * @param Shop $shop
* @return string * @return string
*/ */
public static function sqlStock($product_alias, $product_attribute = null, $inner_join = false, Shop $shop = null) public static function sqlStock($product_alias, $product_attribute = 0, $inner_join = false, Shop $shop = null)
{ {
$id_shop = ($shop !== null ? (int)$shop->id : null); $id_shop = ($shop !== null ? (int)$shop->id : null);
$sql = (($inner_join) ? ' INNER ' : ' LEFT ').' $sql = (($inner_join) ? ' INNER ' : ' LEFT ').'
@@ -3079,18 +3055,18 @@ class ProductCore extends ObjectModel
if (!Combination::isFeatureActive()) if (!Combination::isFeatureActive())
return array(); return array();
$sql = 'SELECT ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, $sql = 'SELECT ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name,
a.`id_attribute`, al.`name` AS attribute_name, a.`color` AS attribute_color, product_attribute_shop.`id_product_attribute`, a.`id_attribute`, al.`name` AS attribute_name, a.`color` AS attribute_color, pa.`id_product_attribute`,
IFNULL(stock.quantity, 0) as quantity, product_attribute_shop.`price`, product_attribute_shop.`ecotax`, product_attribute_shop.`weight`, IFNULL(stock.quantity, 0) as quantity, product_attribute_shop.`price`, product_attribute_shop.`ecotax`, pa.`weight`,
product_attribute_shop.`default_on`, pa.`reference`, product_attribute_shop.`unit_price_impact`, product_attribute_shop.`default_on`, pa.`reference`, product_attribute_shop.`unit_price_impact`,
product_attribute_shop.`minimal_quantity`, product_attribute_shop.`available_date`, ag.`group_type` pa.`minimal_quantity`, pa.`available_date`, ag.`group_type`
FROM `'._DB_PREFIX_.'product_attribute` pa FROM `'._DB_PREFIX_.'product_attribute` pa
'.Shop::addSqlAssociation('product_attribute', 'pa').' '.Shop::addSqlAssociation('product_attribute', 'pa').'
'.Product::sqlStock('pa', 'pa').' '.Product::sqlStock('pa', 'pa').'
LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON (pac.`id_product_attribute` = pa.`id_product_attribute`) LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute`
LEFT JOIN `'._DB_PREFIX_.'attribute` a ON (a.`id_attribute` = pac.`id_attribute`) LEFT JOIN `'._DB_PREFIX_.'attribute` a ON a.`id_attribute` = pac.`id_attribute`
LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON (ag.`id_attribute_group` = a.`id_attribute_group`) LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group`
LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON (a.`id_attribute` = al.`id_attribute`) LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON a.`id_attribute` = al.`id_attribute`
LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON (ag.`id_attribute_group` = agl.`id_attribute_group`) LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON ag.`id_attribute_group` = agl.`id_attribute_group`
'.Shop::addSqlAssociation('attribute', 'a').' '.Shop::addSqlAssociation('attribute', 'a').'
WHERE pa.`id_product` = '.(int)$this->id.' WHERE pa.`id_product` = '.(int)$this->id.'
AND al.`id_lang` = '.(int)$id_lang.' AND al.`id_lang` = '.(int)$id_lang.'
@@ -3183,9 +3159,8 @@ class ProductCore extends ObjectModel
LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (p.`id_manufacturer`= m.`id_manufacturer`) LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (p.`id_manufacturer`= m.`id_manufacturer`)
'.Product::sqlStock('p', 0).' '.Product::sqlStock('p', 0).'
WHERE `id_product_1` = '.(int)$this->id. WHERE `id_product_1` = '.(int)$this->id.
($active ? ' AND product_shop.`active` = 1 AND product_shop.`visibility` != \'none\'' : '').' ($active ? ' AND product_shop.`active` = 1' : '').'
GROUP BY product_shop.id_product'; GROUP BY product_shop.id_product';
if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql)) if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql))
return false; return false;
foreach ($result as &$row) foreach ($result as &$row)
@@ -3337,7 +3312,7 @@ class ProductCore extends ObjectModel
$context = Context::getContext(); $context = Context::getContext();
$sql = new DbQuery(); $sql = new DbQuery();
$sql->select('p.`id_product`, pl.`name`, p.`ean13`, p.`upc`, p.`active`, p.`reference`, m.`name` AS manufacturer_name, stock.`quantity`, product_shop.advanced_stock_management, p.`customizable`'); $sql->select('p.`id_product`, pl.`name`, p.`active`, p.`reference`, m.`name` AS manufacturer_name, stock.`quantity`, product_shop.advanced_stock_management, p.`customizable`');
$sql->from('category_product', 'cp'); $sql->from('category_product', 'cp');
$sql->leftJoin('product', 'p', 'p.`id_product` = cp.`id_product`'); $sql->leftJoin('product', 'p', 'p.`id_product` = cp.`id_product`');
$sql->join(Shop::addSqlAssociation('product', 'p')); $sql->join(Shop::addSqlAssociation('product', 'p'));
@@ -3348,8 +3323,6 @@ class ProductCore extends ObjectModel
$sql->leftJoin('manufacturer', 'm', 'm.`id_manufacturer` = p.`id_manufacturer`'); $sql->leftJoin('manufacturer', 'm', 'm.`id_manufacturer` = p.`id_manufacturer`');
$where = 'pl.`name` LIKE \'%'.pSQL($query).'%\' $where = 'pl.`name` LIKE \'%'.pSQL($query).'%\'
OR p.`ean13` LIKE \'%'.pSQL($query).'%\'
OR p.`upc` LIKE \'%'.pSQL($query).'%\'
OR p.`reference` LIKE \'%'.pSQL($query).'%\' OR p.`reference` LIKE \'%'.pSQL($query).'%\'
OR p.`supplier_reference` LIKE \'%'.pSQL($query).'%\' OR p.`supplier_reference` LIKE \'%'.pSQL($query).'%\'
OR p.`id_product` IN (SELECT id_product FROM '._DB_PREFIX_.'product_supplier sp WHERE `product_supplier_reference` LIKE \'%'.pSQL($query).'%\')'; OR p.`id_product` IN (SELECT id_product FROM '._DB_PREFIX_.'product_supplier sp WHERE `product_supplier_reference` LIKE \'%'.pSQL($query).'%\')';
@@ -3603,7 +3576,6 @@ 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);
} }
} }
@@ -4313,25 +4285,19 @@ class ProductCore extends ObjectModel
public function checkAccess($id_customer) public function checkAccess($id_customer)
{ {
$cache_id = 'Product::checkAccess_'.(int)$this->id.'-'.(int)$id_customer.(!$id_customer ? '-'.(int)Group::getCurrent()->id : ''); if (!$id_customer)
if (!Cache::isStored($cache_id)) return (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
{ SELECT ctg.`id_group`
if (!$id_customer) FROM `'._DB_PREFIX_.'category_product` cp
$result = (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' INNER JOIN `'._DB_PREFIX_.'category_group` ctg ON (ctg.`id_category` = cp.`id_category`)
SELECT ctg.`id_group` WHERE cp.`id_product` = '.(int)$this->id.' AND ctg.`id_group` ='.(int)Group::getCurrent()->id);
FROM `'._DB_PREFIX_.'category_product` cp else
INNER JOIN `'._DB_PREFIX_.'category_group` ctg ON (ctg.`id_category` = cp.`id_category`) return (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
WHERE cp.`id_product` = '.(int)$this->id.' AND ctg.`id_group` = '.(int)Group::getCurrent()->id); SELECT cg.`id_group`
else FROM `'._DB_PREFIX_.'category_product` cp
$result = (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' INNER JOIN `'._DB_PREFIX_.'category_group` ctg ON (ctg.`id_category` = cp.`id_category`)
SELECT cg.`id_group` INNER JOIN `'._DB_PREFIX_.'customer_group` cg ON (cg.`id_group` = ctg.`id_group`)
FROM `'._DB_PREFIX_.'category_product` cp WHERE cp.`id_product` = '.(int)$this->id.' AND cg.`id_customer` = '.(int)$id_customer);
INNER JOIN `'._DB_PREFIX_.'category_group` ctg ON (ctg.`id_category` = cp.`id_category`)
INNER JOIN `'._DB_PREFIX_.'customer_group` cg ON (cg.`id_group` = ctg.`id_group`)
WHERE cp.`id_product` = '.(int)$this->id.' AND cg.`id_customer` = '.(int)$id_customer);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
@@ -4891,12 +4857,8 @@ class ProductCore extends ObjectModel
*/ */
public static function getAttributesParams($id_product, $id_product_attribute) public static function getAttributesParams($id_product, $id_product_attribute)
{ {
$id_lang = (int)Context::getContext()->language->id;
$id_shop = (int)Context::getContext()->shop->id;
$cache_id = 'Product::getAttributesParams_'.(int)$id_product.'-'.(int)$id_product_attribute.'-'.(int)$id_lang.'-'.(int)$id_shop;
// if blocklayered module is installed we check if user has set custom attribute name // if blocklayered module is installed we check if user has set custom attribute name
if (Module::isInstalled('blocklayered') && Module::isEnabled('blocklayered')) if (Module::isInstalled('blocklayered'))
{ {
$nb_custom_values = Db::getInstance()->executeS(' $nb_custom_values = Db::getInstance()->executeS('
SELECT DISTINCT la.`id_attribute`, la.`url_name` as `name` SELECT DISTINCT la.`id_attribute`, la.`url_name` as `name`
@@ -4907,7 +4869,7 @@ class ProductCore extends ObjectModel
ON (pac.`id_product_attribute` = pa.`id_product_attribute`) ON (pac.`id_product_attribute` = pa.`id_product_attribute`)
'.Shop::addSqlAssociation('product_attribute', 'pa').' '.Shop::addSqlAssociation('product_attribute', 'pa').'
LEFT JOIN `'._DB_PREFIX_.'layered_indexable_attribute_lang_value` la LEFT JOIN `'._DB_PREFIX_.'layered_indexable_attribute_lang_value` la
ON (la.`id_attribute` = a.`id_attribute` AND la.`id_lang` = '.(int)$id_lang.') ON (la.`id_attribute` = a.`id_attribute` AND la.`id_lang` = '.(int)Context::getContext()->language->id.')
WHERE la.`url_name` IS NOT NULL AND la.`url_name` != \'\' WHERE la.`url_name` IS NOT NULL AND la.`url_name` != \'\'
AND pa.`id_product` = '.(int)$id_product.' AND pa.`id_product` = '.(int)$id_product.'
AND pac.`id_product_attribute` = '.(int)$id_product_attribute); AND pac.`id_product_attribute` = '.(int)$id_product_attribute);
@@ -4925,7 +4887,7 @@ class ProductCore extends ObjectModel
LEFT JOIN `'._DB_PREFIX_.'attribute` a LEFT JOIN `'._DB_PREFIX_.'attribute` a
ON (a.`id_attribute_group` = g.`id_attribute_group`) ON (a.`id_attribute_group` = g.`id_attribute_group`)
WHERE a.`id_attribute` = '.(int)$attribute['id_attribute'].' WHERE a.`id_attribute` = '.(int)$attribute['id_attribute'].'
AND g.`id_lang` = '.(int)$id_lang.' AND g.`id_lang` = '.(int)Context::getContext()->language->id.'
AND g.`url_name` IS NOT NULL AND g.`url_name` != \'\''); AND g.`url_name` IS NOT NULL AND g.`url_name` != \'\'');
if (empty($group)) if (empty($group))
{ {
@@ -4935,7 +4897,7 @@ class ProductCore extends ObjectModel
LEFT JOIN `'._DB_PREFIX_.'attribute` a LEFT JOIN `'._DB_PREFIX_.'attribute` a
ON (a.`id_attribute_group` = g.`id_attribute_group`) ON (a.`id_attribute_group` = g.`id_attribute_group`)
WHERE a.`id_attribute` = '.(int)$attribute['id_attribute'].' WHERE a.`id_attribute` = '.(int)$attribute['id_attribute'].'
AND g.`id_lang` = '.(int)$id_lang.' AND g.`id_lang` = '.(int)Context::getContext()->language->id.'
AND g.`name` IS NOT NULL'); AND g.`name` IS NOT NULL');
} }
$result[] = array_merge($attribute, $group[0]); $result[] = array_merge($attribute, $group[0]);
@@ -4944,9 +4906,9 @@ class ProductCore extends ObjectModel
SELECT DISTINCT a.`id_attribute_group`, al.`name`, agl.`name` as `group` SELECT DISTINCT a.`id_attribute_group`, al.`name`, agl.`name` as `group`
FROM `'._DB_PREFIX_.'attribute` a FROM `'._DB_PREFIX_.'attribute` a
LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al
ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = '.(int)$id_lang.') ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = '.(int)Context::getContext()->language->id.')
LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl
ON (a.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = '.(int)$id_lang.') ON (a.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = '.(int)Context::getContext()->language->id.')
LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac
ON (a.`id_attribute` = pac.`id_attribute`) ON (a.`id_attribute` = pac.`id_attribute`)
LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa
@@ -4955,30 +4917,45 @@ class ProductCore extends ObjectModel
WHERE pa.`id_product` = '.(int)$id_product.' WHERE pa.`id_product` = '.(int)$id_product.'
AND pac.id_product_attribute = '.(int)$id_product_attribute.' AND pac.id_product_attribute = '.(int)$id_product_attribute.'
AND a.`id_attribute` NOT IN('.implode(', ', $tab_id_attribute).')'); AND a.`id_attribute` NOT IN('.implode(', ', $tab_id_attribute).')');
return array_merge($values_not_custom, $result); $result = array_merge($values_not_custom, $result);
}
else
{
$result = Db::getInstance()->executeS('
SELECT al.`name`, agl.`name` as `group`
FROM `'._DB_PREFIX_.'attribute` a
LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al
ON (al.`id_attribute` = a.`id_attribute` AND al.`id_lang` = '.(int)Context::getContext()->language->id.')
LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac
ON (pac.`id_attribute` = a.`id_attribute`)
LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa
ON (pa.`id_product_attribute` = pac.`id_product_attribute`)
'.Shop::addSqlAssociation('product_attribute', 'pa').'
LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl
ON (a.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = '.(int)Context::getContext()->language->id.')
WHERE pa.`id_product` = '.(int)$id_product.'
AND pac.`id_product_attribute` = '.(int)$id_product_attribute.'
AND agl.`id_lang` = '.(int)Context::getContext()->language->id);
} }
} }
else
if (!Cache::isStored($cache_id))
{ {
$result = Db::getInstance()->executeS(' $result = Db::getInstance()->executeS('
SELECT al.`name`, agl.`name` as `group` SELECT al.`name`, agl.`name` as `group`
FROM `'._DB_PREFIX_.'attribute` a FROM `'._DB_PREFIX_.'attribute` a
LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al
ON (al.`id_attribute` = a.`id_attribute` AND al.`id_lang` = '.(int)$id_lang.') ON (al.`id_attribute` = a.`id_attribute` AND al.`id_lang` = '.(int)Context::getContext()->language->id.')
LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac
ON (pac.`id_attribute` = a.`id_attribute`) ON (pac.`id_attribute` = a.`id_attribute`)
LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa
ON (pa.`id_product_attribute` = pac.`id_product_attribute`) ON (pa.`id_product_attribute` = pac.`id_product_attribute`)
'.Shop::addSqlAssociation('product_attribute', 'pa').' '.Shop::addSqlAssociation('product_attribute', 'pa').'
LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl
ON (a.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = '.(int)$id_lang.') ON (a.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = '.(int)Context::getContext()->language->id.')
WHERE pa.`id_product` = '.(int)$id_product.' WHERE pa.`id_product` = '.(int)$id_product.'
AND pac.`id_product_attribute` = '.(int)$id_product_attribute.' AND pac.`id_product_attribute` = '.(int)$id_product_attribute.'
AND agl.`id_lang` = '.(int)$id_lang); AND agl.`id_lang` = '.(int)Context::getContext()->language->id);
Cache::store($cache_id, $result);
} }
$result = Cache::retrieve($cache_id);
return $result; return $result;
} }
+5 -5
View File
@@ -299,10 +299,10 @@ class ProductDownloadCore extends ObjectModel
*/ */
public static function getNewFilename() public static function getNewFilename()
{ {
do { $ret = sha1(microtime());
$filename = sha1(microtime()); if (file_exists(_PS_DOWNLOAD_DIR_.$ret))
} while (file_exists(_PS_DOWNLOAD_DIR_.$filename)); $ret = ProductDownload::getNewFilename();
return $filename; return $ret;
} }
/** /**
@@ -314,4 +314,4 @@ class ProductDownloadCore extends ObjectModel
{ {
return Configuration::get('PS_VIRTUAL_PROD_FEATURE_ACTIVE'); return Configuration::get('PS_VIRTUAL_PROD_FEATURE_ACTIVE');
} }
} }
+17 -41
View File
@@ -74,21 +74,11 @@ 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';
//Main query $prefix = '';
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`,
@@ -114,7 +104,12 @@ class ProductSaleCore
'.Product::sqlStock('p').' '.Product::sqlStock('p').'
WHERE product_shop.`active` = 1 WHERE product_shop.`active` = 1
AND p.`visibility` != \'none\' AND p.`visibility` != \'none\'
AND p.`id_product` IN ('.$ids.') AND p.`id_product` IN (
SELECT cp.`id_product`
FROM `'._DB_PREFIX_.'category_group` cg
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
WHERE cg.`id_group` '.$sql_groups.'
)
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;
@@ -146,27 +141,11 @@ 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, pl.`link_rewrite`, pl.`name`, pl.`description_short`, MAX(image_shop.`id_image`) id_image, il.`legend`, $sql = 'SELECT p.id_product, 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, p.quantity, p.customizable, ps.`quantity` AS sales, p.`ean13`, p.`upc`, cl.`link_rewrite` AS category
IFNULL(pa.minimal_quantity, p.minimal_quantity) as minimal_quantity, p.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 ON (ps.`id_product` = pa.`id_product` AND pa.default_on = 1)
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').'
@@ -178,11 +157,15 @@ class ProductSaleCore
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 p.`visibility` != \'none\' AND p.`visibility` != \'none\'
AND p.`id_product` IN ('.$ids.') AND p.`id_product` IN (
SELECT cp.`id_product`
FROM `'._DB_PREFIX_.'category_group` cg
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
WHERE cg.`id_group` '.$sql_groups.'
)
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;
if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql)) if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql))
return false; return false;
@@ -190,13 +173,6 @@ class ProductSaleCore
{ {
$row['link'] = $context->link->getProductLink($row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']); $row['link'] = $context->link->getProductLink($row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']);
$row['id_image'] = Product::defineProductImage($row, $id_lang); $row['id_image'] = Product::defineProductImage($row, $id_lang);
$row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']);
$row['price_tax_exc'] = Product::getPriceStatic(
(int)$row['id_product'],
false,
((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null),
(Product::$_taxCalculationMethod == PS_TAX_EXC ? 2 : 6)
);
} }
return $result; return $result;
} }
+15 -17
View File
@@ -139,22 +139,21 @@ class ReferrerCore extends ObjectModel
} }
$sql = 'SELECT COUNT(DISTINCT cs.id_connections_source) AS visits, $sql = 'SELECT COUNT(DISTINCT cs.id_connections_source) AS visits,
COUNT(DISTINCT cs.id_connections) as visitors, COUNT(DISTINCT cs.id_connections) as visitors,
COUNT(DISTINCT c.id_guest) as uniqs, COUNT(DISTINCT c.id_guest) as uniqs,
COUNT(DISTINCT cp.time_start) as pages COUNT(DISTINCT cp.time_start) as pages
FROM '._DB_PREFIX_.'referrer_cache rc FROM '._DB_PREFIX_.'referrer_cache rc
LEFT JOIN '._DB_PREFIX_.'referrer r ON rc.id_referrer = r.id_referrer LEFT JOIN '._DB_PREFIX_.'referrer r ON rc.id_referrer = r.id_referrer
LEFT JOIN '._DB_PREFIX_.'referrer_shop rs ON r.id_referrer = rs.id_referrer LEFT JOIN '._DB_PREFIX_.'referrer_shop rs ON r.id_referrer = rs.id_referrer
LEFT JOIN '._DB_PREFIX_.'connections_source cs ON rc.id_connections_source = cs.id_connections_source LEFT JOIN '._DB_PREFIX_.'connections_source cs ON rc.id_connections_source = cs.id_connections_source
LEFT JOIN '._DB_PREFIX_.'connections c ON cs.id_connections = c.id_connections LEFT JOIN '._DB_PREFIX_.'connections c ON cs.id_connections = c.id_connections
LEFT JOIN '._DB_PREFIX_.'connections_page cp ON cp.id_connections = c.id_connections LEFT JOIN '._DB_PREFIX_.'connections_page cp ON cp.id_connections = c.id_connections
'.$join.' '.$join.'
WHERE 1'. WHERE cs.date_add BETWEEN '.ModuleGraph::getDateBetween($employee).'
((isset($employee->stats_date_from) && isset($employee->stats_date_from))? ' AND cs.date_add BETWEEN \''.pSQL($employee->stats_date_from).' 00:00:00\' AND \''.pSQL($employee->stats_date_to).' 23:59:59\'' : ''). '.Shop::addSqlRestriction(false, 'rs').'
Shop::addSqlRestriction(false, 'rs'). '.Shop::addSqlRestriction(false, 'c').'
Shop::addSqlRestriction(false, 'c'). AND rc.id_referrer = '.(int)$this->id
' AND rc.id_referrer = '.(int)$this->id. .$where;
$where;
return Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql); return Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql);
} }
@@ -315,7 +314,6 @@ class ReferrerCore extends ObjectModel
FROM '._DB_PREFIX_.'referrer r FROM '._DB_PREFIX_.'referrer r
LEFT JOIN '._DB_PREFIX_.'connections_source cs ON ('.self::$_join.') LEFT JOIN '._DB_PREFIX_.'connections_source cs ON ('.self::$_join.')
WHERE id_referrer = '.(int)$row['id_referrer'].' WHERE id_referrer = '.(int)$row['id_referrer'].'
AND id_connections_source IS NOT NULL
)'); )');
} }
} }
+28 -25
View File
@@ -140,33 +140,36 @@ class SearchCore
$string = implode(' ', $processed_words); $string = implode(' ', $processed_words);
} }
// If the language is constituted with symbol and there is no "words", then split every chars if ($indexation)
if (in_array($iso_code, array('zh', 'tw', 'ja')) && function_exists('mb_strlen'))
{ {
// Cut symbols from letters // If the language is constituted with symbol and there is no "words", then split every chars
$symbols = ''; if (in_array($iso_code, array('zh', 'tw', 'ja')) && function_exists('mb_strlen'))
$letters = '';
foreach (explode(' ', $string) as $mb_word)
if (strlen(Tools::replaceAccentedChars($mb_word)) == mb_strlen(Tools::replaceAccentedChars($mb_word)))
$letters .= $mb_word.' ';
else
$symbols .= $mb_word.' ';
if (preg_match_all('/./u', $symbols, $matches))
$symbols = implode(' ', $matches[0]);
$string = $letters.$symbols;
}
elseif ($indexation)
{
$minWordLen = (int)Configuration::get('PS_SEARCH_MINWORDLEN');
if ($minWordLen > 1)
{ {
$minWordLen -= 1; // Cut symbols from letters
$string = preg_replace('/(?<=\s)[^\s]{1,'.$minWordLen.'}(?=\s)/Su', ' ', $string); $symbols = '';
$string = preg_replace('/^[^\s]{1,'.$minWordLen.'}(?=\s)/Su', '', $string); $letters = '';
$string = preg_replace('/(?<=\s)[^\s]{1,'.$minWordLen.'}$/Su', '', $string); foreach (explode(' ', $string) as $mb_word)
$string = preg_replace('/^[^\s]{1,'.$minWordLen.'}$/Su', '', $string); if (strlen(Tools::replaceAccentedChars($mb_word)) == mb_strlen(Tools::replaceAccentedChars($mb_word)))
$letters .= $mb_word.' ';
else
$symbols .= $mb_word.' ';
if (preg_match_all('/./u', $symbols, $matches))
$symbols = implode(' ', $matches[0]);
$string = $letters.$symbols;
}
else
{
$minWordLen = (int)Configuration::get('PS_SEARCH_MINWORDLEN');
if ($minWordLen > 1)
{
$minWordLen -= 1;
$string = preg_replace('/(?<=\s)[^\s]{1,'.$minWordLen.'}(?=\s)/Su', ' ', $string);
$string = preg_replace('/^[^\s]{1,'.$minWordLen.'}(?=\s)/Su', '', $string);
$string = preg_replace('/(?<=\s)[^\s]{1,'.$minWordLen.'}$/Su', '', $string);
$string = preg_replace('/^[^\s]{1,'.$minWordLen.'}$/Su', '', $string);
}
} }
} }
+15 -27
View File
@@ -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
SpecificPrice::$_specificPriceCache = array(); self::$_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
SpecificPrice::$_specificPriceCache = array(); self::$_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
SpecificPrice::$_specificPriceCache = array(); self::$_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']));
@@ -169,8 +169,7 @@ class SpecificPriceCore extends ObjectModel
$priority = SpecificPrice::getPriority($id_product); $priority = SpecificPrice::getPriority($id_product);
foreach (array_reverse($priority) as $k => $field) foreach (array_reverse($priority) as $k => $field)
if (!empty($field)) $select .= ' IF (`'.bqSQL($field).'` = '.(int)$$field.', '.pow(2, $k + 1).', 0) + ';
$select .= ' IF (`'.bqSQL($field).'` = '.(int)$$field.', '.pow(2, $k + 1).', 0) + ';
return rtrim($select, ' +').') AS `score`'; return rtrim($select, ' +').') AS `score`';
} }
@@ -180,9 +179,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(SpecificPrice::$_cache_priorities[(int)$id_product])) if (!isset(self::$_cache_priorities[(int)$id_product]))
{ {
SpecificPrice::$_cache_priorities[(int)$id_product] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' self::$_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 +189,7 @@ class SpecificPriceCore extends ObjectModel
'); ');
} }
$priority = SpecificPrice::$_cache_priorities[(int)$id_product]; $priority = self::$_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 +208,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, SpecificPrice::$_specificPriceCache)) if (!array_key_exists($key, self::$_specificPriceCache))
{ {
$now = date('Y-m-d H:i:s'); $now = date('Y-m-d H:i:s');
$query = ' self::$_specificPriceCache[$key] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
SELECT *, '.SpecificPrice::_getScoreQuery($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_customer).' 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,22 +227,11 @@ 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` <= '.(int)$real_quantity).'
if ($real_quantity != 0 && !Configuration::get('PS_QTY_DISCOUNT_ON_COMBINATION')) ORDER BY `id_product_attribute` DESC, `from_quantity` DESC, `id_specific_price_rule` ASC, `score` DESC');
$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 SpecificPrice::$_specificPriceCache[$key]; return self::$_specificPriceCache[$key];
} }
public static function setPriorities($priorities) public static function setPriorities($priorities)
@@ -313,7 +301,7 @@ class SpecificPriceCore extends ObjectModel
if (!isset($last_quantity[(int)$specific_price['id_product_attribute']])) if (!isset($last_quantity[(int)$specific_price['id_product_attribute']]))
$last_quantity[(int)$specific_price['id_product_attribute']] = $specific_price['from_quantity']; $last_quantity[(int)$specific_price['id_product_attribute']] = $specific_price['from_quantity'];
elseif ($last_quantity[(int)$specific_price['id_product_attribute']] == $specific_price['from_quantity']) elseif ($last_quantity[(int)$specific_price['id_product_attribute']] == $specific_price['from_quantity'])
continue; break;
$last_quantity[(int)$specific_price['id_product_attribute']] = $specific_price['from_quantity']; $last_quantity[(int)$specific_price['id_product_attribute']] = $specific_price['from_quantity'];
if ($specific_price['from_quantity'] > 1) if ($specific_price['from_quantity'] > 1)
+3 -3
View File
@@ -183,7 +183,7 @@ class SpecificPriceRuleCore extends ObjectModel
if ($conditions_group) if ($conditions_group)
{ {
$where .= ' AND (('; $where .= ' AND (';
foreach ($conditions_group as $id_condition_group => $condition_group) foreach ($conditions_group as $id_condition_group => $condition_group)
{ {
$fields = array( $fields = array(
@@ -235,7 +235,7 @@ class SpecificPriceRuleCore extends ObjectModel
$where = rtrim($where, ' AND ').') OR ('; $where = rtrim($where, ' AND ').') OR (';
} }
$where = rtrim($where, 'OR (').')'; $where = rtrim($where, 'OR (');
} }
if ($products && count($products)) if ($products && count($products))
$where .= ' AND p.id_product IN ('.implode(', ', array_map('intval', $products)).')'; $where .= ' AND p.id_product IN ('.implode(', ', array_map('intval', $products)).')';
@@ -267,7 +267,7 @@ class SpecificPriceRuleCore extends ObjectModel
public static function applyRuleToProduct($id_rule, $id_product, $id_product_attribute = null) public static function applyRuleToProduct($id_rule, $id_product, $id_product_attribute = null)
{ {
$rule = new SpecificPriceRule((int)$id_rule); $rule = new SpecificPriceRule((int)$id_rule);
if (!Validate::isLoadedObject($rule) || !$id_product) if (!Validate::isLoadedObject($rule))
return false; return false;
$specific_price = new SpecificPrice(); $specific_price = new SpecificPrice();
+14 -26
View File
@@ -80,19 +80,13 @@ class StateCore extends ObjectModel
*/ */
public static function getNameById($id_state) public static function getNameById($id_state)
{ {
if (!$id_state) $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
return false; SELECT `name`
$cache_id = 'State::getNameById_'.(int)$id_state; FROM `'._DB_PREFIX_.'state`
if (!Cache::isStored($cache_id)) WHERE `id_state` = '.(int)$id_state
{ );
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT `name` return $result['name'];
FROM `'._DB_PREFIX_.'state`
WHERE `id_state` = '.(int)$id_state
);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
/** /**
@@ -103,19 +97,13 @@ class StateCore extends ObjectModel
*/ */
public static function getIdByName($state) public static function getIdByName($state)
{ {
if (empty($state)) $result = Db::getInstance()->getValue('
return false; SELECT `id_state`
$cache_id = 'State::getNameById_'.pSQL($state); FROM `'._DB_PREFIX_.'state`
if (!Cache::isStored($cache_id)) WHERE `name` LIKE \''.pSQL($state).'\'
{ ');
$result = (int)Db::getInstance()->getValue('
SELECT `id_state` return (int)$result;
FROM `'._DB_PREFIX_.'state`
WHERE `name` LIKE \''.pSQL($state).'\'
');
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
} }
/** /**
+1 -1
View File
@@ -72,7 +72,7 @@ class SupplierCore extends ObjectModel
'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'), 'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
// Lang fields // Lang fields
'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'), 'description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName'),
'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128), 'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128),
'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255), 'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),
'meta_keywords' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255), 'meta_keywords' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),

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