1065 Commits
1.5.5.0 ... 1.5

Author SHA1 Message Date
Gregory Roussac
445b5e9b99 Merge pull request #1121 from dlage/patch-1
[-] BO : fixed bug loading wrong root category in AdminCategoriesController
2013-12-11 03:00:00 -08:00
dlage
b4c4068e41 [-] BO : fixed bug loading wrong root category in AdminCategoriesController
Fix wrong root category being loaded.
There's an issue if you activate multishop and create a new root category which loads the wrong category and causes, at least, 'Add new Category' and 'Export' in AdminCategories to redirect back to the category list (e.g. impossible to add/remove categories).
2013-12-11 01:38:05 +00:00
Vincent Augagneur
fd1050b0db //tab module list fix 2013-12-10 09:43:15 +01:00
Gregory Roussac
5b809ec536 Merge pull request #1108 from Gamesh/patch-1
[-] FO : filesize returns negavite int for realy large files
2013-12-08 08:50:09 -08:00
Gamesh
02fd940124 filesize returns negavite int for realy large files
this will cast to unsigned int that will allow to display correct file size up about 4 gigabytes
2013-12-06 21:18:52 +02:00
rGaillard
134914dc1a // invisible char 2013-12-05 18:13:45 +01:00
rGaillard
d8a1dca660 // demo mode 2013-11-29 17:00:50 +01:00
rGaillard
10fa987832 // small fix 2013-11-29 15:11:49 +01:00
Jérôme Nadaud
58da52b808 Merge pull request #1047 from djfm/development
Localization Packs
2013-11-28 03:26:04 -08:00
rGaillard
0585b8d723 // small fix 2013-11-28 11:29:27 +01:00
Jérôme Nadaud
ccc388fab9 Merge pull request #1044 from prestamodule/development
Mail translation methods fix & template translation fix
2013-11-28 00:08:54 -08:00
fram
dbd5f9d32f // added country name to Tunisia localization pack 2013-11-27 10:44:46 +01:00
fram
27397ab839 // updated Slovenia VAT rate 2013-11-27 10:39:44 +01:00
fram
11f530b54f // updated Singapore localization pack 2013-11-27 10:34:59 +01:00
fram
6c271e037c // corrected spelling of Saudi Arabia 2013-11-27 10:27:52 +01:00
fram
964a0a4601 // updated Poland VAT rate 2013-11-27 10:20:04 +01:00
fram
9737709ee6 // added country name to Philippines localization pack 2013-11-27 10:12:02 +01:00
fram
70144c7cef // added country name to Peru localization pack 2013-11-27 10:11:05 +01:00
fram
0442da817c // added country name to Panama localization pack 2013-11-27 10:07:14 +01:00
fram
9d63514220 // updated Norway VAT rate 2013-11-27 10:00:04 +01:00
rGaillard
13061bdc04 [-] Core: update cartrule feature active on cartrule updating 2013-11-26 18:04:57 +01:00
Vincent Augagneur
5150a3fc4c [-] MO : fixed bug #PSCFV-9642 - Slider does not scroll when define language from right to left 2013-11-26 15:20:44 +01:00
fram
4ab4e19d20 // updated Latvia VAT rate 2013-11-26 12:32:45 +01:00
fram
023be78690 // updated Liechtenstein VAT rate 2013-11-26 12:28:38 +01:00
fram
55c329c16e // updated Kenya VAT rate 2013-11-26 11:54:51 +01:00
fram
b951c2809c // updated Jersey VAT rate 2013-11-26 11:47:34 +01:00
prestamodule
2b37db629e - Fix english translation for backoffice_order template
Signed-off-by: hadjedjvincent <v.hadjedj@presta-module.com>
2013-11-26 11:23:33 +01:00
prestamodule
d064be1587 - Fix multiple translations in a same process for different id_lang
If id_lang are mixed (1, 2, 3, 1, 4, 2...) the translations aren't correctly populated from the theme lang.php override if include_once is used.
include must be used in order to handle mixed id_lang in a same process.

Signed-off-by: hadjedjvincent <v.hadjedj@presta-module.com>
2013-11-26 11:22:57 +01:00
gRoussac
2a1c991612 [-] BO : Undefined on image upload, revert of 48b7a49b1a 2013-11-25 22:56:50 +01:00
Jérôme Nadaud
fa059751fc Merge pull request #1032 from djfm/development
// updated Italian VAT rate
2013-11-25 09:48:47 -08:00
fram
6284c55e2a // updated Italian VAT rate 2013-11-25 18:42:17 +01:00
Rémi Gaillard
81f05b9db3 Merge pull request #780 from MyBB-Services/dev/gb/sqlmanagergroupby
[*] BO : Allow complex GROUP BY in SQL Manager
2013-11-25 08:21:23 -08:00
Rémi Gaillard
09b5d3a0b8 Merge pull request #863 from Prestaworks/patch-15
// Update GuestTrackingController.php
2013-11-25 07:52:57 -08:00
Jérôme Nadaud
754ba06a39 Merge pull request #1030 from ccauw/patch-13
[-] BO : Double separator in function createTemplate()
2013-11-25 05:18:28 -08:00
Jérôme Nadaud
2129aebac0 Update CONTRIBUTING.md 2013-11-25 14:17:49 +01:00
ccauw
04760c91e5 [-] BO : Double separator in function createTemplate()
smarty->getTemplateDir() returns a result ending with a separator,
so no need to add DIRECTORY_SEPARATOR ?
2013-11-25 14:13:10 +01:00
Damien Metzger
2eb620267c Merge pull request #835 from axometeam/patch-20
// Fixed potential issue with textarea
2013-11-25 02:35:23 -08:00
Damien Metzger
a932ba512a Merge pull request #846 from sebastienhouzet/patch-2
[-] MO : Fix add truncate tag in pscleaner
2013-11-25 02:13:06 -08:00
gRoussac
d14fcf169a [-] IN : bad reset on vars in migrate_orders 2013-11-21 17:10:19 +01:00
gRoussac
d6e52bdecb Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-11-21 14:20:00 +01:00
gRoussac
3ab28374e6 [-] BO : Remove warning with open_basdir on module list 2013-11-21 14:17:55 +01:00
Fabio Chelly
5f47526ed2 [-] FO : Fixed bug #PSCFV-11076 2013-11-21 12:13:30 +01:00
Jérôme Nadaud
033bf745cd Merge pull request #1000 from studiokiwik/sk-ps15x-011
"---<br />" string is now removed correctly from the end of customization data text
2013-11-21 00:14:28 -08:00
Gregory Roussac
6d0de6e29e Merge pull request #1003 from priyank/patch-1
[-] FO : Homefeatured adding a position order by clause.
2013-11-20 07:29:19 -08:00
Priyank Bolia
0ff7163cba Adding a position order by clause.
Adding a position order by clause. This way you can manage how the featured products will display on home page. You can manage the order from the PrestaShop backend, and thus you have full control on the display in the frontend.
2013-11-20 20:56:35 +05:30
gRoussac
914f613e7b [-] FO : Fix bug #PSCFV-11052 no carrier fess whne tax display to false 2013-11-20 15:32:33 +01:00
gRoussac
5ef392aaeb [-] FO : Fix #PSCFV-11069 remove unused file 2013-11-20 14:44:56 +01:00
Quentin Montant
0410378bd3 "---<br />" string is now removed correctly from the end of customization data text 2013-11-20 13:30:47 +01:00
Quentin Montant
1508a8a5d7 "---<br />" string is now removed correctly from the end of customization data text 2013-11-20 11:31:02 +01:00
Damien Metzger
33b8703d24 // Changelog 1.5.6.1 2013-11-20 09:43:06 +01:00
Jerome Nadaud
e02b5d5c11 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development
Conflicts:
	admin-dev/themes/default/template/helpers/list/list_header.tpl
2013-11-18 18:39:25 +01:00
Jerome Nadaud
6be883217e [-] BO : FixBug #PNM-1594 - Double selected option value 2013-11-18 18:36:30 +01:00
Rémi Gaillard
10e0205cb8 Merge pull request #992 from djfm/development
// fixed typo in Russian installer
2013-11-18 06:40:31 -08:00
Rémi Gaillard
4cba2623e5 Merge pull request #926 from djfm/loc_ui
//Localization
2013-11-18 06:32:34 -08:00
Rémi Gaillard
618aa24f74 Merge pull request #945 from Javsmile/patch-2
// Update productcomments.php
2013-11-18 06:30:59 -08:00
fram
0889ab4eec // fixed typo in Russian installer 2013-11-18 15:30:05 +01:00
gRoussac
6633efd27d [-] BO : Fix bug #PNM-1594, selected value error in helper list 2013-11-18 15:11:49 +01:00
gRoussac
8d627aa522 [-] MO : Referralprogram Prevent Exception when badly configured 2013-11-18 14:58:17 +01:00
Jerome Nadaud
bcc851c98c // Update image fix 2013-11-18 14:44:23 +01:00
gRoussac
dbc08d779c // typo, sorry about this 2013-11-18 14:35:39 +01:00
gRoussac
22a9548f83 [-] FO : Fix bug #PSCFV-11043, bad cache id from module template 2013-11-18 14:32:34 +01:00
gRoussac
4771746959 [-) FO : Fix bug #PSCFV-10926, trailing question mark in pagination url 2013-11-18 12:26:08 +01:00
rGaillard
bd241a9c48 [-] BO: product price was changed on changing to advanced stock management #PSCFV-10996 2013-11-18 12:04:09 +01:00
Jérôme Nadaud
8166bb662c Merge pull request #984 from soware/development
Update form.tpl
2013-11-18 01:01:00 -08:00
Jerome Nadaud
113f8d4efb Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-11-18 09:55:37 +01:00
Jerome Nadaud
11296fe464 // Small Fix in truncateString function 2013-11-18 09:55:21 +01:00
Gregory Roussac
017ef4860e Merge pull request #987 from davyrolink/fixed_toolbar_tpl
[*] BO : multiple toolbars save button
2013-11-18 00:54:48 -08:00
Gregory Roussac
21319ca32c Merge pull request #988 from dlage/fix_jquery_ui_autocomplete
[-] Project : missing ui.menu in jquery_ui_dependencies.
2013-11-17 14:44:47 -08:00
gRoussac
cef406aef2 [*] FO : DNI can be not required 2013-11-17 23:35:56 +01:00
gRoussac
7e841c4448 [-] FO : Missing sup for DNI field 2013-11-17 22:36:51 +01:00
gRoussac
1cbc765a8f [-] IN : Bad flag in add_module_to_hook 2013-11-17 20:42:29 +01:00
692643d7d6 [-] Project : missing ui.menu in jquery_ui_dependencies. 2013-11-16 17:42:54 +00:00
Davy Rolink
cd58c0968b Fixed admin toolbar save button javascript actions, problem occurred when there were multiple toolbars on one page 2013-11-16 14:59:37 +01:00
soware
e5f0bcb916 Update form.tpl
I removed the line 109 because the price tab problem and because this line is redundant. The first show (line 95) always is executed.
If the price is saved twice, the second the div #product-tab-content-wait never is hided and show the loading forever.
It is because the line 109 show this tab again, in the sequence: show (line 95), hide (line 213), show (line 109).
This happening just for price tab.
2013-11-16 00:37:47 -02:00
gRoussac
7f02c8ca58 [-] WS: Fix bug #PSCFV-10970 use configuration for uploaded images quality 2013-11-15 18:50:28 +01:00
gRoussac
bfed3532bf [*] BO : AdminPerformances Hide warnings message when not necessary 2013-11-15 16:12:07 +01:00
gRoussac
2962141d51 [-] BO : Fix warning when no memcached servers 2013-11-15 15:39:00 +01:00
gRoussac
73bf2a7db1 [-] BO : Fix #PSCFV-11016 typo 2013-11-15 15:16:02 +01:00
gRoussac
9aa656c9d7 // typo 2013-11-15 15:10:12 +01:00
gRoussac
1140b5e8b5 [*] FO : Fix #PSCFV-8715 add product.attributes in carrier tpl 2013-11-15 15:06:30 +01:00
gRoussac
6a690b255b [-] BO : Model return html error messagae instead of json while image uploading 2013-11-15 12:20:10 +01:00
gRoussac
152960639f [-] BO : Product final price can not be hidden on loading tab, report of 6c6c3b240e 2013-11-15 11:36:07 +01:00
Gregory Roussac
448a4c9994 Merge pull request #980 from djfm/development
// no line breaks in $this->l()
2013-11-15 02:23:39 -08:00
gRoussac
7526fe4766 // missing trailing semi-column 2013-11-15 11:16:48 +01:00
Jerome Nadaud
50eee795ed // Add truncate category description preserving html tags 2013-11-15 11:03:06 +01:00
gRoussac
97be96ede8 [-] MO : Missinag closing href 2013-11-15 10:54:50 +01:00
gRoussac
0b47ef1b3b [-] BO : test on xml string follow up https://github.com/PrestaShop/PrestaShop/pull/690#issuecomment-28542506 2013-11-15 10:51:46 +01:00
fram
ba15d975bc // no line breaks in $this->l() 2013-11-15 10:44:01 +01:00
gRoussac
47d58ff930 [*] FO : set at least a class to body 2013-11-14 19:03:12 +01:00
gRoussac
d06bf10bbb [-] FO : Fix bug #PSCFV-10911, doubles in cart rules highlight 2013-11-14 16:35:11 +01:00
gRoussac
d0d234f555 // typo, sorry about this 2013-11-14 15:58:42 +01:00
gRoussac
19d975a0b4 // typo 2013-11-14 14:48:14 +01:00
gRoussac
6393746f04 [-] BO : 406 when mod_security follow up 034e6a7e7f 2013-11-14 11:43:05 +01:00
gRoussac
db99f188a2 [-] BO : AdminImport, execption when creating groups 2013-11-13 18:23:41 +01:00
Gregory Roussac
fe8e349931 Merge pull request #975 from ldecoker/patch-10
[-] FO : _PS_THEME_MOBILE_OVERRIDE_DIR_ not defined
2013-11-13 09:14:49 -08:00
ldecoker
3f8b76f78c [-][FO] _PS_THEME_MOBILE_OVERRIDE_DIR_ not defined
When there is no mobile theme provided with the current theme, the variable _PS_THEME_MOBILE_OVERRIDE_DIR_ is not defined. We so get the following error in apache logs:

"PHP Notice:  Use of undefined constant _PS_THEME_MOBILE_OVERRIDE_DIR_ - assumed '_PS_THEME_MOBILE_OVERRIDE_DIR_' in FrontController.php"
2013-11-13 18:12:59 +01:00
gRoussac
947f9bb21c // small isset in productcomments 2013-11-13 16:39:33 +01:00
Rémi Gaillard
83400c691c Merge pull request #973 from djfm/development
//translations
2013-11-13 06:34:38 -08:00
Rémi Gaillard
f4601d9680 // default form language 2013-11-13 15:37:58 +01:00
fram
28e1a94bb6 // instead instead of insted 2013-11-13 15:10:06 +01:00
fram
ad6367f2bf // updated native translations 2013-11-13 15:06:47 +01:00
gRoussac
5a8c335d78 [-] FO : Bad value for back when controller name is sent 2013-11-13 12:30:39 +01:00
gRoussac
4479db88a0 [-) PDF : nowrap on several product prices 2013-11-13 11:52:10 +01:00
Francois Gaillard
339c954cb3 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-11-13 11:24:51 +01:00
Jerome Nadaud
c4837e65ec [-] FO : FixBug #PSCFV-9291 - Ecotax increment display price in product combination 2013-11-13 11:24:25 +01:00
Jerome Nadaud
2117c89352 [-] FO : FixBug #PSCFV-9291 - Ecotax increment display price in product combination 2013-11-13 11:04:13 +01:00
Jerome Nadaud
9f10a851e5 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-11-13 10:58:01 +01:00
Gregory Roussac
66a9ee03fc Merge pull request #971 from studiokiwik/sk-ps15x-008
[-] FO : fix contact-form id_order input when customer is not logged
2013-11-13 01:42:00 -08:00
gRoussac
c69688cc11 [-] BO : Fix bug #PSCFV-10990 bad version comparison for ps_versions_compliancy 2013-11-13 10:14:21 +01:00
Mikael Blotin
26d1ad0668 [-] FO : fix contact-form id_order input when customer is not logged 2013-11-13 10:12:31 +01:00
Jerome Nadaud
6a99b84452 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-11-13 10:02:28 +01:00
gRoussac
6ddf220aee [-] Fo : Call Gmaps on https if required 2013-11-12 21:16:09 +01:00
gRoussac
9328a3c473 // forgot to commit 036e2362c9 2013-11-12 19:17:54 +01:00
gRoussac
c8dfe1c174 [-] FO : Wordwrap on prices in history 2013-11-12 19:17:12 +01:00
Rémi Gaillard
75df12dd94 [-] Core: Group::getCurrent() return the default customer group of the shop if default customer group is not associated to shop 2013-11-12 18:49:52 +01:00
Gregory Roussac
6d7e2055ce Merge pull request #968 from ccauw/patch-12
[*] BO : add class on TD in standard List
2013-11-12 09:38:03 -08:00
gRoussac
4d327a537f [*] FO : addTextFieldToProduct without Line feed, follow up https://github.com/PrestaShop/PrestaShop/pull/962#issuecomment-28294571 2013-11-12 18:28:42 +01:00
ccauw
747926039a [*] BO : add class on TD in standard List
Back office :
Add a class on TD in list created by getList()
In fields_list array of AdminController, we can add a new parameter('class')

example :
		'name' => array(
			'title' => $this->l('Name'),
			'width' => 150,
			'class' => 'ma_classe',
			'filter_key' => 'b!name'
		),
This parameter can be used for javascript effect, ...

Thanks.
2013-11-12 18:01:27 +01:00
gRoussac
5e4382eb08 [-] BO : Fix bug #PSCFV-10982 reduction group truncated 2013-11-12 17:55:07 +01:00
gRoussac
036e2362c9 [+] CORE : Fixed cache_id 2013-11-12 17:09:38 +01:00
Fabio Chelly
fc193d5c8b Merge remote-tracking branch 'origin/development' into development 2013-11-12 16:36:19 +01:00
Rémi Gaillard
75e6a03591 // small fix 2013-11-12 16:38:34 +01:00
Fabio Chelly
dd05692400 [-] FO : Fixed errors when calculating most selled products from footer link 2013-11-12 16:36:07 +01:00
Rémi Gaillard
b5eb7c5c28 // typo 2013-11-12 16:25:13 +01:00
gRoussac
f0f3679cbd [*] FO : https on TOS in fancybox, follow up https://github.com/PrestaShop/PrestaShop/pull/956 2013-11-12 15:56:04 +01:00
Rémi Gaillard
175da3ecf6 Merge pull request #965 from djfm/IETF
[*] LO : Fix PSCFV-10876: use IETF code to set language of shop, not 'is...
2013-11-12 06:05:10 -08:00
fram
743c4f4607 [*] LO : Fix PSCFV-10876: use IETF code to set language of shop, not 'iso' code, allows to distinguish between chinese variants etc. 2013-11-12 14:59:36 +01:00
gRoussac
40abef8aac Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-11-12 12:32:37 +01:00
Rémi Gaillard
8be339463d // small fix 2013-11-12 12:36:51 +01:00
gRoussac
f0f630fb50 [-] FO : #PSCFV-10978 firstname displayed instead of lastname in invoice address 2013-11-12 12:32:21 +01:00
gRoussac
3f42a381a4 [*] FO : Redirect to address.tpl when !Address::isCountryActiveById 2013-11-12 12:12:19 +01:00
Gregory Roussac
0e1898be09 Merge pull request #963 from djfm/sprintf
// do not use sprintf in installer when it is useless
2013-11-12 01:45:39 -08:00
gRoussac
c1969028f2 [-] FO : Customized meesage with carriage return follow up #962 2013-11-12 10:41:19 +01:00
Gregory Roussac
cd83ec93c7 Merge pull request #961 from joseantgv/patch-4
[-] MO : Whishlist, innerhtml in html jquery
2013-11-12 00:42:04 -08:00
fram
ab730dc3da // do not use sprintf when it is useless 2013-11-12 09:21:05 +01:00
joseantgv
7523828a7a Update ajax-wishlist.js
innerHtml can not execute javascript from "data". If someone modify php files returned from jquery function and includes a script, it's not executed.
2013-11-11 16:58:52 +01:00
gRoussac
e2d8a33a81 [*] FO : Cache on getDiscountsCustomer, follow up https://github.com/PrestaShop/PrestaShop/pull/960 2013-11-11 14:02:11 +01:00
gRoussac
a7869a1f06 [*] CORE : Remove duplicate SQL queries 2013-11-11 13:41:23 +01:00
gRoussac
de404706d9 [*] CORE : Profiling hide non doubles 2013-11-11 02:09:50 +01:00
gRoussac
3f9338e13d [*] CORE : Cache store for isAssociatedToShop::isAssociatedToShop 2013-11-11 01:59:10 +01:00
gRoussac
38da826671 [-] FO : getTaxCalculator bad cache key again // sorry about that 2013-11-11 01:37:20 +01:00
gRoussac
fee461fdf1 [*] FO : Set cache for StockAvailable::getQuantityAvailableByProduct 2013-11-11 01:00:55 +01:00
gRoussac
8dd951c2df [*] MO : Remove calls to isRegisteredInHook in crossselling and productscategory 2013-11-11 00:36:17 +01:00
gRoussac
7e93b2cffd [-] FO : getTaxCalculator bad cache key 2013-11-11 00:13:35 +01:00
gRoussac
19da345531 [-] BO : Could not check all modules after ajax call 2013-11-10 21:51:14 +01:00
Fabio Chelly
bd8eebdc33 Merge remote-tracking branch 'origin/development' into development 2013-11-08 18:12:23 +01:00
Fabio Chelly
4312d241f3 [-] MO :Fixed #PNM-1654 (Loyalty module) by using most expensive attribute instead of default one 2013-11-08 18:12:11 +01:00
gRoussac
7eb70486e0 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-11-08 15:54:28 +01:00
gRoussac
ebc3dfee62 [-] BO : Fix css bug #PSCFV-10899, fixed fix-toolbar z-index 2013-11-08 15:54:13 +01:00
Gregory Roussac
ee487fde59 Merge pull request #953 from Shagshag/patch-4
[*] BO: kb was not translatable
2013-11-08 06:37:26 -08:00
Shagshag
c7f1fcb49a kb was not translatable 2013-11-08 15:33:49 +01:00
gRoussac
530b6dc501 // Productscomments remove warnings 2013-11-08 15:00:56 +01:00
gRoussac
5364be686e // More simple names for csv import files 2013-11-08 14:59:43 +01:00
Jérôme Nadaud
aaaf8588c1 Merge pull request #931 from PhpMadman/patch-2
[-] MO : Mailalert was not using order reference
2013-11-08 04:01:39 -08:00
PhpMadman
6ee2852fa5 [-] MO : Mailalert was not using order reference 2013-11-08 12:48:49 +01:00
Jérôme Nadaud
02acd47c9e Merge pull request #950 from pelTek/patch-2
Added states to Greek localization pack
2013-11-08 02:46:55 -08:00
Chris
32e92762f5 Added states to Greek localization pack
Added states to Greek localization pack
2013-11-08 12:44:42 +02:00
Francois Gaillard
3b7387ffe8 [-] Classes : Hook - Installer & context shop id 2013-11-08 11:00:14 +01:00
gRoussac
472dc8c27d [-] MO : Blocklayered follow up a6e67b078e (commitcomment-4538556) 2013-11-07 17:59:04 +01:00
Javsmile
99ad6481e6 Update productcomments.php
This little addition fix the problem for enlight the stars in the hookproductTab whe you disable or make an exception of the hookproductOutOfStock with the product file.
2013-11-07 17:53:47 +01:00
Fabio Chelly
92cf31e5c3 [-] MO : Fixed #PNM-1600 by modifying getPageLink() 2013-11-07 16:46:30 +01:00
Fabio Chelly
fa7d44d67f Merge remote-tracking branch 'origin/development' into development 2013-11-07 16:39:26 +01:00
Fabio Chelly
b9c4b5d2a7 [-] FO : Prevents warning in safePostVars when $_POST has been unset 2013-11-07 16:38:53 +01:00
Gregory Roussac
fbd28f3e49 Merge pull request #942 from Jacky75/20131107_payment_and_groups
[-] FO : in multistore payment module restrictions by customer group was...
2013-11-07 06:39:57 -08:00
Daniele Giachino
8c8340db4e [-] FO : in multistore payment module restrictions by customer group was not applied to specific shop 2013-11-07 15:18:59 +01:00
gRoussac
7cc351e83d [-] BO : Fix bug #PSCFV-10932, ranges input disabled on load 2013-11-07 15:11:30 +01:00
gRoussac
91cde1ab3a [-] BO : getCMSPages to associated shop in cmscontroller 2013-11-07 12:09:58 +01:00
gRoussac
e6f9f806bf [-] FO : Fix bug #PSCFV-10892, getCMSPages by id_shop thnaks @jd440 2013-11-07 12:03:35 +01:00
gRoussac
fc4a660f76 [-] BO : Fix bug #PSCFV-10666 product_supllier currency set to 0 2013-11-07 11:24:32 +01:00
Jerome Nadaud
f3147b4e57 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-11-07 09:47:47 +01:00
gRoussac
514c087962 [*] BO : New import csv files 2013-11-06 18:38:32 +01:00
gRoussac
00887942d3 // preg_last_error not available on every stacks 2013-11-06 18:32:39 +01:00
gRoussac
afe6c9bc6f // missing dir sep on is_dir (open_basedir) 2013-11-06 18:23:01 +01:00
gRoussac
fc6041fa33 [-] IN : bad path in create multistore 2013-11-06 18:06:19 +01:00
gRoussac
76b03856e2 // missing trailing dir sep 2013-11-06 17:33:18 +01:00
Rémi Gaillard
ef5779f63f // d321b9a5bc 2013-11-06 17:11:31 +01:00
Jérôme Nadaud
d0522417eb Merge pull request #937 from PhpMadman/DiscountPrice
[*] FO : Added possibility to display new price instead of quantity discount
2013-11-06 08:06:16 -08:00
Rémi Gaillard
50c95f568c Merge pull request #935 from jeckyl/patch-4
Update cart-summary.js
2013-11-06 07:01:02 -08:00
jeckyl
d321b9a5bc Update cart-summary.js
Just add this space to separate this classes. It's to display or not carrier option when we select one or another carrier during order finalisation.
2013-11-06 14:42:00 +01:00
PhpMadman
d95885caae [*] FO : Added posibilty to display new price instead of quantity discount 2013-11-06 14:41:42 +01:00
fchellypresta
71139df65f Merge pull request #796 from PhpMadman/patch-1
[*] BO: #PNM-1472 Changed label and transparency range check to 1
2013-11-06 03:06:47 -08:00
gRoussac
1fb8ef823d [-] BO : Fix bug #PSCFV-10937, bad escaping for var product_prices in prices.tpl 2013-11-06 11:50:52 +01:00
Jérôme Nadaud
29001b3392 Merge pull request #930 from PhpMadman/patch-3
[-] BO : Cart was not using order reference
2013-11-06 02:30:57 -08:00
PhpMadman
eac7fbb694 [-] BO : Cart was not using order reference, corrected syntax 2013-11-06 11:06:46 +01:00
Jérôme Nadaud
fa4b5e0b7d Merge pull request #927 from djfm/loc
[*] LO : Added states to Spanish localization pack
2013-11-06 00:31:46 -08:00
Jérôme Nadaud
d30830f6fe Merge pull request #932 from prestalab/patch-1
// FIX: tags with UTF-8 chars
2013-11-05 23:49:43 -08:00
PrestaLab
b2e5c6090d Fixed tags with UTF-8 chars
Fixed error Tag->Name is not valid if tag in non latin chars
2013-11-05 23:33:44 -08:00
PhpMadman
2556a7bb68 [-] MO : Mailalert was not using order reference 2013-11-05 20:46:10 +01:00
PhpMadman
7226f33f90 [-] BO : Cart was not using order reference 2013-11-05 20:42:57 +01:00
Jerome Nadaud
3f3dc0feb9 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-11-05 16:39:12 +01:00
Rémi Gaillard
d4253b9849 // small fix 2013-11-05 15:33:21 +01:00
fram
4b0b5cf4da // added an option not to override the local localization pack when installing a localization pack 2013-11-05 12:08:14 +01:00
fram
2b8d069cf9 [*] LO : Added states to Spanish localization pack 2013-11-05 12:06:31 +01:00
Rémi Gaillard
9817ef6840 // small fix on profiling 2013-11-05 11:54:22 +01:00
gRoussac
581645ce6d [-) BO : Action is mandatory for a cart rule 2013-11-05 11:26:10 +01:00
gRoussac
87be153e42 [-] MO : Blockcategories last_visited_category must not be cached 2013-11-05 11:16:52 +01:00
Gregory Roussac
f85c6b59c8 Merge pull request #921 from Jacky75/20131105-layered-feature-sorted
[*] MO : Blocklayered filter feature blocks sorted
2013-11-05 01:50:48 -08:00
Daniele Giachino
99e98a5164 In multistore, layered filters about categories are not loading the category name from the proper shop 2013-11-05 10:45:23 +01:00
Damien Metzger
4c1ad83b18 // "Fixed" strict standard 2013-11-05 10:22:39 +01:00
gRoussac
26a43260c5 [-] CORE : invalid method name in displayAjax method of Controller action 2013-11-05 10:18:53 +01:00
Gregory Roussac
c69429c126 Merge pull request #922 from Jacky75/20131105-layered-categories-shop
[-] MO : Missing context shop for categories
2013-11-05 01:10:39 -08:00
Daniele Giachino
02c04a9884 In multistore, layered filters about categories are not loading the category name from the proper shop 2013-11-05 09:40:53 +01:00
Daniele Giachino
cf65877f3f layered filters involving features are now natural sorted 2013-11-05 09:32:36 +01:00
Daniele Giachino
f0abdca08f layered filters involving features are now natural sorted 2013-11-05 09:30:13 +01:00
gRoussac
0e54bf0f76 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-11-04 18:27:39 +01:00
Jerome Nadaud
12276f41fb // Update image when updated 2013-11-04 18:26:24 +01:00
gRoussac
be13f82b30 [*] FO: Follow up e86c56172d 2013-11-04 18:20:01 +01:00
Rémi Gaillard
f5cc6862cb // don't die on autoload 2013-11-04 18:08:24 +01:00
Rémi Gaillard
0a65de5e5f Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-11-04 17:22:21 +01:00
Rémi Gaillard
f4740088c1 // small fix 2013-11-04 17:22:08 +01:00
gRoussac
c44b1d617c [-] BO : Could not change image position 2013-11-04 16:59:03 +01:00
gRoussac
c452444620 [-] IN : Could not install when session_start() does not fail on ajax requests 2013-11-04 15:47:29 +01:00
gRoussac
3f817e8729 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-11-04 14:31:29 +01:00
gRoussac
66f314bbb2 // missing trailing bracket in modules/productcomments/config.xml 2013-11-04 14:31:15 +01:00
Rémi Gaillard
bf8cd29868 // validator on message field 2013-11-04 14:21:42 +01:00
gRoussac
b8b7fbaf71 [*] MO : New modules version since 1.5.6.0 2013-11-04 11:57:31 +01:00
gRoussac
9ea79f8cb5 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-11-04 11:48:25 +01:00
Rémi Gaillard
b3c54a59dd // typo 2013-11-04 11:48:30 +01:00
Rémi Gaillard
06d73554be // preg instead strpos 2013-11-04 11:39:48 +01:00
gRoussac
ad555f1d30 [-] IN : Follow up #PSCFV-10671 update messages in base and b16e4b5a8e 2013-11-04 11:10:40 +01:00
Gregory Roussac
4b6ee72072 Merge pull request #894 from codeurWeb/patch-6
[-] MO : Fix NetworkError 404 Not Found on admin in blocklayered.php
2013-11-04 02:02:10 -08:00
Rémi Gaillard
e000f8c627 // something is missing in the last commit 2013-11-04 11:00:21 +01:00
Rémi Gaillard
6ef7f258ea // small fix 2013-11-04 10:34:58 +01:00
Jerome Nadaud
2be72f50d1 [-] FO : FixBug Categories description 2013-11-04 10:29:44 +01:00
Rémi Gaillard
d49c4cf62e [-] BO: Fix from name when replying to customer threads 2013-11-04 09:38:12 +01:00
gRoussac
c7323c2bfe [-] CORE : Fix bug #PSCFV-10901 warnings on htmlentities 2013-11-03 22:59:04 +01:00
gRoussac
2a3192d98c [-] IN : Refacto for update_customer_default_group bad logical 2013-11-03 14:55:25 +01:00
gRoussac
b16e4b5a8e [-] IN : Lower memory usage in migrate_orders, fix update_order_messages loop 2013-11-03 01:49:16 +01:00
gRoussac
8f72282594 [-] IN : update_customer_default_group returning false 2013-11-02 21:51:13 +01:00
gRoussac
a5bb4f0323 [-] IN: Fix [insert order detail 1] error while upgrading 2013-11-02 20:39:53 +01:00
gRoussac
062fb90c2e [-] IN : Fix Unknown column 'module_name' in 'ps_webservice_account' during upgrade 2013-10-31 19:24:41 +01:00
Jerome Nadaud
9193a29a44 [+] MO : Blockcart - Add error handler on ajax function 2013-10-31 19:02:43 +01:00
Jerome Nadaud
671062af07 // Add Disable overrides to debug mode 2013-10-31 18:41:56 +01:00
gRoussac
80c60be952 [-] BO : Do not enable rewrite url for index 2013-10-31 16:20:55 +01:00
Rémi Gaillard
1b019dffc5 // Fix lang detection on dispatcher 2013-10-31 15:28:19 +01:00
gRoussac
f9dc0b0252 [-] MO : Could not translate in transit mail, revert from 3213b5dffb 2013-10-31 14:20:21 +01:00
Rémi Gaillard
9611ea1f70 [-] BO: Fix empty group list on changing opt or newsletter on customers listing 2013-10-31 11:22:40 +01:00
Rémi Gaillard
d17515a728 // don't format currency on input 2013-10-31 10:22:38 +01:00
gRoussac
036fa7cba6 [-] FO : Fix bug #PSCFV-10889 wrong color when oos product 2013-10-31 10:18:28 +01:00
Damien Metzger
9c57c71deb Merge pull request #913 from djfm/development
// Installer Translations
2013-10-31 01:48:56 -07:00
djfm
7812731095 // removed hard-coded space before ellipsis (...) in English installer steps 2013-10-31 08:29:05 +00:00
djfm
a8a204edf3 // small correction in English installer text 2013-10-31 08:25:57 +00:00
djfm
11f60492be // removed unnecessary punctuation in English installer strings, both in source code and translations 2013-10-31 08:09:14 +00:00
gRoussac
f919cc899d [-] IN : Set conversion rate to 1 if equal 0 in base 2013-10-30 20:06:47 +01:00
gRoussac
fbdddba753 [-] IN : Set default conversion rate to 1 not 0 2013-10-30 19:03:36 +01:00
gRoussac
cbfa8dfc30 // forgot to commit in f78cde96d6 2013-10-30 19:02:24 +01:00
gRoussac
8547f663d1 [-] BO : AdminImport withdraw separator changed in js 2013-10-30 18:46:02 +01:00
gRoussac
372130f7d7 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-10-30 18:37:46 +01:00
gRoussac
f78cde96d6 [-] BO : AdminImport wrong group by default 2013-10-30 18:37:26 +01:00
Jerome Nadaud
48f00b2367 [-] BO : FixBug #PSCFV-10882 - Add json encode and decode smarty modifier via tools class 2013-10-30 18:28:17 +01:00
djfm
c958436a76 // Dutch installer translations 2013-10-30 17:26:22 +00:00
djfm
a56fb7c639 // Polish installer translations 2013-10-30 17:06:52 +00:00
djfm
16efe89bed // improved installer translations: no colons in translations and filled some missing fields 2013-10-30 16:57:30 +00:00
gRoussac
56799f53c8 [-] Bo : AdminImport customer group default 2013-10-30 17:12:20 +01:00
Jerome Nadaud
da43700361 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-10-30 16:48:26 +01:00
Jerome Nadaud
d7b46e80af [+] BO : Add debug mode system 2013-10-30 16:48:16 +01:00
gRoussac
b311a0c719 [-] BO : Fix bug #PSCFV-10872 AdminImport could not import supllier orders 2013-10-30 16:06:38 +01:00
Rémi Gaillard
a0f4eab4c1 // typo 2013-10-30 15:40:40 +01:00
gRoussac
9ef10ee806 [-] IN : Handle RC PHP_VERSION 2013-10-30 15:03:07 +01:00
Rémi Gaillard
f9b1545037 // missing file 2013-10-30 14:59:08 +01:00
Rémi Gaillard
c56e8471c2 [-] BO: fix the checkbox of shop activation on modules configuration 2013-10-30 14:57:15 +01:00
gRoussac
8953c55b7f [-] BO : Adminimport default customers group 2013-10-30 12:30:22 +01:00
Jérôme Nadaud
653c38e01a Merge pull request #911 from madef/development
[-] BO : tagify call twice if field is not translatable
2013-10-30 00:55:53 -07:00
Madef
78af47e2d3 [-] BO : tagify call twice if field is not translatable 2013-10-29 23:18:34 +01:00
gRoussac
26b4fbf883 [*] BO : Manual merge of https://github.com/PrestaShop/PrestaShop/pull/891 1/2 2013-10-29 19:07:31 +01:00
gRoussac
c98b5e0c78 [*] CORE : Manual merge of https://github.com/PrestaShop/PrestaShop/ thanks @kpodemski 2013-10-29 19:05:21 +01:00
Rémi Gaillard
6d5ca9969e // js error 2013-10-29 17:56:29 +01:00
Gregory Roussac
90bef56c84 Merge pull request #907 from djfm/development
// Frenglish
2013-10-29 08:24:45 -07:00
gRoussac
75cde08776 // update conf message in AdminImport 2013-10-29 16:16:55 +01:00
gRoussac
c6319a754e [-] BO : Stats are empty when no conversion rate 2013-10-29 16:04:15 +01:00
djfm
9d18ef8186 // Frenglish 2013-10-29 14:44:51 +00:00
Gregory Roussac
f58526c701 Merge pull request #905 from PhpMadman/RMARef
[-] BO : Order-follow displayed order id instead of order reference
2013-10-29 07:44:26 -07:00
Damien Metzger
d5eedd5eaa Merge pull request #906 from djfm/development
// Small fix
2013-10-29 07:42:07 -07:00
gRoussac
a43851469e [-] CORE : Currency conversion rate can not be 0 2013-10-29 15:39:17 +01:00
djfm
0288696c90 // English 2013-10-29 14:37:55 +00:00
Rémi Gaillard
64706075d5 // Fix default language on BO forms 2013-10-29 15:32:31 +01:00
PhpMadman
7c1623c7fa [-] BO : Order-follow displayed order id instead of order reference 2013-10-29 14:53:50 +01:00
Jérôme Nadaud
ed2fbba996 Merge pull request #903 from PhpMadman/patch-2
[-] BO : hide stmp options when selecting never send emails
2013-10-29 05:31:02 -07:00
PhpMadman
87bb957431 fixed missing comma 2013-10-29 13:28:00 +01:00
PhpMadman
7b029457e4 [-] BO : hide stmp options when selecting never send emails 2013-10-29 12:41:24 +01:00
Jerome Nadaud
b605f33359 [-] BO : FixBug #PSCFV-10866 - Tagify system not working 2013-10-29 12:07:30 +01:00
Jerome Nadaud
580e201c48 [-] BO : FixBug #PSCFV-9319 - display only valid order id 2013-10-29 11:38:48 +01:00
gRoussac
d409614222 [-] FO : CustomerMessage ip_address to string 2013-10-29 11:18:53 +01:00
djfm
e1c7541a38 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-10-29 10:01:00 +00:00
gRoussac
1bee84d26c [-] BO : Do not delete other default jpg when _deleteOldImages and type defined 2013-10-29 10:57:33 +01:00
gRoussac
af61191a7e // rename field Action when out of stock 2013-10-29 10:55:46 +01:00
Rémi Gaillard
07222be5dd // demo mode on ajaxfilemanager 2013-10-29 10:53:00 +01:00
Jerome Nadaud
9f2580f3bd Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-10-29 10:31:12 +01:00
Jerome Nadaud
d2e475dd3a // Removed line from merge 2013-10-29 10:30:59 +01:00
Rémi Gaillard
2b67d7072c // type of logger field 2013-10-29 10:18:29 +01:00
Gregory Roussac
b885c63564 Merge pull request #900 from kpodemski/patch-10
[*] MO: productcomments optimization
2013-10-29 02:06:56 -07:00
Gregory Roussac
d74291e5b5 Merge pull request #901 from kpodemski/patch-11
[*] MO: blocksharefb optimization
2013-10-29 02:06:25 -07:00
Jerome Nadaud
1d90218e0d // Update mailalert module version 2013-10-29 10:00:57 +01:00
Jerome Nadaud
9660cef0aa [-] MO : mailalert - Fix deprecated warning on displayDate 2013-10-29 09:58:42 +01:00
Jérôme Nadaud
4b1f198cc4 Merge pull request #899 from cedricfontaine/patch-3
Update stores.js
2013-10-29 01:43:03 -07:00
gRoussac
0aca1d4a67 [*] BO : AdminProducts find smallest images 2013-10-29 08:47:41 +01:00
Krystian Podemski
526f32b6a0 [*] MO: blocksharefb optimization 2013-10-28 23:24:32 +01:00
Krystian Podemski
faa4a18a82 [*] MO: productcomments optimization 2013-10-28 23:21:35 +01:00
gRoussac
79cba4b655 [-] FO : Fix bug #PSCFV-10851, no shop restriction in vouchers display in cart 2013-10-28 19:00:00 +01:00
cedricfontaine
0ba8fbc39a Update stores.js
Phone number is already in the address field
2013-10-28 13:46:42 -04:00
Rémi Gaillard
edf54eb2ca // re-generate class_index on the first step of install 2013-10-28 18:43:02 +01:00
gRoussac
e86c56172d [*] FO: Can not establish purchase total when tax incl. 2013-10-28 17:42:23 +01:00
Jerome Nadaud
48b7a49b1a // Product image upload failed with bad content-type header 2013-10-28 14:58:19 +01:00
Gregory Roussac
12a257db7a Merge pull request #898 from Jacky75/blulab20131028-slider-virtualuri
[-] MO : homeslider stores slider about multistore with virtual uri
2013-10-28 06:53:41 -07:00
Sarah Lorenzini
63141a9c4d [-] FO: fixed bug #PSCFV-10654 - TinyMCE editor: List of products by manufacturer, products by supplier - Long description is not hidden. 2013-10-28 14:48:48 +01:00
Daniele Giachino
c84689ec71 homeslider stores slider about multistore with virtual uri 2013-10-28 14:09:35 +01:00
gRoussac
4103339f53 [-] BO : AdminImport, fix bug from 84454bbc1c (commitcomment-4418502) 2013-10-28 11:21:25 +01:00
Gregory Roussac
9a879bc133 Merge pull request #897 from freedayko/development
[*] BO : improved unicode characters replacement in URLs
2013-10-28 03:09:16 -07:00
gRoussac
e1d1479f22 [*] FO : Fix bug #PSCFV-10689 handle image legend 2013-10-27 23:31:36 +01:00
gRoussac
2dbaa5f73b [-] BO : Fix bug #10689, could not set image legend in back office 2013-10-27 22:49:25 +01:00
gRoussac
9a3cfece69 //missing line feed after disable_modsec 2013-10-27 16:05:55 +01:00
Aleksander Palyan
ee06d3114d [*] BO : improved unicode characters replacement in URLs (Russian and Ukrainian characters added) 2013-10-27 15:05:49 +02:00
gRoussac
c5c861b59e [-] MO : Blockwishlist no product image when id_product_attribute is defined, thanks @Broceliande 2013-10-27 13:28:34 +01:00
Julien
0bc1d21432 [-] MO : Fix NetworkError 404 Not Found on admin in blocklayered.php
These files not exists :
 - /js/jquery/jquery-ui-1.8.10.custom.min.js
 - /css/jquery-ui-1.8.10.custom.css
2013-10-26 15:08:07 +02:00
gRoussac
4c484afda1 [-] MO : Fix bug #PSCFV-10841, blockcart hides on product page when last product is removed from cart 2013-10-25 17:37:32 +02:00
gRoussac
025b62f995 // norms 2013-10-25 17:33:44 +02:00
Fabio Chelly
8f6a5bb3a1 Merge remote-tracking branch 'origin/development' into development 2013-10-25 17:01:51 +02:00
Fabio Chelly
a7d0794c43 [-] BO : Fixed bug PSCFV-9910 using basic queries to prevent locking errors 2013-10-25 17:01:28 +02:00
Gregory Roussac
6359c1ca33 Merge pull request #893 from neemzy/development
[*] FO : Turned "true" and "false" strings to proper booleans in address.tpl
2013-10-25 07:42:59 -07:00
Tom Panier
9a26cf02a8 Turned "true" and "false" strings to proper booleans
It's cleaner this way, and matches how it is done on similar templates.
2013-10-25 16:36:39 +02:00
gRoussac
eb8ea1cba5 [-] CORE : SetEnv in if statement 2013-10-25 15:29:15 +02:00
gRoussac
4e6585a1b8 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-10-25 15:21:55 +02:00
gRoussac
a03efe152c [-] CORE : SetEnv not available on all config // @todo curl request on dummy .htacces 2013-10-25 15:21:40 +02:00
gRoussac
942d3c7151 [-] MO : Fixbug #PSCFV-10679 dateofdelivery PDF invoice array and array 2013-10-25 00:01:25 +02:00
gRoussac
1e094f4016 [-] FO: Fix bug #PSCFV-10623 blocknewproducts shows products when PS_NB_DAYS_NEW_PRODUCT == 0 2013-10-24 23:29:23 +02:00
gRoussac
a9643c80c3 // bad commit sorry 2013-10-24 22:45:43 +02:00
gRoussac
438a3dda2b [-] BO : Fix bug #PSCFV-10718 AdminAttachments old file not deleted on update 2013-10-24 22:42:13 +02:00
gRoussac
4cd3e1b830 [-] FO: Fix bug #PSCFV-10230, Blockspecials still caching when files cache limit is 0 2013-10-24 21:59:32 +02:00
gRoussac
97ef888345 [-] FO: Fix bug #PSCFV-10625 Js error on carriers step if AjaxCart disabled 2013-10-24 21:28:22 +02:00
Gregory Roussac
4207bdff32 Merge pull request #890 from indesign47/patch-14
[-] BO : AdminImport change width height depth
2013-10-24 09:43:54 -07:00
Jerome Nadaud
6f57093f50 [-] BO : FixBug #PSCFV-10600 - Unmatched Boundary with mod_security 2013-10-24 18:36:36 +02:00
indesign47
8cb1806e49 // small fixes for Width Height Depth
change
0,1;0,2;0,3
to
1,2,3
2013-10-24 18:13:05 +02:00
gRoussac
759fe2f671 // norms 2013-10-24 18:09:21 +02:00
Gregory Roussac
0416aca547 Merge pull request #889 from PhpMadman/PSCFV-10728
[-] BO : fix #PSCFV-10728, prices incorrectly formatted when creating new order from BO
2013-10-24 09:06:43 -07:00
Rémi Gaillard
cc3363011e // rewrited urls for feeder module 2013-10-24 17:54:44 +02:00
PhpMadman
c516035e0e [-] BO : fix #PSCFV-10728, prices incorrectly formatted when creating new order from BO 2013-10-24 17:19:28 +02:00
gRoussac
c5324a653b [-] IN: Fix bug #PSCFV-10644 no carrier available after upgrade from 1.4.x 2013-10-24 16:31:50 +02:00
Rémi Gaillard
3cd702da42 [-] WS: Fix stockavailables list when stock is shared between shops #PSCFV-10793 2013-10-24 16:30:02 +02:00
Gregory Roussac
65401efcb6 Merge pull request #887 from indesign47/patch-13
[*] BO : AdminImport add img manufacturers-suppliers
2013-10-24 07:22:57 -07:00
indesign47
84454bbc1c [*] BO : AdminImport add img manufacturers-suppliers 2013-10-24 16:16:29 +02:00
indesign47
f0ed5a303c [*] BO : AdminImport add img suppliers 2013-10-24 15:49:56 +02:00
indesign47
4803530eed [*] BO : AdminImport add img manufacturers 2013-10-24 15:47:31 +02:00
indesign47
ea8a5277f2 [*] BO : AdminImport add img manufacturers-suppliers 2013-10-24 15:44:11 +02:00
gRoussac
2ffc296279 FO : https://github.com/PrestaShop/PrestaShop/pull/878 2013-10-24 12:03:33 +02:00
Rémi Gaillard
971722a13f // note updated by ajax in admincustomers should be url encoded 2013-10-24 11:56:50 +02:00
gRoussac
fc9b39968b // remove notice 2013-10-24 11:46:09 +02:00
gRoussac
81945cef71 [-] FO : Follow up https://github.com/PrestaShop/PrestaShop/pull/879 2013-10-24 10:00:19 +02:00
Gregory Roussac
1cc0134ec3 Merge pull request #879 from neemzy/development
[-] FO : OPC hide VAT fields fail if there are no company fields
2013-10-24 00:55:55 -07:00
Fabio Chelly
b9de912dd3 [-] MO : Fixed bug PNM-1431 - referralprogram Lack the % sign 2013-10-24 09:53:16 +02:00
Tom Panier
6d3640e895 Conditions to hide VAT fields fail if there are no company fields
"Company" fields may or may not be rendered on this form, whereas "VAT" fields are always rendered and depend on the former ones to be shown (or hidden) with CSS.

This fixes an edge case where there are no "Company" fields rendered and "VAT" fields still wrongly appear, which was caused by the fact that `$('#field').val() != ''` is truthy when `$('#field').length` is zero (since `'' != undefined`).
2013-10-24 09:43:50 +02:00
gRoussac
56693da6e0 // remove warning Notice: Undefined variable: connections in AdminCustomersController.php on line 702 2013-10-23 19:02:13 +02:00
gRoussac
3e33a259ef [-] BO : FIx bug #PSCFV-10736 again, fixing query when product is not in base 2013-10-23 18:33:37 +02:00
gRoussac
8e506ddff2 [-] BO : FIx bug #PSCFV-10736, could not load a product given from getBoughtProducts 2013-10-23 18:16:45 +02:00
gRoussac
03ad842697 [-] BO : Fix bug #PSCFV-10790, Customer group names not exploded 2013-10-23 16:07:28 +02:00
Rémi Gaillard
554ab9414f [-] BO: product listing should call Product::getPriceStatic() with the product default shop in the context when it is not a shop context 2013-10-23 15:08:02 +02:00
Rémi Gaillard
747ec9a2c4 // notice on carrierwizard when step back 2013-10-23 14:50:30 +02:00
Gregory Roussac
2f5e15e2b1 Merge pull request #874 from PhpMadman/patch-5
[-] FO: Mobile theme removed width on message product select
2013-10-23 03:04:25 -07:00
PhpMadman
373604fc97 [-] FO: removed width on message product select
Limiting select could make the user think the select is not working if they click to much to the left on bigger screens
2013-10-23 11:52:35 +02:00
gRoussac
101b37b40a Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-10-23 11:45:26 +02:00
gRoussac
ad4ecefcf9 [-] FO : Prevent fatal error on getUniqReference when order not loaded 2013-10-23 11:44:12 +02:00
Fabio Chelly
3e999ab591 [-] MO blockcart
#PNM-1685 - [CODE] incorrect spelled variable in ajax-cart.js
2013-10-23 10:56:48 +02:00
Fabio Chelly
010ad76e6f Merge remote-tracking branch 'origin/development' into development 2013-10-23 10:55:35 +02:00
Fabio Chelly
5fd3ad5adf [*] FO ProductSale: improves calculation of most selled products when there are a lot of products in shop 2013-10-23 10:55:23 +02:00
Rémi Gaillard
6cddb57ce3 [-] BO: Synchronize stock available after receipt supply order items #PSCFV-10724 2013-10-23 10:34:00 +02:00
gRoussac
ae63336a37 [-] BO : Fix bug #PSCFV-10638, Admin Import by reference moves products to home category 2013-10-23 01:41:05 +02:00
gRoussac
feca06417f // definition on addFeatureValueImport 2013-10-23 01:23:35 +02:00
gRoussac
5d28d38a22 [-] BO : Fix bug #PSCFV-7907 AdminImport, add custom field to features 2013-10-23 01:18:09 +02:00
Gregory Roussac
398548fecf Merge pull request #864 from samy-r/features-duplication-escaping
[-] CORE : pSQL for feature values
2013-10-22 10:20:44 -07:00
Gregory Roussac
83d4d0d258 Merge pull request #872 from ldecoker/patch-11
[-] PDF : {else if} instead of {elseif} (B2B invoice template)
2013-10-22 10:19:31 -07:00
Gregory Roussac
c401e61b81 Merge pull request #871 from ldecoker/patch-10
[-] PDF  : {else if} instead of {elseif}
2013-10-22 10:18:57 -07:00
Gregory Roussac
5bb4d48ddd Merge pull request #870 from djfm/development
[*] LO : Fixed a few bugs with currency formats in Back-Office orders
2013-10-22 10:17:11 -07:00
Gregory Roussac
e557db6429 Merge pull request #866 from studiokiwik/sk-ps15x-007
[-] MO : Loyalty if customer is logged do not recreate it
2013-10-22 10:15:55 -07:00
ldecoker
ce4170574c [PDF] [-] {else if} instead of {elseif} (B2B invoice template) 2013-10-22 18:57:12 +02:00
ldecoker
e6e2db8400 [PDF] [-] {else if} instead of {elseif} 2013-10-22 18:55:32 +02:00
Gregory Roussac
70d2e6e10b Merge pull request #868 from ldecoker/patch-8
[-] BO : Notices onBO translation page
2013-10-22 08:03:06 -07:00
ldecoker
7cbaada844 [BO][-] Notice messages when accessing the BO translation page
When accessing the translation part with "core translation" , you got 2 errors:
Notice: Use of undefined constant _PS_THEME_SELECTED_DIR_ - assumed '_PS_THEME_SELECTED_DIR_' in controllers\admin\AdminTranslationsController.php on line 1018

Notice: Use of undefined constant _PS_THEME_SELECTED_DIR_ - assumed '_PS_THEME_SELECTED_DIR_' in \controllers\admin\AdminTranslationsController.php on line 1026

It's because the variable $this->theme_selected is not set for that case.
2013-10-22 17:00:56 +02:00
Gregory Roussac
bc7e8eb355 Merge pull request #867 from PhpMadman/patch-4
[-] FO: Removed missplaced </li> on mobile theme
2013-10-22 07:50:21 -07:00
Fabio Chelly
bc38b542fe Merge remote-tracking branch 'origin/development' into development 2013-10-22 15:53:43 +02:00
Fabio Chelly
2989538ce1 [*] BO Module mailalerts: send e-mail to merchand when product is out of stock 2013-10-22 15:53:20 +02:00
PhpMadman
e857fb5978 [*] FO: Removed missplaced </li> on mobile theme 2013-10-22 13:34:52 +02:00
gRoussac
1ae587475b [-] MO : Fix bug #PSCFV-10787, cms associated to all shops 2013-10-22 12:19:58 +02:00
gRoussac
d20aea0563 [-] BO : Fix bug #PSCFV-10767, could not retrieve feature value when product IDs not forced 2013-10-22 11:27:45 +02:00
Gaelle ITZKOVITZ
ce8d01ad4c [-] MO : if customer is logged we do not recreate it 2013-10-22 11:09:53 +02:00
gRoussac
2aa52356ad [-] BO : Fix bug #PSCFV-10607 one upload name 2013-10-22 09:39:59 +02:00
gRoussac
c1ecf43be8 [-] MO : Fix bug #PSCFV-10775, could not upload .jpeg in TinyMCE 2013-10-21 17:39:20 +02:00
gRoussac
16ffbd8ee5 // norms 2013-10-21 16:46:22 +02:00
gRoussac
61884ec223 // norms 2013-10-21 16:31:56 +02:00
gRoussac
a05c748e81 // addJqueryPlugin receives array in first argument 2013-10-21 15:05:03 +02:00
gRoussac
a9e45fccf3 [-] MO : ScrollTo not loaded 2013-10-21 14:35:23 +02:00
gRoussac
d25b41ef97 [-] BO : wrong csv files name 2013-10-21 14:34:59 +02:00
Samy Rabih
5d8c0a0fc2 duplicateFeatures doesn't protect feature values
The features values are not protected using pSQL during the features
duplication
2013-10-21 14:08:30 +02:00
Daniel
8053604005 Update GuestTrackingController.php
Fixed issue with retrocompatibility where the ->getFirst() caused a 505 error on the order_collection when a collection class was not loaded.
2013-10-21 19:40:47 +08:00
gRoussac
15cd0b9fbc [-] BO : Report of fd86a29c5c 2013-10-21 12:21:49 +02:00
Gregory Roussac
3dea171047 Merge pull request #862 from PhpMadman/patch-3
[-] PDF : Removed unused code in FrontOffice PDF Invoice
2013-10-21 01:15:39 -07:00
PhpMadman
35df3f463c Removed unsed code
I looked through the code. And I can't see that that code is used. everything is handled in PDF class.
2013-10-21 10:10:28 +02:00
Rémi Gaillard
198e75245d [-] FO: Don't auto detect language if it not associated to the shop #PSCFV-10273 2013-10-21 09:41:00 +02:00
Gregory Roussac
8ef22c3548 Merge pull request #823 from kpodemski/patch-8
[*] IN: Add phone_mobile to address format
2013-10-20 16:40:16 -07:00
gRoussac
9b8a7edad8 // small refacto 2013-10-21 01:05:18 +02:00
gRoussac
332c8ff49f [-] CORE : Fix bug #PSCFV-10687 again, #PSCFV-10752 replaceAccentedChars() // sorry for that 2013-10-21 00:28:41 +02:00
gRoussac
c9d20f35b3 // norms 2013-10-21 00:00:17 +02:00
gRoussac
f2d70076bd [-] : Fix bug #PSCFV-4859, could not register invoice address or invoice country in OPC as guest, and phone not required in standard registration 2013-10-20 23:52:48 +02:00
Gregory Roussac
c36625a136 Merge pull request #851 from PrestanceDesign/patch-1
[*] BO : Adding a title tag to display the module name on hover like PS ...
2013-10-18 09:42:57 -07:00
gRoussac
5daa79c1e1 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-10-18 18:36:51 +02:00
gRoussac
8ef1e043af [*] BO : chmod 664 to config.xml file 2013-10-18 18:36:30 +02:00
PrestanceDesign
6965bb29c1 [*] BO : Adding a title tag to display the module name on hover like PS 1.4 2013-10-18 18:20:15 +02:00
Fabio Chelly
72ccc90cc9 Merge remote-tracking branch 'origin/development' into development 2013-10-18 17:49:14 +02:00
Fabio Chelly
7133e74c17 [-] MO mailalerts: module mailalerts shows all messages regarding the order
PNM-1632 - MailAlert does not show Paypal error message if order has comments
2013-10-18 17:49:00 +02:00
gRoussac
2e2151a1bb [-] CORE : error_get_last > PHP 5.1 2013-10-18 15:29:12 +02:00
Rémi Gaillard
8a682081de // typo 2013-10-18 12:17:51 +02:00
Rémi Gaillard
6747d3bbac [-] BO: Default country should be overriden in the context in multishop 2013-10-18 10:23:06 +02:00
Rémi Gaillard
b8273a13e6 // 2013-10-17 18:30:22 +02:00
gRoussac
3a38af9982 [-] FO : Could not redirect back to url in adress.php 2013-10-17 14:16:54 +02:00
gRoussac
6b1d69dd7d [-] FO : $back value twice escaped 2013-10-17 12:18:23 +02:00
Rémi Gaillard
eb14e25e2a // small fix for some order by on listing 2013-10-17 11:33:05 +02:00
gRoussac
f1ea9ba5b4 [-] BO : Fix bug #PSCFV-10709 rename root category with slashes in it 2013-10-17 10:53:20 +02:00
Rémi Gaillard
e4faa2bb75 [-] Core: Out of stock status should be setted after the first order history 2013-10-17 10:28:14 +02:00
gRoussac
3ba5905042 [-] BO : Could not order by reserved words like 'key' 2013-10-16 16:25:40 +02:00
Rémi Gaillard
22fd1b84c4 Merge pull request #847 from MustangZhong/patch-1
[-] WS: Missing field on Cart::getWsCartRows()
2013-10-16 00:58:16 -07:00
MustangZhong
ad27dbe8d1 Update Cart.php
The field "id_address_delivery" is missing in getWsCartRows.
Since id_address_delivery is required in the web service field definition.
2013-10-16 10:14:14 +08:00
Sébastien
5abd93e619 [-] MO : Fix add truncate tag 2013-10-15 21:38:10 +02:00
Rémi Gaillard
6ee538c710 // fix on ps_cleaner 2013-10-15 19:53:59 +02:00
gRoussac
237b950eb6 [-] FO : #PSCFV-10640 again, bad assignement 2013-10-15 16:35:58 +02:00
gRoussac
7ae9832992 // small cast 2013-10-15 14:56:25 +02:00
gRoussac
81497be5ab [-] Fo : Fix bug #PSCFV-10640, redirect loop when country address is not among active countries in OPC 2013-10-15 14:53:44 +02:00
Rémi Gaillard
837ca34e7e [-] Core: Product::getPriceStatic called with 1 quantity return the specific price for 1 qty if called with id_cart = 0 2013-10-15 10:30:48 +02:00
gRoussac
9c861642a5 [-] BO : AdminImport, wrong default separators 2013-10-15 10:09:16 +02:00
Gregory Roussac
dec9ef40a8 Merge pull request #841 from indesign47/patch-10
[+] BO : AdminImport add entity Alias
2013-10-15 01:03:33 -07:00
djfm
b4e18954f9 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-10-15 07:22:03 +00:00
Francois Gaillard
fd2dc4ff64 [-] Classes : Modules listing and case insensitive 2013-10-15 09:14:49 +02:00
indesign47
f25a418785 Update Alias.php 2013-10-14 19:20:38 +02:00
Rémi Gaillard
6f4b85430c // Fix listings and sort 2013-10-14 18:52:48 +02:00
Gregory Roussac
2a28e47650 Merge pull request #799 from Lupul/development
[-] BO : Fixed Bug what displayed Dashboard sales statistics in wrong currency
2013-10-14 08:37:28 -07:00
Gregory Roussac
f3755e2d0a Merge pull request #843 from ldecoker/patch-10
[-] BO : AdminMeta - make sure module and controller name are in lowercase
2013-10-14 07:46:56 -07:00
Gregory Roussac
bce6e8f09f Merge pull request #837 from axometeam/patch-21
[-] BO : bad query when filtering on status + sorting by quantity in the AdminProducts getList
2013-10-14 07:45:52 -07:00
gRoussac
cc8ec4fd45 [-] CORE : Fix bug #PSCFV-10687 bad conversion for accentuated Y and W, thanks @mike15 2013-10-14 16:03:50 +02:00
gRoussac
80f6f4e223 [-] FO : Fix bug #PSCFV-10688, bad priceDisplay in order-carrier 2013-10-14 15:34:47 +02:00
gRoussac
50002ec714 [-] FO : Fix #PSCFV-10690 again, change just on directories 2013-10-14 14:23:26 +02:00
gRoussac
c6e3e28894 [-] FO : Fix bug #PSCFV-10690 could not index a category beacause of robot.txt 2013-10-14 14:20:11 +02:00
gRoussac
f8edca8ac8 [-] IN : Fix bug #PSCFV-10539 duplicate "address" url rewrite in meta.xml for Russian 2013-10-14 13:59:19 +02:00
gRoussac
2a54296b96 [-] BO : Fix bug #PSCFV-10692, AdminImport bad utf8 cars for subst 2013-10-14 12:11:47 +02:00
gRoussac
1adfa1584c Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-10-14 11:37:51 +02:00
gRoussac
1358c696cd [-] BO : Fix #PSCFV-10678 warning in chrome 2013-10-14 11:37:15 +02:00
djfm
5e407db21e [*] LO : Fixed a few bugs with currency formats in Back-Office orders 2013-10-14 09:30:45 +00:00
Jerome Nadaud
3282bd19e4 // Small fix 2013-10-14 10:59:20 +02:00
Rémi Gaillard
3bc02bbe10 // fields are already correctly formated when they are in a object coming from the database 2013-10-14 10:56:38 +02:00
gRoussac
af9182dad5 [-] CORE , follow up b87e934a66 and a10dcab6e7 2013-10-14 10:51:17 +02:00
Gregory Roussac
3539eb3697 Merge pull request #842 from kiropowered/patch-1
[-] CORE : StockMvt Fix bug if product have attribute
2013-10-14 01:30:30 -07:00
ldecoker
a377ecd571 Update Meta.php
Use strtolower from Tools class.
2013-10-14 09:53:50 +02:00
ldecoker
8d7e96176c SEO - make sure module and controller name are in lowercase
For module controller, make sure that the name of the controller and the module are saved in lowercase. Otherwise the route will not be found in getModuleLink.
2013-10-14 09:38:04 +02:00
gRoussac
f9cfde9a05 [-] MO : Trackingfront, could not load employee stats date 2013-10-12 23:24:32 +02:00
gRoussac
ee29f4365e [-] FO : Copuld not load datepicker in trackingfront stats.php 2013-10-12 17:54:26 +02:00
kiropowered
a10dcab6e7 Update StockMvt.php
Fix bug if product have attribute
2013-10-12 14:28:27 +02:00
indesign47
0a441b9a4b Update Alias.php 2013-10-12 11:49:27 +02:00
indesign47
4f9191fe0c Update form.tpl 2013-10-12 11:45:07 +02:00
indesign47
2afbe8fd04 Create alias_import.csv 2013-10-12 11:39:29 +02:00
indesign47
85c6e799c3 [+] BO : AdminImport add entity Alias 2013-10-12 11:33:36 +02:00
Gregory Roussac
418155cf2b Merge pull request #838 from pelTek/patch-1
BO: added UPC and EAN search
2013-10-11 11:52:22 -07:00
Chris
3f6139be42 BO: added UPC and EAN search 2013-10-11 21:02:01 +03:00
Axome
9d5a9225e5 Correct some "bad query" in the admin products getList
Here the wrong Sql generated :

SELECT SQL_CALC_FOUND_ROWS a.`id_product`,b.name as name,`reference`,a.price as price,a.active as active , MAX(i.id_image) id_image,cl.name `name_category` , a.`price`, 0 AS price_final, sav.`quantity` as sav_quantity, a.`active` FROM `ps_product` a LEFT JOIN `ps_product_lang` b ON (b.`id_product` = a.`id_product` AND b.`id_lang` = 2 AND b.`id_shop` = 1) LEFT JOIN `ps_image` i ON (i.`id_product` = a.`id_product` AND i.cover=1)LEFT JOIN `ps_category_lang` cl ON (a.`id_category_default` = cl.`id_category` AND b.`id_lang` = cl.`id_lang` AND cl.id_shop = 1) LEFT JOIN `ps_stock_available` sav ON (sav.`id_product` = a.`id_product` AND sav.`id_product_attribute` = 0 AND sav.id_shop = 1 ) WHERE 1 AND a.`active` = 0 GROUP BY a.id_product ORDER BY quantity desc LIMIT 0,50 

'quantity' is ambigus (for the ORDER BY)
2013-10-11 18:17:55 +02:00
Gregory Roussac
0dbaa59985 Merge pull request #836 from mkdgs/patch-1
[*] MO : blocktopmenu adding clear cache of AddAfter hook for Cms, Supplier, Manufaturer and Product
2013-10-11 09:05:15 -07:00
Rémi Gaillard
06c62c1684 [-] WS: Fix #PSCFV-10672 order by ID for non multishop entities 2013-10-11 17:53:15 +02:00
Jerome Nadaud
0f9c81a683 [-] BO : FixBug #PSCFV-10671 - remove htmlentities on customer message 2013-10-11 17:29:44 +02:00
gRoussac
a07733fcec [-] BO : Could not insert referrer id_connections_source can not be null 2013-10-11 16:52:53 +02:00
Axome
eff3f6f713 A new version of my precedent pull-request
when you have some tags with attributes ( like img, ... )
2013-10-11 16:52:14 +02:00
Mickael Desgranges
1786f8e907 Update blocktopmenu.php
Fix: block top menu is not updated when content is added in CMS

adding support of AddAfter hook for Cms, Supplier, Manufaturer and Product
2013-10-11 16:42:21 +02:00
Fabio Chelly
9fc9df6ba4 Merge remote-tracking branch 'origin/development' into development 2013-10-11 16:38:09 +02:00
Fabio Chelly
9e3b82e8ed [*] BO Module productcomments: JS variables are correctly escaped. Padding in error message has also been pushed to theme tpl 2013-10-11 16:37:26 +02:00
gRoussac
8cfe9a2065 [-] Bo : Could not update mailalert 2.5 with id_lang missing 2013-10-11 16:19:54 +02:00
gRoussac
45e9040606 [-] Bo : Could not update mailarler 2.5 with id_mlang 2013-10-11 15:51:02 +02:00
Jerome Nadaud
1a1f3de775 [-] BO: Fixbug #PSCFV-10671 - Double htmlentities. 2013-10-11 13:33:31 +02:00
Gregory Roussac
6c739ee2b3 Merge pull request #833 from djfm/development
[*] LO : set correct currency format for CHF
2013-10-11 01:58:10 -07:00
Fabio Chelly
5c66ed4791 Merge remote-tracking branch 'origin/development' into development 2013-10-11 10:51:50 +02:00
Fabio Chelly
d1a7ff50d5 [*] BO Module watermark: minimum transparency level is 1 and not 0. 2013-10-11 10:51:28 +02:00
gRoussac
7b02da5fdf // bad commit sorry 2013-10-11 10:32:30 +02:00
gRoussac
36ca7bc508 [-] BO : AdminImport, fix Group searchByName 2013-10-11 10:23:17 +02:00
fchellypresta
075a911cee Merge pull request #830 from indesign47/patch-5
[-] MO : productcomments errors translated in multi-language
2013-10-11 00:40:32 -07:00
fchellypresta
6f878353a6 Merge pull request #831 from indesign47/patch-7
[-] MO : productcomments round average up not down
2013-10-11 00:29:37 -07:00
djfm
bb96c8754f [*] LO : set correct currency format for CHF 2013-10-11 07:14:30 +00:00
gRoussac
dc1632a8b0 [-] BO : Adminimport, id_specific key_price not defined 2013-10-10 22:04:42 +02:00
Gregory Roussac
a87bbf84b4 Merge pull request #825 from indesign47/patch-4
[-] BO : AdminImport add available fields to Products
2013-10-10 10:22:43 -07:00
Damien Metzger
4505387046 // Try to fix regexp issues with some PHP configurations 2013-10-10 18:41:50 +02:00
gRoussac
286084c42d Merge branch 'master' of https://github.com/DarkHack/PrestaShop into contrib/master
Conflicts:
	controllers/admin/AdminImportController.php
2013-10-10 17:06:13 +02:00
Jerome Nadaud
789911184b [-] BO : FixBug - Remove second email in recipient 2013-10-10 15:04:32 +02:00
gRoussac
39a543188a [-] BO : Fix bug #PSCFV-10660, could not delete csv file on NT 2013-10-10 14:54:12 +02:00
Damien Metzger
9bae53a4d9 Merge pull request #828 from djfm/development
// fixed name of gender 2 in English
2013-10-10 03:08:40 -07:00
djfm
819dac6622 // fixed name of gender 2 in English 2013-10-10 09:36:05 +00:00
François Gaillard
8d1bca5542 Merge pull request #768 from enumag/patch-4
[-] Classes : Hook - Display payment method & custommer currency bug fix
2013-10-09 13:52:09 -07:00
Fabio Chelly
246340b78c [*] BO Module search: Enter key is now disabled in quick search field (field is correctly aligned) 2013-10-09 18:33:41 +02:00
Fabio Chelly
75ffa8c4f8 [*] BO Module search: Enter key is now disabled in quick search field 2013-10-09 18:30:09 +02:00
Jerome Nadaud
f6bbb6e241 // Fix duplicate invoice delivery number 2013-10-09 17:43:43 +02:00
Jerome Nadaud
68d84892c7 // remove self:: 2013-10-09 16:40:09 +02:00
Jerome Nadaud
2feb5dd8d2 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-10-09 16:31:09 +02:00
Jerome Nadaud
d0a4636966 [-] BO : FixBug #PSCFV-9957 - Duplicate order invoice number 2013-10-09 16:29:15 +02:00
Vincent Augagneur
d796d0012e [-] BO : fixed bug #PSCFV-10637 PS_CARRIER_DEFAULT is not updated after edit default carrier 2013-10-09 15:25:02 +02:00
Gregory Roussac
df4ae671a2 Merge pull request #826 from gouz/patch-4
[-] BO : Export DeliverySlip, the dates range using delivery_date but date_add
2013-10-09 06:02:52 -07:00
gRoussac
df97566018 [-] BO : AdminImport no default value for separators 2013-10-09 13:57:36 +02:00
gRoussac
338efcad7f [-] CORE : $smarty->compile_check is not set to false, thanks @prestamodule 2013-10-09 12:14:49 +02:00
Sylvain Gougouzian
7a6dea4964 [~] BO : Export DeliverySlip
The dates range wasn't using the correct sql fields.
2013-10-09 10:39:24 +02:00
gRoussac
008c6ce759 [-] FO : Fix bug #PSCFV-10497 cart_block hooked on column disappearing 2013-10-08 18:37:50 +02:00
gRoussac
85946bacbe // small cast 2013-10-08 18:35:56 +02:00
Gregory Roussac
cd8af9ae67 Merge pull request #824 from Prestaworks/patch-14
[-] BO : Fixes issue where path is not printed when error with email template saves occur.
2013-10-08 05:57:21 -07:00
Daniel
fa88a0bd93 Update AdminTranslationsController.php
Fixes issue where path is not printed when error with email template saves occur.
2013-10-08 20:54:52 +08:00
Rémi Gaillard
2899dfba5e // Fix AdminTranslationsController::addNewTabs() 2013-10-08 14:53:02 +02:00
Krystian Podemski
ae7d33effe [*] CORE: Add phone_mobile to address format
I honestly do not know why you decided by default to show only the first field of the phone :)

Users often ask me why they don't see their mobile phone on orders in BO.
2013-10-08 11:11:24 +02:00
gRoussac
e4a642128a [-] FO : Fix bug #PSCFV-10606 could not have correct taxCalculationMethod when vat number in customer address 2013-10-08 11:09:52 +02:00
Zollner Robert
30adb0932d [-] BO : pass correct typed parameter to setCurrency 2013-10-07 23:42:26 +03:00
Rémi Gaillard
7d0e9a5f06 // Fix double entities on AdminLog listing #PSCFV-10472 2013-10-07 19:37:58 +02:00
Gregory Roussac
4daaa206d2 Merge pull request #818 from cedricfontaine/patch-2
[-] MO : Price should apply tax as in configuration.
2013-10-07 09:55:35 -07:00
Gregory Roussac
644e38c05f Merge pull request #817 from cedricfontaine/patch-1
[-] MO :Loyalty voucher should be without taxes, otherwise points would be negative.
2013-10-07 09:54:22 -07:00
Francois Gaillard
77b2b4b6ca // Manual merge PS 1.5.6.0 2013-10-07 18:22:55 +02:00
cedricfontaine
d63288affd Update loyalty.php
Price should apply tax as in configuration.
2013-10-07 12:14:13 -04:00
Damien Metzger
c51fe5b22d // Changelog 1.5.6.0 2013-10-07 18:07:25 +02:00
cedricfontaine
717e195f57 Update LoyaltyModule.php
Voucher should be without taxes, otherwise points would be negative.
2013-10-07 12:07:03 -04:00
Gregory Roussac
f78a093a1c Merge pull request #815 from PrestanceDesign/development
[*] TR : Italian translation of the country instead of English
2013-10-07 08:39:39 -07:00
PrestanceDesign
f9f5a4b090 Italian translation of the country instead of English 2013-10-07 16:45:22 +02:00
Gregory Roussac
92ffb1eab1 Merge pull request #812 from djfm/release
[*] TR : updated Russian installer
2013-10-07 03:25:42 -07:00
Francois Gaillard
f4610c06e0 [-] BO : Bug fix - Modules confirmation messages 2013-10-07 12:21:16 +02:00
Francois Gaillard
68cba08303 [-] BO : Bug fix - Modules confirmation messages 2013-10-07 12:18:44 +02:00
djfm
2969a7f74c // updated Russian installer 2013-10-07 10:14:43 +00:00
Rémi Gaillard
1ed26e2d4e // default perms profiles 2013-10-07 12:13:59 +02:00
gRoussac
302260539b // Report from ebf09792e9 2013-10-07 12:08:39 +02:00
gRoussac
d125ca0a36 [-] FO : isVirtualCart was forced to false 2013-10-07 12:06:28 +02:00
gRoussac
adb1779764 [-] FO : isVirtualCart was forced to false 2013-10-07 12:02:47 +02:00
Fabio Chelly
a652590885 Merge remote-tracking branch 'origin/development' into development 2013-10-07 11:34:56 +02:00
Fabio Chelly
2515d81bdd [*] BO Module search: Quick search can now search modules by name and not only display name 2013-10-07 11:34:16 +02:00
Gregory Roussac
bf65404413 Merge pull request #810 from studiokiwik/sk-ps15x-001
[-] MO : button tag on line 56 weren't closed
2013-10-07 02:29:19 -07:00
gRoussac
e3db5570d0 [-] BO : Retro compat, PS_ADMIN_DIR not defined //bad commit sorry 2013-10-07 11:24:42 +02:00
Gregory Roussac
68131dc28b Merge pull request #811 from studiokiwik/sk-ps15x-002
[-] TR : typo fixed in polish installer translation (line 85)
2013-10-07 01:59:10 -07:00
gRoussac
7a7da1097d [-] BO : Employee's default_tab may not exists, switching to AdminOrders 2013-10-07 10:53:03 +02:00
gRoussac
df0a24d63c [-] BO : Retro compat, PS_ADMIN_DIR not defined 2013-10-07 10:47:41 +02:00
Tomasz Slominski
4254ae6edc typo fixed in polish installer translation (line 85) 2013-10-07 10:05:43 +02:00
Vincent Augagneur
3f4f298ad4 [-] CORE fixed bug #PSCFV-10595 - small fix in function addJqueryPlugin() 2013-10-07 10:01:26 +02:00
Gregory Roussac
2a475d066f Merge pull request #803 from ldecoker/patch-8
[-] BO : Missing $php_self variable in OrderDetailController.php
2013-10-07 01:00:42 -07:00
Tomasz Slominski
b941ac007b bugfix: button tag on line 56 weren't closed 2013-10-07 09:57:55 +02:00
Damien Metzger
d6ffb45eb1 Merge pull request #809 from djfm/kill_miss
[*] LO : Removed 'Miss' from the default genders because too country specific
2013-10-07 00:57:13 -07:00
djfm
b6bba0c787 [*] LO : Removed 'Miss' from the default genders because too country specific 2013-10-07 07:53:19 +00:00
Rémi Gaillard
3477cac1e0 Merge pull request #800 from Ha99y/20131004_retro-compat.js.php
__DIR__ is available since PHP 5.3
2013-10-07 00:35:02 -07:00
indesign47
d3d0897012 [-] MO : productcomments round average up not down
200 comments with 5 stars and only 1 with 4 stars give only 4 stars
Thanks to manit4c
2013-10-07 04:02:42 +02:00
indesign47
e0978a0b84 [-] MO : productcomments errors translated in multi-language 2013-10-07 03:18:56 +02:00
ldecoker
148348855e Update OrderDetailController.php
Missing $php_self variable
2013-10-06 16:31:54 +02:00
indesign47
b61e3e68b9 Update AdminImportController.php 2013-10-05 10:50:19 +02:00
ha99y
98aea24fc3 __DIR__ was never defined
The JS files would not lode, when in dev mode because __DIR__ was not
defined
2013-10-04 17:18:23 -07:00
Zollner Robert
1787923c4c [-] BO : Fixed Bug what displayed Dashboard sales statistics in wrong currency (changed NULL to lowercase) 2013-10-05 00:42:29 +03:00
Zollner Robert
481cb5c28a [-] BO : Fixed Bug what displayed Dashboard sales statistics in wrong currency 2013-10-04 23:30:24 +03:00
Rémi Gaillard
b2b0c4f00b // remove debug 2013-10-04 18:45:18 +02:00
Rémi Gaillard
2aee99c0b0 [-] FO: Fix display of quantity discounts on product pages if the customer is allowable for multiple discount for the same quantity #PSCFV-10580 2013-10-04 18:37:30 +02:00
Fabio Chelly
48f20a4393 Merge remote-tracking branch 'origin/development' into development 2013-10-04 18:15:32 +02:00
Fabio Chelly
139a74e4cd [*] BO Module search: the PHP search has been replace by a quick search in JS to display results instantly 2013-10-04 18:15:12 +02:00
Jerome Nadaud
121fcdc39f // Fix list start 2013-10-04 16:56:35 +02:00
Vincent Augagneur
fe6494bf35 //fixed bug PSCFV-10567 2013-10-04 16:33:50 +02:00
gRoussac
a4b7fc942f [-] CORE : #PSCFV-10389 Avoid eventual empty Specific Price Rule 2013-10-04 14:11:42 +02:00
Rémi Gaillard
fef8d2beac // Fix group reduction per category 2013-10-04 14:00:42 +02:00
Rémi Gaillard
6dacc07e62 // sometimes, translations files could not exist 2013-10-04 13:19:34 +02:00
indesign47
805989da39 [-] BO : AdminImport add products available fields 2013-10-04 13:04:52 +02:00
Jerome Nadaud
093bf9e065 [-] MO : Blocklayered - Fix expand/collapse tree problem 2013-10-04 11:51:12 +02:00
indesign47
75cb92c329 Update AdminImportController.php 2013-10-04 11:44:52 +02:00
Gregory Roussac
f28131fe9b Merge pull request #795 from indesign47/patch-3
[-] BO : AdminImport add combinations available fields
2013-10-04 02:40:29 -07:00
indesign47
96646b5c7a [-] BO : AdminImport add products available fields 2013-10-04 10:56:41 +02:00
PhpMadman
18ab409eeb [*] BO: #PNM-1472 Changed label and transparency range check to 1
Changed label to 1-100 since, there is no need to set transparency to 0, since it will pretty much will be invisible already at 1
2013-10-04 10:38:03 +02:00
indesign47
a92ced814a [-] BO : AdminImport add combinations available fields 2013-10-04 10:26:38 +02:00
Jerome Nadaud
3d8591c588 [-] MO : Blocklayered - Fix empty fancy box after template edit 2013-10-04 10:14:07 +02:00
Gregory Roussac
09ad15730b Merge pull request #794 from indesign47/release
[-] BO : AdminImport add adresses required fields
2013-10-04 01:02:46 -07:00
indesign47
6c9b71ee58 [-] BO : AdminImport add adresses required fields 2013-10-04 04:35:00 +02:00
indesign47
0af24ab034 [-] BO : AdminImport add adresses required fields 2013-10-04 04:31:51 +02:00
Rémi Gaillard
f100027e5d [-] FO: packages should be splitted with advanced stock management when carrier is not associated to multiple warehouse 2013-10-03 19:21:49 +02:00
Jerome Nadaud
6a0c376a18 [-] MO : Blocklayered - Fix empty fancy box after template edit 2013-10-03 18:58:09 +02:00
gRoussac
62d946ea68 [-] CORE : Fix bug #PSCFV-10179 Duplicate specific price records when updating a product 2013-10-03 18:41:06 +02:00
gRoussac
31f421153d [-] BO : Fix bug #PSCFV-9323 supplier_reference can be unset 2013-10-03 18:20:45 +02:00
gRoussac
c75cda2429 [*] BO : AdminImport, retrieve separators and lang selected 2013-10-03 17:35:20 +02:00
Damien Metzger
e7c860a3dd Merge pull request #792 from djfm/release
// remove backup files
2013-10-03 08:09:41 -07:00
djfm
8580dd0b39 // remove backup files 2013-10-03 15:02:16 +00:00
Damien Metzger
9e837d1ecc // No more translation packs in the ZIP (except for FR and EN), only remotes! 2013-10-03 16:35:54 +02:00
Gregory Roussac
cfd70bf660 Merge pull request #789 from PhpMadman/patch-2
[*] BO: wrong description on getIdOrderCarrier
2013-10-03 07:30:14 -07:00
Rémi Gaillard
0662cd3b12 // don't need to clear smarty cache while installation 2013-10-03 16:29:31 +02:00
Damien Metzger
6c4a69ea0b Merge pull request #790 from djfm/release
// added tab translations to Bengali installer
2013-10-03 07:26:29 -07:00
djfm
b92c9869a4 // added tab translations to Bengali installer 2013-10-03 14:20:08 +00:00
gRoussac
992cc6b437 Merge branch 'release' of https://github.com/PrestaShop/PrestaShop into release 2013-10-03 16:10:37 +02:00
gRoussac
7f32e8d187 [-] BO : Fix bug #PSCFV-10064, could not import feature in multilang, thanks @E.Bigfoot 2013-10-03 16:09:43 +02:00
gRoussac
cafe2ed9d2 [-] BO : Fix bug #PSCFV-10064, could not import deature in multilang, thanks @E.Bigfoot 2013-10-03 16:08:53 +02:00
PhpMadman
e38d808a85 [*] BO: wrong description on getIdOrderCarrier 2013-10-03 15:51:27 +02:00
Gregory Roussac
86631202df Merge pull request #788 from PhpMadman/patch-1
[*] BO: missing align on order for product warehouse
2013-10-03 06:37:58 -07:00
Fabio Chelly
d601844e82 Merge remote-tracking branch 'origin/development' into development 2013-10-03 15:32:27 +02:00
Fabio Chelly
ea57b3fdd1 [-] MO watermark: original pictures are now protected through htaccess
#PNM-109
2013-10-03 15:32:10 +02:00
PhpMadman
f979cbef57 [*] BO: missing align on order for product warehouse 2013-10-03 15:26:09 +02:00
gRoussac
8b2215eec5 // remove warning 2013-10-03 15:02:48 +02:00
gRoussac
0f288583ca [-] BO : Remove dead code in AdminImport 2013-10-03 14:57:03 +02:00
Gregory Roussac
8762c310b9 Merge pull request #787 from tucoinfo/development
[*] FO : add variable $nofollow to mobile theme header.tpl
2013-10-03 05:02:01 -07:00
Damien Metzger
6e0c3e1aa2 // addFeatureValueImport partial fix 2013-10-03 12:24:35 +02:00
tucoinfo
8f09d49ffc [*] FO : add variable $nofollow to mobile theme header.tpl
Copied from normal theme which already manages the NoFollow variable
2013-10-03 12:19:10 +02:00
Jerome Nadaud
3585bf33c8 // Fix supply order change state save button 2013-10-03 11:49:16 +02:00
gRoussac
6610bd2067 [-] BO : Could noty save ImportMatchs 2013-10-03 11:15:03 +02:00
Jerome Nadaud
43a60f1b57 [-] BO : FixBug #PSCFV-9044 - Missing state in new order, and now you can edit customer addresses 2013-10-03 11:06:08 +02:00
Rémi Gaillard
f2e39488b6 Merge branch 'release' of https://github.com/PrestaShop/PrestaShop into release 2013-10-03 10:33:58 +02:00
Rémi Gaillard
e190c8df9f // small fix on import 2013-10-03 10:33:43 +02:00
Vincent Augagneur
d1956572a5 //small fix on carrier wizard 2013-10-03 10:29:40 +02:00
Gregory Roussac
ca1bc3daa8 Merge pull request #786 from kpodemski/patch-6
[-] CORE : Increasing the length of link_rewrite & name in Category.php
2013-10-03 01:24:22 -07:00
Krystian Podemski
d87c816038 [*] CORE : Increasing the length of link_rewrite & name in Category.php
In database this fields have varchar(128) so let's give the user full size of fields
2013-10-03 10:20:45 +02:00
Gregory Roussac
3b75dd6785 Merge pull request #785 from djfm/pstw
[*] TR : Traditional Chines Installer
2013-10-03 00:54:48 -07:00
Jerome Nadaud
89d86793b0 Merge branch 'release' of https://github.com/PrestaShop/PrestaShop into release 2013-10-03 09:12:01 +02:00
Jerome Nadaud
33b5971a7a [-] BO : FixBug #PSCFV-10558 - Invalid HTML markup. 2013-10-03 09:11:26 +02:00
djfm
711f5b0bdf [+] LO : Completed Traditional Chinese Installer 2013-10-03 06:57:53 +00:00
djfm
4668d8ffa2 Merge branch 'release' of https://github.com/PrestaShop/PrestaShop into pstw 2013-10-03 06:56:08 +00:00
gRoussac
e9a3c98af9 [-] BO : Fix bug #PSCFV-8389 duplicates is SpecificPrice table 2013-10-02 18:57:45 +02:00
gRoussac
da48cea96e [-] BO : AdminImport, tables are not truncated 2013-10-02 17:54:48 +02:00
Gregory Roussac
a40356d21c Merge pull request #784 from djfm/release
// updated native translation packs
2013-10-02 08:50:29 -07:00
djfm
3a0081912d // updated native translation packs 2013-10-02 15:37:57 +00:00
gRoussac
a027dbd061 [*] BO : Add category id in AdminSpecificPriceRule 2013-10-02 17:00:20 +02:00
Gregory Roussac
3d1d178bba Merge pull request #783 from ellisium/upper
[-] CORE : CART::BOTH should be Cart::Both
2013-10-02 16:35:37 +02:00
Gregory Roussac
4bb4199f5a Merge pull request #783 from ellisium/upper
[-] CORE : CART::BOTH should be Cart::Both
2013-10-02 07:34:00 -07:00
Eric Le Lay
3e0c5e71f4 classname uppercase issue 2013-10-02 16:28:45 +02:00
gRoussac
fe7035aae9 Merge branch 'release' of https://github.com/PrestaShop/PrestaShop into release 2013-10-02 15:48:44 +02:00
gRoussac
96be4068f5 // norms 2013-10-02 15:48:29 +02:00
Damien Metzger
250a9f17a2 [-] BO : managed decimal format in BO orders 2013-10-02 15:47:21 +02:00
gRoussac
bf6a0e0077 [-] BO : Fix bug #PSCFV-5060 could not import supplier_combinations in combinations import 2013-10-02 15:46:11 +02:00
Damien Metzger
6974a88b59 Merge pull request #782 from 202-ecommerce/development
[*] FO : Added new Maintenance Hook
2013-10-02 06:07:42 -07:00
Rémi Gaillard
f4cadbdfd6 Merge pull request #770 from urecheatu007/development
[-] LO: updated localization pack for Romania / romanian - added states
2013-10-02 05:47:17 -07:00
thoma202
1ccc25f56c Merge branch 'development' of github.com:202-ecommerce/PrestaShop into development 2013-10-02 14:38:44 +02:00
gRoussac
c4e549db13 [-] BO : Fix #PSCFV-6482 could not import tags in deiffrent languages 2013-10-02 14:20:27 +02:00
Damien Metzger
a876b13c1c [-] BO : fixed currency format on order creation 2013-10-02 12:10:54 +02:00
thoma202
eb7655e318 [+] Added hook in maintenance page 2013-10-02 11:58:35 +02:00
Rémi Gaillard
99f325dc3c // validation of carrierwizard 2013-10-02 11:24:08 +02:00
Grégoire Bélorgey
dbc5c4301f [*] BO : Allow complex GROUP BY in SQL Manager 2013-10-02 10:31:41 +02:00
gRoussac
c466320887 [-] Bo : Fix again #PSCFV-10474 again, not deleting start page after import 2013-10-01 19:11:51 +02:00
gRoussac
a6e8af99f9 Merge branch 'release' of https://github.com/PrestaShop/PrestaShop into release 2013-10-01 18:13:02 +02:00
gRoussac
6bbcbb536f [-] CORE : Cart rules not ordered by priority for PaymentModule 2013-10-01 18:12:15 +02:00
gRoussac
294384d9ea [-] CORE : Partial fix bug #PSCFV-10534 bad total_products_wt calculated without other cart rules 2013-10-01 18:11:54 +02:00
Gregory Roussac
953f0641e8 Merge pull request #778 from djfm/release
[*] TR : Installer Translations
2013-10-01 09:09:32 -07:00
gRoussac
a5dc1ce6f6 [-] Bo : Fix again #PSCFV-10474 coul not export more than 300 products 2013-10-01 18:02:12 +02:00
djfm
172986a461 // changed help text 2013-10-01 15:06:33 +00:00
djfm
23df6cb875 // updated German installer translations 2013-10-01 14:52:04 +00:00
gRoussac
f4c2bacea3 [-] CORE : Cart rules not ordered by priority for PaymentModule 2013-10-01 16:17:23 +02:00
gRoussac
626ccf0985 [-] CORE : Partial fix bug #PSCFV-10534 bad total_products_wt calculated without other cart rules 2013-10-01 14:46:40 +02:00
Gregory Roussac
a76a7273ea Merge pull request #776 from kpodemski/patch-5
[*] FO: We let style selected category in CSS on blockcategories
2013-10-01 03:04:54 -07:00
Krystian Podemski
9e4b6c020f [*] FO: We let style selected category in CSS on blockcategories
It's good to have this by default.
2013-10-01 12:02:19 +02:00
djfm
9e64ecc887 Merge branch 'release' of https://github.com/PrestaShop/PrestaShop into release 2013-10-01 09:58:40 +00:00
Rémi Gaillard
9ad046677c [*] BO: Allow to breakdown the taxes when they are computed 2013-10-01 11:55:56 +02:00
Rémi Gaillard
4fcbde878d [-] BO: Fix total without tax in breakdown taxes when taxes are combined #PSCFV-10394 on the invoices 2013-10-01 11:18:11 +02:00
gRoussac
f30bc80485 [-] BO : Remove duplicate sql insert in setProductOutOfStock in monoshop 2013-10-01 10:48:17 +02:00
djfm
e706b531bc // updated br, es, fr, ru installer translations 2013-10-01 08:41:03 +00:00
Jerome Nadaud
340f6cebe4 [-] FO : FixBug #PSCFV-10542 - Category description view problem 2013-10-01 10:20:33 +02:00
Gregory Roussac
97a25eb9c6 Merge pull request #774 from kpodemski/patch-4
[-] BO: translation mismatch
2013-10-01 01:15:24 -07:00
Rémi Gaillard
ecb4ccfdda // Fix product visibility on Product::getAccessories and ProductSale::getBestSales #PSCFV-9760 2013-10-01 09:56:26 +02:00
Krystian Podemski
2b55944874 [-] BO: translation mismatch
Here is a form to edit the values ​​in the group, we do not need here "attribute type".
2013-10-01 08:38:04 +02:00
Jerome Nadaud
452e07ab0b [-] BO : FixBug #PSCFV-10477 - Error message not shown on delete module without permissions 2013-09-30 19:26:49 +02:00
gRoussac
4a66bdcdf9 // report of 9b627bf9a2 2013-09-30 19:18:08 +02:00
gRoussac
f899380e3b [-) BO : #PSCFV-10474 coul not export more than 300 products 2013-09-30 19:04:04 +02:00
Jerome Nadaud
1b9472cc37 [-] BO : FixBug #PSCFV-10291 - Remove temporary image on install 2013-09-30 19:01:11 +02:00
Damien Metzger
9c04f1dace Merge pull request #748 from djfm/release
// fix PSCFV-8260, currency format containing spaces and RTL languages
2013-09-30 09:21:43 -07:00
djfm
1cce312aaa // orthograph 2013-09-30 16:15:53 +00:00
djfm
f39c2c40cf Merge branch 'release' of https://github.com/PrestaShop/PrestaShop into release 2013-09-30 16:13:15 +00:00
Jerome Nadaud
b7ff8d634a [-] BO : FixBug #PSCFV-10317 - Attributes value not shown on features sorted by position. 2013-09-30 17:23:12 +02:00
Jerome Nadaud
f983e0eaf1 [-] BO : FixBug #PSCFV-10380 - Missing lang file existence verification. 2013-09-30 16:25:58 +02:00
Jerome Nadaud
6bb1fa6a4d // Missing '?' on regex 2013-09-30 14:59:27 +02:00
Jerome Nadaud
05eafdb14f Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-30 14:57:46 +02:00
Jerome Nadaud
cfc41ec4ef [+] BO : Add remove module override on constant - PSCFV-10430 2013-09-30 14:57:30 +02:00
Gregory Roussac
6822373378 Merge pull request #772 from codeurWeb/patch-5
[*] FO : add GET pre-selection of id_contact in contact-form.tpl
2013-09-30 05:56:09 -07:00
Julien
dd5cd33bb4 [-] BO : fix pre-selection of id_contact in contact-form.tpl 2013-09-30 14:38:06 +02:00
Cosmin Hutanu
7eddca6d15 update localization pack for romania - added states 2013-09-30 13:06:19 +03:00
gRoussac
7d764c5ce8 [-] BO : AdminImport, not matching by ref for updating 2013-09-30 11:50:51 +02:00
Cosmin Hutanu
f9ad0d1b79 Merge pull request #3 from PrestaShop/development
update from prestashop/development
2013-09-30 02:47:52 -07:00
Jerome Nadaud
e040c096d1 [-] BO : Remove customers group view list link 2013-09-30 10:34:54 +02:00
Rémi Gaillard
b6f13648db [-] WS: Fix order by on id field on multishop entities 2013-09-30 10:29:54 +02:00
Rémi Gaillard
22173355a5 Merge branch 'release' of https://github.com/PrestaShop/PrestaShop into release 2013-09-30 09:59:51 +02:00
Rémi Gaillard
06b6facc2d [-] BO: Fix #PSCFV-10488 filter by employee on logs tab 2013-09-30 09:59:33 +02:00
Jerome Nadaud
e0e5f80767 [-] BO : FixBig #PSCFV-10442 - Members Cutomer Group list 2013-09-30 09:59:25 +02:00
Gregory Roussac
3e85622972 Merge pull request #767 from enumag/patch-3
[-] BO : Fix #PSCFV-10520 id_attribute_group can not be null
2013-09-30 00:47:12 -07:00
djfm
67d0ac95b5 Merge branch 'release' of https://github.com/PrestaShop/PrestaShop into release 2013-09-30 07:09:17 +00:00
Jáchym Toušek
6e191fe054 [-] Classes : Hook - Display payment method & custommer currency bug fix 2013-09-29 16:24:33 +02:00
Jáchym Toušek
5ebc2e5e91 [-] BO : Fix #PSCFV-10520 2013-09-29 14:43:14 +02:00
gRoussac
813ef8bc7e [-] BO : Could not import empty linkrewrite for products and not matching refs 2013-09-27 19:22:10 +02:00
Jerome Nadaud
c2b9ff40ef [-] BO : FixBig #PSCFV-10442 - Members Cutomer Group list 2013-09-27 19:20:46 +02:00
Gregory Roussac
a4178a9fd2 Merge pull request #761 from nuzelac/patch-1
[-] BO : fix multilingual field validity in AdminProductsController
2013-09-27 19:07:56 +02:00
Gregory Roussac
40617c0a81 Merge pull request #761 from nuzelac/patch-1
[-] BO : fix multilingual field validity in AdminProductsController
2013-09-27 09:50:03 -07:00
Nino Uzelac
ca01b58262 fix multilingual field validity in AdminProductsController 2013-09-27 18:22:07 +02:00
Fabio Chelly
9d94337c9b [-] MO sendtoafriend: The method used to check all required input fields could lead to errors 2013-09-27 16:08:00 +02:00
Jerome Nadaud
6449ecfb32 [-] BO : Force invoice footer text to 1 ligne 2013-09-27 14:41:50 +02:00
Fabio Chelly
6d8cc454e1 [-] MO productcomments: prevents guests to add comments when guest comment is disabled in backoffice
(cherry picked from commit 345d4cd)
2013-09-27 11:30:42 +02:00
Fabio Chelly
345d4cdbcf [-] MO productcomments: prevents guests to add comments when guest comment is disabled in backoffice 2013-09-27 11:27:58 +02:00
djfm
66435cbf4a // grammar 2013-09-27 08:35:48 +00:00
Damien Metzger
84d8ccfa2b // Fixed language code consistency 2013-09-27 10:25:37 +02:00
djfm
2be5233584 Merge branch 'release' of https://github.com/PrestaShop/PrestaShop into release 2013-09-27 08:03:47 +00:00
Gregory Roussac
33c2669692 Merge pull request #749 from enumag/patch-1
[-] FO : Fixed products without images
2013-09-27 10:00:48 +02:00
Gregory Roussac
6b30cc5084 Merge pull request #750 from djfm/psindonesia
[+] TR : Psindonesia
2013-09-27 00:57:20 -07:00
Gregory Roussac
19fb32545d Merge pull request #749 from enumag/patch-1
[-] FO : Fixed products without images
2013-09-27 00:56:46 -07:00
djfm
4e472fae50 // updated Indonesian installer 2013-09-27 07:16:23 +00:00
Jáchym Toušek
30367e6427 [-] FO : Fixed products without images 2013-09-26 22:21:18 +02:00
gRoussac
126c21d39a [*] BO : AdminImport, remove csv files 2013-09-26 18:34:18 +02:00
djfm
50bd3d613d // fix PSCFV-8260, currency format containing spaces and RTL languages 2013-09-26 16:29:40 +00:00
gRoussac
98148cfe03 // Adminimport revert sort order in select 2013-09-26 18:02:28 +02:00
gRoussac
4fc4ee721e [*] BO : Adminimport, check csv download path 2013-09-26 17:50:26 +02:00
gRoussac
d3ad12e536 [*] BO : Add csv file download in AdminImport 2013-09-26 17:40:33 +02:00
gRoussac
8c1240cb2c [-] BO : Sort import files in select 2013-09-26 15:13:34 +02:00
Cosmin Hutanu
81ec2822ec Merge pull request #2 from PrestaShop/development
update from prestashop/development
2013-09-26 05:52:17 -07:00
Fabio Chelly
7a7a2fb8c3 [-] MO productcomments and loyalty: loyalty doesn't disconnect current user anymore 2013-09-26 14:19:08 +02:00
Gregory Roussac
47bf9a397a Merge pull request #745 from djfm/localization_packs
[*] TR : Localization packs
2013-09-26 14:17:13 +02:00
Gregory Roussac
f3e36b896b Merge pull request #746 from Mainmich/patch-1
[-] MO : Blocklayered Fix pagination incompatibility
2013-09-26 14:16:51 +02:00
Gregory Roussac
1abb064958 Merge pull request #747 from djfm/psbengali
[+] TR : Added Bengali Installer
2013-09-26 05:14:28 -07:00
Rémi Gaillard
252ab56d75 // error message in double 2013-09-26 13:47:42 +02:00
smartdatasoft
9109708944 // small improvements to Bengali installer 2013-09-26 11:44:28 +00:00
smartdatasoft
e21eef3a87 // updated Bengali installer 2013-09-26 11:44:12 +00:00
smartdatasoft
3ded9549cf // Bengali installer translations 2013-09-26 11:43:58 +00:00
smartdatasoft
37170c74b3 [+] LO : Added Bengali installer 2013-09-26 11:39:58 +00:00
gRoussac
017d19330a // avoid SQL error 2013-09-26 11:10:44 +02:00
djfm
78c1dce528 [+] LO: Added Traditional Chinese installer 2013-09-26 08:23:16 +00:00
Gregory Roussac
37f928ade9 Merge pull request #746 from Mainmich/patch-1
[-] MO : Blocklayered Fix pagination incompatibility
2013-09-25 09:45:51 -07:00
gRoussac
48d9c37590 [-] BO : Remove duplicate sql insert in setProductOutOfStock in monoshop 2013-09-25 18:41:52 +02:00
Mainmich
a6e67b078e Fix pagination incompatibility
Javascript function paginateButton does not work with "p" GET parameter in first position, regex only takes &p and not ?p.
2013-09-25 18:33:58 +02:00
gRoussac
7486844222 [-] BO : Fix #PSCFV-10501 Remove fatal error 2013-09-25 18:02:06 +02:00
Damien Metzger
95a2b2a8a8 [*] BO : improved automatic language creation 2013-09-25 17:07:18 +02:00
Jerome Nadaud
757fe64217 [-] MO : FixBug #10460 - UTF8 bug on accented URL 2013-09-25 16:09:55 +02:00
Gregory Roussac
5245038ea1 Merge pull request #745 from djfm/localization_packs
[*] TR : Localization packs
2013-09-25 06:58:59 -07:00
djfm
91d495a4a8 [*] LO : Added states to Japanese localization pack 2013-09-25 13:31:45 +00:00
Damien Metzger
ae8c8218fd // Fixed ISO code of japanese todōfuken 2013-09-25 15:30:16 +02:00
djfm
81e66233d8 [*] LO : Updated many localization packs 2013-09-25 13:11:52 +00:00
Fabio Chelly
1800c6589c Merge remote-tracking branch 'origin/development' into development 2013-09-25 14:43:42 +02:00
Fabio Chelly
bdd84771b7 [-] MO productcomments and loyalty: loyalty doesn't disconnect current user anymore 2013-09-25 14:43:30 +02:00
djfm
54b3ac5a32 [+] TR : Added Indonesian installer 2013-09-25 09:41:59 +00:00
Gregory Roussac
7f9183b1d4 Merge pull request #743 from dlage/modules_update
[*] BO : Show modules update button even if module is not installed but not notices
2013-09-24 20:40:56 +02:00
Gregory Roussac
931d240ca1 Merge pull request #743 from dlage/modules_update
[*] BO : Show modules update button even if module is not installed but not notices
2013-09-24 11:33:48 -07:00
gRoussac
e900474b8e // remove notice 2013-09-24 19:01:08 +02:00
gRoussac
69cb20d5e8 [-] PDF : Report of 9c939ccead 2013-09-24 18:55:55 +02:00
81ca3ac1f9 BO: Modules - show update button even if module is not installed but don't
warn for modules with updates available but not installed.
2013-09-24 17:42:43 +01:00
gRoussac
6f840eceba [-] BO : Fix bug #PSCFV-9675 could not import non existent parent category 2013-09-24 18:00:01 +02:00
Rémi Gaillard
5e7dbea970 // 2013-09-24 17:22:50 +02:00
Rémi Gaillard
beb0a74135 // use ObjectModel::validateField on validaterules 2013-09-24 17:12:28 +02:00
gRoussac
0f4781053b [-] BO : Bad entity pre selected in AdminImport 2013-09-24 17:08:33 +02:00
gRoussac
10d6e97aca [-] BO : Fix bug #PSCFV-10483, could not import other language product link_rewrite 2013-09-24 16:42:22 +02:00
gRoussac
3448027861 // report of pull request 737 2013-09-24 16:41:15 +02:00
gRoussac
89ac0bc439 [-] FO : Fix #PSCFV-10480 again, css fix 2013-09-24 16:34:18 +02:00
gRoussac
3d477c62eb // remove notice 2013-09-24 16:03:39 +02:00
gRoussac
c9b53685c5 // parse error 2013-09-24 15:44:56 +02:00
gRoussac
1cc92fc9c2 [-] CORE : Could not add too long tags 2013-09-24 15:40:18 +02:00
gRoussac
17323a04b6 [-] CORE : Missing tag max size 2013-09-24 15:10:14 +02:00
gRoussac
1d6593612f [-] FO : Fix #PSCFV-10480 again css fix 2013-09-24 12:21:10 +02:00
Gregory Roussac
4c399875d9 Merge pull request #737 from codeurWeb/patch-3
[-] BO : fix postProcess override on AdminImportController
2013-09-24 01:54:18 -07:00
Gregory Roussac
92b987c0f8 Merge pull request #736 from codeurWeb/patch-2
[-] BO : fix ovverride of constructor when PS_ADVANCED_STOCK_MANAGEMENT is off
2013-09-24 01:40:16 -07:00
Rémi Gaillard
41af17e06b [-] BO: Fix data validation when iframe is allowed on some entities like CMS 2013-09-24 10:28:04 +02:00
Julien
6acebca8fa [-] BO : fix postProcess override on AdminImportController
When we override the constucteur of AdminImport to add an import type and PS_ADVANCED_STOCK_MANAGEMENT is off, switch index is undefined for "Supply Orders" and "Supply Order Details".
Default case of switch is never used.
2013-09-23 21:04:55 +02:00
Julien
6850db0612 [-] BO : fix contructor override on AdminImportController
When we overload the constucteur of AdminImport to add an import type and PS_ADVANCED_STOCK_MANAGEMENT is off, switch index is undefined for "Supply Orders" and "Supply Order Details".
2013-09-23 20:23:45 +02:00
Gregory Roussac
aefab21a62 Merge pull request #735 from djfm/release
[*] LO : Use single quote as thousands separator for CHF currency
2013-09-23 09:54:01 -07:00
djfm
d9a24d61ac // change comment 2013-09-23 16:37:13 +00:00
djfm
6195d0c319 [*] LO : Use single quote as thousands separator for CHF currency 2013-09-23 16:32:40 +00:00
gRoussac
b3a425c73a [-] MO : Blockcart, wrong tbody 2013-09-23 18:20:35 +02:00
gRoussac
ccb3179c1a [-] CORE : Partial fix for #PSCFV-10482 getCacheId is different in back office 2013-09-23 18:07:46 +02:00
Gregory Roussac
b4547568a5 Merge pull request #734 from djfm/release
// no quotes around 1 in js=1 please
2013-09-23 08:38:57 -07:00
gRoussac
d37f545058 [-] MO : Fix buig #PSCFV-10480 Blockcart too long cart_block_product_name 2013-09-23 17:26:36 +02:00
djfm
5c4de83e91 // no quotes around 1 in js=1 please 2013-09-23 15:20:26 +00:00
Damien Metzger
6796b64e18 Merge pull request #691 from djfm/development
// fixed translation of modules descriptions containing quotes
2013-09-23 07:51:57 -07:00
gRoussac
3b075e049b // bad commit 2013-09-23 16:33:44 +02:00
gRoussac
84dc75f57e [-] CORE : Fix bug #PSCFV-10471 Cart item count problem, unique_id grouping error for id_product and id_product_attribute 2013-09-23 16:32:38 +02:00
gRoussac
92382e347c [-] FO : Fix bug #PSCFV-10478 could not see auto added cart rule voucher on product page 2013-09-23 16:08:44 +02:00
gRoussac
dedc59f1db [-] IN : FIX #PSCFV-10246 errors in stricts sql-mode, thanks @enumag 2013-09-23 15:17:15 +02:00
Rémi Gaillard
c6222c51c8 // commit 6b47f5713e is missing 2013-09-23 11:36:15 +02:00
Fabio Chelly
a1555c3fc8 Merge remote-tracking branch 'origin/development' into development 2013-09-23 11:24:26 +02:00
Fabio Chelly
31697fde3c [-] MO productcomments: confirmation message takes moderation mode into account 2013-09-23 11:24:14 +02:00
Jerome Nadaud
5206496f64 [-] BO : Fix Bug For new Fancy Box events 2013-09-23 11:22:51 +02:00
Jerome Nadaud
cf82157d47 // oops 2013-09-23 10:48:56 +02:00
Jerome Nadaud
7dbb6088a4 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-23 10:42:30 +02:00
Rémi Gaillard
50bbf1a547 // small fix 2013-09-23 10:46:41 +02:00
Jerome Nadaud
32a7a28567 [-] MO : FixBug #PNM-1683 - Treeview problem 2013-09-23 10:42:10 +02:00
Rémi Gaillard
a578cfb2e2 [-] FO: Fix #PSCFV-10461 2013-09-23 10:20:22 +02:00
gRoussac
39468476ab [-] CORE : #PSCFV-10461 customer group in getPriceStatic, pull request 361ebc72e0 2013-09-23 09:50:12 +02:00
Damien Metzger
214b844ef7 // Removed useless tiny mce src 2013-09-20 18:52:42 +02:00
Damien Metzger
5c3b8015e5 [-] BO : fixed the redirection to a 404 page when loging in in the updater 2013-09-20 18:21:10 +02:00
Rémi Gaillard
7aa348eb93 // bad char 2013-09-20 15:48:22 +02:00
gRoussac
e2a1f5101c [-] BO : Bad input radio names 2013-09-20 15:27:31 +02:00
gRoussac
7d05da1618 [-] IN : Lower by two flush limit in migrate_orders 2013-09-20 15:12:57 +02:00
gRoussac
429c9442a3 [*] CORE : bad else if in getTemplatePath 2013-09-20 15:10:14 +02:00
Rémi Gaillard
2dc91758c3 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-20 14:12:56 +02:00
Rémi Gaillard
9b878a33a8 // fix canonical and ssl page without ssl 2013-09-20 14:12:41 +02:00
Damien Metzger
7eb3b22829 [-] Installer : added the missing default tab in the employee 2013-09-20 14:06:38 +02:00
Rémi Gaillard
e2ac223f4e Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-20 11:34:54 +02:00
Rémi Gaillard
5b7580d487 [-] MO: Fix time of smarty cache invalidation 2013-09-20 11:33:30 +02:00
Damien Metzger
1cebd5920e [*] Installer : added file check in order to check if everyhting has been successfuly uploaded 2013-09-20 11:09:22 +02:00
Fabio Chelly
4f639329e9 Merge remote-tracking branch 'origin/development' into development 2013-09-20 10:47:17 +02:00
Fabio Chelly
91ae972655 [-] MO mailalert : products alerts can be registered for multiple guests
#PNM-1669
2013-09-20 10:46:56 +02:00
Damien Metzger
f8ca06d927 // Better cache depth management for smarty 2013-09-20 10:26:58 +02:00
Damien Metzger
eb6600e840 // Blockcustomerprivacy should not be installed by default 2013-09-20 10:26:58 +02:00
Gregory Roussac
14cd72121a Merge pull request #732 from Ha99y/20130919_X-Robots
[*] CORE : Send noindex header to avoid ghost carts by bots
2013-09-20 00:52:49 -07:00
ha99y
42cdc988ac Send noindex header to avoid ghost carts by bots 2013-09-19 22:15:00 -07:00
Francois Gaillard
8c6aaa3c7d Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-19 17:31:42 +02:00
Francois Gaillard
63f4743134 [-] MO : PNM-1715 - Bug fix accented chars & ajax-cart 2013-09-19 17:31:35 +02:00
gRoussac
e0b59082f9 [-] BO : Issue with domready on adminImport 2013-09-19 17:19:51 +02:00
gRoussac
0361d5db8d [-] BO : do not reaffect import_type for categories 2013-09-19 16:59:04 +02:00
gRoussac
ea6ea955bb // licence 2013-09-19 16:39:21 +02:00
gRoussac
803b6ce8ec Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development
Conflicts:
	controllers/admin/AdminImportController.php
2013-09-19 16:38:01 +02:00
gRoussac
0c511dead5 [*] FIX #PSCFV-8106 do not regenerate thumbnails if not 2013-09-19 16:28:19 +02:00
Rémi Gaillard
6b47f5713e // another fix for multishop fields in context all on product page 2013-09-19 09:48:46 +02:00
Rémi Gaillard
5eb4c93b8c [-] BO: Bad id for multishop checkbox on admin products - weird bug with active flag #PSCFV-9935 2013-09-18 19:35:56 +02:00
djfm
0a9f425281 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-18 16:08:44 +00:00
djfm
65559c5cf4 // small improvement to Brazilian translations 2013-09-18 16:08:23 +00:00
Rémi Gaillard
e7286c44f2 // typo 2013-09-18 18:08:22 +02:00
gRoussac
4e1d6de9b0 [-] FO : Fix bug #PSCFV-10328 Set country currency if defined when geolocated 2013-09-18 17:57:00 +02:00
gRoussac
75a9629b8a Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-18 17:23:23 +02:00
gRoussac
27f14b9a31 [-] BO : Fix proces and save buttons for Modules and AdminControllers 2013-09-18 17:23:08 +02:00
Rémi Gaillard
70d48d0af1 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-18 17:19:18 +02:00
Rémi Gaillard
f6dc81d0f1 // small fix for SSL 2013-09-18 17:19:03 +02:00
gRoussac
2e311410b2 [*] BO : Set import entity in cookie (#PSCFV-8214) 2013-09-18 17:02:00 +02:00
Rémi Gaillard
0452979ce7 [*] FO: Allow to enable SSL on all the pages 2013-09-18 16:30:34 +02:00
gRoussac
3aec242600 [-] MO : Editorial could not delete image 2013-09-18 16:16:36 +02:00
gRoussac
93aae26269 [-] Bo : Modules 'save' button not active 2013-09-18 15:41:30 +02:00
gRoussac
f293562ea4 [-] BO : Fix bug #PSCFV-8214 import entity pre selected 2013-09-18 15:03:16 +02:00
Rémi Gaillard
66f46eee03 // Avoid exception if amount is null on addind an orderpayment 2013-09-18 14:29:01 +02:00
Vincent Augagneur
672da852c5 [-] BO - fixed bug #PSCFV-10178 2013-09-18 11:40:58 +02:00
Vincent Augagneur
965b8a1bf3 [-] BO - fixed bug #PSCFV-10286 - End range in summary of shipping wizard not correct when range number is a float 2013-09-18 11:18:26 +02:00
Rémi Gaillard
47c5f400ee // Add gender on order view 2013-09-17 16:30:47 +02:00
Vincent Augagneur
322654cacf //small fix with mode catalog and cart button 2013-09-17 14:54:38 +02:00
Vincent Augagneur
3151064daf //small fix on helper form && option 2013-09-17 12:18:37 +02:00
Rémi Gaillard
e6e8efc19a [-] FO: Fix Product::getAttributesGroups() minimal_quantity/weight/available_date should be multishop 2013-09-17 11:58:12 +02:00
Rémi Gaillard
6ee6317fee // orderby position 2013-09-17 11:07:29 +02:00
gRoussac
2d5bd901f4 [*] CORE : Refactoring Tools::copy() as copy with context > PHP 5.3 2013-09-16 18:51:06 +02:00
gRoussac
b9b4265517 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-16 17:18:56 +02:00
gRoussac
15dd1cf96f [-] BO : Fix bugPSCFV-10249 images copy when unix path 2013-09-16 17:16:11 +02:00
Gregory Roussac
1c58c1ea6b Merge pull request #726 from cinscaen/patch-1
[-] BO : Move product images in POST method in admin.js
2013-09-16 07:01:45 -07:00
CINS
852faeab7a Update admin.js
Lorsqu'un produit possède trop d'images, il est impossible de réordonner celle-ci car la valeur JSON fourni en URL (GET) est beaucoup trop longue. Il faut envoyer les données JSON en POST pour solutionner le problème de longueur.
---------
When a product has many pictures, we can't reorder them. The JSON value is too long in URL (GET). We need to send data with POST to avoid problem.
2013-09-16 15:57:44 +02:00
gRoussac
8504574ae1 [-] IN : Could not remove some tabs 2013-09-16 15:02:12 +02:00
Damien Metzger
e68c124218 [-] FO : replace ucfirst by ucwords for the customer firstname #PSCFV-10396 2013-09-16 11:42:11 +02:00
gRoussac
08efa4e313 [-] IN : Fix bug #PSCFV-10382 add_module_to_hook retunrning false when hook not exists 2013-09-16 11:12:55 +02:00
Vincent Augagneur
e0739ea1e0 Merge pull request #720 from makk1ntosh/development
//Added ui.button as dependency of ui.dialog
2013-09-16 01:35:25 -07:00
Damien Metzger
0e3d53321a [-] BO : limited the number of customers displayed in the group view to 100 in order to avoid memory usage error 2013-09-16 09:56:22 +02:00
Jerome Nadaud
d7c1cd90bf Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-16 09:25:57 +02:00
Jerome Nadaud
c0afb55d11 [-] BO : FixBug #PSCFV-9900 Double quote escape problem in delete button link 2013-09-16 09:25:10 +02:00
Gregory Roussac
3b9c125198 Merge pull request #723 from codeurWeb/patch-2
[+] MO : Blocknewproducts add hookHome
2013-09-14 08:58:14 -07:00
Julien
08373c0541 [+] Modules : add hookHome 2013-09-14 14:57:00 +02:00
gRoussac
73dd524de8 [-] BO : Could not order in AdminStatuses by ID or template 2013-09-14 00:05:45 +02:00
gRoussac
10472ef83c Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-13 17:57:06 +02:00
gRoussac
6da1228359 [-] BO : Fix bug #PSCFV-8407 can not customize feature column name if needed 2013-09-13 17:56:45 +02:00
makk1ntosh
d0ef8cca8f Added ui.button as dependency of ui.dialog
While developing my own module, i've upgraded installation to latest version of PS and impacted a bug:

$('#something').dialog({...}); caused an error: t().button is not a function.



In my php code i had this:
$this->context->controller->addJqueryUI('ui.dialog');

i found that it doesn't load ui.button dependency.

Added 'ui.button' to classes/Media.php at the end of ui.dialog dependencies and all worked fine.
2013-09-13 08:02:47 -07:00
Jerome Nadaud
97ec6341e8 [-] BO ; Fix bug #PSCFV-10393 manufacturer filter 2013-09-13 15:39:30 +02:00
Rémi Gaillard
5363e75238 // small fix 2013-09-13 12:13:12 +02:00
Gregory Roussac
a3d9643833 Merge pull request #719 from zimmi1/patch-4
Update Connection.php correction from 717
2013-09-13 02:59:06 -07:00
zimmi1
4f06b74a29 Update Connection.php correction from 717
I'm very very sorry, I produced an error with the last commit on this file: there was an error in parenthesis position on line 117. Line 117 should be as line 131.
(But how did I manage to make this wrong ???)
2013-09-13 11:56:50 +02:00
Gregory Roussac
61295e4e21 Merge pull request #717 from zimmi1/patch-2
[*] CORE : Speeding up sql queries in Connection
2013-09-13 02:09:25 -07:00
gRoussac
d9bc07d030 [-] BO : quote badly decoded in customerThreads 2013-09-13 10:45:07 +02:00
Jerome Nadaud
3eb4d65fc9 [-] BO : Fix Bug #PSCFV-10331 check all from list 2013-09-13 10:26:08 +02:00
zimmi1
452f41df8d Speeding up sql queries
Searching for "DATE_ADD(date_add, INTERVAL 30 MINUTE) > now" needs for every line to add 30 minutes to the date. but it is the same operation as comparing "date_add > (now - 30 minutes).
It is faster because there is no DATE_ADD calculation.

The problem:
By profiling speed of my shop, this query appeared after about 3 months always as the absolute slowest query of the shop, needing about 15 to 30 ms to perform, because I have now nearly 700 connections to my shop (and it then browses the 700 lines)

A solution:
Removing DATE_ADD MySql function and using date() and time() functions of php for calculating only once the 30 min. difference.

Using this solution takes it down again to 0.8 to 1.3 ms.

I guess it is the same in case of bots (could be even worse as they can make thousands of connections).
2013-09-13 10:05:30 +02:00
gRoussac
db4b69d10c [-] BO : Customer message twice encoded 2013-09-12 18:03:30 +02:00
gRoussac
5095b45e47 [-] BO : Fix bug, orders states not ordered by order state name 2013-09-12 15:09:21 +02:00
Rémi Gaillard
30591b7c28 // Typo 2013-09-12 15:04:47 +02:00
Rémi Gaillard
f9b1f0ab5e [*] Core: don't re-generate the class_index.php file if a class is not known to avoid misuse of class_exists() 2013-09-12 15:03:23 +02:00
Francois Gaillard
cc36eb2d27 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-12 14:32:22 +02:00
Francois Gaillard
53c1e56c51 [-] BO : Bug fix - Encoding & tips of the day 2013-09-12 14:32:02 +02:00
Gregory Roussac
8590b0e699 Merge pull request #716 from romainberger/typos
[*] FO : removed extra slash and point
2013-09-12 05:30:36 -07:00
romainberger
876be3b452 [*] FO : removed extra slash and point 2013-09-12 14:07:45 +02:00
gRoussac
e5276ff531 [-] FO : 301 Redirect /iso_lang to /iso_lang/ url 2013-09-12 11:16:12 +02:00
gRoussac
90091d4f2c [-] BO : Do not copy link_rewrite from title if cms already has one 2013-09-12 10:50:04 +02:00
gRoussac
3870388e1c Merge branch 'mailalerts_real_multishop' of https://github.com/axome/PrestaShop into axome-mailalerts_real_multishop
Conflicts:
	modules/mailalerts/mailalerts.php
2013-09-12 10:09:25 +02:00
Rémi Gaillard
ea1bdbc849 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-12 10:01:39 +02:00
Gregory Roussac
f0297824d7 Merge pull request #709 from AgenceNetDesign/development
[-] MO : carriercompare fixed bug, override template's files in theme. Ticket #PNM-1691
2013-09-12 00:56:36 -07:00
Gregory Roussac
c91a86740f Merge pull request #715 from Prestaspirit/patch-6
[-] MO : Blocklayered Fixed a bug when displaying textures
2013-09-12 00:55:28 -07:00
Prestaspirit
a37033e478 [-] MO : Fixed a bug when displaying textures
Corrections links texture image in the blocklayered
2013-09-12 07:01:55 +02:00
Rémi Gaillard
9fa6c86a94 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-11 20:05:13 +02:00
Rémi Gaillard
f4f3084c35 [-] Core: Set a remote addr with php-cli #PSCFV-10372 2013-09-11 16:40:33 +02:00
Rémi Gaillard
a4d131eac9 [-] WS: Fix entities retrieve for some cases 2013-09-11 16:32:11 +02:00
gRoussac
e2dac03baa Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-11 16:30:52 +02:00
gRoussac
dfdbe39ee3 [-] BO : Small changes when creating vouchers in back office orders 2013-09-11 16:28:11 +02:00
Rémi Gaillard
31c94caebc [-] BO: Fix out of stock creation with multishop and stock sharing 2013-09-11 16:22:13 +02:00
Damien Metzger
4a3e0c5075 // Updated README.md 2013-09-11 16:11:28 +02:00
Rémi Gaillard
c42d71b8f5 // oups 2013-09-11 16:06:23 +02:00
Rémi Gaillard
669c3791b5 [-] BO: Fix preview url with multishop 2013-09-11 15:55:25 +02:00
Rémi Gaillard
3e750490fe // chmod class_index 666 instead of 664 2013-09-11 15:16:15 +02:00
gRoussac
01be908e51 [-] CORE : Could not add several cart rules 2013-09-11 14:50:42 +02:00
gRoussac
9f12ff15be [-] BO : Fix possible Uncaught exception 'ReflectionException' when viewing AdminMeta 2013-09-11 10:30:40 +02:00
Gregory Roussac
53805f2b93 Merge pull request #712 from Prestaworks/patch-13
[-] MO : Customization data is not included in new order email.
2013-09-11 00:58:30 -07:00
Daniel
614e56283a Update mailalerts.php
Fixes issue where customization data is not included in new order email.
2013-09-11 10:49:34 +08:00
gRoussac
85a471a690 //bad commit , sorry for that 2013-09-10 18:51:20 +02:00
gRoussac
86d3a8afe1 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-10 18:49:05 +02:00
gRoussac
f94f0f14a4 [-] FO : Fix bug #PSCFV-8917 taxes calculation when changing delivery address 2013-09-10 18:48:28 +02:00
Gregory Roussac
31d762b88a Merge pull request #710 from nilsga/development
[*] CORE : Add Bcc support in Mail class
2013-09-10 09:24:04 -07:00
Nils-Helge Garli Hegvik
9713f93075 Add Bcc support in Mail class 2013-09-10 17:11:34 +02:00
unknown
c5afbc75bd [-] MO : carriercompare fixed bug, override template's files in theme. Ticket #PNM-1691 2013-09-10 12:01:38 +02:00
gRoussac
332d68c7ec [-] MO : Statsdata, exception on duplicate entry 2013-09-10 11:08:57 +02:00
Nicolas Sorosac
f30a088848 [*] MO : MailAlerts : Add SQL update script for v2.5 2013-09-10 11:01:11 +02:00
Rémi Gaillard
3c090535a9 // small fix for image SSL links 2013-09-10 10:39:03 +02:00
Nicolas Sorosac
c4681c1fb1 [*] MO : MailAlerts : multishop/multilang full compatibility
Customers will receive alerts based on the real context of the moment they subscribed to the alert (sho, theme & language)

SQL update table : `ps_mailalert_customer_oos`
=========================================

ALTER TABLE `ps_mailalert_customer_oos`
ADD `id_lang` INT( 10 ) UNSIGNED NOT NULL ,
DROP PRIMARY KEY ,
ADD PRIMARY KEY ( `id_customer` , `customer_email` , `id_product` , `id_product_attribute` , `id_shop` ) ;
2013-09-10 10:24:40 +02:00
Rémi Gaillard
021790a3e2 [-] FO: Fix SSL links on domain_ssl instead domain 2013-09-10 10:15:52 +02:00
gRoussac
4968a792b4 [-] IN : Remove notice when upgrading from 2013-09-10 01:12:52 +02:00
Gregory Roussac
a383d55421 Merge pull request #707 from sjousse/development
[-] MO: ShopImporter fix imported prices
2013-09-09 08:31:15 -07:00
sjousse
00f3045690 fix imported prices 2013-09-09 17:24:27 +02:00
Gregory Roussac
5362f4d426 Merge pull request #699 from sjousse/patch-1
[*] MO : ShopImporter Optimize image copy in ShopImport module
2013-09-09 08:11:51 -07:00
Gregory Roussac
9880d152d4 Merge pull request #706 from sjousse/development
[*] MO : Add some fields to Orders in Import module
2013-09-09 08:10:12 -07:00
sjousse
990a889b1c Add some fields to Orders in Import module 2013-09-09 17:08:17 +02:00
gRoussac
e6d0a3e5a4 // revert form 2874f14983 2013-09-09 15:11:55 +02:00
Rémi Gaillard
242556e176 [-] MO: Fix unifunc smarty errors if module is displayed on multiplehook without cache 2013-09-09 15:12:26 +02:00
Jerome Nadaud
c502c9766f [-] BO : FixBug PSCFV-10331 - Tax rules Pagination 2013-09-09 15:04:14 +02:00
gRoussac
54f7c65165 [-] BO : Display the old image system migration tool if product images are in _PS_PROD_IMG_DIR_ 2013-09-09 12:20:38 +02:00
djfm
641cf225f2 // fix small translation bug PSCFV-10329 2013-09-09 09:47:44 +00:00
djfm
6ea3783013 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-09 09:46:49 +00:00
Damien Metzger
dcad699ede [-] FO : fixed chinese search with multiple symbols #PSCFV-10322 2013-09-09 11:19:11 +02:00
Francois Gaillard
e1d0347757 [-] Classes : Bug fix - FrontController, mobile & JS minifier fixed 2013-09-09 10:17:15 +02:00
gRoussac
b975a9375c [-] IN : remove warnings while upgrading 2013-09-09 00:10:03 +02:00
gRoussac
9c756a7fcb [-] IN : Do not duplicate images types when coming from 1.4, update it 2013-09-08 23:22:36 +02:00
gRoussac
6b03af9ef9 [-] BO : ini_get('safe_mode') can return false 2013-09-08 22:26:21 +02:00
gRoussac
ec556bb307 // remove Warning on array_map() 2013-09-08 20:01:55 +02:00
gRoussac
e6f8dba2e6 // remove Notice: Undefined index 2013-09-08 19:55:03 +02:00
gRoussac
25ba388d69 [-] IN : fix bad pathes 2013-09-08 18:29:06 +02:00
gRoussac
e5337f5e76 [-] IN : Do not test module names if they are not directories 2013-09-08 18:25:54 +02:00
gRoussac
683513a9d2 [-] IN : Remove fails on upgrade coming to loop when upgrading again 2013-09-08 17:29:00 +02:00
gRoussac
19a6c4373e [-] IN : Remove warnings when safe_mode open_basedir missconfigured 2013-09-08 17:25:59 +02:00
gRoussac
2874f14983 [-] CORE : Fix bug #PSCFV-10040 Notice: Undefined index: unifunc && Fatal error: Function name must be a string on some PHP version with empty cache folder and smarty cache enabled 2013-09-06 23:55:58 +02:00
Cosmin Hutanu
7491f46322 Merge pull request #1 from PrestaShop/development
update from prestashop/development
2013-09-06 12:42:22 -07:00
gRoussac
4c49048e39 [-] FO : Partial fix of adding gift on cart rule on the same entity in the cart rule 2013-09-06 18:35:56 +02:00
Fabio Chelly
e5f53afd5f Merge remote-tracking branch 'origin/development' into development 2013-09-06 17:54:34 +02:00
Fabio Chelly
9377775eca [-] MO productcomments :
- Module was broken and works now
- A message is displayed to indicate when a comment has been added.
- Error li are correctly indented

#PNM-753
#PNM-1601
#PNM-1660
#PNM-1609
#PNM-1491
#PNM-1311
#PNM-1233
#PNM-1232
#PNM-937
#PNM-775
2013-09-06 17:54:12 +02:00
Francois Gaillard
768a8b36d5 [-] BO : AdminModulesController - Bug fix, $params was not set 2013-09-06 15:41:24 +02:00
Fabio Chelly
1b0c5be93d Merge remote-tracking branch 'origin/development' into development 2013-09-06 11:47:11 +02:00
Fabio Chelly
663f592306 [-] MO sendtoafriend : a message is displayed whether the e-mail has been sent or not
#PNM-627
#PNM-1610
#PNM-1616
2013-09-06 11:40:41 +02:00
Damien Metzger
ec11b7e064 // Better control of the requests when our website is down 2013-09-06 10:18:48 +02:00
Fabio Chelly
7e1c0d5a24 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-06 09:24:43 +02:00
gRoussac
53241af228 // remove strict standard warning 2013-09-05 19:00:25 +02:00
gRoussac
a7d619b208 [-] MO : fix bug #PSCFV-9906 again, bad url parsing 2013-09-05 18:39:07 +02:00
sjousse
6b080e1f02 Optimize image copy in ShopImport module
2 things :
- copy images to new folder structure instead of legacy one since it's a PS 1.5 branch
- don't create all sizes of images at migration, there's an Admin controller for that (Admin > Settings > Images). That's speed up the import and remove duplicate code (less code to support).

+ some cleaning of unused variables
2013-09-05 18:24:02 +02:00
Rémi Gaillard
0f81518ba2 // Add a buton to erase all log 2013-09-05 15:58:36 +02:00
gRoussac
6e5fb47642 [-] INSTALLER : Fix bug #PSCFV-8289 bad orders vouchers total after update 2013-09-05 15:31:13 +02:00
gRoussac
824a6b90f3 [-] FO : Fix bug #PSCFV-10118 quantity not updated when cart rules give the same product as gift 2013-09-05 11:07:41 +02:00
Gregory Roussac
284711b22f Merge pull request #697 from sjousse/patch-1
MO : Shopimporter change the way to get the home category (get it from Configuration )
2013-09-05 01:16:29 -07:00
sjousse
2f6e0e3fae Changed the way to get the home category (get it from Configuration table now) 2013-09-05 10:14:31 +02:00
Gregory Roussac
d59f3383cf Merge pull request #694 from sjousse/patch-1
[*] MO : ShopImporter module is now aware of multi-shop for categories
2013-09-04 09:28:23 -07:00
sjousse
4d68595447 ShopImporter module is now aware of multi-shop
Imported categories was affected to Root category instead of a Shop's Home category.
I took the first shop home category is by default.
Maybe adding an option to choose the shop where the datas should be imported.
2013-09-04 18:26:24 +02:00
Gregory Roussac
07bdcd4129 Merge pull request #693 from sjousse/development
[-] MO : Add date_add field to categories to prevent failure of updateCat() method
2013-09-04 07:46:44 -07:00
sjousse
e9d066c981 fix value of date_add 2013-09-04 16:40:12 +02:00
sjousse
56a1449c69 add date_add to categories 2013-09-04 16:32:00 +02:00
gRoussac
63c19ce1a9 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-04 15:39:25 +02:00
gRoussac
3ca2c8da95 [-] BO : Fix #PSCFV-9906 could not register search engines keywords 2013-09-04 15:39:02 +02:00
Rémi Gaillard
00c1860d22 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-04 15:08:41 +02:00
Rémi Gaillard
9348768ceb [-] MO: Fix blocklayered sort by quantity #PSCFV-10300 2013-09-04 15:05:55 +02:00
gRoussac
7b0349ca33 // bad commit sorry for that 2013-09-04 11:14:45 +02:00
gRoussac
efa81a7107 [-] INSTALLER: Wrong SQL query for PS_LEGACY_IMAGES to 0 2013-09-04 11:14:00 +02:00
gRoussac
da353c884d [-] INSTALLER: short_description for PREFIX_manufacturer_lang is now type TEXT 2013-09-04 10:45:48 +02:00
gRoussac
df56d7af42 [-] CORE: Fix for field length and type regarding https://github.com/PrestaShop/PrestaShop/pull/678 2013-09-04 10:38:14 +02:00
djfm
87567ed1a0 // fixed translation of modules descriptions containing quotes 2013-09-04 07:44:52 +00:00
Gregory Roussac
5d38743b72 Merge pull request #690 from Ha99y/20130903_addToolBarModulesListButton
[-] BO : Remove warning in AdminController.php
2013-09-04 00:40:41 -07:00
Jerome Nadaud
75a663b6e3 [-] BO : Fix pull request #665 2013-09-04 09:40:12 +02:00
ha99y
f4892686c1 Warning in AdminController.php
If debugging is on (_PS_MODE_DEV_ set to TRUE)
On a fresh install there is a warning on line 1542 in
/classes/controller/AdminController.php in function
addToolBarModulesListButton().
Because of the warning xml files are not populated with data.

Warning: simplexml_load_file()
1: parser error : Document is empty
2013-09-03 17:30:05 -07:00
gRoussac
b55a84e961 [-] INSTALLER : Fix infinite loop when order message has additional ampersand 2013-09-03 18:36:30 +02:00
gRoussac
6daf8ebbfa [-] BO : Fix error returned when first import of a localisation pack 2013-09-03 18:20:58 +02:00
gRoussac
5d8e187faa Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-03 17:43:51 +02:00
gRoussac
0891c986d6 // fix from comment c6d2e1252e (commitcomment-4002919) 2013-09-03 17:43:33 +02:00
Gregory Roussac
8fedbe189c Merge pull request #682 from MyBB-Services/dev/sa/ordercartrulecleanup
[*] Project : Orders should rely only on ps_order_cart_rule
2013-09-03 06:41:06 -07:00
soufyan
cd7d604b75 [*] Project : Orders should rely only on ps_order_cart_rule 2013-09-03 15:10:06 +02:00
Gregory Roussac
5caae97813 Merge pull request #680 from djfm/development
// fixed unstranslatable string in AdminSupplyOrdersController
2013-09-03 06:00:50 -07:00
djfm
572a2e45aa // fixed unstranslatable string in AdminSupplyOrdersController 2013-09-03 12:51:21 +00:00
gRoussac
98f60d039b // fix warning 2013-09-03 12:29:17 +02:00
Gregory Roussac
656717fb4c Merge pull request #679 from kluevandrew/patch-3
[*] BO : Cursor "pointer" for .button class
2013-09-03 00:51:38 -07:00
Gregory Roussac
e08c8b2d25 Merge pull request #674 from PrestaEdit/patch-50
[*] BO: sort modules name in Stats
2013-09-03 00:49:11 -07:00
Andrew
97f1db480a BO: Cursor "pointer" for .button
Cursor "pointer" for each button in back office
2013-09-03 11:35:50 +04:00
Jerome Nadaud
c3772fb355 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-02 19:11:17 +02:00
Jerome Nadaud
da12fbdd5e [-] BO : FixBug #PSCFV-10213 check product/attribute id - Thanks F. Cespedes 2013-09-02 19:09:47 +02:00
gRoussac
94bdde4630 [-] CORE : Remove PHP Warning: file_put_contents on modules config.xml 2013-09-02 18:19:21 +02:00
Gregory Roussac
abf5ad195c Merge pull request #676 from dlage/patch-1
[*] MO : blocknewproducts avoid $newProducts not defined
2013-09-02 08:58:32 -07:00
Gregory Roussac
b2ccf88296 Merge pull request #663 from sjousse/patch-1
[-] MO : Shopimporter file_exists does not exists in Validate Class
2013-09-02 08:21:42 -07:00
Gregory Roussac
f7eb6b3a16 Merge pull request #665 from Ha99y/Get-Combination-Images
[*] CLASSES : Add $id_product_attribute param to Image::getImages
2013-09-02 08:11:48 -07:00
Rémi Gaillard
6059b4301a // states list 2013-09-02 17:10:20 +02:00
gRoussac
36d9e0eed5 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-09-02 16:28:56 +02:00
gRoussac
c6d2e1252e [-] INSTALLER : Fix fatal error in upgrade, could not load configuration class 2013-09-02 16:28:38 +02:00
Gregory Roussac
fe209e0c55 Merge pull request #678 from gr4devel/patch-5
[*] BO : add TinyMCE editor for supplier descrpition in AdminSuppliers
2013-09-02 06:03:20 -07:00
gr4devel
f535d60a29 [-] fix typo in adding TinyMCE editor for supplier descrpition in AdminSuppliersController 2013-09-02 14:24:18 +02:00
gr4devel
36ca7f294a [+] BO : add TinyMCE editor for supplier descrpition in AdminManufacturerSupplier 2013-09-02 14:15:33 +02:00
gRoussac
477457a44f Merge branch 'patch-1' of https://github.com/gr4devel/PrestaShop into gr4devel-patch-1 2013-09-02 12:03:01 +02:00
gr4devel
6177589cd3 [+] MO : add link to all manufacturer page and the feature to show All Suppliers 2013-09-02 11:57:16 +02:00
gRoussac
4853772198 [-] INSTALLER : no update value in fix_download_product_feature_active 2013-09-02 11:33:53 +02:00
gRoussac
62303e58df [-] INSTALLER : Fix fatal error when upgrading 2013-09-02 11:24:46 +02:00
Gregory Roussac
82939730dd Merge pull request #667 from Ha99y/Small-Autoload-Fix
[-] CORE : Remove warning on rename on index.php
2013-09-02 02:11:51 -07:00
gRoussac
397e42637a // norms 2013-09-02 10:49:50 +02:00
Gregory Roussac
6dc0edec3a Merge pull request #668 from lrosset/development
[-] CORE : Add APCu support
2013-09-02 01:46:25 -07:00
Gregory Roussac
d019500d81 Merge pull request #670 from gr4devel/patch-2
[+] FO : add getManufacturer() to ManufacturerControllerCore
2013-09-02 01:31:14 -07:00
Gregory Roussac
00afa8ae47 Merge pull request #671 from gr4devel/patch-3
[+] BO : enable TinyMCE editor for short and long descrpition in AdminManufacturers
2013-09-02 01:09:10 -07:00
gRoussac
a013be8380 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development
Conflicts:
	modules/blockcart/ajax-cart.js
2013-09-02 10:00:24 +02:00
Gregory Roussac
a436456fa4 Merge pull request #673 from sagaradonis/development
[*] FO : Deprecated .size() to .length
2013-09-02 00:31:05 -07:00
5f1e08e7e2 Fix variable context
Avoid attribution to the variable $newProducts inside the if. It caused the code to potentially misbehave throwing errors of:
"variable $newProducts not defined".
2013-09-01 22:47:41 +01:00
PrestaEdit
4c633b8b46 [*] BO: sort modules name in Stats 2013-09-01 16:55:22 +02:00
sagaradonis
9cd73b411d Update ajax-cart.js
.size() replaced by .length as .size() is outdated
2013-08-31 19:05:14 +05:30
gr4devel
805e80e54c [+] BO : add TinyMCE editor for short and long descrpition in AdminManufacturerController 2013-08-30 21:24:21 +02:00
Francois Gaillard
d0087267df // Fixed tips of the day & encoding 2013-08-30 14:22:24 +02:00
Rémi Gaillard
f7fefe789d // typo fix 2013-08-30 11:21:00 +02:00
Rémi Gaillard
37e3b9e9e4 [-] WS: 404 error should be returned if a multishop entity does not exists #PSCFV-10229 2013-08-30 11:13:30 +02:00
gr4devel
b72f2a7176 [+] FO : add getManufacturer() to ManufacturerControllerCore
Add getManufacturer() to ManufacturerControllerCore to access the protected manufacturer instance of the controller.
2013-08-29 21:48:32 +02:00
gr4devel
39c8a8fc2d [+] MO : add the option to show all Manufacturer
Add the option to show all Manufacturer in blocktopmenu module.
2013-08-29 21:32:10 +02:00
LOIC ROSSET ltd
24146181c6 Add APCu support 2013-08-29 20:13:58 +01:00
Francois Gaillard
e6abe1c5a0 // Release branch merged 2013-08-29 18:46:34 +02:00
Rémi Gaillard
eec8aaa4f8 // php noti 2013-08-29 18:15:51 +02:00
Rémi Gaillard
08b8277a7a ///// 2013-08-29 17:21:27 +02:00
Rémi Gaillard
51083e17af // 2013-08-29 17:18:05 +02:00
Jerome Nadaud
40c64b54e2 [+] MO : Mailalerts - Add Total tax paid to order confirmation 2013-08-29 17:13:48 +02:00
Francois Gaillard
4a8f6c3116 // Modules categories sort 2013-08-29 17:00:34 +02:00
Rémi Gaillard
1196c5d736 // php 5.2 2013-08-29 16:39:45 +02:00
Rémi Gaillard
01cbffad9b //miss on last commit 2013-08-29 16:11:24 +02:00
Rémi Gaillard
c736c28ab5 // small ajax.php clean 2013-08-29 11:47:11 +02:00
Rémi Gaillard
6d1c8c54af Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-08-29 10:49:53 +02:00
djfm
be83f1364d // updated Czech localization pack 2013-08-29 10:49:39 +02:00
Damien Metzger
f24391be5a // Fixed hook::getidbyname case 2013-08-29 09:39:48 +02:00
ha99y
75303e82e0 Suppress Error at rename
If debugging  is one (_PS_MODE_DEV_ set to TRUE)
there is a warning on line 142 in /classes/Autoload.php at function
rename()
2013-08-28 18:56:49 -07:00
Rémi Gaillard
ddc16a2f65 [-] BO: Fix fatal error on customer edition when email is not valid 2013-08-28 17:46:05 +02:00
Vincent Augagneur
0a2d8175a7 //small fix 2013-08-28 10:03:50 +02:00
ha99y
ffd712312d Add new argument to function getImages
1st: The function will return the product attribute id's with the list.
2nd: If product attribute id is passed to the function it will return
only the image id of the given attribute.
2013-08-28 00:27:52 -07:00
Vincent Augagneur
4bb0e16509 [-] FO : fixed bug when is virtual cart on OPC carriers is no longer displayed 2013-08-27 16:43:14 +02:00
Vincent Augagneur
39c882cdb4 //small fix 2013-08-27 16:21:13 +02:00
Rémi Gaillard
598469e41e // typo debug 2013-08-27 15:38:29 +02:00
Jerome Nadaud
6aad506c80 [-] FO : FixBug when route id is empty 2013-08-27 12:01:40 +02:00
Vincent Augagneur
99b162d16b [-] CORE : fixed bug #PSCFV-10175 - No virtuel download email send after accepted payment 2013-08-27 10:09:35 +02:00
Jerome Nadaud
de200e1c5e Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-08-27 09:50:35 +02:00
Rémi Gaillard
2620242176 // Fix cms_block creation loop on shop addition 2013-08-27 09:52:14 +02:00
Rémi Gaillard
6fd7f0114e // small fix 2013-08-27 09:52:05 +02:00
Rémi Gaillard
1a5b9de372 // small fix 2013-08-27 09:51:56 +02:00
Jerome Nadaud
5a685537a4 // Small Fix 2013-08-27 09:49:59 +02:00
sjousse
536bdb550b fix file validation to use PHP native method 2013-08-26 18:23:39 +02:00
Vincent Augagneur
1673a080a0 //small fix #PSCFV-10194 2013-08-26 17:34:13 +02:00
Vincent Augagneur
0a4264c947 [-] BO : fixed bug when try to add jquery from ajax.googleapis.com in BO 2013-08-26 16:31:50 +02:00
Damien Metzger
0ccbe8cb15 Merge pull request #661 from matiasiglesias/development
[-] LO: Argeninian localization
2013-08-26 02:19:34 -07:00
Vincent Augagneur
ad428dfb2b //MERGE branche release 2013-08-26 10:59:36 +02:00
Damien Metzger
bc071f2b04 // Fixed code typo 2013-08-26 09:48:26 +02:00
Jerome Nadaud
9f2423c2c5 [-] BO : FixBug Url rewrite preview when user have a different language from shop 2013-08-26 08:52:22 +02:00
matiasiglesias
235bfada7e [-] LO: Argeninian localization 2013-08-24 18:04:55 -03:00
Vincent Augagneur
b1a0e715a6 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-08-23 10:34:38 +02:00
Vincent Augagneur
8412192822 [-] BO : fixed bug with multistore context on carrier wizard 2013-08-23 10:34:30 +02:00
Jerome Nadaud
c4bb5a99e4 [+] BO : Improve mod rewrite check 2013-08-23 10:26:36 +02:00
Vincent Augagneur
d48df48a03 //small fux on live edit URL 2013-08-23 09:44:47 +02:00
Vincent Augagneur
7bcd8ee83c //Added missing file 2013-08-23 09:42:37 +02:00
Jerome Nadaud
bbea6c4a9b [-] BO : FixBug #PSCFV-10152 - Multibyte string double encoded when send email by SMTP relay 2013-08-22 12:17:51 +02:00
Damien Metzger
eb69498d2c // Missing icon 2013-08-21 15:34:32 +02:00
Damien Metzger
df418a80db [*] FO : added indexation of attributes references #PSCFV-7294 2013-08-21 15:31:10 +02:00
Damien Metzger
cf35d3762b [-] MO : fixed the possibility to override/remove an override twice in the same session without redeclaration #PSCFV-10168 2013-08-21 14:32:18 +02:00
Jerome Nadaud
f610b0d844 [+] MO : Bankwire, cashondelivery, cheque disable confirm button on click 2013-08-19 16:37:48 +02:00
Damien Metzger
415ca83b62 // Code cleaning 2013-08-19 15:23:43 +02:00
Damien Metzger
1a81191c09 // Code cleaning 2013-08-19 15:14:05 +02:00
Jerome Nadaud
a7f6e91ac0 [-] BO : FixBug #PSCFV-9329 Alias problem in order by 2013-08-19 10:35:43 +02:00
Jerome Nadaud
dc4978ff57 [-] BO : FixBug valuation and real quantity sort 2013-08-19 10:28:02 +02:00
Jerome Nadaud
1138e8d01a [-] BO : FixBug Friendly URL change 2013-08-19 10:17:42 +02:00
Jerome Nadaud
13c5450ca1 [-] BO : FixBug sort bug on values count column 2013-08-19 09:50:01 +02:00
Damien Metzger
7f3652bea0 [-] BO : Added comprehensive error display when prestashop cannot write the .htaccess file 2013-08-14 11:16:50 +02:00
Krystian Podemski
dab86dffe1 * [MO] : blocknewsletter improvements 2013-08-13 16:45:40 +02:00
Gregory Roussac
1e10dab8f8 Merge pull request #646 from kpodemski/patch-2
[*] CORE : Get instance of current category in category controller
2013-08-13 05:54:40 -07:00
Krystian Podemski
8051b0021e [*] CORE : Get instance of current category in category controller
Get instance of category in for eg. module hook using:

$category = $this->context->controller->getCategory()

instead of

new Category(1,1);
2013-08-13 14:52:59 +02:00
gRoussac
5d0f1499ac // without hedgehogs is better 2013-08-12 16:50:14 +02:00
gRoussac
30d9ebe68f [-] FO : Fix bug #PSCFV-9624 try 302 redirect from old 1.4 images format to new _default before 404.gif 2013-08-12 16:44:25 +02:00
gRoussac
7ec55106ce [*] CORE : Get instance of current product in product controller merge https://github.com/PrestaShop/PrestaShop/pull/644 thanks @kpodemski 2013-08-12 16:23:54 +02:00
Gregory Roussac
b7232aabd7 Merge pull request #643 from Shagshag/patch-2
[*] BO :ProductDownload::getNewFilename() avoid recursion
2013-08-12 00:29:33 -07:00
Shagshag
ce20d55e77 ProductDownload::getNewFilename() little optimisation
Avoid recursion
2013-08-12 04:28:58 +02:00
Jerome Nadaud
a38fe5ddd3 // W3C validation error 2013-08-09 14:10:38 +02:00
Jerome Nadaud
c35d846f60 [-] BO : FixBug root category listed after list reset 2013-08-09 12:16:05 +02:00
Jerome Nadaud
75f0b38ff1 // Syntax error 2013-08-09 11:38:59 +02:00
Jerome Nadaud
cbc7b9567a [-] FO : Do not redirect on 301 when POST request 2013-08-09 10:20:42 +02:00
Jerome Nadaud
64698d1590 [-] FO : FixBug generated_date error 2013-08-09 09:10:53 +02:00
Jérôme Nadaud
84ded9f3db [-] FO : FixBug #PSCFV-10058 Invalid id country after allow to select no country 2013-08-08 23:30:31 +02:00
Jérôme Nadaud
f5e28b9212 [-] FO : FixBug CGV does not pop-up in Fancy Box 2013-08-08 21:28:55 +02:00
Jerome Nadaud
390b49122e [-] FO : FixBug #PSCFV-10026 SSL error on ajax action 2013-08-08 15:58:52 +02:00
Jerome Nadaud
be9398c6c5 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-08-08 13:06:41 +02:00
Jerome Nadaud
d5cdcab859 [-] MO : sendtofriend FixBug Form error 2013-08-08 13:06:18 +02:00
Gregory Roussac
49b6fda40f Merge pull request #639 from PrestaEdit/patch-49
[-] BO: correct link in Block Discover.
2013-08-08 03:09:29 -07:00
PrestaEdit
0023950c72 [-] BO: correct link in Block Discover. 2013-08-08 11:44:24 +02:00
Jerome Nadaud
7d4feac247 Merge branch 'development' of https://github.com/PrestaShop/PrestaShop into development 2013-08-08 11:17:07 +02:00
Jerome Nadaud
8e72d122e6 [-] MO : blockcategories FixBug html tags in categories link title 2013-08-08 11:16:45 +02:00
Gregory Roussac
bb45c93d4f Merge pull request #563 from Prestaworks/patch-12
[-] MO : Fix bug #PNM-1241 with 1.4 translations, url indexing not working for all languages.
2013-08-08 02:00:57 -07:00
Jerome Nadaud
55fc51f20b [-] MO : CarrierCompare FixBug #PSCFV-9975 Ajax SSL error 2013-08-08 10:41:22 +02:00
Jerome Nadaud
1c6eb93951 [-] BO : Check if function mb_encode_mimeheader exist in case some user uninstall it 2013-08-07 17:08:01 +02:00
Jerome Nadaud
44f7356d44 [-] BO : FixBug message charset problem in mail 2013-08-07 16:40:40 +02:00
Gregory Roussac
de3b121b11 Merge pull request #507 from jeckyl/patch-3
[*] BO : Fix size for modules logo AdminModulesPositions
2013-08-07 07:04:13 -07:00
Jerome Nadaud
239c5adb5a [-] BO : FixBug smarty email variable override by blockcontact 2013-08-07 15:09:14 +02:00
Gregory Roussac
942a946147 Merge pull request #497 from romainberger/development
[*] MO: Referral program: display currency in account page next to the voucher value
2013-08-07 05:59:29 -07:00
Jerome Nadaud
5f1506ffc2 [-] BO : FixBug #PSCFV-10037 for to choose a state when state is enabled for country 2013-08-07 14:09:40 +02:00
Jerome Nadaud
cd1ed74d8e [-] BO : FixBug #PSCFV-10038 escaped quote in address fields 2013-08-07 11:53:12 +02:00
Jerome Nadaud
a32ff1e930 [-] BO : FixBug Missing tpl dir in default layout 2013-08-07 11:17:42 +02:00
Daniel
876c49b690 PNM-1241 Issue with backbutton
This will solve the issue with url indexing not working for all languages.
2013-07-12 18:24:18 +08:00
jeckyl
783b02b34f Update admin.css
force size for module logo to keep a good design structure
2013-06-18 14:56:55 +02:00
romainberger
c94dbb36ce [*] MO: Referral program: display currency in account page next to the voucher value 2013-06-14 11:04:20 +02:00
650 changed files with 15733 additions and 21911 deletions

2
.gitignore vendored
View File

@@ -104,4 +104,4 @@ modules/upscarrier
modules/uspscarrier
modules/wexpay
modules/yotpo
modules/zingaya
modules/zingaya

View File

@@ -1,7 +1,7 @@
Contributing
------------
PrestaShop is an open-source e-commerce solution - To contribute to our project, you can make pull requests on the development branch.
PrestaShop is an open-source e-commerce solution - To contribute to our project, you can make pull requests on the bootstrap branch.
If you need some help to make a [pull-request][1]
All contributions must respect [the coding norm][2] and [the commit norm][3] in your pull-request.
All core files you commit in your pull request must have Open Software License (OSL 3.0)

View File

@@ -1,140 +1,186 @@
- adonis karavokyros
- aFolletete
- Agence CINS
- aKorczak
- Alexander Otchenashev
- anat
- Andrew
- aNiassy
- antoniofr
- AntonLejon
- Arnaud Lemercier
- Axome
- Benjamin PONGY
- BigZ
- bLeveque
- bMancone
- bumbu
- Burhan
- Cédric Mouleyre
- Caleydon Media
- cam.lafit
- Captain FLAM
- Captain-FLAM
- ccauw
- ChristopheBoucaut
- cippest
- cmouleyre
- Corentin Delcourt
- Cosmin Hutanu
- Damien Metzger
- DamienMetzger
- Damon Skelhorn
- Daniel
- David Gasperoni
- Davy Rolink
- djfm
- dMetzger
- (d)oekia
- Dragan Skrbic
- DrÿSs'
- dreammeup
- DrySs
- dSevere
- Edouard Gaulué
- emily-d
- Fabio Chelly
- fBrignoli
- fram
- François Gaillard
- fSerny
- Gabriel Schwardy
- gBrunier
- gCharmes
- gPoulain
- Grégoire Bélorgey
- Gregory Roussac
- gRoussac
- Guillaume DELOINCE
- hAitmansour
- Ha!*!*y
- indesign47
- inem0o
- ivancasasempere
- Jérôme Nadaud
- jBreux
- jeromenadaud
- Jerome Nadaud
- jessylenne
- jmCollin
- jObregon
- Jonathan Danse
- joseantgv
- Kevin Granger
- kpodemski
- Krystian Podemski
- lBrieu
- lCherifi
- ldecoker
- lLefevre
- marcinsz101
- Marco Cervellin
- Mats Rynge
- MatthieuB
- Maxence
- mBertholino
- mDeflotte
- Michel Courtade
- Milow
- minic studio
- misthero
- mMarinetti
- montes
- nezenmoins
- Nicolas Sorosac
- Nils-Helge Garli Hegvik
- nPellicari
- nturato
- oleacorner
- Otto Nascarella
- Patanock
- PhpMadman
- Pierre
- Piotr Kaczor
- Piotr Moćko
- PrestaEdit
- prestarocket
- pxls
- Rémi Gaillard
- Raphaël Malié
- raulgundin
- rGaillard
- Rimas Kudelis
- rMalie
- rMontagne
- root
- runningz
- Sébastien
- Sébastien Bocahu
- Samy Rabih
- Sarah Lorenzini
- Seb
- Seynaeve
- Shagshag
- sLorenzini
- soware
- Staging
- sThiebaut
- Sylvain WITMEYER
- tDidierjean
- vAugagneur
- vChabot
- Vincent Augagneur
- Vincent Schoener
- Vincent Terenti
- vinvin27
- vKham
- vSchoener
- Xavier
- Xavier POITAU
- Yoozio
- adonis karavokyros
- aFolletete
- Agence CINS
- aKorczak
- Aleksander Palyan
- Alexander Otchenashev
- anat
- Andrew
- aNiassy
- antoniofr
- AntonLejon
- Arnaud Lemercier
- Axome
- Benjamin PONGY
- BigZ
- bLeveque
- bMancone
- bumbu
- Burhan
- Caleydon Media
- cam.lafit
- Captain FLAM
- Captain-FLAM
- ccauw
- cedricfontaine
- Cédric Mouleyre
- Chris
- ChristopheBoucaut
- CINS
- cippest
- cmouleyre
- Corentin Delcourt
- Cosmin Hutanu
- Damien Metzger
- DamienMetzger
- Damon Skelhorn
- Daniel
- Daniele Giachino
- David Gasperoni
- Davy Rolink
- Dinis Lage
- djfm
- dlage
- dMetzger
- (d)oekia
- Dragan Skrbic
- dreammeup
- DrySs
- DrÿSs
- DrÿSs'
- dSevere
- Edouard Gaulué
- emily-d
- Eric Le Lay
- Fabio Chelly
- fBrignoli
- fchellypresta
- fram
- Francois Gaillard
- François Gaillard
- Fran<EFBFBD>ois Gaillard
- fSerny
- Gabriel Schwardy
- Gaelle ITZKOVITZ
- gBrunier
- gCharmes
- gPoulain
- gr4devel
- Grégoire Bélorgey
- Gregory Roussac
- gRoussac
- Guillaume DELOINCE
- ha99y
- hAitmansour
- Ha!*!*y
- indesign47
- inem0o
- ivancasasempere
- Jáchym Toušek
- Javsmile
- jBreux
- jeckyl
- jeromenadaud
- Jerome Nadaud
- Jérôme Nadaud
- jessylenne
- jmCollin
- jObregon
- Jonathan Danse
- joseantgv
- Julien
- Kevin Granger
- kiropowered
- kpodemski
- Krystian Podemski
- lBrieu
- lCherifi
- ldecoker
- lLefevre
- LOIC ROSSET ltd
- Madef
- Mainmich
- makk1ntosh
- marcinsz101
- Marco Cervellin
- matiasiglesias
- Mats Rynge
- MatthieuB
- Maxence
- mBertholino
- mDeflotte
- Michel Courtade
- Mickael Desgranges
- Mikael Blotin
- Milow
- minic studio
- misthero
- mMarinetti
- montes
- MustangZhong
- nezenmoins
- Nicolas Sorosac
- Nils-Helge Garli Hegvik
- Nino Uzelac
- nPellicari
- nturato
- oleacorner
- Otto Nascarella
- Patanock
- PhpMadman
- Pierre
- Piotr Kaczor
- Piotr Moćko
- PrestaEdit
- PrestaLab
- PrestanceDesign
- prestarocket
- Prestaspirit
- pxls
- Raphaël Malié
- raulgundin
- Rémi Gaillard
- rGaillard
- Rimas Kudelis
- rMalie
- rMontagne
- romainberger
- root
- runningz
- sagaradonis
- Samy Rabih
- Sarah Lorenzini
- Seb
- Sébastien
- Sébastien Bocahu
- Seynaeve
- Shagshag
- sjousse
- sLorenzini
- smartdatasoft
- soufyan
- soware
- Staging
- sThiebaut
- Sylvain Gougouzian
- Sylvain WITMEYER
- tDidierjean
- thoma202
- Tomasz Slominski
- Tom Panier
- tucoinfo
- unknown
- vAugagneur
- vChabot
- Vincent Augagneur
- Vincent Schoener
- Vincent Terenti
- vinvin27
- vKham
- vSchoener
- Xavier
- Xavier POITAU
- Yoozio
- zimmi1
- Zollner Robert

View File

@@ -2,47 +2,48 @@ README
======
![PrestaShop](http://www.prestashop.com/images/banners/general/prestashop_728x90.png "PrestaShop")
PREPARATION
ABOUT
--------
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.
PrestaShop is a free and open-source e-commerce web application, committed to providing the best shopping cart experience for both merchants and consumers.
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
--------
Simply go to your PrestaShop web directory and use installer :-)
With your web browser, go to the root of your PrestaShop directory, and the installer will start. Follow the instructions until PrestaShop is installed.
If you have any PHP error, perhaps you don't have PHP5 or you need to activate it on your web host.
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).
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 don't find any solution to start the installer, please post on [the PrestaShop forums][3].
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
--------
For any extra documentation (how-to), please read our [Online documentation][4]
The official PrestaShop documentation is available online [on its own website][4].
FORUMS
--------
You can also discuss, help and contribute with PrestaShop community on [our forums][5]
You can discuss, help and contribute with PrestaShop community on [the PrestaShop forums][5].
Thanks for downloading and using PrestaShop e-commerce Open-source solution!
Thank you for downloading and using PrestaShop e-commerce Open-source solution!
[1]: http://www.prestabox.com
[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/
[4]: http://doc.prestashop.com
[5]: http://www.prestashop.com/forums/
[5]: http://www.prestashop.com/forums/

View File

@@ -26,45 +26,12 @@
define('_PS_ADMIN_DIR_', getcwd());
include(_PS_ADMIN_DIR_.'/../config/config.inc.php');
/* Getting cookie or logout */
require_once(_PS_ADMIN_DIR_.'/init.php');
$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'))
{
require(_PS_CONTROLLER_DIR_.'admin/AdminReferrersController.php');
@@ -101,39 +68,6 @@ if (Tools::isSubmit('ajaxProductPackItems'))
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'))
{
@@ -144,15 +78,6 @@ if (Tools::isSubmit('submitTrackClickOnHelp'))
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'))
{
$children_categories = Category::getChildrenWithNbSelectedSubCat(Tools::getValue('id_category_parent'), Tools::getValue('selectedCat'), Context::getContext()->language->id, null, Tools::getValue('use_shop_context'));
@@ -200,17 +125,6 @@ if (Tools::isSubmit('getParentCategoriesId') && $id_category = Tools::getValue('
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'))
{
$zones = Zone::getZones();
@@ -223,8 +137,3 @@ if (Tools::isSubmit('getZones'))
$array = array('hasError' => false, 'errors' => '', 'data' => $html);
die(Tools::jsonEncode($html));
}
function displayJavascriptAlert($s)
{
echo '<script type="text/javascript">alert(\''.addslashes($s).'\');</script>';
}

View File

@@ -22,26 +22,18 @@
$upload->setInvalidFileExt(explode(",", CONFIG_UPLOAD_INVALID_EXTS));
if(CONFIG_SYS_VIEW_ONLY || !CONFIG_OPTIONS_UPLOAD)
{
$error = SYS_DISABLED;
}
elseif(empty($_GET['folder']) || !isUnderRoot($_GET['folder']))
{
$error = ERR_FOLDER_PATH_NOT_ALLOWED;
}else if(!$upload->isFileUploaded('file'))
{
elseif (!$upload->isFileUploaded('file'))
$error = ERR_FILE_NOT_UPLOADED;
}else if(!$upload->moveUploadedFile($_GET['folder']))
{
$error = ERR_FILE_MOVE_FAILED;
}
elseif(!$upload->isPermittedFileExt(explode(",", CONFIG_UPLOAD_VALID_EXTS)))
{
elseif (!$upload->isPermittedFileExt(explode(",", CONFIG_UPLOAD_VALID_EXTS)))
$error = ERR_FILE_TYPE_NOT_ALLOWED;
}elseif(defined('CONFIG_UPLOAD_MAXSIZE') && CONFIG_UPLOAD_MAXSIZE && $upload->isSizeTooBig(CONFIG_UPLOAD_MAXSIZE))
{
elseif (defined('CONFIG_UPLOAD_MAXSIZE') && CONFIG_UPLOAD_MAXSIZE && $upload->isSizeTooBig(CONFIG_UPLOAD_MAXSIZE))
$error = sprintf(ERROR_FILE_TOO_BID, transformFileSize(CONFIG_UPLOAD_MAXSIZE));
}else
elseif (!$upload->moveUploadedFile($_GET['folder']))
$error = ERR_FILE_MOVE_FAILED;
else
{
include_once(CLASS_FILE);
$path = $upload->getFilePath();

View File

@@ -24,7 +24,8 @@
if(!empty($_GET['search']))
{
include_once(CLASS_SEARCH);
if (!preg_match('/^'.Tools::pRegexp(realpath(dirname(__FILE__).'/'.$_GET['search_folder']), '/').'/i', _PS_ROOT_DIR_.'/img/cms'))
exit;
$search = new Search($_GET['search_folder']);
$search->addSearchKeyword('recursive', @$_GET['search_recursively']);
$search->addSearchKeyword('mtime_from', @$_GET['search_mtime_from']);

View File

@@ -78,9 +78,9 @@
define('CONFIG_EDITABLE_VALID_EXTS', 'txt,htm,html,xml,js,css'); //make you include all these extension in CONFIG_UPLOAD_VALID_EXTS if you want all valid
define('CONFIG_OVERWRITTEN', false); //overwirte when processing paste
define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,png');// //
define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,jpeg,png');// //
//define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,png,bmp,tif,zip,sit,rar,gz,tar,htm,html,mov,mpg,avi,asf,mpeg,wmv,aif,aiff,wav,mp3,swf,ppt,rtf,doc,pdf,xls,txt,xml,xsl,dtd');//
define("CONFIG_VIEWABLE_VALID_EXTS", 'gif,jpg,png');
define("CONFIG_VIEWABLE_VALID_EXTS", 'gif,jpg,jpeg,jpeg,png');
//define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,png,txt'); //
define('CONFIG_UPLOAD_INVALID_EXTS', '');

View File

@@ -10,6 +10,9 @@
//FILESYSTEM CONFIG <br>
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . "class.auth.php");
if (_PS_MODE_DEMO_)
die('This functionality has been disabled.');
define('CONFIG_QUERY_STRING_ENABLE', true); //Enable passed query string to setting the system configuration
if(!isset($_SESSION))
{

View File

@@ -73,9 +73,9 @@
define('CONFIG_EDITABLE_VALID_EXTS', 'txt,htm,html,xml,js,css'); //make you include all these extension in CONFIG_UPLOAD_VALID_EXTS if you want all valid
define('CONFIG_OVERWRITTEN', false); //overwirte when processing paste
define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,png,txt'); //
define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,jpeg,png,txt'); //
//define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,png,bmp,tif,zip,sit,rar,gz,tar,htm,html,mov,mpg,avi,asf,mpeg,wmv,aif,aiff,wav,mp3,swf,ppt,rtf,doc,pdf,xls,txt,xml,xsl,dtd');//
define("CONFIG_VIEWABLE_VALID_EXTS", 'gif,bmp,txt,jpg,png,tif,html,htm,js,css,xml,xsl,dtd,mp3,wav,wmv,wma,rm,rmvb,mov,swf');
define("CONFIG_VIEWABLE_VALID_EXTS", 'gif,bmp,txt,jpg,jpeg,png,tif,html,htm,js,css,xml,xsl,dtd,mp3,wav,wmv,wma,rm,rmvb,mov,swf');
//define('CONFIG_UPLOAD_VALID_EXTS', 'gif,jpg,png,txt'); //
define('CONFIG_UPLOAD_INVALID_EXTS', '');

View File

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

View File

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

View File

@@ -30,6 +30,7 @@ select[disabled="disabled"], input[disabled="disabled"],textarea[disabled="disab
/*BUTTON*/
.button{
cursor: pointer;
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: -webkit-gradient(linear, center top ,center bottom, from(#F9F9F9), to(#E3E3E3)) repeat scroll 0 0 transparent;
@@ -673,4 +674,4 @@ ul.listForm li {padding-bottom:3px;}
/************** SCENE *****************/
#large_scene_image{clear:both;border:1px solid transparent;}
#large_scene_image{clear:both;border:1px solid transparent;}

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-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:1}
div.fix-toolbar {border-bottom: 1px solid #E0E0E0;position:fixed;top:0;opacity:0.9;z-index:11}
/*FILTER MODULE*/

View File

@@ -66,7 +66,8 @@
{
if (msg)
{
var infos = msg.infos.split('_');
var infos = msg.infos.replace("\\'", "'").split('_');
$('input[name=firstname]').val(infos[0]);
$('input[name=lastname]').val(infos[1]);
$('input[name=company]').val(infos[2]);

View File

@@ -40,7 +40,7 @@
</td>
{foreach from=$ranges key=r item=range}
<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}
</td>
{/foreach}
@@ -53,7 +53,7 @@
{if $smarty.foreach.ranges.first}
<td class="center">&nbsp;</td>
{else}
<td class="center"><button class="button">{l s='Delete'}</button</td>
<td class="center"><button class="button">{l s='Delete'}</button></td>
{/if}
{/foreach}
</tr>

View File

@@ -50,7 +50,7 @@
<h2><img src="../img/admin/cart.gif" /> {l s='Order information'}</h2>
<span>
{if $order->id}
<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>
<a href="{$link->getAdminLink('AdminOrders')|escape:'htmlall':'UTF-8'}&id_order={$order->id}&vieworder"> {l s='Order #%s' sprintf=$order->reference}</a></span>
<br /><br />
{l s='Made on:'} {dateFormat date=$order->date_add}<br /><br /><br /><br />
{else}
@@ -187,4 +187,4 @@
<div class="clear" style="height:20px;">&nbsp;</div>
{/block}
</div>
</div>

View File

@@ -57,14 +57,14 @@
<dl>
<dt>{l s='Sent on:'}</dt>
<dd>{$message.date_add}</dd>
<dd>{$message.date_add}&nbsp;</dd>
</dl>
{if empty($message.id_employee)}
<dl>
<dt>{l s='Browser:'}</dt>
<dd>{$message.user_agent}</dd>
<dd>{$message.user_agent}&nbsp;</dd>
</dl>
{/if}
@@ -79,34 +79,35 @@
</dl>
{/if}
{if !empty($message.id_order) && empty($message.id_employee)}
{if !empty($message.id_order) && $is_valid_order_id && empty($message.id_employee)}
<dl>
<dt>{l s='Order #'}</dt>
<dd><a href="index.php?tab=AdminOrders&id_order={$message.id_order}&vieworder&token={getAdminToken tab='AdminOrders'}" title="{l s='View order'}">
{$message.id_order} <img src="../img/admin/search.gif" alt="{l s='View'}" />
</a></dd>
<dd><a href="index.php?tab=AdminOrders&id_order={$message.id_order}&vieworder&token={getAdminToken tab='AdminOrders'}" title="{l s='View order'}">{$message.id_order} <img src="../img/admin/search.gif" alt="{l s='View'}" /></a>
</dd>
</dl>
{/if}
{if !empty($message.id_product) && empty($message.id_employee)}
<dl>
<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>
{/if}
<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}" />
<select name="id_contact" onchange="this.form.submit();">
{foreach $contacts as $contact}
<option value="{$contact.id_contact}" {if $contact.id_contact == $message.id_contact}selected="selected"{/if}>
{$contact.name}
</option>
{/foreach}
</select>
<dl>
<dt>{l s='Subject:'}</dt>
<dd>
<select name="id_contact" onchange="this.form.submit();">
{foreach $contacts as $contact}
<option value="{$contact.id_contact}" {if $contact.id_contact == $message.id_contact}selected="selected"{/if}>
{$contact.name}
</option>
{/foreach}
</select>
</dd>
</dl>
</form>

View File

@@ -35,7 +35,7 @@
$.ajax({
type: "POST",
url: "index.php",
data: "token={getAdminToken tab='AdminCustomers'}&tab=AdminCustomers&ajax=1&action=updateCustomerNote&id_customer={$customer->id}&note="+noteContent,
data: "token={getAdminToken tab='AdminCustomers'}&tab=AdminCustomers&ajax=1&action=updateCustomerNote&id_customer={$customer->id}&note="+encodeURIComponent(noteContent),
async : true,
success: function(r) {
$('#note_feedback').html('').hide();

View File

@@ -48,11 +48,11 @@
<script type="text/javascript">
$(document).ready(function() {
$("#group_discount_category").fancybox({
onStart: function () {
beforeLoad: function () {
$('#group_discount_category_fancybox').show();
initFancyBox();
},
onClosed: function () {
beforeClose: function () {
$('#group_discount_category_fancybox').hide();
}
});
@@ -138,7 +138,7 @@
}
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");
input_hidden.setAttribute('type', 'hidden');
@@ -168,7 +168,7 @@
{foreach $input['values'] key=key item=category }
<tr class="alt_row" id="{$category.id_category}">
<td>{$category.path}</td>
<td>{l s='Discount: %d%%' sprintf=$category.reduction}</td>
<td>{l s='Discount: %.2f%%' sprintf=$category.reduction}</td>
<td>
<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}">

View File

@@ -30,7 +30,7 @@
<fieldset>
<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='Discount: %d%%' sprintf=$group->reduction}</span></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='Current category discount:'}</span>
{if !$categorieReductions}
{l s='None'}
@@ -39,7 +39,7 @@
{foreach $categorieReductions key=key item=category }
<tr class="alt_row">
<td>{$category.path}</td>
<td>{l s='Discount: %d%%' sprintf=$category.reduction}</td>
<td>{l s='Discount: %.2f%%' sprintf=$category.reduction}</td>
</tr>
{/foreach}
</table>
@@ -58,6 +58,7 @@
</ul>
</fieldset>
<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}
{/block}
{/block}

View File

@@ -110,14 +110,14 @@ $(document).ready(function() {
</ul>
<div id="partner_preactivation">
<p class="center"><img src="../img/loader.gif" alt="" /></p>
<p class="center"><img src="../img/loader.gif" alt="" /> {l s='Loading...'}</p>
</div>
<div class="separation"></div>
{$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="displayBackOfficeHome"} {*old name of the hook*}
@@ -212,7 +212,7 @@ $(document).ready(function() {
{
// don't show/hide screencast if it's deactivated
{if $employee->bo_show_screencast}
$('#adminpresentation').fadeOut('slow');
$('#adminpresentation').fadeOut('slow');
{/if}
$('#partner_preactivation').fadeOut('slow');
$('#discover_prestashop').fadeOut('slow');

View File

@@ -1,8 +1,8 @@
{*
* 2007-2013 PrestaShop
*
**
* NOTICE OF LICENSE
*
**
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
@@ -10,72 +10,25 @@
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
**
* DISCLAIMER
*
**
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
**
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*}
{include file="toolbar.tpl" toolbar_btn=$toolbar_btn toolbar_scroll=$toolbar_scroll title=$title}
<div class="leadin">{block name="leadin"}{/block}</div>
{if $module_confirmation}
<div class="module_confirmation conf confirm">
{l s='Your .CSV file has been sucessfully imported into your shop.'}
{l s='Your .CSV file has been sucessfully imported into your shop. Don\'t forget to Re-build the products search index.'}
</div>
{/if}
<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 id="upload_file_import" style="padding-left: 10px; background-color: #EBEDF4; border: 1px solid #CCCED7">
<div class="clear">&nbsp;</div>
@@ -97,28 +50,16 @@
</form>
</div>
</div>
<div class="clear">&nbsp;</div>
{**
* Import fieldset
*}
<form id="preview_import"
action="{$current}&token={$token}"
method="post"
style="display:inline"
enctype="multipart/form-data"
class="clear">
<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%;">
<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>
<div class="margin-form">
{if count($files_to_import)}
<select name="csv">
{foreach $files_to_import AS $filename}
<option value="{$filename}">{$filename}</option>
<option value="{$filename}"{if $csv_selected == $filename} selected="selected"{/if}>{$filename|escape:'htmlall':'UTF-8'}</option>
{/foreach}
</select>
{/if}
@@ -126,33 +67,44 @@
<a href="#upload_file_import" id="upload_file_import_link" class="button"><img src="../img/admin/add.gif" alt="Uplaod" title="Upload" />{l s='Upload'}</a>
</div>
<div style="width:50%; margin: 0 auto;">
<a href="#" onclick="$('#sample_files_import').slideToggle(); return false;">{l s='Click to view our sample import csv files.'}</a>
<ul id="sample_files_import" style="display:none">
<li><a href="../docs/csv_import/categories_import.csv">{l s='Sample Categories file'}</a></li>
<li><a href="../docs/csv_import/products_import.csv">{l s='Sample Products file'}</a></li>
<li><a href="../docs/csv_import/combinations_import.csv">{l s='Sample Combinations file'}</a></li>
<li><a href="../docs/csv_import/customers_import.csv">{l s='Sample Customers file'}</a></li>
<li><a href="../docs/csv_import/addresses_import.csv">{l s='Sample Addresses file'}</a></li>
<li><a href="../docs/csv_import/manufacturers_import.csv">{l s='Sample Manufacturers file'}</a></li>
<li><a href="../docs/csv_import/suppliers_import.csv">{l s='Sample Suppliers file'}</a></li>
{if $PS_ADVANCED_STOCK_MANAGEMENT}
<li><a href="../docs/csv_import/supply_orders_import.csv">{l s='Supply Orders sample file'}</a></li>
<li><a href="../docs/csv_import/supply_orders_details_import.csv">{l s='Supply Orders Details sample file'}</a></li>
{/if}
</ul>
<div style="width:50%; display: inline-block; float :left;">
<a href="#" onclick="$('#sample_files_import').slideToggle(); return false;">{l s='Click to view our sample import csv files.'}</a>
<ul id="sample_files_import" style="display:none;">
<li><a class="_blank" href="../docs/csv_import/categories_import.csv">{l s='Sample Categories file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/products_import.csv">{l s='Sample Products file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/combinations_import.csv">{l s='Sample Combinations file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/customers_import.csv">{l s='Sample Customers file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/addresses_import.csv">{l s='Sample Addresses file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/manufacturers_import.csv">{l s='Sample Manufacturers file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/suppliers_import.csv">{l s='Sample Suppliers file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/alias_import.csv">{l s='Sample Alias file'}</a></li>
{if $PS_ADVANCED_STOCK_MANAGEMENT}
<li><a class="_blank" href="../docs/csv_import/supply_orders_import.csv">{l s='Supply Orders sample file'}</a></li>
<li><a class="_blank" href="../docs/csv_import/supply_orders_details_import.csv">{l s='Supply Orders Details sample file'}</a></li>
{/if}
</ul>
</div>
<div style="width:50%; float:left;">
<a href="#" onclick="$('#csv_files_import').slideToggle(); return false;">{l s='Click to view your csv files.'}</a>
<ul id="csv_files_import" style="display:none;">
{foreach $files_to_import AS $filename}
<li><a href="{$current}&token={$token}&csvfilename={$filename|@base64_encode}">{$filename}</a>&nbsp;&nbsp;
<a href="{$current}&token={$token}&csvfilename={$filename|@base64_encode}&delete=1"><img src="../img/admin/delete.gif" /></a></li>
{/foreach}
</ul>
</div>
<div class="clear">&nbsp;</div>
</div>
<label class="clear">{l s='What kind of entity would you like to import?'} </label>
<div class="margin-form">
<select name="entity" id="entity">
{foreach $entities AS $entity => $i}
<option value="{$i}" {if $entity == $i}selected="selected"{/if}>
<option value="{$i}"{if $entity_selected == $i} selected="selected"{/if}>
{$entity}
</option>
{/foreach}
</select>
</div>
<label class="clear">{l s='Language of the file'}</label>
<div class="margin-form">
<select name="iso_lang">
@@ -168,26 +120,30 @@
</div>
<label class="clear">{l s='Field separator'} </label>
<div class="margin-form">
<input type="text" size="2" value=";" name="separator"/>
<input type="text" size="2" value="{if isset($separator_selected)}{$separator_selected|escape:'htmlall':'UTF-8'}{else};{/if}" name="separator"/>
{l s='e.g. '}"1<span class="bold" style="color: red">;</span>Ipod<span class="bold" style="color: red">;</span>129.90<span class="bold" style="color: red">;</span>5"
</div>
<label class="clear">{l s='Multiple value separator'} </label>
<div class="margin-form">
<input type="text" size="2" value="," name="multiple_value_separator"/>
<input type="text" size="2" value="{if isset($multiple_value_separator_selected)}{$multiple_value_separator_selected|escape:'htmlall':'UTF-8'}{else},{/if}" name="multiple_value_separator"/>
{l s='e.g. '}"Ipod;red.jpg<span class="bold" style="color: red">,</span>blue.jpg<span class="bold" style="color: red">,</span>green.jpg;129.90"
</div>
<label for="truncate" class="clear">{l s='Delete all'} <span id="entitie">{l s='categories'}</span> {l s='before import?'} </label>
<div class="margin-form">
<input name="truncate" id="truncate" type="checkbox"/>
</div>
<label for="match_ref" class="clear" style="display: none">{l s='Use product reference as key?'}</label>
<label for="regenerate" class="clear">{l s='No thumbnails regeneration'}</label>
<div class="margin-form">
<input name="match_ref" id="match_ref" type="checkbox" style="margin-top: 6px; display:none"/>
<input name="regenerate" id="regenerate" type="checkbox" />
</div>
<label for="forceIDs" class="clear">{l s='Force all ID\'s during import?'} </label>
<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.'}
</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">
<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}
@@ -210,13 +166,10 @@
{/if}
</fieldset>
</form>
<fieldset style="display:block;">
<legend>
<img src="../img/admin/import.gif" />{l s='Available fields'}
</legend>
<div id="availableFields">
{$available_fields}
</div>
@@ -224,74 +177,93 @@
<div class="clear">
<br /><br />{l s='* Required field'}
</div>
</fieldset>
<div class="clear">&nbsp;</div>
<script type="text/javascript">
$("select#entity").change( function() {
if ($("#entity > option:selected").val() == 7 || $("#entity > option:selected").val() == 8)
{
$("label[for=truncate],#truncate").hide();
}
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) {
}
$(document).ready(function(){
var truncateAuthorized = {$truncateAuthorized|intval};
activeClueTip();
$("a#upload_file_import_link").fancybox({
'titleShow' : false,
'transitionIn' : 'elastic',
'transitionOut' : 'elastic'
});
$('#preview_import').submit(function(e){
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({
splitTitle: '|',
showTitle: false
});
};
});
</script>

View File

@@ -22,20 +22,52 @@
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*}
{extends file="helpers/view/view.tpl"}
{block name="override_tpl"}
<script type="text/javascript">
var errorEmpty = "{l s='Please name your matching configuration to save.'}"
var errorEmpty = '{l s='Please name your matching configuration to save.' js=1}';
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>
<div id="container-customer">
<h2>{l s='View your data'}</h2>
<div>
<b>{l s='Save and load your configuration for importing files'} : </b><br><br>
<input type="text" name="newImportMatchs" id="newImportMatchs">
<a id="saveImportMatchs" class="button" href="#">{l s='Save'}</a><br><br>
<b>{l s='Save and load your configuration for importing files'} : </b><br/><br/>
<input type="text" name="newImportMatchs" id="newImportMatchs" />
<a id="saveImportMatchs" class="button" href="#">{l s='Save'}</a><br /><br />
<div id="selectDivImportMatchs" {if !$import_matchs}style="display:none"{/if}>
<select id="valueImportMatchs">
{foreach $import_matchs as $match}
@@ -46,21 +78,18 @@
<a class="button" id="deleteImportMatchs" href="#">{l s='Delete'}</a>
</div>
</div>
<h3>{l s='Please set the value type of each column'}</h3>
<div id="error_duplicate_type" class="warning warn" style="display:none;">
<h3>{l s='Columns cannot have the same value type'}</h3>
</div>
<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>
</div>
<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'}
<input type="hidden" name="csv" value="{$fields_value.csv}" />
<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="iso_lang" value="{$fields_value.iso_lang}" />
{if $fields_value.truncate}
@@ -72,49 +101,8 @@
{if $fields_value.match_ref}
<input type="hidden" name="match_ref" value="1" />
{/if}
<input type="hidden" name="separator" value="{$fields_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>
<input type="hidden" name="separator" value="{$fields_value.separator}" />
<input type="hidden" name="multiple_value_separator" value="{$fields_value.multiple_value_separator}" />
<table>
<tr>
<td colspan="3" align="center">
@@ -123,7 +111,7 @@
</tr>
<tr>
<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 align="left">
{section name=nb_i start=0 loop=$nb_table step=1}
@@ -132,12 +120,10 @@
{/section}
</td>
<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>
</tr>
</table>
<script type="text/javascript">showTable(current);</script>
</form>
</div>
{/block}

View File

@@ -23,10 +23,6 @@
* International Registered Trademark & Property of PrestaShop SA
*}
<div class="width4">
{$localization_form}
</div>
{if isset($localization_form)}{$localization_form}{/if}
<br />
<div class="width4">
{$localization_options}
</div>
{if isset($localization_options)}{$localization_options}{/if}

View File

@@ -59,14 +59,14 @@
<td>{$module->categoryName}</td>
<td>
<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="0" {if isset($module->preferences.interest) && $module->preferences.interest eq '0'}selected="selected"{/if}>{l s='No'}</option>
</select>
</td>
<td>
<select name="f_{$module->name}" class="moduleFavorite" 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="0" {if isset($module->preferences.favorite) && $module->preferences.favorite eq '0'}selected="selected"{/if}>{l s='No'}</option>
</select>

View File

@@ -22,7 +22,7 @@
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* 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 isset($logged_on_addons)}
<!--start addons login-->
@@ -62,10 +62,7 @@
<!--start filter module-->
<style>.ac_results { border:1px solid #C2C4D9; }</style>
<div class="filter-module">
<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>
<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 method="post">
<div class="select-filter">
<label class="search-filter">{l s='Sort by'}:</label>

View File

@@ -87,7 +87,7 @@
});
// Method to check / uncheck all modules checkbox
$('#checkme').click(function()
$('#moduleContainer').on("click", "#checkme", function()
{
if ($(this).attr("rel") == 'false')
{
@@ -321,8 +321,8 @@
catch(e){}
return false;
});
$('.toggle_favorite').live('click', function(event)
$('#moduleContainer').on("click", ".toggle_favorite", function()
{
var el = $(this);
var value_pref = el.data('value');

View File

@@ -46,8 +46,8 @@
</td>
<td><img class="imgm" alt="" src="{if isset($module->image)}{$module->image}{else}../modules/{$module->name}/{$module->logo}{/if}"></td>
<td>
<div class="moduleDesc" id="anchor{$module->name|ucfirst}">
<h3>{$module->displayName}
<div class="moduleDesc" id="anchor{$module->name|ucfirst}" title="{$module->name}">
<h3>{$module->displayName}<span style="display:none">{$module->name}</span>
{if isset($module->type) && $module->type == 'addonsMustHave'}
<span class="setup must-have">{l s='Must Have'}</span>
{else}
@@ -77,7 +77,7 @@
</dl>
</div>
<p class="desc">{if isset($module->description) && $module->description ne ''}{l s='Description'} : {$module->description}{else}&nbsp;{/if}</p>
{if isset($module->message) && (!isset($module->type) || ($module->type != 'addonsMustHave' || $module->type !== 'addonsNative'))}<div class="conf">{$module->message}</div>{/if}
{if isset($module->message) && (empty($module->name) === false) && (!isset($module->type) || ($module->type != 'addonsMustHave' || $module->type !== 'addonsNative'))}<div class="conf">{$module->message}</div>{/if}
<div class="row-actions-module">
{if !isset($module->not_on_disk)}
{$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>
</li>
{else}
{if $module->id && isset($module->version_addons) && $module->version_addons}
{if 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>
{/if}
<li>

View File

@@ -34,6 +34,7 @@
<td valign="top">
<div class="moduleDesc" id="anchor{$module->name|ucfirst}">
<h3>
<span style="display:none">{$module->name}</span>
{$module->displayName|truncate:36:'…'} {$module->version}
{if isset($module->id) && $module->id gt 0 }
{if $module->active}

View File

@@ -37,7 +37,7 @@
{l s='Show'} :
<select id="show_modules" onChange="autoUrl('show_modules', '{$url_show_modules}')">
<option value="all">{l s='All modules'}&nbsp;</option>
<option>---------------</option>
<option>-</option>
{foreach $modules as $module}
<option value="{$module->id|intval}" {if $display_key == $module->id}selected="selected"{/if}>{$module->displayName}</option>

View File

@@ -26,7 +26,7 @@
{* Generate HTML code for printing Invoice Icon with link *}
<span style="width:20px; margin-right:5px;">
{if ($order_state->invoice || $order->invoice_number)}
<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>
<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>
{else}
-
{/if}
@@ -35,7 +35,7 @@
{* Generate HTML code for printing Delivery Icon with link *}
<span style="width:20px;">
{if ($order_state->delivery || $order->delivery_number)}
<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>
<a href="{$link->getAdminLink('AdminPdf')|escape:'htmlall':'UTF-8'}&submitAction=generateDeliverySlipPDF&id_order={$order->id}"><img src="../img/admin/delivery.gif" alt="delivery" /></a>
{else}
-
{/if}

View File

@@ -56,7 +56,7 @@
</span>
{/if}
</td>
{if $display_warehouse}<td>{$product.warehouse_name|escape:'htmlall':'UTF-8'}</td>{/if}
{if $display_warehouse}<td align="center">{$product.warehouse_name|escape:'htmlall':'UTF-8'}</td>{/if}
{if ($order->hasBeenPaid())}
<td align="center" class="productQuantity">
{$product['product_quantity_refunded']}

View File

@@ -38,6 +38,11 @@
var defaults_order_state = new Array();
var customization_errors = false;
var pic_dir = '{$pic_dir}';
var currency_format = 5;
var currency_sign = '';
var currency_blank = false;
var priceDisplayPrecision = 2;
{foreach from=$defaults_order_state key='module' item='id_order_state'}
defaults_order_state['{$module}'] = '{$id_order_state}';
{/foreach}
@@ -117,7 +122,7 @@
$('#vouchers_err').hide();
var mytab = new Array();
for (var i = 0; i < data.vouchers.length; i++)
mytab[mytab.length] = { data: data.vouchers[i], value: data.vouchers[i].name+' - '+data.vouchers[i].description };
mytab[mytab.length] = { data: data.vouchers[i], value: data.vouchers[i].name + (data.vouchers[i].code.length > 0 ? ' - ' + data.vouchers[i].code : '')};
return mytab;
},
extraParams: {
@@ -505,7 +510,6 @@
}
displaySummary(res);
resetBind();
updateCurrencySign();
}
});
}
@@ -652,11 +656,12 @@
var id_product = Number(this.id_product);
var id_product_attribute = Number(this.id_product_attribute);
cart_quantity[Number(this.id_product)+'_'+Number(this.id_product_attribute)+'_'+Number(this.id_customization)] = this.cart_quantity;
cart_content += '<tr><td><img src="'+this.image_link+'" title="'+this.name+'" /></td><td>'+this.name+'<br />'+this.attributes_small+'</td><td>'+this.reference+'</td><td><input type="text" size="7" rel="'+this.id_product+'_'+this.id_product_attribute+'" class="product_unit_price" value="'+this.price+'" />&nbsp;<span class="currency_sign"></span></td><td>';
cart_content += '<tr><td><img src="'+this.image_link+'" title="'+this.name+'" /></td><td>'+this.name+'<br />'+this.attributes_small+'</td><td>'+this.reference+'</td><td><input type="text" size="7" rel="'+this.id_product+'_'+this.id_product_attribute+'" class="product_unit_price" value="'+this.numeric_price+'" /></td><td>';
cart_content += (!this.id_customization ? '<div style="float:left;"><a href="#" class="increaseqty_product" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" ><img src="../img/admin/up.gif" /></a><br /><a href="#" class="decreaseqty_product" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'"><img src="../img/admin/down.gif" /></a></div>' : '');
cart_content += (!this.id_customization ? '<div style="float:left;"><input type="text" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" class="cart_quantity" size="2" value="'+this.cart_quantity+'" />' : '');
cart_content += (!this.id_customization ? '<a href="#" class="delete_product" rel="delete_'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" ><img src="../img/admin/delete.gif" /></a></div>' : '');
cart_content += '</td><td>'+this.total+'&nbsp;<span class="currency_sign"></span></td></tr>';
cart_content += '</td><td>' + formatCurrency(this.numeric_total, currency_format, currency_sign, currency_blank) + '</td></tr>';
if (this.id_customization && this.id_customization != 0)
{
$.each(this.customized_datas[this.id_product][this.id_product_attribute][id_address_delivery], function() {
@@ -694,17 +699,15 @@
function updateCartVouchers(vouchers)
{
var vouchers_html = '';
if (vouchers.length > 0)
{
$.each(vouchers, function() {
if (typeof(vouchers) == 'object')
$.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>';
});
$('#voucher_list').show();
}
else
$('#voucher_list tbody').html($.trim(vouchers_html));
if ($('#voucher_list tbody').html().length == 0)
$('#voucher_list').hide();
$('#voucher_list tbody').html(vouchers_html);
else
$('#voucher_list').show();
}
function updateCartPaymentList(payment_list)
@@ -712,8 +715,23 @@
$('#payment_list').html(payment_list);
}
function fixPriceFormat(price)
{
if(price.indexOf(',') > 0 && price.indexOf('.') > 0) // if contains , and .
if(price.indexOf(',') < price.indexOf('.')) // if , is before .
price = price.replace(',',''); // remove ,
price = price.replace(' ',''); // remove any spaces
price = price.replace(',','.'); // remove , if price did not cotain both , and .
return price;
}
function displaySummary(jsonSummary)
{
currency_format = jsonSummary.currency.format;
currency_sign = jsonSummary.currency.sign;
currency_blank = jsonSummary.currency.blank;
priceDisplayPrecision = jsonSummary.currency.decimals ? 2 : 0;
updateCartProducts(jsonSummary.summary.products, jsonSummary.summary.gift_products, jsonSummary.cart.id_address_delivery);
updateCartVouchers(jsonSummary.summary.discounts);
updateAddressesList(jsonSummary.addresses, jsonSummary.cart.id_address_delivery, jsonSummary.cart.id_address_invoice);
@@ -739,20 +757,19 @@
$('#free_shipping').removeAttr('checked');
$('#gift_message').html(jsonSummary.cart.gift_message);
if(!changed_shipping_price)
$('#shipping_price').html('<b>'+jsonSummary.summary.total_shipping+'</b>');
if (!changed_shipping_price)
$('#shipping_price').html('<b>' + formatCurrency(parseFloat(jsonSummary.summary.total_shipping), currency_format, currency_sign, currency_blank) + '</b>');
shipping_price_selected_carrier = jsonSummary.summary.total_shipping;
$('#total_vouchers').html(jsonSummary.summary.total_discounts_tax_exc);
$('#total_shipping').html(jsonSummary.summary.total_shipping_tax_exc);
$('#total_taxes').html(jsonSummary.summary.total_tax);
$('#total_without_taxes').html(jsonSummary.summary.total_price_without_tax);
$('#total_with_taxes').html(jsonSummary.summary.total_price);
$('#total_products').html(jsonSummary.summary.total_products);
$('#total_vouchers').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_discounts_tax_exc)), currency_format, currency_sign, currency_blank));
$('#total_shipping').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_shipping_tax_exc)), currency_format, currency_sign, currency_blank));
$('#total_taxes').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_tax)), currency_format, currency_sign, currency_blank));
$('#total_without_taxes').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_price_without_tax)), currency_format, currency_sign, currency_blank));
$('#total_with_taxes').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_price)), currency_format, currency_sign, currency_blank));
$('#total_products').html(formatCurrency(parseFloat(fixPriceFormat(jsonSummary.summary.total_products)), currency_format, currency_sign, currency_blank));
id_currency = jsonSummary.cart.id_currency;
$('#id_currency option').removeAttr('selected');
$('#id_currency option[value="'+id_currency+'"]').attr('selected', true);
updateCurrencySign();
id_lang = jsonSummary.cart.id_lang;
$('#id_lang option').removeAttr('selected');
$('#id_lang option[value="'+id_lang+'"]').attr('selected', true);
@@ -780,21 +797,21 @@
qty: qty,
id_customer: id_customer,
id_cart: id_cart,
},
},
success : function(res)
{
displaySummary(res);
var errors = '';
if(res.errors.length)
{
$.each(res.errors, function() {
errors += this+'<br />';
});
$('#products_err').show();
}
else
$('#products_err').hide();
$('#products_err').html(errors);
displaySummary(res);
var errors = '';
if (res.errors.length)
{
$.each(res.errors, function() {
errors += this + '<br />';
});
$('#products_err').show();
}
else
$('#products_err').hide();
$('#products_err').html(errors);
}
});
}
@@ -890,11 +907,6 @@
});
}
function updateCurrencySign()
{
$('.currency_sign').html(currencies[id_currency]);
}
function sendMailToCustomer()
{
$.ajax({
@@ -927,11 +939,33 @@
var addresses_invoice_options = '';
var address_invoice_detail = '';
var address_delivery_detail = '';
var delivery_address_edit_link = '';
var invoice_address_edit_link = '';
$.each(addresses, function() {
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)
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_invoice_options += '<option value="'+this.id_address+'" '+(this.id_address == id_address_invoice ? 'selected="selected"' : '')+'>'+this.alias+'</option>';
@@ -951,6 +985,8 @@
$('#id_address_invoice').html(addresses_invoice_options);
$('#address_delivery_detail').html(address_delivery_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()
@@ -986,7 +1022,7 @@
<label>{l s='Search customers'}</label>
<div class="margin-form">
<input type="text" id="customer" value="" />
<p>{l s='Search a customer by tapping the first letters of his/her name'}</p>
<p>{l s='Search a customer by typing the first letters of his/her name'}</p>
<a class="fancybox button" href="{$link->getAdminLink('AdminCustomers')|escape:'htmlall':'UTF-8'}&addcustomer&liteDisplaying=1&submitFormAjax=1#">
<img src="../img/admin/add.gif" title="new"/><span>{l s='Add new customer'}</span>
</a>
@@ -1001,7 +1037,7 @@
<div class="margin-form">
<input type="hidden" value="" id="id_cart" name="id_cart" />
<input type="text" id="product" value="" />
<p>{l s='Search a product by tapping the first letters of his/her name.'}</p>
<p>{l s='Search a product by typing the first letters of his/her name.'}</p>
</div>
<div id="products_found">
<div id="product_list">
@@ -1161,14 +1197,14 @@
<div id="address_delivery">
<h3>{l s='Delivery'}</h3>
<select id="id_address_delivery" name="id_address_delivery">
</select>
</select>&nbsp;<a class="fancybox" id="edit_delivery_address" href="#"><img src="../img/admin/edit.gif" /></a>
<div id="address_delivery_detail">
</div>
</div>
<div id="address_invoice">
<h3>{l s='Invoice'}</h3>
<select id="id_address_invoice" name="id_address_invoice">
</select>
</select>&nbsp;<a class="fancybox" id="edit_invoice_address" href="#"><img src="../img/admin/edit.gif" /></a>
<div id="address_invoice_detail">
</div>
</div>
@@ -1186,7 +1222,7 @@
</select>
</p>
<p>
<label for="shipping_price">{l s='Shipping price'}</label> <span id="shipping_price" name="shipping_price"></span>&nbsp;<span class="currency_sign"></span>&nbsp;
<label for="shipping_price">{l s='Shipping price'}</label> <span id="shipping_price" name="shipping_price"></span>
</p>
<p>
<label for="free_shipping">{l s='Free shipping'}</label>
@@ -1210,12 +1246,12 @@
<div id="send_email_feedback"></div>
<div id="cart_summary" style="clear:both;float:left;">
<ul>
<li><span class="total_cart">{l s='Total products'}</span><span id="total_products"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total vouchers'}</span><span id="total_vouchers"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total shipping'}</span><span id="total_shipping"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total taxes'}</span><span id="total_taxes"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total without taxes'}</span><span id="total_without_taxes"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total with taxes'}</span><span id="total_with_taxes"></span><span class="currency_sign"></span></li>
<li><span class="total_cart">{l s='Total products'}</span><span id="total_products"></span></li>
<li><span class="total_cart">{l s='Total vouchers'}</span><span id="total_vouchers"></span></li>
<li><span class="total_cart">{l s='Total shipping'}</span><span id="total_shipping"></span></li>
<li><span class="total_cart">{l s='Total taxes'}</span><span id="total_taxes"></span></li>
<li><span class="total_cart">{l s='Total without taxes'}</span><span id="total_without_taxes"></span></li>
<li><span class="total_cart">{l s='Total with taxes'}</span><span id="total_with_taxes"></span></li>
</ul>
</div>
<div class="order_message_right">

View File

@@ -65,7 +65,7 @@
<div class="bloc-command">
<div class="button-command">
{if (count($invoices_collection))}
<a class="button" href="{$link->getAdminLink('AdminPdf')|escape:'htmlall':'UTF-8'}&submitAction=generateInvoicePDF&id_order={$order->id}" target="_blank">
<a class="button" href="{$link->getAdminLink('AdminPdf')|escape:'htmlall':'UTF-8'}&submitAction=generateInvoicePDF&id_order={$order->id}">
<img src="../img/admin/charged_ok.gif" alt="{l s='View invoice'}" /> {l s='View invoice'}
</a>
{else}
@@ -73,7 +73,7 @@
{/if}
|
{if (($currentState && $currentState->delivery) || $order->delivery_number)}
<a class="button" href="{$link->getAdminLink('AdminPdf')|escape:'htmlall':'UTF-8'}&submitAction=generateDeliverySlipPDF&id_order={$order->id}" target="_blank">
<a class="button" href="{$link->getAdminLink('AdminPdf')|escape:'htmlall':'UTF-8'}&submitAction=generateDeliverySlipPDF&id_order={$order->id}">
<img src="../img/admin/delivery.gif" alt="{l s='View delivery slip'}" /> {l s='View delivery slip'}
</a>
{else}
@@ -124,10 +124,10 @@
<!-- History of status -->
<table cellspacing="0" cellpadding="0" class="table history-status" style="width: 100%;">
<colgroup>
<col width="1%">
<col width="">
<col width="20%">
<col width="20%">
<col width="1%"/>
<col width=""/>
<col width="20%"/>
<col width="20%"/>
</colgroup>
{foreach from=$history item=row key=key}
{if ($key == 0)}
@@ -153,7 +153,7 @@
<br />
<fieldset>
<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'}"> {$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'}"> {$gender->name|escape:'htmlall':'UTF-8'} {$customer->firstname} {$customer->lastname}</a></span> ({l s='#'}{$customer->id})<br />
(<a href="mailto:{$customer->email}">{$customer->email}</a>)<br /><br />
{if ($customer->isGuest())}
{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'}">
<table class="table" width="100%" cellspacing="0" cellpadding="0">
<colgroup>
<col width="15%">
<col width="">
<col width="20%">
<col width="10%">
<col width="10%">
<col width="1%">
<col width="15%"/>
<col width=""/>
<col width="20%"/>
<col width="10%"/>
<col width="10%"/>
<col width="1%"/>
</colgroup>
<thead>
<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>
<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?'}')">
<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}
<option value="{$orderMessage['message']|escape:'htmlall':'UTF-8'}">{$orderMessage['name']}</option>
{/foreach}
@@ -787,8 +787,6 @@
</fieldset>
{/if}
</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 />
{/block}
{/block}

View File

@@ -41,7 +41,7 @@
{/if}
{$smarty.block.parent}
{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'}</a>
<a href="{$current}&token={$token}&empty_smarty_cache=1" class="clear button" href="">{l s='Clear Smarty cache & Autoload cache'}</a>
{/if}
{/block}

View File

@@ -103,11 +103,11 @@
<td class="col-left"><label>{l s='Manufacturer:'}</label></td>
<td style="padding-bottom:5px;">
<select name="id_manufacturer" id="id_manufacturer">
<option value="0">-- {l s='Choose (optional)'} --</option>
<option value="0">- {l s='Choose (optional)'} -</option>
{if $product->id_manufacturer}
<option value="{$product->id_manufacturer}" selected="selected">{$product->manufacturer_name}</option>
{/if}
<option disabled="disabled">----------</option>
<option disabled="disabled">-</option>
</select>&nbsp;&nbsp;&nbsp;
<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'}" />

View File

@@ -85,7 +85,7 @@
</td>
<td style="padding-bottom:5px;">
<select name="attribute" id="attribute" style="width: 200px;">
<option value="0">---</option>
<option value="0">-</option>
</select>
<script type="text/javascript">
$(document).ready(function(){
@@ -252,7 +252,7 @@
<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}" />
<label for="id_image_attr_{$image.id_image}" style="float: none;">
<img src="{$smarty.const._THEME_PROD_DIR_}{$image.obj->getExistingImgPath()}-small_default.jpg" alt="{$image.legend|escape:'htmlall':'UTF-8'}" title="{$image.legend|escape:'htmlall':'UTF-8'}" />
<img src="{$smarty.const._THEME_PROD_DIR_}{$image.obj->getExistingImgPath()}-{$imageType}.jpg" alt="{$image.legend|escape:'htmlall':'UTF-8'}" title="{$image.legend|escape:'htmlall':'UTF-8'}" />
</label>
</li>
{/foreach}

View File

@@ -106,7 +106,6 @@
$(document).ready(function()
{
$('#product-tab-content-wait').show();
//product_type = $("input[name=type_product]:checked").val();
if (product_type == product_type_pack)
{

View File

@@ -29,6 +29,19 @@
<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%">
<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>
<td class="col-left"><label class="file_upload_label">{l s='File:'}</label></td>
<td style="padding-bottom:5px;">
@@ -57,6 +70,7 @@
<thead>
<tr class="nodrag nodrop">
<th style="width: 100px;">{l s='Image'}</th>
<th>{l s='Legend'}</th>
<th>{l s='Position'}</th>
{if $shops}
{foreach from=$shops item=shop}
@@ -78,9 +92,10 @@
<tr id="image_id">
<td style="padding: 4px;">
<a href="{$smarty.const._THEME_PROD_DIR_}image_path.jpg" class="fancybox">
<img src="{$smarty.const._THEME_PROD_DIR_}{$iso_lang}-default-small_default.jpg" alt="image_id" title="image_id" />
<img src="{$smarty.const._THEME_PROD_DIR_}{$iso_lang}-default-{$imageType}.jpg" alt="legend" title="legend" />
</a>
</td>
<td>legend</td>
<td id="td_image_id" class="pointer dragHandle center positionImage">
image_position
</td>
@@ -101,7 +116,6 @@
</td>
</tr>
</table>
<script type="text/javascript">
var upbutton = '{l s='Upload an image'}';
var token = '{$token}';
@@ -128,7 +142,7 @@
}
else
assoc = false;
imageLine({$image->id}, "{$image->getExistingImgPath()}", {$image->position}, "{if $image->cover}enabled{else}forbbiden{/if}", assoc);
imageLine({$image->id}, "{$image->getExistingImgPath()}", {$image->position}, "{if $image->cover}enabled{else}forbbiden{/if}", assoc, "{$image->legend[$default_language]|@addcslashes:'\"'}");
{/foreach}
{literal}
$("#imageTable").tableDnD(
@@ -147,20 +161,20 @@
updateImagePosition(image_up);
}
});
var filecheck = 1;
var uploader = new qq.FileUploader(
var params = new Array;
params['id_product'] = {/literal}{$id_product|intval}{literal};
params['id_category'] = {/literal}{$id_category_default|intval}{literal};
params['token'] = "{/literal}{$token}{literal}";
params['tab'] = "AdminProducts";
params['action'] = "addImage";
params['ajax'] = 1;
uploader = new qq.FileUploader(
{
element: document.getElementById("file-uploader"),
action: "ajax-tab.php",
debug: false,
params: {
id_product : {/literal}{$id_product}{literal},
id_category : {/literal}{$id_category_default}{literal},
token : "{/literal}{$token}{literal}",
tab : "AdminProducts",
action : 'addImage',
ajax: 1
},
onComplete: function(id, fileName, responseJSON)
{
var percent = ((filecheck * 100) / nbfile);
@@ -185,7 +199,7 @@
cover = "forbbiden";
if (responseJSON.cover == "1")
cover = "enabled";
imageLine(responseJSON.id, responseJSON.path, responseJSON.position, cover, responseJSON.shops)
imageLine(responseJSON.id, responseJSON.path, responseJSON.position, cover, responseJSON.shops, responseJSON.legend[{/literal}{$default_language|intval}{literal}])
$("#imageTable tr:last").after(responseJSON.html);
$("#countImage").html(parseInt($("#countImage").html()) + 1);
$("#img" + id).remove();
@@ -198,6 +212,12 @@
},
onSubmit: function(id, filename)
{
$('input[id^="legend_"]').each(function()
{
id = $(this).prop("id").replace("legend_", "legend[") + "]";
params[id] = $(this).val();
});
uploader.setParams(params);
$("#imageTable").show();
$("#listImage").append("<li id='img"+id+"'><div 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>");
}
@@ -309,13 +329,14 @@
$("#img" + id).remove();
}
function imageLine(id, path, position, cover, shops)
function imageLine(id, path, position, cover, shops, legend)
{
line = $("#lineType").html();
line = line.replace(/image_id/g, id);
line = line.replace(/[a-z]{2}-default/g, path);
line = line.replace(/[a-z]{0,2}-default/g, path);
line = line.replace(/image_path/g, path);
line = line.replace(/image_position/g, position);
line = line.replace(/legend/g, legend);
line = line.replace(/blank/g, cover);
line = line.replace(/<tbody>/gi, "");
line = line.replace(/<\/tbody>/gi, "");
@@ -330,7 +351,6 @@
$("#imageList").append(line);
}
$('.fancybox').fancybox();
});
{/literal}

View File

@@ -166,7 +166,7 @@
</tr>
<tr class="redirect_product_options" style="display:none">
<td class="col-left">
{include file="controllers/products/multishop/checkbox.tpl" field="active" type="radio" onclick=""}
{include file="controllers/products/multishop/checkbox.tpl" field="redirect_type" type="radio" onclick=""}
<label class="text">{l s='Redirect:'}</label>
</td>
<td style="padding-bottom:5px;">
@@ -184,7 +184,7 @@
</tr>
<tr class="redirect_product_options redirect_product_options_product_choise" style="display:none">
<td class="col-left">
{include file="controllers/products/multishop/checkbox.tpl" field="active" type="radio" onclick=""}
{include file="controllers/products/multishop/checkbox.tpl" field="id_product_redirected" type="radio" onclick=""}
<label class="text">{l s='Related product:'}</label>
</td>
<td style="padding-bottom:5px;">
@@ -375,8 +375,19 @@
<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;">
{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}"
value="{$product->getTags($language.id_lang, true)|htmlentitiesUTF8}" />
value="{$product->getTags($language.id_lang, true)|htmlentitiesUTF8}" class="tagify" />
<span class="hint" name="help_box">{l s='Forbidden characters:'} !&lt;;&gt;;?=+#&quot;&deg;{}_$%<span class="hint-pointer">&nbsp;</span></span>
</div>
{/foreach}

View File

@@ -29,7 +29,7 @@
<input size="30" type="text" id="{$input_name}_{$language.id_lang}"
name="{$input_name}_{$language.id_lang}"
value="{$input_value[$language.id_lang]|htmlentitiesUTF8|default:''}"
onkeyup="if (isArrowKey(event)) return ;updateFriendlyURL();"/>
onkeyup="if (isArrowKey(event)) return ;updateFriendlyURL();" onblur="updateLinkRewrite();"/>
</div>
{/foreach}
</div>

View File

@@ -178,7 +178,7 @@ $(document).ready(function () {
</tr>
<tr {if !$ps_use_ecotax} style="display:none;"{/if}>
<td class="col-left">
{include file="controllers/products/multishop/checkbox.tpl" field="ecot" type="default"}
{include file="controllers/products/multishop/checkbox.tpl" field="ecotax" type="default"}
<label>{l s='Eco-tax (tax incl.):'}</label>
</td>
<td>
@@ -223,7 +223,7 @@ $(document).ready(function () {
<tr>
<td class="col-left"><label><b>{l s='Final retail price:'}</b></label></td>
<td>
<span {if !$country_display_tax_label}style="display:none"{/if} >
<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 {if $ps_tax}style="display:none;"{/if} >
@@ -249,7 +249,7 @@ $(document).ready(function () {
<script type="text/javascript">
var product_prices = new Array();
{foreach from=$combinations item='combination'}
product_prices['{$combination.id_product_attribute}'] = '{$combination.price}';
product_prices['{$combination.id_product_attribute}'] = '{$combination.price|@addcslashes:'\''}';
{/foreach}
</script>
<div id="add_specific_price" style="display: none;">
@@ -375,7 +375,7 @@ $(document).ready(function () {
<div class="margin-form">
<input type="text" name="sp_reduction" value="0.00" size="11" />
<select name="sp_reduction_type">
<option selected="selected">---</option>
<option selected="selected">-</option>
<option value="amount">{l s='Amount'}</option>
<option value="percentage">{l s='Percentage'}</option>
</select>

View File

@@ -75,7 +75,7 @@
<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;">
{foreach from=$associated_suppliers item=supplier}
<h3 style="margin-bottom:0;"><a href="#">{$supplier->name}</a></h3>
<h3 style="margin-bottom:0;"><a href="#">{if isset($supplier->name)}{$supplier->name}{/if}</a></h3>
<div style="display:block;">
<table cellpadding="10" cellspacing="0" class="table">

View File

@@ -28,7 +28,7 @@
<div class="lang_{$language.id_lang}" style="{if !$language.is_default}display:none;{/if}float: left;">
<textarea cols="100" rows="10" id="{$input_name}_{$language.id_lang}"
name="{$input_name}_{$language.id_lang}"
class="autoload_rte" >{if isset($input_value[$language.id_lang])}{$input_value[$language.id_lang]|htmlentitiesUTF8}{/if}</textarea>
class="autoload_rte" >{if isset($input_value[$language.id_lang])}{$input_value[$language.id_lang]|htmlentitiesUTF8|replace:'\r\n':''|replace:'\&quot;':'&quot;'}{/if}</textarea>
<span class="counter" max="{if isset($max)}{$max}{else}none{/if}"></span>
<span class="hint">{$hint|default:''}<span class="hint-pointer">&nbsp;</span></span>
</div>

View File

@@ -58,6 +58,7 @@
$('#file_missing').hide();
$('#virtual_product_name').attr('value', fileName);
$("#upload-confirmation .error").remove();
$('#upload-confirmation div').find('span').remove();
$('#upload-confirmation div').prepend('<span>{l s='The file'}&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>');
$("#upload-confirmation").show();

View File

@@ -45,7 +45,7 @@
{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='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 "%dindex.php?prestashop" in the forum and get statistics by entering "%prestashop" in the field `request_uri`. '}
{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='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>
<br />

View File

@@ -112,7 +112,7 @@
<label>{l s='Filter by product:'}</label>
<div class="margin-left">
<select id="selectProduct" name="selectProduct" style="width: 200px;" onfocus="fillProducts();" onchange="updateConversionRate(this.value);">
<option value="0" selected="selected">-- {l s='All'} --</option>
<option value="0" selected="selected">- {l s='All'} -</option>
</select>
</div>
<br class="clear" />

View File

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

View File

@@ -30,9 +30,9 @@
function ajaxStoreStates(id_state_selected)
{
$.ajax({
url: "ajax.php",
url: "index.php",
cache: false,
data: "ajaxStates=1&id_country="+$('#PS_SHOP_COUNTRY_ID').val() + "&id_state=" + $('#PS_SHOP_STATE_ID').val(),
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(),
success: function(html)
{
if (html == 'false')

View File

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

View File

@@ -60,9 +60,9 @@
$("#states-label").hide();
} else {
$.ajax({
url: "ajax.php",
url: "index.php",
cache: false,
data: "ajaxStates=1&id_country="+id_country+"&id_state="+id_state+"&empty_value={l s='All'}",
data: "ajax=1&tab=AdminStates&token={getAdminToken tab='AdminStates'}&action=states&id_country="+id_country+"&id_state="+id_state+"&empty_value={l s='All'}",
success: function(html){
if (html == "false")
{
@@ -88,10 +88,10 @@
{
$.ajax({
type: 'POST',
url: 'ajax.php',
url: 'index.php',
async: true,
dataType: 'json',
data: 'ajaxStates=1&ajaxUpdateTaxRule=1&id_tax_rule='+id_tax_rule,
data: 'ajax=1&tab=AdminTaxRulesGroup&token={getAdminToken tab='AdminTaxRulesGroup'}&ajaxStates=1&action=updateTaxRule&id_tax_rule='+id_tax_rule,
success: function(data){
$('#tax_rule_form').show();
$('#id_tax_rule').val(data.id);

View File

@@ -33,22 +33,22 @@
{/if}
<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{$table}" name="submitFilter{$table}" value="0"/>
<input type="hidden" id="submitFilter{$list_id}" name="submitFilter{$list_id}" value="0"/>
<table class="table_grid">
<tr>
<td style="vertical-align: bottom;">
<span style="float: left;">
{if $page > 1}
<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{$table}').value={$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-prev.gif" onclick="getE('submitFilter{$list_id}').value={$page - 1}"/>
{/if}
{l s='Page'} <b>{$page}</b> / {$total_pages}
{if $page < $total_pages}
<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{$table}').value={$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-next2.gif" onclick="getE('submitFilter{$list_id}').value={$total_pages}"/>
{/if}
| {l s='Display'}
<select name="pagination" onchange="submit()">
<select name="{$list_id}_pagination" onchange="submit()">
{* Choose number of results per page *}
{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>
@@ -57,7 +57,7 @@
/ {$list_total} {l s='result(s)'}
</span>
<span style="float: right;">
<input type="submit" name="submitReset{$table}" value="{l s='Reset'}" class="button" />
<input type="submit" name="submitReset{$list_id}" value="{l s='Reset'}" class="button" />
</span>
<span class="clear"></span>
</td>
@@ -66,7 +66,7 @@
<td>
<table
{if $table_id} id={$table_id}{/if}
class="table {if $table_dnd}tableDnD{/if} {$table}"
class="table {if $table_dnd}tableDnD{/if} {$list_id}"
cellpadding="0" cellspacing="0"
style="width: 100%; margin-bottom:10px;"
>
@@ -84,7 +84,7 @@
<tr class="nodrag nodrop">
<th class="center">
{if $has_bulk_actions}
<input type="checkbox" name="checkme" class="noborder" onclick="checkDelBoxes(this.form, '{$table}Box[]', this.checked)" />
<input type="checkbox" name="checkme" class="noborder" onclick="checkDelBoxes(this.form, '{$list_id}Box[]', this.checked)" />
{/if}
</th>
{foreach $fields_display AS $key => $params}

View File

@@ -34,54 +34,51 @@
<title>{$meta_title} - PrestaShop&trade;</title>
{if $display_header}
<script type="text/javascript">
var help_class_name = '{$controller_name}';
var iso_user = '{$iso_user}';
var country_iso_code = '{$country_iso_code}';
var _PS_VERSION_ = '{$smarty.const._PS_VERSION_}';
var helpboxes = {$help_box};
var roundMode = {$round_mode};
{if isset($shop_context)}
{if $shop_context == Shop::CONTEXT_ALL}
var youEditFieldFor = "{l s='A modification of this field will be applied for all shops' slashes=1 }";
{elseif $shop_context == Shop::CONTEXT_GROUP}
var youEditFieldFor = "{l s='A modification of this field will be applied for all shops of group ' slashes=1 }<b>{$shop_name}</b>";
{else}
var youEditFieldFor = "{l s='A modification of this field will be applied for the shop ' slashes=1 }<b>{$shop_name}</b>";
{/if}
{else}
var youEditFieldFor = '';
{/if}
{* Notifications vars *}
var autorefresh_notifications = '{$autorefresh_notifications}';
var new_order_msg = '{l s='A new order has been placed on your shop.' slashes=1}';
var order_number_msg = '{l s='Order number: ' slashes=1}';
var total_msg = '{l s='Total: ' slashes=1}';
var from_msg = '{l s='From: ' slashes=1}';
var see_order_msg = '{l s='View this order' slashes=1}';
var new_customer_msg = '{l s='A new customer registered on your shop.' slashes=1}';
var customer_name_msg = '{l s='Customer name: ' slashes=1}';
var see_customer_msg = '{l s='View this customer' slashes=1}';
var new_msg = '{l s='A new message posted on your shop.' slashes=1}';
var excerpt_msg = '{l s='Excerpt: ' slashes=1}';
var see_msg = '{l s='Read this message' slashes=1}';
var token_admin_orders = '{getAdminToken tab='AdminOrders' slashes=1}';
var token_admin_customers = '{getAdminToken tab='AdminCustomers' slashes=1}';
var token_admin_customer_threads = '{getAdminToken tab='AdminCustomerThreads' slashes=1}';
var currentIndex = '{$currentIndex}';
var choose_language_translate = "{l s='Choose language' slashes=1 }";
var help_class_name = '{$controller_name|@addcslashes:'\''}';
var iso_user = '{$iso_user|@addcslashes:'\''}';
var country_iso_code = '{$country_iso_code|@addcslashes:'\''}';
var _PS_VERSION_ = '{$smarty.const._PS_VERSION_|@addcslashes:'\''}';
var helpboxes = {$help_box|intval};
var roundMode = {$round_mode|intval};
{if isset($shop_context)}
{if $shop_context == Shop::CONTEXT_ALL}
var youEditFieldFor = '{l s='A modification of this field will be applied for all shops' js=1}';
{elseif $shop_context == Shop::CONTEXT_GROUP}
var youEditFieldFor = '{l s='A modification of this field will be applied for all shops of group' js=1} <b>{$shop_name|@addcslashes:'\''}</b>';
{else}
var youEditFieldFor = '{l s='A modification of this field will be applied for the shop' js=1} <b>{$shop_name|@addcslashes:'\''}</b>';
{/if}
{else}
var youEditFieldFor = '';
{/if}
var autorefresh_notifications = '{$autorefresh_notifications|@addcslashes:'\''}';
var new_order_msg = '{l s='A new order has been placed on your shop.' js=1}';
var order_number_msg = '{l s='Order number: ' js=1}';
var total_msg = '{l s='Total: ' js=1}';
var from_msg = '{l s='From: ' js=1}';
var see_order_msg = '{l s='View this order' js=1}';
var new_customer_msg = '{l s='A new customer registered on your shop.' js=1}';
var customer_name_msg = '{l s='Customer name: ' js=1}';
var see_customer_msg = '{l s='View this customer' js=1}';
var new_msg = '{l s='A new message posted on your shop.' js=1}';
var excerpt_msg = '{l s='Excerpt: ' js=1}';
var see_msg = '{l s='Read this message' js=1}';
var token_admin_orders = '{getAdminToken tab='AdminOrders'}';
var token_admin_customers = '{getAdminToken tab='AdminCustomers'}';
var token_admin_customer_threads = '{getAdminToken tab='AdminCustomerThreads'}';
var currentIndex = '{$currentIndex|@addcslashes:'\''}';
var choose_language_translate = '{l s='Choose language' js=1}';
</script>
{/if}
{if isset($css_files)}
{foreach from=$css_files key=css_uri item=media}
<link href="{$css_uri}" rel="stylesheet" type="text/css" media="{$media}" />
{/foreach}
{foreach from=$css_files key=css_uri item=media}
<link href="{$css_uri}" rel="stylesheet" type="text/css" media="{$media}" />
{/foreach}
{/if}
{if isset($js_files)}
{foreach from=$js_files item=js_uri}
<script type="text/javascript" src="{$js_uri}"></script>
{/foreach}
{foreach from=$js_files item=js_uri}
<script type="text/javascript" src="{$js_uri}"></script>
{/foreach}
{/if}
<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" />

View File

@@ -30,7 +30,7 @@
{if isset($fields.title)}<h2>{$fields.title}</h2>{/if}
{block name="defaultForm"}
<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}>
<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}>
{if $form_id}
<input type="hidden" name="{$identifier}" id="{$identifier}" value="{$form_id}" />
{/if}
@@ -68,7 +68,7 @@
<script type="text/javascript">
$().ready(function () {
var input_id = '{/literal}{if isset($input.id)}{$input.id}_{$language.id_lang}{else}{$input.name}_{$language.id_lang}{/if}{literal}';
$('#'+input_id).tagify({addTagPrompt: '{/literal}{l s='Add tag' js=1}{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'));
});
@@ -97,8 +97,7 @@
<script type="text/javascript">
$().ready(function () {
var input_id = '{/literal}{if isset($input.id)}{$input.id}{else}{$input.name}{/if}{literal}';
$('#'+input_id).tagify();
$('#'+input_id).tagify({addTagPrompt: '{/literal}{l s='Add tag'}{literal}'});
$('#'+input_id).tagify({delimiters: [13,44], addTagPrompt: '{/literal}{l s='Add tag'}{literal}'});
$({/literal}'#{$table}{literal}_form').submit( function() {
$(this).find('#'+input_id).val($('#'+input_id).tagify('serialize'));
});
@@ -168,7 +167,7 @@
{/if}
>{$option->$input.options.name}</option>
{elseif $option == "-"}
<option value="">--</option>
<option value="">-</option>
{else}
<option value="{$option[$input.options.id]}"
{if isset($input.multiple)}
@@ -192,7 +191,7 @@
{/if}
{elseif $input.type == 'radio'}
{foreach $input.values as $value}
<input type="radio" name="{$input.name}"id="{$value.id}" value="{$value.value|escape:'htmlall':'UTF-8'}"
<input type="radio" name="{$input.name}" id="{$value.id}" value="{$value.value|escape:'htmlall':'UTF-8'}"
{if $fields_value[$input.name] == $value.value}checked="checked"{/if}
{if isset($input.disabled) && $input.disabled}disabled="disabled"{/if} />
<label {if isset($input.class)}class="{$input.class}"{/if} for="{$value.id}">
@@ -237,7 +236,7 @@
{if isset($fields_value[$input.name].image) && $fields_value[$input.name].image}
<div id="image">
{$fields_value[$input.name].image}
<p align="center">{l s='File size'} {$fields_value[$input.name].size}kb</p>
<p align="center">{l s='File size'} {$fields_value[$input.name].size}{l s='kb'}</p>
<a href="{$current}&{$identifier}={$form_id}&token={$token}&deleteImage=1">
<img src="../img/admin/delete.gif" alt="{l s='Delete'}" /> {l s='Delete'}
</a>
@@ -432,7 +431,8 @@
};
{/foreach}
// we need allowEmployeeFormLang var in ajax request
allowEmployeeFormLang = {$allowEmployeeFormLang};
allowEmployeeFormLang = {$allowEmployeeFormLang|intval};
employee_token = '{getAdminToken tab='AdminEmployees'}';
displayFlags(languages, id_language, allowEmployeeFormLang);
$(document).ready(function() {
@@ -454,6 +454,7 @@
});
});
state_token = '{getAdminToken tab='AdminStates'}';
{block name="script"}{/block}
</script>
{/if}

View File

@@ -24,11 +24,11 @@
*}
{if count($categories) && isset($categories)}
<script type="text/javascript">
var inputName = '{$categories.input_name}';
var inputName = '{$categories.input_name|@addcslashes:'\''}';
var use_radio = {if $categories.use_radio}1{else}0{/if};
var selectedCat = '{implode value=$categories.selected_cat}';
var selectedLabel = '{$categories.trads.selected}';
var home = '{$categories.trads.Root.name}';
var selectedCat = {$categories.selected_cat|@implode|intval};
var selectedLabel = '{$categories.trads.selected|@addcslashes:'\''}';
var home = '{$categories.trads.Root.name|@addcslashes:'\''}';
var use_radio = {if $categories.use_radio}1{else}0{/if};
var use_context = {if isset($categories.use_context)}1{else}0{/if};
$(document).ready(function(){

View File

@@ -49,6 +49,7 @@
{/if}
class="{if !$no_link}pointer{/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.position) && !$no_link && !isset($params.remove_onclick))}
onclick="document.location = '{$current_index}&{$identifier}={$tr.$identifier}{if $view}&view{else}&update{/if}{$table}&token={$token}'">

View File

@@ -103,7 +103,7 @@
<select name="{$list_id}_pagination" onchange="submit()">
{* Choose number of results per page *}
{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_pagination != NULL} selected="selected"{elseif $selected_pagination == NULL && $value == $pagination[1]} selected="selected2"{/if}>{$value|intval}</option>
{/foreach}
</select>
/ {$list_total} {l s='result(s)'}
@@ -187,9 +187,9 @@
{else}
{if $params.type == 'bool'}
<select onchange="$('#submitFilterButton{$list_id}').focus();$('#submitFilterButton{$list_id}').click();" name="{$list_id}Filter_{$key}">
<option value="">--</option>
<option value="1" {if $params.value == 1} selected="selected" {/if}>{l s='Yes'}</option>
<option value="0" {if $params.value == 0 && $params.value != ''} selected="selected" {/if}>{l s='No'}</option>
<option value="">-</option>
<option value="1"{if $params.value == 1} selected="selected"{/if}>{l s='Yes'}</option>
<option value="0"{if $params.value == 0 && $params.value != ''} selected="selected"{/if}>{l s='No'}</option>
</select>
{elseif $params.type == 'date' || $params.type == 'datetime'}
{l s='From'} <input type="text" class="filter datepicker" id="{$params.id_date}_0" name="{$params.name_date}[0]" value="{if isset($params.value.0)}{$params.value.0}{/if}"{if isset($params.width)} style="width:70px"{/if}/><br />
@@ -197,10 +197,10 @@
{elseif $params.type == 'select'}
{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}>
<option value="" {if $params.value == ''} selected="selected" {/if}>--</option>
<option value=""{if $params.value == ''} selected="selected"{/if}>-</option>
{if isset($params.list) && is_array($params.list)}
{foreach $params.list AS $option_value => $option_display}
<option value="{$option_value}" {if $option_display == $params.value || $option_value == $params.value} selected="selected"{/if}>{$option_display}</option>
<option value="{$option_value}" {if $params.value != '' && ($option_display == $params.value || $option_value == $params.value)} selected="selected"{/if}>{$option_display}</option>
{/foreach}
{/if}
</select>

View File

@@ -34,7 +34,7 @@
{block name="defaultOptions"}
<form action="{$current}&token={$token}"
id="{$table}_form"
id="{if $table == null}configuration_form{else}{$table}_form{/if}"
{if isset($categoryData['name'])} name={$categoryData['name']}{/if}
{if isset($categoryData['id'])} id={$categoryData['id']} {/if}
method="post"

View File

@@ -23,7 +23,7 @@
* International Registered Trademark & Property of PrestaShop SA
*}
<div class="toolbar-placeholder">
<div id="{$table}_toolbar" class="toolbar-placeholder">
<div class="toolbarBox {if $toolbar_scroll}toolbarHead{/if}">
{block name=toolbarBox}
<ul class="cc_button">
@@ -36,7 +36,7 @@
{if $k == 'modules-list'}
<div id="modules_list_container" style="display:none">
<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 id="modules_list_loader"><img src="../img/loader.gif" alt="" border="0" /></div>
<div id="modules_list_container_tab" style="display:none;"></div>
@@ -52,7 +52,7 @@
var modules_list_loaded = false;
$(function() {
//get reference on save link
btn_save = $('span[class~="process-icon-save"]').parent();
btn_save = $('#{$table}_toolbar span[class~="process-icon-save"]').parent();
//get reference on form submit button
btn_submit = $('#{$table}_form_submit_btn');
@@ -87,12 +87,15 @@
btn_submit.hide();
//bind enter key press to validate form
$('#{$table}_form').keypress(function (e) {
if (e.which == 13 && e.target.localName != 'textarea')
if (e.which == 13 && e.target.localName != 'textarea' && !e.target.hasClass('tagify'))
$('#desc-{$table}-save').click();
});
//submit the form
{block name=formSubmit}
btn_save.click(function() {
// Vars
var btn_submit = $('#{$table}_form_submit_btn');
// Avoid double click
if (submited)
return false;

View File

@@ -264,13 +264,17 @@ class AddressCore extends ObjectModel
if(!isset($id_address) || empty($id_address))
return false;
if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
SELECT c.`active`
FROM `'._DB_PREFIX_.'address` a
LEFT JOIN `'._DB_PREFIX_.'country` c ON c.`id_country` = a.`id_country`
WHERE a.`id_address` = '.(int)$id_address))
return false;
return ($result['active']);
$cache_id = 'Address::isCountryActiveById_'.(int)$id_address;
if (!Cache::isStored($cache_id))
{
$result = (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getvalue('
SELECT c.`active`
FROM `'._DB_PREFIX_.'address` a
LEFT JOIN `'._DB_PREFIX_.'country` c ON c.`id_country` = a.`id_country`
WHERE a.`id_address` = '.(int)$id_address);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
}
/**
@@ -324,12 +328,17 @@ class AddressCore extends ObjectModel
{
if (!$id_customer)
return false;
return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT `id_address`
FROM `'._DB_PREFIX_.'address`
WHERE `id_customer` = '.(int)$id_customer.' AND `deleted` = 0'.($active ? ' AND `active` = 1' : '')
);
$cache_id = 'Address::getFirstCustomerAddressId_'.(int)$id_customer.'-'.(bool)$active;
if (!Cache::isStored($cache_id))
{
$result = (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT `id_address`
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);
}
/**
@@ -379,5 +388,4 @@ class AddressCore extends ObjectModel
$query->where('id_warehouse = 0');
return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query);
}
}
}

View File

@@ -99,6 +99,7 @@ class AddressFormatCore extends ObjectModel
'outstanding_allow_amount',
'call_prefix',
'definition',
'debug_list'
);
public static $forbiddenClassList = array(

View File

@@ -1303,7 +1303,7 @@ abstract class AdminTabCore
}
$asso = Shop::getAssoTable($this->table);
if ($asso !== false && $assos['type'] == 'shop')
if ($asso !== false && $asso['type'] == 'shop')
{
$filterKey = $asso['type'];
$idenfierShop = Shop::getContextListShopID();
@@ -1500,7 +1500,7 @@ abstract class AdminTabCore
case 'bool':
echo '
<select name="'.$this->table.'Filter_'.$key.'">
<option value="">--</option>
<option value="">-</option>
<option value="1"'.($value == 1 ? ' selected="selected"' : '').'>'.$this->l('Yes').'</option>
<option value="0"'.(($value == 0 && $value != '') ? ' selected="selected"' : '').'>'.$this->l('No').'</option>
</select>';
@@ -1524,7 +1524,7 @@ abstract class AdminTabCore
if (isset($params['filter_key']))
{
echo '<select onchange="$(\'#submitFilter'.$this->table.'\').focus();$(\'#submitFilter'.$this->table.'\').click();" name="'.$this->table.'Filter_'.$params['filter_key'].'" '.(isset($params['width']) ? 'style="width: '.$params['width'].'px"' : '').'>
<option value=""'.(($value == 0 && $value != '') ? ' selected="selected"' : '').'>--</option>';
<option value=""'.(($value == 0 && $value != '') ? ' selected="selected"' : '').'>-</option>';
if (isset($params['select']) && is_array($params['select']))
foreach ($params['select'] as $optionValue => $optionDisplay)
{

View File

@@ -124,5 +124,21 @@ class AliasCore extends ObjectModel
{
return Configuration::get('PS_ALIAS_FEATURE_ACTIVE');
}
/**
* This method is allow to know if a alias exist for AdminImportController
* @since 1.5.6.0
* @return bool
*/
public static function aliasExists($id_alias)
{
$row = Db::getInstance()->getRow('
SELECT `id_alias`
FROM '._DB_PREFIX_.'alias a
WHERE a.`id_alias` = '.(int)$id_alias
);
return isset($row['id_alias']);
}
}

View File

@@ -139,7 +139,7 @@ class AttributeCore extends ObjectModel
ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = '.(int)$id_lang.')
'.Shop::addSqlAssociation('attribute_group', 'ag').'
'.Shop::addSqlAssociation('attribute', 'a').'
'.($not_null ? 'WHERE a.`id_attribute` IS NOT NULL AND al.`name` IS NOT NULL' : '').'
'.($not_null ? 'WHERE a.`id_attribute` IS NOT NULL AND al.`name` IS NOT NULL AND agl.`id_attribute_group` IS NOT NULL' : '').'
ORDER BY agl.`name` ASC, a.`position` ASC
');
}
@@ -343,4 +343,4 @@ class AttributeCore extends ObjectModel
return (is_numeric($position)) ? $position : -1;
}
}
}

View File

@@ -49,11 +49,15 @@ class Autoload
*/
public $index = array();
public $_include_override_path = true;
protected function __construct()
{
$this->root_dir = dirname(dirname(__FILE__)).'/';
if (file_exists($this->root_dir.Autoload::INDEX_FILE))
$this->index = include($this->root_dir.Autoload::INDEX_FILE);
else
$this->generateIndex();
}
/**
@@ -80,9 +84,8 @@ class Autoload
if (strpos(strtolower($classname), 'smarty_') === 0)
return;
// 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]))
// regenerate the class index if the requested file doesn't exists
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'])))
$this->generateIndex();
@@ -119,36 +122,32 @@ class Autoload
{
$classes = array_merge(
$this->getClassesFromDir('classes/'),
$this->getClassesFromDir('override/classes/'),
$this->getClassesFromDir('controllers/'),
$this->getClassesFromDir('override/controllers/')
$this->getClassesFromDir('controllers/')
);
if ($this->_include_override_path)
$classes = array_merge(
$classes,
$this->getClassesFromDir('override/classes/'),
$this->getClassesFromDir('override/controllers/')
);
ksort($classes);
$content = '<?php return '.var_export($classes, true).'; ?>';
// Write classes index on disc to cache it
$filename = $this->root_dir.Autoload::INDEX_FILE;
if ((file_exists($filename) && !is_writable($filename)) || !is_writable(dirname($filename)))
$filename_tmp = tempnam(dirname($filename), basename($filename.'.'));
if ($filename_tmp !== false && file_put_contents($filename_tmp, $content, LOCK_EX) !== false)
{
header('HTTP/1.1 503 temporarily overloaded');
// Cannot use PrestaShopException in this context
die('/cache/class_index.php is not writable, please give write permissions (chmod 666) on this file.');
if (!rename($filename_tmp, $filename))
unlink($filename_tmp);
else
@chmod($filename, 0666);
}
// $filename_tmp couldn't be written. $filename should be there anyway (even if outdated), no need to die.
else
{
$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);
}
}
error_log('Cannot write temporary file '.$filename_tmp);
$this->index = $classes;
}
@@ -192,4 +191,3 @@ class Autoload
return isset($this->index[$classname]) ? $this->index[$classname] : null;
}
}

View File

@@ -34,6 +34,7 @@ class CMSCore extends ObjectModel
public $link_rewrite;
public $id_cms_category;
public $position;
public $indexation;
public $active;
/**
@@ -46,6 +47,7 @@ class CMSCore extends ObjectModel
'fields' => array(
'id_cms_category' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
'position' => array('type' => self::TYPE_INT),
'indexation' => array('type' => self::TYPE_BOOL),
'active' => array('type' => self::TYPE_BOOL),
// Lang fields
@@ -188,7 +190,7 @@ class CMSCore extends ObjectModel
return (Db::getInstance()->getValue($sql));
}
public static function getCMSPages($id_lang = null, $id_cms_category = null, $active = true)
public static function getCMSPages($id_lang = null, $id_cms_category = null, $active = true, $id_shop = null)
{
$sql = new DbQuery();
$sql->select('*');
@@ -196,6 +198,9 @@ class CMSCore extends ObjectModel
if ($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)
$sql->where('c.active = 1');

View File

@@ -277,17 +277,20 @@ class CarrierCore extends ObjectModel
public function getMaxDeliveryPriceByWeight($id_zone)
{
$sql = 'SELECT d.`price`
FROM `'._DB_PREFIX_.'delivery` d
INNER JOIN `'._DB_PREFIX_.'range_weight` w ON d.`id_range_weight` = w.`id_range_weight`
WHERE d.`id_zone` = '.(int)$id_zone.'
AND d.`id_carrier` = '.(int)$this->id.'
'.Carrier::sqlDeliveryRangeShop('range_weight').'
ORDER BY w.`delimiter2` DESC LIMIT 1';
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
if (!isset($result[0]['price']))
return false;
return $result[0]['price'];
$cache_id = 'Carrier::getMaxDeliveryPriceByWeight_'.(int)$this->id.'-'.(int)$id_zone;
if (!Cache::isStored($cache_id))
{
$sql = 'SELECT d.`price`
FROM `'._DB_PREFIX_.'delivery` d
INNER JOIN `'._DB_PREFIX_.'range_weight` w ON d.`id_range_weight` = w.`id_range_weight`
WHERE d.`id_zone` = '.(int)$id_zone.'
AND d.`id_carrier` = '.(int)$this->id.'
'.Carrier::sqlDeliveryRangeShop('range_weight').'
ORDER BY w.`delimiter2` DESC';
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
}
/**
@@ -357,17 +360,20 @@ class CarrierCore extends ObjectModel
public function getMaxDeliveryPriceByPrice($id_zone)
{
$sql = 'SELECT d.`price`
FROM `'._DB_PREFIX_.'delivery` d
INNER JOIN `'._DB_PREFIX_.'range_price` r ON d.`id_range_price` = r.`id_range_price`
WHERE d.`id_zone` = '.(int)$id_zone.'
AND d.`id_carrier` = '.(int)$this->id.'
'.Carrier::sqlDeliveryRangeShop('range_price').'
ORDER BY r.`delimiter2` DESC LIMIT 1';
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
if (!isset($result[0]['price']))
return false;
return $result[0]['price'];
$cache_id = 'Carrier::getMaxDeliveryPriceByPrice_'.(int)$this->id.'-'.(int)$id_zone;
if (!Cache::isStored($cache_id))
{
$sql = 'SELECT d.`price`
FROM `'._DB_PREFIX_.'delivery` d
INNER JOIN `'._DB_PREFIX_.'range_price` r ON d.`id_range_price` = r.`id_range_price`
WHERE d.`id_zone` = '.(int)$id_zone.'
AND d.`id_carrier` = '.(int)$this->id.'
'.Carrier::sqlDeliveryRangeShop('range_price').'
ORDER BY r.`delimiter2` DESC';
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
}
/**
@@ -449,7 +455,13 @@ class CarrierCore extends ObjectModel
GROUP BY c.`id_carrier`
ORDER BY c.`position` ASC';
$carriers = Db::getInstance()->executeS($sql);
$cache_id = 'Carrier::getCarriers_'.md5($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))
{
@@ -775,11 +787,11 @@ class CarrierCore extends ObjectModel
if ($delete)
Db::getInstance()->execute('
DELETE FROM `'._DB_PREFIX_.'delivery`
WHERE id_shop = '.(int)$values['id_shop'].'
AND id_shop_group='.(int)$values['id_shop_group'].'
WHERE '.(is_null($values['id_shop']) ? 'ISNULL(`id_shop`) ' : '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_carrier='.(int)$values['id_carrier'].
($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'] : '').'
($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_weight'] !== null ? ' AND id_range_weight='.(int)$values['id_range_weight'] : ' AND (ISNULL(`id_range_weight`) OR `id_range_weight` = 0)').'
AND id_zone='.(int)$values['id_zone']
);
@@ -1199,7 +1211,14 @@ class CarrierCore extends ObjectModel
$query->where('pc.id_product = '.(int)$product->id);
$query->where('pc.id_shop = '.(int)$id_shop);
$carriers_for_product = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
$cache_id = 'Carrier::getAvailableCarrierList_'.(int)$product->id.'-'.(int)$id_shop;
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();
if (!empty($carriers_for_product))
{

View File

@@ -325,7 +325,7 @@ class CartCore extends ObjectModel
if (!CartRule::isFeatureActive() || !$this->id)
return array();
$cache_key = 'Cart::getCartRules'.$this->id.'-'.$filter;
$cache_key = 'Cart::getCartRules_'.$this->id.'-'.$filter;
if (!Cache::isStored($cache_key))
{
$result = Db::getInstance()->executeS('
@@ -340,6 +340,7 @@ class CartCore extends ObjectModel
'.($filter == CartRule::FILTER_ACTION_SHIPPING ? 'AND free_shipping = 1' : '').'
'.($filter == CartRule::FILTER_ACTION_GIFT ? 'AND gift_product != 0' : '').'
'.($filter == CartRule::FILTER_ACTION_REDUCTION ? 'AND (reduction_percent != 0 OR reduction_amount != 0)' : '')
.' ORDER by cr.priority ASC'
);
Cache::store($cache_key, $result);
}
@@ -367,12 +368,16 @@ class CartCore extends ObjectModel
{
if (!CartRule::isFeatureActive())
return 0;
return Db::getInstance()->getValue('
SELECT COUNT(*)
FROM `'._DB_PREFIX_.'cart_cart_rule`
WHERE `id_cart_rule` = '.(int)$id_cart_rule.' AND `id_cart` = '.(int)$this->id
);
$cache_id = 'Cart::getDiscountsCustomer_'.(int)$this->id.'-'.(int)$id_cart_rule;
if (!Cache::isStored($cache_id))
{
$result = (int)Db::getInstance()->getValue('
SELECT COUNT(*)
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()
@@ -429,7 +434,7 @@ class CartCore extends ObjectModel
product_shop.`available_for_order`, product_shop.`price`, product_shop.`active`, product_shop.`unity`, product_shop.`unit_price_ratio`,
stock.`quantity` AS quantity_available, p.`width`, p.`height`, p.`depth`, stock.`out_of_stock`, p.`weight`,
p.`date_add`, p.`date_upd`, IFNULL(stock.quantity, 0) as quantity, pl.`link_rewrite`, cl.`link_rewrite` AS category,
CONCAT(cp.`id_product`, IFNULL(cp.`id_product_attribute`, 0), IFNULL(cp.`id_address_delivery`, 0)) AS unique_id, cp.id_address_delivery,
CONCAT(LPAD(cp.`id_product`, 10, 0), LPAD(IFNULL(cp.`id_product_attribute`, 0), 10, 0), IFNULL(cp.`id_address_delivery`, 0)) AS unique_id, cp.id_address_delivery,
product_shop.`wholesale_price`, product_shop.advanced_stock_management, ps.product_supplier_reference supplier_reference');
// Build FROM
@@ -631,14 +636,19 @@ class CartCore extends ObjectModel
if (!isset($row['pai_id_image']) || $row['pai_id_image'] == 0)
{
$row2 = Db::getInstance()->getRow('
SELECT image_shop.`id_image` id_image, il.`legend`
FROM `'._DB_PREFIX_.'image` i
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_id = 'Cart::getProducts_'.'-pai_id_image-'.(int)$row['id_product'].'-'.(int)$this->id_lang.'-'.(int)$row['id_shop'];
if (!Cache::isStored($cache_id))
{
$row2 = Db::getInstance()->getRow('
SELECT image_shop.`id_image` id_image, il.`legend`
FROM `'._DB_PREFIX_.'image` i
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)
$row2 = array('id_image' => false, 'legend' => false);
else
@@ -726,7 +736,7 @@ class CartCore extends ObjectModel
*
* @result integer Products quantity
*/
public function nbProducts()
public function nbProducts()
{
if (!$this->id)
return 0;
@@ -762,10 +772,11 @@ class CartCore extends ObjectModel
{
// You can't add a cart rule that does not exist
$cartRule = new CartRule($id_cart_rule, Context::getContext()->language->id);
if (!Validate::isLoadedObject($cartRule))
return false;
if (Db::getInstance()->getValue('SELECT id_cart_rule FROM '._DB_PREFIX_.'cart_cart_rule WHERE id_cart = '.(int)$this->id))
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))
return false;
// Add the cart rule to the cart
@@ -1076,9 +1087,9 @@ class CartCore extends ObjectModel
);
$id_customization = Db::getInstance()->Insert_ID();
}
$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))
return false;
@@ -1092,7 +1103,13 @@ class CartCore extends ObjectModel
*/
public function orderExists()
{
return (bool)Db::getInstance()->getValue('SELECT count(*) FROM `'._DB_PREFIX_.'orders` WHERE `id_cart` = '.(int)$this->id);
$cache_id = 'Cart::orderExists_'.(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);
}
/**
@@ -1259,7 +1276,7 @@ class CartCore extends ObjectModel
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);
if (!Validate::isLoadedObject($cart))
@@ -1675,6 +1692,7 @@ class CartCore extends ObjectModel
$warehouse_count_by_address[$product['id_address_delivery']][$warehouse['id_warehouse']]++;
}
}
unset($product);
arsort($warehouse_count_by_address);
@@ -1692,9 +1710,12 @@ class CartCore extends ObjectModel
$id_warehouse = 0;
foreach ($warehouse_count_by_address[$product['id_address_delivery']] as $id_war => $val)
{
$product['carrier_list'] = array_merge($product['carrier_list'], Carrier::getAvailableCarrierList(new Product($product['id_product']), $id_war, $product['id_address_delivery'], null, $this));
if (in_array((int)$id_war, $product['warehouse_list']) && $id_warehouse == 0)
$id_warehouse = (int)$id_war;
if (in_array((int)$id_war, $product['warehouse_list']))
{
$product['carrier_list'] = array_merge($product['carrier_list'], Carrier::getAvailableCarrierList(new Product($product['id_product']), $id_war, $product['id_address_delivery'], null, $this));
if (!$id_warehouse)
$id_warehouse = (int)$id_war;
}
}
if (!isset($grouped_by_warehouse[$product['id_address_delivery']]['in_stock'][$id_warehouse]))
@@ -1713,6 +1734,7 @@ class CartCore extends ObjectModel
$grouped_by_warehouse[$product['id_address_delivery']][$key][$id_warehouse][] = $product;
}
unset($product);
// Step 3 : grouped product from grouped_by_warehouse by available carriers
$grouped_by_carriers = array();
@@ -1731,7 +1753,6 @@ class CartCore extends ObjectModel
{
if (!isset($grouped_by_carriers[$id_address_delivery][$key][$id_warehouse]))
$grouped_by_carriers[$id_address_delivery][$key][$id_warehouse] = array();
foreach ($product_list as $product)
{
$package_carriers_key = implode(',', $product['carrier_list']);
@@ -1796,7 +1817,6 @@ class CartCore extends ObjectModel
);
$package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['carrier_list'] =
array_intersect($package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['carrier_list'], $data['carrier_list']);
$package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['product_list'] =
array_merge($package_list[$id_address_delivery][$key][$id_warehouse][$id_carrier]['product_list'], $data['product_list']);
@@ -2272,18 +2292,23 @@ class CartCore extends ObjectModel
public function getAddressCollection()
{
$collection = array();
$result = Db::getInstance()->executeS(
'SELECT DISTINCT `id_address_delivery`
FROM `'._DB_PREFIX_.'cart_product`
WHERE id_cart = '.(int)$this->id
);
$cache_id = 'Cart::getAddressCollection'.(int)$this->id;
if (!Cache::isStored($cache_id))
{
$result = Db::getInstance()->executeS(
'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);
foreach ($result as $row)
if ((int)$row['id_address_delivery'] != 0)
$collection[(int)$row['id_address_delivery']] = new Address((int)$row['id_address_delivery']);
return $collection;
}
@@ -3033,7 +3058,6 @@ class CartCore extends ObjectModel
*/
public function addTextFieldToProduct($id_product, $index, $type, $text_value)
{
$text_value = str_replace(array("\n", "\r"), '', nl2br($text_value));
if (!_PS_MAGIC_QUOTES_GPC_){
$text_value = str_replace('\\', '\\\\', $text_value);
$text_value = str_replace('\'', '\\\'', $text_value);
@@ -3214,7 +3238,7 @@ class CartCore extends ObjectModel
public function getWsCartRows()
{
return Db::getInstance()->executeS('
SELECT id_product, id_product_attribute, quantity
SELECT id_product, id_product_attribute, quantity, id_address_delivery
FROM `'._DB_PREFIX_.'cart_product`
WHERE id_cart = '.(int)$this->id.' AND id_shop = '.(int)Context::getContext()->shop->id
);
@@ -3415,6 +3439,7 @@ class CartCore extends ObjectModel
*/
public function setNoMultishipping()
{
$emptyCache = $result = false;
if (Configuration::get('PS_ALLOW_MULTISHIPPING'))
{
// Upgrading quantities
@@ -3433,7 +3458,9 @@ class CartCore extends ObjectModel
AND `id_shop` = '.(int)$this->id_shop.'
AND id_product = '.$product['id_product'].'
AND id_product_attribute = '.$product['id_product_attribute'];
Db::getInstance()->execute($sql);
$result = Db::getInstance()->execute($sql);
if ($result)
$emptyCache = true;
}
// Merging multiple lines
@@ -3451,15 +3478,22 @@ class CartCore extends ObjectModel
}
// Update delivery address for each product line
Db::getInstance()->execute('
UPDATE `'._DB_PREFIX_.'cart_product`
$sql = 'UPDATE `'._DB_PREFIX_.'cart_product`
SET `id_address_delivery` = (
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.'
'.(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())
Db::getInstance()->execute('
UPDATE `'._DB_PREFIX_.'customization`
@@ -3468,6 +3502,9 @@ class CartCore extends ObjectModel
WHERE `id_cart` = '.(int)$this->id.'
)
WHERE `id_cart` = '.(int)$this->id);
if ($emptyCache)
$this->_products = null;
}
/**

View File

@@ -132,7 +132,12 @@ class CartRuleCore extends ObjectModel
public function update($null_values = false)
{
Cache::clean('getContextualValue_'.$this->id.'_*');
return parent::update($null_values);
if (!parent::update($null_values))
return false;
Configuration::updateGlobalValue('PS_CART_RULE_FEATURE_ACTIVE', CartRule::isCurrentlyUsed($this->def['table'], true));
return true;
}
/**
@@ -254,6 +259,17 @@ class CartRuleCore extends ObjectModel
}
else
$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
foreach ($result as &$cart_rule)
@@ -464,7 +480,7 @@ class CartRuleCore extends ObjectModel
// Check if the products chosen by the customer are usable with the cart rule
if ($this->product_restriction)
{
$r = $this->checkProductRestrictions($context, false, $display_error);
$r = $this->checkProductRestrictions($context, false, $display_error, $alreadyInCart);
if ($r !== false && $display_error)
return $r;
elseif (!$r && !$display_error)
@@ -523,6 +539,7 @@ class CartRuleCore extends ObjectModel
return (!$display_error) ? false : Tools::displayError('This voucher is already in your cart');
if ($otherCartRule['gift_product'])
--$nb_products;
if ($this->cart_rule_restriction && $otherCartRule['cart_rule_restriction'] && $otherCartRule['id_cart_rule'] != $this->id)
{
$combinable = Db::getInstance()->getValue('
@@ -550,7 +567,7 @@ class CartRuleCore extends ObjectModel
return true;
}
protected function checkProductRestrictions(Context $context, $return_products = false, $display_error = true)
protected function checkProductRestrictions(Context $context, $return_products = false, $display_error = true, $alreadyInCart = false)
{
$selectedProducts = array();
@@ -585,6 +602,8 @@ class CartRuleCore extends ObjectModel
if (in_array($cartAttribute['id_attribute'], $productRule['values']))
{
$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'];
}
if ($countMatchingProducts < $productRuleGroup['quantity'])
@@ -603,6 +622,8 @@ class CartRuleCore extends ObjectModel
if (in_array($cartProduct['id_product'], $productRule['values']))
{
$countMatchingProducts += $cartProduct['quantity'];
if ($alreadyInCart && $this->gift_product == $cartProduct['id_product'])
--$countMatchingProducts;
$matchingProductsList[] = $cartProduct['id_product'].'-0';
}
if ($countMatchingProducts < $productRuleGroup['quantity'])
@@ -1185,7 +1206,7 @@ class CartRuleCore extends ObjectModel
SELECT cr.*, crl.*
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.')
WHERE code LIKE \'%'.pSQL($name).'%\'
WHERE code LIKE \'%'.pSQL($name).'%\' OR name LIKE \'%'.pSQL($name).'%\'
');
}
}

View File

@@ -107,8 +107,8 @@ class CategoryCore extends ObjectModel
'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
// Lang fields
'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 64),
'link_rewrite' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isLinkRewrite', 'required' => true, 'size' => 64),
'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 128),
'link_rewrite' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isLinkRewrite', 'required' => true, 'size' => 128),
'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),
'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128),
'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),
@@ -666,9 +666,9 @@ class CategoryCore extends ObjectModel
* @param boolean $active return only active categories
* @return array categories
*/
public static function getHomeCategories($id_lang, $active = true)
public static function getHomeCategories($id_lang, $active = true, $id_shop = false)
{
return self::getChildren(Configuration::get('PS_HOME_CATEGORY'), $id_lang, $active);
return self::getChildren(Configuration::get('PS_HOME_CATEGORY'), $id_lang, $active, $id_shop);
}
public static function getRootCategory($id_lang = null, Shop $shop = null)
@@ -704,16 +704,22 @@ class CategoryCore extends ObjectModel
if (!Validate::isBool($active))
die(Tools::displayError());
$query = 'SELECT c.`id_category`, cl.`name`, cl.`link_rewrite`, category_shop.`id_shop`
FROM `'._DB_PREFIX_.'category` c
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category`'.Shop::addSqlRestrictionOnLang('cl').')
'.Shop::addSqlAssociation('category', 'c').'
WHERE `id_lang` = '.(int)$id_lang.'
AND c.`id_parent` = '.(int)$id_parent.'
'.($active ? 'AND `active` = 1' : '').'
GROUP BY c.`id_category`
ORDER BY category_shop.`position` ASC';
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
$cache_id = 'Category::getChildren_'.(int)$id_parent.'-'.(int)$id_lang.'-'.(bool)$active.'-'.(int)$id_shop;
if (!Cache::isStored($cache_id))
{
$query = 'SELECT c.`id_category`, cl.`name`, cl.`link_rewrite`, category_shop.`id_shop`
FROM `'._DB_PREFIX_.'category` c
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category`'.Shop::addSqlRestrictionOnLang('cl').')
'.Shop::addSqlAssociation('category', 'c').'
WHERE `id_lang` = '.(int)$id_lang.'
AND c.`id_parent` = '.(int)$id_parent.'
'.($active ? 'AND `active` = 1' : '').'
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);
}
/**
@@ -1008,14 +1014,20 @@ class CategoryCore extends ObjectModel
public function getGroups()
{
$groups = array();
$result = Db::getInstance()->executeS('
SELECT cg.`id_group`
FROM '._DB_PREFIX_.'category_group cg
WHERE cg.`id_category` = '.(int)$this->id
);
foreach ($result as $group)
$groups[] = $group['id_group'];
return $groups;
$cache_id = 'Category::getGroups_'.(int)$this->id;
if (!Cache::isStored($cache_id))
{
$result = Db::getInstance()->executeS('
SELECT cg.`id_group`
FROM '._DB_PREFIX_.'category_group cg
WHERE cg.`id_category` = '.(int)$this->id
);
$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)
@@ -1036,24 +1048,23 @@ class CategoryCore extends ObjectModel
*/
public function checkAccess($id_customer)
{
if (!$id_customer)
$cache_id = 'Category::checkAccess_'.(int)$this->id.'-'.$id_customer.(!$id_customer ? '-'.(int)Group::getCurrent()->id : '');
if (!Cache::isStored($cache_id))
{
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
if (!$id_customer)
$result = (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT ctg.`id_group`
FROM '._DB_PREFIX_.'category_group ctg
WHERE ctg.`id_category` = '.(int)$this->id.' AND ctg.`id_group` = '.(int)Group::getCurrent()->id.'
');
} else {
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
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('
SELECT ctg.`id_group`
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.')
WHERE ctg.`id_category` = '.(int)$this->id
);
WHERE ctg.`id_category` = '.(int)$this->id);
Cache::store($cache_id, $result);
}
if ($result && isset($result['id_group']) && $result['id_group'])
return true;
return false;
return Cache::retrieve($cache_id);
}
/**
@@ -1199,12 +1210,16 @@ class CategoryCore extends ObjectModel
*/
public static function getInterval($id)
{
$sql = 'SELECT nleft, nright, level_depth
FROM '._DB_PREFIX_.'category
WHERE id_category = '.(int)$id;
if (!$result = Db::getInstance()->getRow($sql))
return false;
return $result;
$cache_id = 'Category::getInterval_'.(int)$id;
if (!Cache::isStored($cache_id))
{
$sql = 'SELECT nleft, nright, level_depth
FROM '._DB_PREFIX_.'category
WHERE id_category = '.(int)$id;
$result = Db::getInstance()->getRow($sql);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
}
/**
@@ -1386,11 +1401,17 @@ class CategoryCore extends ObjectModel
public static function getCategoriesWithoutParent()
{
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
SELECT DISTINCT c.*
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_id = 'Category::getCategoriesWithoutParent_'.(int)Context::getContext()->language->id;
if (!Cache::isStored($cache_id))
{
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
SELECT DISTINCT c.*
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()
@@ -1409,12 +1430,17 @@ class CategoryCore extends ObjectModel
public static function getTopCategory($id_lang = null)
{
if (is_null($id_lang))
$id_lang = Context::getContext()->language->id;
$id_category = Db::getInstance()->getValue('
SELECT `id_category`
FROM `'._DB_PREFIX_.'category`
WHERE `id_parent` = 0');
return new Category($id_category, $id_lang);
$id_lang = (int)Context::getContext()->language->id;
$cache_id = 'Category::getTopCategory_'.(int)$id_lang;
if (!Cache::isStored($cache_id))
{
$id_category = (int)Db::getInstance()->getValue('
SELECT `id_category`
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)

View File

@@ -58,7 +58,8 @@ class ConfigurationTestCore
'theme_cache_dir' => 'themes/'._THEME_NAME_.'/cache/',
'translations_dir' => 'translations',
'customizable_products_dir' => 'upload',
'virtual_products_dir' => 'download'
'virtual_products_dir' => 'download',
'files' => false
);
}
@@ -318,4 +319,21 @@ class ConfigurationTestCore
{
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;
}
}

View File

@@ -97,7 +97,7 @@ class ConnectionCore extends ObjectModel
'id_connections' => (int)$cookie->id_connections,
'id_page' => (int)$id_page,
'time_start' => $time_start
));
), false, true, Db::INSERT_IGNORE);
// This array is serialized and used by the ajax request to identify the page
return array(
@@ -114,7 +114,7 @@ class ConnectionCore extends ObjectModel
// This is a bot and we have to retrieve its connection ID
$sql = 'SELECT `id_connections` FROM `'._DB_PREFIX_.'connections`
WHERE ip_address = '.ip2long(Tools::getRemoteAddr()).'
AND DATE_ADD(`date_add`, INTERVAL 30 MINUTE) > \''.pSQL(date('Y-m-d H:i:00')).'\'
AND `date_add` > \''.pSQL(date('Y-m-d H:i:00', time() - 1800)).'\'
'.Shop::addSqlRestriction(Shop::SHARE_CUSTOMER).'
ORDER BY `date_add` DESC';
if ($id_connections = Db::getInstance()->getValue($sql))
@@ -128,7 +128,7 @@ class ConnectionCore extends ObjectModel
$sql = 'SELECT `id_guest`
FROM `'._DB_PREFIX_.'connections`
WHERE `id_guest` = '.(int)$cookie->id_guest.'
AND DATE_ADD(`date_add`, INTERVAL 30 MINUTE) > \''.pSQL(date('Y-m-d H:i:00')).'\'
AND `date_add` > \''.pSQL(date('Y-m-d H:i:00', time() - 1800)).'\'
'.Shop::addSqlRestriction(Shop::SHARE_CUSTOMER).'
ORDER BY `date_add` DESC';
$result = Db::getInstance()->getRow($sql);

View File

@@ -73,7 +73,7 @@ class CurrencyCore extends ObjectModel
'sign' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 8),
'format' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
'decimals' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'required' => true),
'conversion_rate' =>array('type' => self::TYPE_FLOAT, 'validate' => 'isFloat', 'required' => true, 'shop' => true),
'conversion_rate' =>array('type' => self::TYPE_FLOAT, 'validate' => 'isUnsignedFloat', 'required' => true, 'shop' => true),
'deleted' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
'active' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
),
@@ -81,6 +81,7 @@ class CurrencyCore extends ObjectModel
/** @var array Currency cache */
static protected $currencies = array();
protected static $countActiveCurrencies = array();
protected $webserviceParameters = array(
'objectsNodeName' => 'currencies',
@@ -106,14 +107,23 @@ class CurrencyCore extends ObjectModel
$this->suffix = $this->format % 2 == 0 ? ' '.$this->sign : '';
}
/**
* Overriding check if currency with the same iso code already exists.
* If it's true, currency is doesn't added.
* Overriding check if currency rate is not empty and if currency with the same iso code already exists.
* If it's true, currency is not added.
*
* @see ObjectModelCore::add()
*/
public function add($autodate = true, $nullValues = false)
{
return Currency::exists($this->iso_code, $this->iso_code_num) ? false : parent::add();
if ((float)$this->conversion_rate <= 0)
return false;
return Currency::exists($this->iso_code, $this->iso_code_num) ? false : parent::add($autodate, $nullValues);
}
public function update($autodate = true, $nullValues = false)
{
if ((float)$this->conversion_rate <= 0)
return false;
return parent::update($autodate, $nullValues);
}
/**
@@ -187,8 +197,9 @@ class CurrencyCore extends ObjectModel
4 => array('left' => '', 'right' => &$formated_strings['right']),
5 => array('left' => '', 'right' => &$formated_strings['right'])
);
return ($formats[$this->format][$side]);
if (isset($formats[$this->format][$side]))
return ($formats[$this->format][$side]);
return $this->sign;
}
/**
@@ -285,10 +296,16 @@ class CurrencyCore extends ObjectModel
*/
public static function getIdByIsoCode($iso_code, $id_shop = 0)
{
$query = Currency::getIdByQuery($id_shop);
$query->where('iso_code = \''.pSQL($iso_code).'\'');
return (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query->build());
$cache_id = 'Currency::getIdByIsoCode_'.pSQL($iso_code).'-'.(int)$id_shop;
if (!Cache::isStored($cache_id))
{
$query = Currency::getIdByQuery($id_shop);
$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);
}
/**
@@ -414,5 +431,23 @@ class CurrencyCore extends ObjectModel
self::$currencies[(int)($id)] = new Currency($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);
}
}

View File

@@ -362,15 +362,18 @@ class CustomerCore extends ObjectModel
{
if (!Validate::isUnsignedId($id_customer))
return true;
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
SELECT `id_customer`
FROM `'._DB_PREFIX_.'customer`
WHERE `id_customer` = \''.(int)$id_customer.'\'
AND active = 1
AND `deleted` = 0');
if (isset($result['id_customer']))
return false;
return true;
$cache_id = 'Customer::isBanned_'.(int)$id_customer;
if (!Cache::isStored($cache_id))
{
$result = (bool)!Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
SELECT `id_customer`
FROM `'._DB_PREFIX_.'customer`
WHERE `id_customer` = \''.(int)$id_customer.'\'
AND active = 1
AND `deleted` = 0');
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
}
/**
@@ -413,7 +416,7 @@ class CustomerCore extends ObjectModel
public static function customerHasAddress($id_customer, $id_address)
{
$key = (int)$id_customer.'-'.(int)$id_address;
if (!array_key_exists($id_address, self::$_customerHasAddress))
if (!array_key_exists($key, self::$_customerHasAddress))
{
self::$_customerHasAddress[$key] = (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT `id_address`
@@ -439,15 +442,22 @@ class CustomerCore extends ObjectModel
*/
public function getAddresses($id_lang)
{
$sql = 'SELECT DISTINCT a.*, cl.`name` AS country, s.name AS state, s.iso_code AS state_iso
FROM `'._DB_PREFIX_.'address` a
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`)
LEFT JOIN `'._DB_PREFIX_.'state` s ON (s.`id_state` = a.`id_state`)
'.(Context::getContext()->shop->getGroup()->share_order ? '' : Shop::addSqlAssociation('country', 'c')).'
WHERE `id_lang` = '.(int)$id_lang.' AND `id_customer` = '.(int)$this->id.' AND a.`deleted` = 0';
$share_order = (bool)Context::getContext()->shop->getGroup()->share_order;
$cache_id = 'Customer::getAddresses'.(int)$this->id.'-'.(int)$id_lang.'-'.$share_order;
if (!Cache::isStored($cache_id))
{
$sql = 'SELECT DISTINCT a.*, cl.`name` AS country, s.name AS state, s.iso_code AS state_iso
FROM `'._DB_PREFIX_.'address` a
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`)
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';
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
}
/**
@@ -476,12 +486,17 @@ class CustomerCore extends ObjectModel
{
if (!Validate::isUnsignedId($id_customer) || !Validate::isMd5($passwd))
die (Tools::displayError());
$sql = 'SELECT `id_customer`
FROM `'._DB_PREFIX_.'customer`
WHERE `id_customer` = '.$id_customer.'
$cache_id = 'Customer::checkPassword'.(int)$id_customer.'-'.$passwd;
if (!Cache::isStored($cache_id))
{
$sql = 'SELECT `id_customer`
FROM `'._DB_PREFIX_.'customer`
WHERE `id_customer` = '.$id_customer.'
AND `passwd` = \''.$passwd.'\'';
return (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
$result = (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
}
/**
@@ -574,12 +589,16 @@ class CustomerCore extends ObjectModel
public static function customerIdExistsStatic($id_customer)
{
$row = Db::getInstance()->getRow('
SELECT `id_customer`
FROM '._DB_PREFIX_.'customer c
WHERE c.`id_customer` = '.(int)$id_customer);
return isset($row['id_customer']);
$cache_id = 'Customer::customerIdExistsStatic'.(int)$id_customer;
if (!Cache::isStored($cache_id))
{
$result = (int)Db::getInstance()->getValue('
SELECT `id_customer`
FROM '._DB_PREFIX_.'customer c
WHERE c.`id_customer` = '.(int)$id_customer);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
}
/**
@@ -589,9 +608,11 @@ class CustomerCore extends ObjectModel
*/
public function updateGroup($list)
{
$this->cleanGroups();
if ($list && !empty($list))
{
$this->cleanGroups();
$this->addGroups($list);
}
else
$this->addGroups(array($this->id_default_group));
}
@@ -606,7 +627,7 @@ class CustomerCore extends ObjectModel
foreach ($groups as $group)
{
$row = array('id_customer' => (int)$this->id, 'id_group' => (int)$group);
Db::getInstance()->insert('customer_group', $row);
Db::getInstance()->insert('customer_group', $row, false, true, Db::INSERT_IGNORE);
}
}

View File

@@ -46,7 +46,7 @@ class CustomerMessageCore extends ObjectModel
'fields' => array(
'id_employee' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'id_customer_thread' => array('type' => self::TYPE_INT),
'ip_address' => array('type' => self::TYPE_INT, 'validate' => 'isIp2Long'),
'ip_address' => array('type' => self::TYPE_STRING, 'validate' => 'isIp2Long', 'size' => 15),
'message' => array('type' => self::TYPE_STRING, 'validate' => 'isCleanHtml', 'required' => true, 'size' => 65000),
'file_name' => array('type' => self::TYPE_STRING),
'user_agent' => array('type' => self::TYPE_STRING),

View File

@@ -369,7 +369,7 @@ class DispatcherCore
// If there are several languages, get language from uri
if ($this->use_routes && Language::isMultiLanguageActivated())
if (preg_match('#^/([a-z]{2})/#', $this->request_uri, $m))
if (preg_match('#^/([a-z]{2})(?:/.*)?$#', $this->request_uri, $m))
{
$_GET['isolang'] = $m[1];
$this->request_uri = substr($this->request_uri, 3);
@@ -549,7 +549,7 @@ class DispatcherCore
if ($id_shop === null)
$id_shop = (int)Context::getContext()->shop->id;
if ($this->use_routes && !isset($this->routes[$id_shop]))
if (!isset($this->routes[$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]))
@@ -594,14 +594,14 @@ class DispatcherCore
if ($id_shop === null)
$id_shop = (int)Context::getContext()->shop->id;
if ($this->use_routes && !isset($this->routes[$id_shop]))
if (!isset($this->routes[$id_shop]))
$this->loadRoutes($id_shop);
if (!isset($this->routes[$id_shop][$id_lang][$route_id]))
{
$query = http_build_query($params, '', '&');
$index_link = $this->use_routes ? '' : 'index.php';
return ($route_id == 'index') ? $index_link.(($query) ? '?'.$query : '') : 'index.php?controller='.$route_id.(($query) ? '&'.$query : '').$anchor;
return ($route_id == 'index') ? $index_link.(($query) ? '?'.$query : '') : ((trim($route_id) == '') ? '' : 'index.php?controller='.$route_id).(($query) ? '&'.$query : '').$anchor;
}
$route = $this->routes[$id_shop][$id_lang][$route_id];
// Check required fields

View File

@@ -312,16 +312,37 @@ class FeatureCore extends ObjectModel
*/
public static function cleanPositions()
{
return Db::getInstance()->execute('
UPDATE `'._DB_PREFIX_.'feature` f
LEFT JOIN (
SELECT @i := @i +1 AS rank, id_feature, position
FROM `'._DB_PREFIX_.'feature`
JOIN (SELECT @i :=1) dummy
ORDER by position
) AS f2
USING (id_feature)
SET f.position = f2.rank - 1');
//Reordering positions to remove "holes" in them (after delete for instance)
$sql = "SELECT id_feature, position FROM "._DB_PREFIX_."feature ORDER BY id_feature";
$db = Db::getInstance();
$r = $db->executeS($sql, false);
$shiftTable = array(); //List of update queries (one query is necessary for each "hole" in the table)
$currentDelta = 0;
$minId = 0;
$maxId = 0;
$futurePosition = 1;
while ($line = $db->nextRow($r)) {
$delta = $futurePosition - $line['position']; //Difference between current position and future position
if ($delta != $currentDelta) {
$shiftTable[] = array('minId' => $minId, 'maxId' => $maxId, 'delta' => $currentDelta);
$currentDelta = $delta;
$minId = $line['id_feature'];
}
$maxId = $line['id_feature'];
$futurePosition++;
}
$shiftTable[] = array('minId' => $minId, 'maxId' => $maxId, 'delta' => $currentDelta);
//Executing generated queries
foreach ($shiftTable as $line) {
$delta = $line['delta'];
if ($delta == 0) continue;
$delta = $delta > 0 ? '+' . (int)$delta : (int)$delta;
$minId = (int)$line['minId'];
$maxId = (int)$line['maxId'];
$sql = "UPDATE "._DB_PREFIX_."feature SET position = position $delta WHERE id_feature >= $minId AND id_feature <= $maxId";
Db::getInstance()->execute($sql);
}
}
/**

View File

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

View File

@@ -102,6 +102,13 @@ class QqUploadedFileForm
$image = new Image();
$image->id_product = (int)$product->id;
$image->position = Image::getHighestPosition($product->id) + 1;
$legends = Tools::getValue('legend');
if (is_array($legends))
foreach ($legends as $key => $legend)
if (!empty($legend) && 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))
$image->cover = 1;
else
@@ -136,7 +143,7 @@ class QqUploadedFileForm
if (!$image->update())
return array('error' => Tools::displayError('Error while updating status'));
$img = array('id_image' => $image->id, 'position' => $image->position, 'cover' => $image->cover, 'name' => $this->getName());
$img = array('id_image' => $image->id, 'position' => $image->position, 'cover' => $image->cover, 'name' => $this->getName(), 'legend' => $image->legend);
return array('success' => $img);
}
@@ -184,6 +191,13 @@ class QqUploadedFileXhr
$image = new Image();
$image->id_product = (int)($product->id);
$image->position = Image::getHighestPosition($product->id) + 1;
$legends = Tools::getValue('legend');
if (is_array($legends))
foreach ($legends as $key => $legend)
if (!empty($legend) && 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))
$image->cover = 1;
else
@@ -223,7 +237,7 @@ class QqUploadedFileXhr
if (!$image->update())
return array('error' => Tools::displayError('Error while updating status'));
$img = array('id_image' => $image->id, 'position' => $image->position, 'cover' => $image->cover, 'name' => $this->getName());
$img = array('id_image' => $image->id, 'position' => $image->position, 'cover' => $image->cover, 'name' => $this->getName(), 'legend' => $image->legend);
return array('success' => $img);
}

View File

@@ -305,17 +305,43 @@ class GroupCore extends ObjectModel
public static function getCurrent()
{
static $groups = array();
$customer = Context::getContext()->customer;
if (Validate::isLoadedObject($customer))
{
$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
$id_group = (int)Configuration::get('PS_UNIDENTIFIED_GROUP');
if (!isset($groups[$id_group]) && isset($group))
$groups[$id_group] = $group;
if (!isset($groups[$id_group]))
$groups[$id_group] = new Group($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).'\'
');
}
}

View File

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

View File

@@ -56,6 +56,8 @@ class HookCore extends ObjectModel
*/
public static $executed_hooks = array();
public static $native_module;
/**
* @see ObjectModel::$definition
*/
@@ -316,7 +318,7 @@ class HookCore extends ObjectModel
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.')');
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.', -2) LIMIT 1) IN ('.(int)$context->currency->id.', -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.', -1, -2) LIMIT 1) IN ('.(int)$context->currency->id.', -1, -2))');
}
if (Validate::isLoadedObject($context->shop))
$sql->where('hm.id_shop = '.(int)$context->shop->id);
@@ -324,7 +326,10 @@ class HookCore extends ObjectModel
if ($frontend)
{
$sql->leftJoin('module_group', 'mg', 'mg.`id_module` = m.`id_module`');
$sql->where('mg.`id_group` IN ('.implode(', ', $groups).')');
if (Validate::isLoadedObject($context->shop))
$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');
}
@@ -388,6 +393,10 @@ class HookCore extends ObjectModel
*/
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
if (($id_module && !is_numeric($id_module)) || !Validate::isHookName($hook_name))
throw new PrestaShopException('Invalid id_module or hook_name');
@@ -416,12 +425,19 @@ class HookCore extends ObjectModel
// Look on modules list
$altern = 0;
$output = '';
if ($disable_non_native_modules && !isset(Hook::$native_module))
Hook::$native_module = Module::getNativeModuleList();
foreach ($module_list as $array)
{
// Check errors
if ($id_module && $id_module != $array['id_module'])
continue;
if ((bool)$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'])))
continue;

View File

@@ -40,6 +40,9 @@ class ImageCore extends ObjectModel
/** @var boolean Image is cover */
public $cover;
/** @var string Legend */
public $legend;
/** @var string image extension */
public $image_format = 'jpg';
@@ -66,6 +69,7 @@ class ImageCore extends ObjectModel
'id_product' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
'position' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
'cover' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'shop' => true),
'legend' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128),
),
);
@@ -120,16 +124,22 @@ class ImageCore extends ObjectModel
*
* @param integer $id_lang Language ID
* @param integer $id_product Product ID
* @param integer $id_product_attribute Product Attribute ID
* @return array Images
*/
public static function getImages($id_lang, $id_product)
public static function getImages($id_lang, $id_product, $id_product_attribute = NULL)
{
return Db::getInstance()->executeS('
SELECT *
FROM `'._DB_PREFIX_.'image` i
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.'
ORDER BY i.`position` ASC');
$attribute_filter = ($id_product_attribute ? ' AND ai.`id_product_attribute` = '.(int)$id_product_attribute : '');
$sql = 'SELECT *
FROM `'._DB_PREFIX_.'image` i
LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image`)';
if ($id_product_attribute)
$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);
}
/**
@@ -644,7 +654,7 @@ class ImageCore extends ObjectModel
*/
public static function testFileSystem()
{
$safe_mode = ini_get('safe_mode');
$safe_mode = Tools::getSafeModeStatus();
if ($safe_mode)
return false;
$folder1 = _PS_PROD_IMG_DIR_.'testfilesystem/';

View File

@@ -127,16 +127,20 @@ class ImageTypeCore extends ObjectModel
* @param string $name
* @param string $type
*/
public static function getByNameNType($name, $type = null)
public static function getByNameNType($name, $type = null, $order = null)
{
if (!isset(self::$images_types_name_cache[$name.'_'.$type]))
if (!isset(self::$images_types_name_cache[$name.'_'.$type.'_'.$order]))
{
self::$images_types_name_cache[$name.'_'.$type] = Db::getInstance()->getRow('
self::$images_types_name_cache[$name.'_'.$type.'_'.$order] = Db::getInstance()->getRow('
SELECT `id_image_type`, `name`, `width`, `height`, `products`, `categories`, `manufacturers`, `suppliers`, `scenes`
FROM `'._DB_PREFIX_.'image_type`
WHERE `name` = \''.pSQL($name).'\' '.(!is_null($type) ? 'AND `'.pSQL($type).'` = 1' : ''));
WHERE
`name` LIKE \''.pSQL($name).'\''
.(!is_null($type) ? ' AND `'.pSQL($type).'` = 1' : '')
.(!is_null($order) ? ' ORDER BY `'.bqSQL($order).'` ASC' : '')
);
}
return self::$images_types_name_cache[$name.'_'.$type];
return self::$images_types_name_cache[$name.'_'.$type.'_'.$order];
}
public static function getFormatedName($name)

View File

@@ -111,18 +111,22 @@ class LanguageCore extends ObjectModel
$iso_code = $newIso ? $newIso : $this->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)
{
$path_file = _PS_TRANSLATIONS_DIR_.$iso_code.'/'.$file.'.php';
if (!file_exists($path_file))
if ($file != 'tabs')
file_put_contents($path_file, '<?php
@file_put_contents($path_file, '<?php
global $'.$var.';
$'.$var.' = array();
?>');
else
file_put_contents($path_file, '<?php
@file_put_contents($path_file, '<?php
$'.$var.' = array();
return $'.$var.';
?>');
@@ -192,7 +196,7 @@ class LanguageCore extends ObjectModel
public function add($autodate = true, $nullValues = false, $only_add = false)
{
if (!parent::add($autodate))
if (!parent::add($autodate, $nullValues))
return false;
if ($only_add)
@@ -202,10 +206,9 @@ class LanguageCore extends ObjectModel
$this->_generateFiles();
// @todo Since a lot of modules are not in right format with their primary keys name, just get true ...
$resUpdateSQL = $this->loadUpdateSQL();
$resUpdateSQL = true;
Tools::generateHtaccess();
return $resUpdateSQL;
$this->loadUpdateSQL();
return Tools::generateHtaccess();
}
public function toggleStatus()
@@ -461,7 +464,8 @@ class LanguageCore extends ObjectModel
}
closedir($handle);
}
rmdir($dir);
if (is_writable($dir))
rmdir($dir);
}
public function delete()
@@ -488,7 +492,8 @@ class LanguageCore extends ObjectModel
// Files deletion
foreach (Language::getFilesList($this->iso_code, _THEME_NAME_, false, false, false, true, true) as $key => $file)
if (file_exists($key))
unlink($key);
unlink($key);
$modList = scandir(_PS_MODULE_DIR_);
foreach ($modList as $mod)
{
@@ -510,37 +515,32 @@ class LanguageCore extends ObjectModel
Language::recurseDeleteDir(_PS_MAIL_DIR_.$this->iso_code);
if (file_exists(_PS_TRANSLATIONS_DIR_.$this->iso_code))
Language::recurseDeleteDir(_PS_TRANSLATIONS_DIR_.$this->iso_code);
}
if (!parent::delete())
return false;
if (!$this->hasMultishopEntries() || Shop::getContext() == Shop::CONTEXT_ALL)
{
// delete images
$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 = array(
'.jpg',
'-default-'.ImageType::getFormatedName('thickbox').'.jpg',
'-default-'.ImageType::getFormatedName('home').'.jpg',
'-default-'.ImageType::getFormatedName('large').'.jpg',
'-default-'.ImageType::getFormatedName('medium').'.jpg',
'-default-'.ImageType::getFormatedName('small').'.jpg'
);
$tos = array(_PS_CAT_IMG_DIR_, _PS_MANU_IMG_DIR_, _PS_PROD_IMG_DIR_, _PS_SUPP_IMG_DIR_);
foreach ($tos as $to)
foreach ($files_copy as $file)
$images_directories = array(_PS_CAT_IMG_DIR_, _PS_MANU_IMG_DIR_, _PS_PROD_IMG_DIR_, _PS_SUPP_IMG_DIR_);
foreach ($images_directories as $image_directory)
foreach ($images as $image)
{
$name = str_replace('/en', ''.$this->iso_code, $file);
if (file_exists($to.$name))
unlink($to.$name);
if (file_exists($image_directory.$this->iso_code.$image))
unlink($image_directory.$this->iso_code.$image);
if (file_exists(dirname(__FILE__).'/../img/l/'.$this->id.'.jpg'))
unlink(dirname(__FILE__).'/../img/l/'.$this->id.'.jpg');
}
}
if (!parent::delete())
return false;
return Tools::generateHtaccess();
}
public function deleteSelection($selection)
{
if (!is_array($selection))
@@ -549,11 +549,10 @@ class LanguageCore extends ObjectModel
$result = true;
foreach ($selection as $id)
{
$this->id = (int)($id);
$result = $result && $this->delete();
$language = new Language($id);
$result = $result && $language->delete();
}
Tools::generateHtaccess();
return $result;
}
@@ -620,6 +619,35 @@ class LanguageCore extends ObjectModel
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)
*
@@ -689,26 +717,28 @@ class LanguageCore extends ObjectModel
if (Language::getIdByIso($iso_code))
return true;
// Initialize the language
$lang = new Language();
$lang->iso_code = $iso_code;
$lang->language_code = $iso_code;
$lang->active = true;
// If the language pack has not been provided, retrieve it from prestashop.com
if (!$lang_pack)
$lang_pack = Tools::jsonDecode(Tools::file_get_contents('http://www.prestashop.com/download/lang_packs/get_language_pack.php?version='._PS_VERSION_.'&iso_lang='.$iso_code));
// If a language pack has been found or provided, prefill the language object with the value
if ($lang_pack)
{
if (isset($lang_pack->name)
&& isset($lang_pack->version)
&& isset($lang_pack->iso_code))
$lang->name = $lang_pack->name;
}
elseif ($params_lang !== null && is_array($params_lang))
foreach (get_object_vars($lang_pack) as $key => $value)
if ($key != 'iso_code' && isset(Language::$definition['fields'][$key]))
$lang->$key = $value;
// Use the values given in parameters to override the data retrieved automatically
if ($params_lang !== null && is_array($params_lang))
foreach ($params_lang as $key => $value)
$lang->$key = $value;
else
return false;
if ($key != 'iso_code' && isset(Language::$definition['fields'][$key]))
$lang->$key = $value;
if (!$lang->add(true, false, $only_add))
return false;
@@ -726,7 +756,7 @@ class LanguageCore extends ObjectModel
}
else
Language::_copyNoneFlag((int)$lang->id);
$files_copy = array(
'/en.jpg',
'/en-default-'.ImageType::getFormatedName('thickbox').'.jpg',
@@ -736,7 +766,7 @@ class LanguageCore extends ObjectModel
'/en-default-'.ImageType::getFormatedName('small').'.jpg',
'/en-default-'.ImageType::getFormatedName('scene').'.jpg'
);
foreach (array(_PS_CAT_IMG_DIR_, _PS_MANU_IMG_DIR_, _PS_PROD_IMG_DIR_, _PS_SUPP_IMG_DIR_) as $to)
foreach ($files_copy as $file)
@copy(dirname(__FILE__).'/../img/l'.$file, $to.str_replace('/en', '/'.$iso_code, $file));
@@ -789,13 +819,22 @@ class LanguageCore extends ObjectModel
$lang_pack_ok = false;
$errors = array();
$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)))
$errors[] = Tools::displayError('Archive cannot be downloaded from prestashop.com.');
elseif (!$lang_pack = Tools::jsonDecode($lang_pack_link))
$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')))
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))
{
$gz = new Archive_Tar($file, true);

View File

@@ -91,12 +91,8 @@ class LinkCore
if (!$id_lang)
$id_lang = Context::getContext()->language->id;
if (Configuration::get('PS_MULTISHOP_FEATURE_ACTIVE') && $id_shop !== null)
$shop = new Shop($id_shop);
else
$shop = Context::getContext()->shop;
$url = 'http://'.$shop->domain.$shop->getBaseURI().$this->getLangLink($id_lang, null, $id_shop);
$url = $this->getBaseLink($id_shop).$this->getLangLink($id_lang, null, $id_shop);
if (!is_object($product))
{
@@ -163,11 +159,7 @@ class LinkCore
if (!$id_lang)
$id_lang = Context::getContext()->language->id;
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);
$url = $this->getBaseLink($id_shop).$this->getLangLink($id_lang, null, $id_shop);
if (!is_object($category))
$category = new Category($category, $id_lang);
@@ -206,11 +198,7 @@ class LinkCore
if (!$id_lang)
$id_lang = Context::getContext()->language->id;
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);
$url = $this->getBaseLink($id_shop).$this->getLangLink($id_lang, null, $id_shop);
$dispatcher = Dispatcher::getInstance();
if (!is_object($cms_category))
@@ -239,19 +227,12 @@ class LinkCore
* @param int $id_lang
* @return string
*/
public function getCMSLink($cms, $alias = null, $ssl = false, $id_lang = null, $id_shop = null)
public function getCMSLink($cms, $alias = null, $ssl = null, $id_lang = null, $id_shop = null)
{
$base = (($ssl && $this->ssl_enable) ? 'https://' : 'http://');
if (!$id_lang)
$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();
if (!is_object($cms))
@@ -290,11 +271,8 @@ class LinkCore
if (!$id_lang)
$id_lang = Context::getContext()->language->id;
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);
$url = $this->getBaseLink($id_shop).$this->getLangLink($id_lang, null, $id_shop);
$dispatcher = Dispatcher::getInstance();
if (!is_object($supplier))
@@ -327,11 +305,7 @@ class LinkCore
if (!$id_lang)
$id_lang = Context::getContext()->language->id;
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);
$url = $this->getBaseLink($id_shop).$this->getLangLink($id_lang, null, $id_shop);
$dispatcher = Dispatcher::getInstance();
if (!is_object($manufacturer))
@@ -360,18 +334,12 @@ class LinkCore
* @param int $id_lang
* @return string
*/
public function getModuleLink($module, $controller = 'default', array $params = array(), $ssl = false, $id_lang = null, $id_shop = null)
public function getModuleLink($module, $controller = 'default', array $params = array(), $ssl = null, $id_lang = null, $id_shop = null)
{
$base = (($ssl && $this->ssl_enable) ? 'https://' : 'http://');
if (!$id_lang)
$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);
// If the module has its own route ... just use it !
if (Dispatcher::getInstance()->hasRoute('module-'.$module.'-'.$controller, $id_lang, $id_shop))
@@ -453,10 +421,18 @@ class LinkCore
*
* @return string Page link
*/
public function getPageLink($controller, $ssl = false, $id_lang = null, $request = null, $request_url_encode = false, $id_shop = null)
public function getPageLink($controller, $ssl = null, $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);
if (!$id_lang)
$id_lang = (int)Context::getContext()->language->id;
@@ -469,16 +445,9 @@ class LinkCore
parse_str($request, $request);
}
if ($id_shop === null)
$shop = Context::getContext()->shop;
else
$shop = new Shop($id_shop);
$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;
return $this->getBaseLink($id_shop, $ssl).$this->getLangLink($id_lang, null, $id_shop).ltrim($uri_path, '/');
}
public function getCatImageLink($name, $id_category, $type = null)
@@ -541,6 +510,7 @@ class LinkCore
public function goPage($url, $p)
{
$url = rtrim(str_replace('?&', '?', $url), '?');
return $url.($p == 1 ? '' : (!strstr($url, '?') ? '?' : '&amp;').'p='.(int)$p);
}
@@ -642,5 +612,26 @@ class LinkCore
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();
}
}

View File

@@ -63,6 +63,7 @@ class LocalizationPackCore
if ($install_mode && $res && isset($this->iso_currency))
{
Cache::clean('Currency::getIdByIsoCode_*');
$res &= Configuration::updateValue('PS_CURRENCY_DEFAULT', (int)Currency::getIdByIsoCode($this->iso_currency));
Currency::refreshCurrencies();
}

View File

@@ -62,7 +62,7 @@ class LoggerCore extends ObjectModel
'fields' => array(
'severity' => array('type' => self::TYPE_INT, 'validate' => 'isInt', 'required' => true),
'error_code' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
'message' => array('type' => self::TYPE_STRING, 'validate' => 'isMessage', 'required' => true),
'message' => array('type' => self::TYPE_STRING, 'validate' => 'isString', 'required' => true),
'object_id' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
'id_employee' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
'object_type' => array('type' => self::TYPE_STRING, 'validate' => 'isName'),
@@ -149,6 +149,11 @@ class LoggerCore extends ObjectModel
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.

View File

@@ -50,9 +50,11 @@ class MailCore
* @param bool $modeSMTP
* @param string $template_path
* @param bool $die
* @param string $bcc Bcc recipient
*/
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, $template_path = _PS_MAIL_DIR_, $die = false, $id_shop = 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, $bcc = null)
{
$configuration = Configuration::getMultiple(array(
'PS_SHOP_EMAIL',
@@ -126,37 +128,56 @@ class MailCore
}
/* Construct multiple recipients list if needed */
$to_list = new Swift_RecipientList();
if (is_array($to) && isset($to))
{
$to_list = new Swift_RecipientList();
foreach ($to as $key => $addr)
{
$to_name = null;
$addr = trim($addr);
if (!Validate::isEmail($addr))
{
Tools::dieOrLog(Tools::displayError('Error: invalid e-mail address'), $die);
return false;
}
if (is_array($to_name))
{
if ($to_name && is_array($to_name) && Validate::isGenericName($to_name[$key]))
$to_name = $to_name[$key];
}
if ($to_name == null)
$to_name = $addr;
/* Encode accentuated chars */
$to_list->addTo($addr, '=?UTF-8?B?'.base64_encode($to_name).'?=');
if ($to_name == null || $to_name == $addr)
$to_name = '';
else
{
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 = $to_list;
} else {
/* Simple recipient, one address */
$to_plugin = $to;
if ($to_name == null)
$to_name = $to;
$to = new Swift_Address($to, '=?UTF-8?B?'.base64_encode($to_name).'?=');
if ($to_name == null || $to_name == $to)
$to_name = '';
else
{
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 {
/* Connect with the appropriate configuration */
if ($configuration['PS_MAIL_METHOD'] == 2)
@@ -224,12 +245,19 @@ class MailCore
include_once($template_path.$iso.'/lang.php');
else if ($module_name && file_exists($theme_path.'mails/'.$iso.'/lang.php'))
include_once($theme_path.'mails/'.$iso.'/lang.php');
else
else if (file_exists(_PS_MAIL_DIR_.$iso.'/lang.php'))
include_once(_PS_MAIL_DIR_.$iso.'/lang.php');
else
{
Tools::dieOrLog(Tools::displayError('Error - The lang file is missing for :').' '.$iso, $die);
return false;
}
/* Create mail and attach differents parts */
$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 */
$message->setId(Mail::generateId());
@@ -344,11 +372,11 @@ class MailCore
$file_core = _PS_ROOT_DIR_.'/mails/'.$iso_code.'/lang.php';
if (Tools::file_exists_cache($file_core) && empty($_LANGMAIL))
include_once($file_core);
include($file_core);
$file_theme = _PS_THEME_DIR_.'mails/'.$iso_code.'/lang.php';
if (Tools::file_exists_cache($file_theme))
include_once($file_theme);
include($file_theme);
if (!is_array($_LANGMAIL))
return (str_replace('"', '&quot;', $string));
@@ -372,4 +400,68 @@ class MailCore
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;
}
}

View File

@@ -79,7 +79,7 @@ class ManufacturerCore extends ObjectModel
// Lang fields
'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),
'short_description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml', 'size' => 254),
'short_description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'),
'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128),
'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),
'meta_keywords' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName'),

View File

@@ -37,9 +37,10 @@ class MediaCore
'ui.selectable' => array('fileName' => 'jquery.ui.selectable.min.js', 'dependencies' => array('ui.core', 'ui.widget', 'ui.mouse'), 'theme' => true),
'ui.sortable' => array('fileName' => 'jquery.ui.sortable.min.js', 'dependencies' => array('ui.core', 'ui.widget', 'ui.mouse'), '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', 'ui.menu'), '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'), 'theme' => true),
'ui.dialog' => array('fileName' => 'jquery.ui.dialog.min.js', 'dependencies' => array('ui.core', 'ui.widget', 'ui.position','ui.button'), 'theme' => true),
'ui.menu' => array('fileName' => 'jquery.ui.menu.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.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),
@@ -109,7 +110,7 @@ class MediaCore
// If the string is too big preg_replace return an error
// In this case, we don't compress the content
if (preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR)
if (function_exists('preg_last_error') && preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR)
{
if (_PS_MODE_DEV_)
error_log('ERROR: PREG_BACKTRACK_LIMIT_ERROR in function packJSinHTML');
@@ -201,7 +202,7 @@ class MediaCore
if (!preg_match('/^http(s?):\/\//i', $file_uri) && !@filemtime($file_uri))
return false;
if (Context::getContext()->controller->controller_type == 'admin')
if (Context::getContext()->controller->controller_type == 'admin' && !array_key_exists('host', $url_data))
{
$js_uri = preg_replace('/^'.preg_quote(__PS_BASE_URI__, '/').'/', '/', $js_uri);
$js_uri = dirname(preg_replace('/\?.+$/', '', $_SERVER['REQUEST_URI']).'a').'/..'.$js_uri;
@@ -271,10 +272,10 @@ class MediaCore
if ($add_no_conflict)
$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
$return[] = Media::getJSPath(_PS_JS_DIR_.'jquery/jquery-migrate-1.2.1.js');
return $return;
}

View File

@@ -68,8 +68,11 @@ class MetaCore extends ObjectModel
{
if ($file != 'index.php' && !in_array(strtolower(str_replace('Controller.php', '', $file)), $exlude_pages))
{
$reflection = new ReflectionClass(str_replace('.php', '', $file));
$properties = $reflection->getDefaultProperties();
$class_name = str_replace('.php', '', $file);
if (class_exists($class_name))
$reflection = new ReflectionClass(str_replace('.php', '', $file));
if (isset($reflection) && $reflection)
$properties = $reflection->getDefaultProperties();
if (isset($properties['php_self']))
$selected_pages[$properties['php_self']] = $properties['php_self'];
else if (preg_match('/^[a-z0-9_.-]*\.php$/i', $file))
@@ -82,11 +85,11 @@ class MetaCore extends ObjectModel
// Add modules controllers to list (this function is cool !)
foreach (glob(_PS_MODULE_DIR_.'*/controllers/front/*.php') as $file)
{
$filename = basename($file, '.php');
$filename = Tools::strtolower(basename($file, '.php'));
if ($filename == 'index')
continue;
$module = basename(dirname(dirname(dirname($file))));
$module = Tools::strtolower(basename(dirname(dirname(dirname($file)))));
$selected_pages[$module.' - '.$filename] = 'module-'.$module.'-'.$filename;
}
@@ -274,24 +277,31 @@ class MetaCore extends ObjectModel
FROM `'._DB_PREFIX_.'category_lang` cl
WHERE cl.`id_lang` = '.(int)$id_lang.'
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 (empty($row['meta_description']))
$row['meta_description'] = strip_tags($row['description']);
// Paginate title
if (!empty($row['meta_title']))
$row['meta_title'] = $title.$row['meta_title'].(!empty($page_number) ? ' ('.$page_number.')' : '').' - '.Configuration::get('PS_SHOP_NAME');
if ($row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql))
{
if (empty($row['meta_description']))
$row['meta_description'] = strip_tags($row['description']);
// Paginate title
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
$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');
return Meta::completeMetaTags($row, $row['name']);
$result = Meta::getHomeMetas($id_lang, $page_name);
Cache::store($cache_id, $result);
}
return Meta::getHomeMetas($id_lang, $page_name);
return Cache::retrieve($cache_id);
}
/**

View File

@@ -191,7 +191,7 @@ abstract class ObjectModelCore
if ($id)
{
// Load object from database if object id is present
$cache_id = 'objectmodel_'.$this->def['classname'].'_'.(int)$id.'_'.(int)$id_shop.'_'.(int)$id_lang;
$cache_id = 'objectmodel_'.$this->def['classname'].'_'.(int)$id.'_'.(int)$this->id_shop.'_'.(int)$id_lang;
if (!Cache::isStored($cache_id))
{
$sql = new DbQuery();
@@ -893,7 +893,7 @@ abstract class ObjectModelCore
* @param int $id_lang
* @return bool|string
*/
public function validateField($field, $value, $id_lang = null)
public function validateField($field, $value, $id_lang = null, $skip = array(), $human_errors = false)
{
$this->cacheFieldsRequiredDatabase();
$data = $this->def['fields'][$field];
@@ -901,9 +901,12 @@ abstract class ObjectModelCore
// Check if field is required
$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 (!empty($data['required']) || in_array($field, $required_fields))
if (!in_array('required', $skip) && (!empty($data['required']) || in_array($field, $required_fields)))
if (Tools::isEmpty($value))
return 'Property '.get_class($this).'->'.$field.' is empty';
if ($human_errors)
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
if (!$value && !empty($data['default']))
@@ -913,11 +916,11 @@ abstract class ObjectModelCore
}
// Check field 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']).')';
if (!in_array('values', $skip) && !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']).')';
// Check field size
if (!empty($data['size']))
if (!in_array('size', $skip) && !empty($data['size']))
{
$size = $data['size'];
if (!is_array($data['size']))
@@ -925,11 +928,24 @@ abstract class ObjectModelCore
$length = Tools::strlen($value);
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
if (!empty($data['validate']))
if (!in_array('validate', $skip) && !empty($data['validate']))
{
if (!method_exists('Validate', $data['validate']))
throw new PrestaShopException('Validation function not found. '.$data['validate']);
@@ -948,7 +964,12 @@ abstract class ObjectModelCore
$res = false;
}
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';
}
}
}
@@ -1118,7 +1139,7 @@ abstract class ObjectModelCore
{
$vars = get_class_vars($class_name);
foreach ($vars['shopIDs'] as $id_shop)
$or[] = ' main.id_shop = '.(int)$id_shop.' ';
$or[] = '(main.id_shop = '.(int)$id_shop.(isset($this->def['fields']['id_shop_group']) ? ' OR (id_shop = 0 AND id_shop_group='.(int)Shop::getGroupFromShop((int)$id_shop).')' : '').')';
$prepend = '';
if (count($or))
@@ -1213,11 +1234,16 @@ abstract class ObjectModelCore
if ($id_shop === null)
$id_shop = Context::getContext()->shop->id;
$sql = 'SELECT id_shop
FROM `'.pSQL(_DB_PREFIX_.$this->def['table']).'_shop`
WHERE `'.$this->def['primary'].'` = '.(int)$this->id.'
AND id_shop = '.(int)$id_shop;
return (bool)Db::getInstance()->getValue($sql);
$cache_id = 'objectmodel_shop_'.$this->def['classname'].'_'.(int)$this->id.'-'.(int)$id_shop;
if (!Cache::isStored($cache_id))
{
$sql = 'SELECT id_shop
FROM `'.pSQL(_DB_PREFIX_.$this->def['table']).'_shop`
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);
}
/**
@@ -1637,4 +1663,4 @@ abstract class ObjectModelCore
{
$this->update_fields = $fields;
}
}
}

View File

@@ -369,7 +369,8 @@ abstract class PaymentModuleCore extends Module
$customization_text .= sprintf(Tools::displayError('%d image(s)'), count($customization['datas'][Product::CUSTOMIZE_FILE])).'<br />';
$customization_text .= '---<br />';
}
$customization_text = rtrim($customization_text, '---<br />');
$customization_text = Tools::rtrimString($customization_text, '---<br />');
$customization_quantity = (int)$product['customization_quantity'];
$products_list .=
@@ -399,6 +400,8 @@ abstract class PaymentModuleCore extends Module
} // end foreach ($products)
$cart_rules_list = '';
$total_reduction_value_ti = 0;
$total_reduction_value_tex = 0;
foreach ($cart_rules as $cart_rule)
{
$package = array('id_carrier' => $order->id_carrier, 'id_address' => $order->id_address_delivery, 'products' => $order->product_list);
@@ -419,7 +422,8 @@ abstract class PaymentModuleCore extends Module
** THEN
** 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
$voucher = new CartRule($cart_rule['obj']->id); // We need to instantiate the CartRule without lang parameter to allow saving it
@@ -432,9 +436,9 @@ abstract class PaymentModuleCore extends Module
// Set the new voucher value
if ($voucher->reduction_tax)
$voucher->reduction_amount = $values['tax_incl'] - $order->total_products_wt - ($voucher->free_shipping == 1 ? $order->total_shipping_tax_incl : 0);
$voucher->reduction_amount = $values['tax_incl'] - ($order->total_products_wt - $total_reduction_value_ti) - ($voucher->free_shipping == 1 ? $order->total_shipping_tax_incl : 0);
else
$voucher->reduction_amount = $values['tax_excl'] - $order->total_products - ($voucher->free_shipping == 1 ? $order->total_shipping_tax_excl : 0);
$voucher->reduction_amount = $values['tax_excl'] - ($order->total_products - $total_reduction_value_tex) - ($voucher->free_shipping == 1 ? $order->total_shipping_tax_excl : 0);
$voucher->id_customer = $order->id_customer;
$voucher->quantity = 1;
@@ -466,7 +470,10 @@ abstract class PaymentModuleCore extends Module
$values['tax_incl'] -= $values['tax_incl'] - $order->total_products_wt;
$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);
@@ -530,6 +537,13 @@ abstract class PaymentModuleCore extends Module
if ($order_status->logable)
ProductSale::addProductSale((int)$product['id_product'], (int)$product['cart_quantity']);
// Set the order state
$new_history = new OrderHistory();
$new_history->id_order = (int)$order->id;
$new_history->changeIdOrderState((int)$id_order_state, $order, true);
$new_history->addWithemail(true, $extra_vars);
// Switch to back order if needed
if (Configuration::get('PS_STOCK_MANAGEMENT') && $order_detail->getStockState())
{
$history = new OrderHistory();
@@ -538,13 +552,6 @@ abstract class PaymentModuleCore extends Module
$history->addWithemail();
}
// Set order state in order history ONLY even if the "out of stock" status has not been yet reached
// So you migth have two order states
$new_history = new OrderHistory();
$new_history->id_order = (int)$order->id;
$new_history->changeIdOrderState((int)$id_order_state, $order, true);
$new_history->addWithemail(true, $extra_vars);
unset($order_detail);
// Order is reloaded because the status just changed

View File

@@ -229,7 +229,13 @@ class ProductCore extends ObjectModel
protected static $_prices = array();
protected static $_pricesLevel2 = 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 $_tax_rules_group = array();
protected static $_cacheFeatures = array();
protected static $_frontFeaturesCache = array();
@@ -519,6 +525,17 @@ class ProductCore extends ObjectModel
if (!Validate::isLoadedObject($customer))
die(Tools::displayError());
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
self::$_taxCalculationMethod = Group::getPriceDisplayMethod(Group::getCurrent()->id);
@@ -730,10 +747,10 @@ class ProductCore extends ObjectModel
/**
* @see ObjectModel::validateField()
*/
public function validateField($field, $value, $id_lang = null)
public function validateField($field, $value, $id_lang = null, $skip = array(), $human_errors = false)
{
$value = ($field == 'description_short' ? strip_tags($value) : $value);
return parent::validateField($field, $value, $id_lang);
return parent::validateField($field, $value, $id_lang, $skip, $human_errors);
}
public function toggleStatus()
@@ -1368,8 +1385,8 @@ class ProductCore extends ObjectModel
}
$product_supplier->product_supplier_reference = pSQL($supplier_reference);
$product_supplier->product_supplier_price_te = (float)$price;
$product_supplier->id_currency = (int)$id_currency;
$product_supplier->product_supplier_price_te = !is_null($price) ? (float)$price : (float)$product_supplier->product_supplier_price_te;
$product_supplier->id_currency = !is_null($id_currency) ? (int)$id_currency : (int)$product_supplier->id_currency;
$product_supplier->save();
}
}
@@ -2423,13 +2440,18 @@ class ProductCore extends ObjectModel
{
if (!$context)
$context = Context::getContext();
$sql = 'SELECT image_shop.`id_image`
FROM `'._DB_PREFIX_.'image` i
'.Shop::addSqlAssociation('image', 'i').'
WHERE i.`id_product` = '.(int)$id_product.'
AND image_shop.`cover` = 1';
return Db::getInstance()->getRow($sql);
$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
'.Shop::addSqlAssociation('image', 'i').'
WHERE i.`id_product` = '.(int)$id_product.'
AND image_shop.`cover` = 1';
$result = Db::getInstance()->getRow($sql);
Cache::store($cache_id, $result);
}
return Cache::retrieve($cache_id);
}
/**
@@ -2468,8 +2490,9 @@ class ProductCore extends ObjectModel
if (!Validate::isBool($usetax) || !Validate::isUnsignedId($id_product))
die(Tools::displayError());
// Initializations
$id_group = (isset($context->customer) ? $context->customer->id_default_group : (int)Configuration::get('PS_CUSTOMER_GROUP'));
$id_group = (int)Group::getCurrent()->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))
@@ -2490,15 +2513,17 @@ class ProductCore extends ObjectModel
$cart_quantity = 0;
if ((int)$id_cart)
{
$condition = '';
$cache_name = (int)$id_cart.'_'.(int)$id_product;
if (!isset(self::$_cart_quantity[$cache_name]) || self::$_cart_quantity[$cache_name] != (int)$quantity)
self::$_cart_quantity[$cache_name] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT SUM(`quantity`)
$cache_id = 'Product::getPriceStatic_'.(int)$id_product.'-'.(int)$id_cart;
if (!Cache::isStored($cache_id))
{
$sql = 'SELECT SUM(`quantity`)
FROM `'._DB_PREFIX_.'cart_product`
WHERE `id_product` = '.(int)$id_product.'
AND `id_cart` = '.(int)$id_cart);
$cart_quantity = self::$_cart_quantity[$cache_name];
AND `id_cart` = '.(int)$id_cart;
$cart_quantity = (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
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');
@@ -2508,7 +2533,7 @@ class ProductCore extends ObjectModel
$id_state = 0;
$zipcode = 0;
if (!$id_address)
if (!$id_address && Validate::isLoadedObject($cur_cart))
$id_address = $cur_cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')};
if ($id_address)
@@ -2719,8 +2744,7 @@ class ProductCore extends ObjectModel
if ($use_group_reduction)
{
$reduction_from_category = GroupReduction::getValueForProduct($id_product, $id_group);
if (!empty($reduction_from_category) && (float)$reduction_from_category == 0)
if ($reduction_from_category !== false)
$price -= $price * (float)$reduction_from_category;
else // apply group reduction if there is no group reduction for this category
$price *= ((100 - Group::getReductionByIdGroup($id_group)) / 100);
@@ -2914,7 +2938,7 @@ class ProductCore extends ObjectModel
* @param Shop $shop
* @return string
*/
public static function sqlStock($product_alias, $product_attribute = 0, $inner_join = false, Shop $shop = null)
public static function sqlStock($product_alias, $product_attribute = null, $inner_join = false, Shop $shop = null)
{
$id_shop = ($shop !== null ? (int)$shop->id : null);
$sql = (($inner_join) ? ' INNER ' : ' LEFT ').'
@@ -3055,18 +3079,18 @@ class ProductCore extends ObjectModel
if (!Combination::isFeatureActive())
return array();
$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, pa.`id_product_attribute`,
IFNULL(stock.quantity, 0) as quantity, product_attribute_shop.`price`, product_attribute_shop.`ecotax`, pa.`weight`,
a.`id_attribute`, al.`name` AS attribute_name, a.`color` AS attribute_color, product_attribute_shop.`id_product_attribute`,
IFNULL(stock.quantity, 0) as quantity, product_attribute_shop.`price`, product_attribute_shop.`ecotax`, product_attribute_shop.`weight`,
product_attribute_shop.`default_on`, pa.`reference`, product_attribute_shop.`unit_price_impact`,
pa.`minimal_quantity`, pa.`available_date`, ag.`group_type`
product_attribute_shop.`minimal_quantity`, product_attribute_shop.`available_date`, ag.`group_type`
FROM `'._DB_PREFIX_.'product_attribute` pa
'.Shop::addSqlAssociation('product_attribute', '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_.'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_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_.'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_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_group_lang` agl ON (ag.`id_attribute_group` = agl.`id_attribute_group`)
'.Shop::addSqlAssociation('attribute', 'a').'
WHERE pa.`id_product` = '.(int)$this->id.'
AND al.`id_lang` = '.(int)$id_lang.'
@@ -3159,8 +3183,9 @@ class ProductCore extends ObjectModel
LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (p.`id_manufacturer`= m.`id_manufacturer`)
'.Product::sqlStock('p', 0).'
WHERE `id_product_1` = '.(int)$this->id.
($active ? ' AND product_shop.`active` = 1' : '').'
($active ? ' AND product_shop.`active` = 1 AND product_shop.`visibility` != \'none\'' : '').'
GROUP BY product_shop.id_product';
if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql))
return false;
foreach ($result as &$row)
@@ -3312,7 +3337,7 @@ class ProductCore extends ObjectModel
$context = Context::getContext();
$sql = new DbQuery();
$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->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->from('category_product', 'cp');
$sql->leftJoin('product', 'p', 'p.`id_product` = cp.`id_product`');
$sql->join(Shop::addSqlAssociation('product', 'p'));
@@ -3323,6 +3348,8 @@ class ProductCore extends ObjectModel
$sql->leftJoin('manufacturer', 'm', 'm.`id_manufacturer` = p.`id_manufacturer`');
$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.`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).'%\')';
@@ -3576,6 +3603,7 @@ class ProductCore extends ObjectModel
if ($result3)
{
$result3['id_feature_value'] = $new_id_feature_value;
$result3['value'] = pSQL($result3['value']);
$return &= Db::getInstance()->insert('feature_value_lang', $result3);
}
}
@@ -4285,19 +4313,25 @@ class ProductCore extends ObjectModel
public function checkAccess($id_customer)
{
if (!$id_customer)
return (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT ctg.`id_group`
FROM `'._DB_PREFIX_.'category_product` cp
INNER JOIN `'._DB_PREFIX_.'category_group` ctg ON (ctg.`id_category` = cp.`id_category`)
WHERE cp.`id_product` = '.(int)$this->id.' AND ctg.`id_group` ='.(int)Group::getCurrent()->id);
else
return (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT cg.`id_group`
FROM `'._DB_PREFIX_.'category_product` cp
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_id = 'Product::checkAccess_'.(int)$this->id.'-'.(int)$id_customer.(!$id_customer ? '-'.(int)Group::getCurrent()->id : '');
if (!Cache::isStored($cache_id))
{
if (!$id_customer)
$result = (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT ctg.`id_group`
FROM `'._DB_PREFIX_.'category_product` cp
INNER JOIN `'._DB_PREFIX_.'category_group` ctg ON (ctg.`id_category` = cp.`id_category`)
WHERE cp.`id_product` = '.(int)$this->id.' AND ctg.`id_group` = '.(int)Group::getCurrent()->id);
else
$result = (bool)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT cg.`id_group`
FROM `'._DB_PREFIX_.'category_product` cp
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);
}
@@ -4857,8 +4891,12 @@ class ProductCore extends ObjectModel
*/
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 (Module::isInstalled('blocklayered'))
if (Module::isInstalled('blocklayered') && Module::isEnabled('blocklayered'))
{
$nb_custom_values = Db::getInstance()->executeS('
SELECT DISTINCT la.`id_attribute`, la.`url_name` as `name`
@@ -4869,7 +4907,7 @@ class ProductCore extends ObjectModel
ON (pac.`id_product_attribute` = pa.`id_product_attribute`)
'.Shop::addSqlAssociation('product_attribute', 'pa').'
LEFT JOIN `'._DB_PREFIX_.'layered_indexable_attribute_lang_value` la
ON (la.`id_attribute` = a.`id_attribute` AND la.`id_lang` = '.(int)Context::getContext()->language->id.')
ON (la.`id_attribute` = a.`id_attribute` AND la.`id_lang` = '.(int)$id_lang.')
WHERE la.`url_name` IS NOT NULL AND la.`url_name` != \'\'
AND pa.`id_product` = '.(int)$id_product.'
AND pac.`id_product_attribute` = '.(int)$id_product_attribute);
@@ -4887,7 +4925,7 @@ class ProductCore extends ObjectModel
LEFT JOIN `'._DB_PREFIX_.'attribute` a
ON (a.`id_attribute_group` = g.`id_attribute_group`)
WHERE a.`id_attribute` = '.(int)$attribute['id_attribute'].'
AND g.`id_lang` = '.(int)Context::getContext()->language->id.'
AND g.`id_lang` = '.(int)$id_lang.'
AND g.`url_name` IS NOT NULL AND g.`url_name` != \'\'');
if (empty($group))
{
@@ -4897,7 +4935,7 @@ class ProductCore extends ObjectModel
LEFT JOIN `'._DB_PREFIX_.'attribute` a
ON (a.`id_attribute_group` = g.`id_attribute_group`)
WHERE a.`id_attribute` = '.(int)$attribute['id_attribute'].'
AND g.`id_lang` = '.(int)Context::getContext()->language->id.'
AND g.`id_lang` = '.(int)$id_lang.'
AND g.`name` IS NOT NULL');
}
$result[] = array_merge($attribute, $group[0]);
@@ -4906,9 +4944,9 @@ class ProductCore extends ObjectModel
SELECT DISTINCT a.`id_attribute_group`, al.`name`, agl.`name` as `group`
FROM `'._DB_PREFIX_.'attribute` a
LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al
ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = '.(int)Context::getContext()->language->id.')
ON (a.`id_attribute` = al.`id_attribute` AND al.`id_lang` = '.(int)$id_lang.')
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.')
ON (a.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = '.(int)$id_lang.')
LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac
ON (a.`id_attribute` = pac.`id_attribute`)
LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa
@@ -4917,45 +4955,30 @@ class ProductCore extends ObjectModel
WHERE pa.`id_product` = '.(int)$id_product.'
AND pac.id_product_attribute = '.(int)$id_product_attribute.'
AND a.`id_attribute` NOT IN('.implode(', ', $tab_id_attribute).')');
$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);
return array_merge($values_not_custom, $result);
}
}
else
if (!Cache::isStored($cache_id))
{
$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.')
ON (al.`id_attribute` = a.`id_attribute` AND al.`id_lang` = '.(int)$id_lang.')
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.')
ON (a.`id_attribute_group` = agl.`id_attribute_group` AND agl.`id_lang` = '.(int)$id_lang.')
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);
AND agl.`id_lang` = '.(int)$id_lang);
Cache::store($cache_id, $result);
}
$result = Cache::retrieve($cache_id);
return $result;
}
@@ -5255,7 +5278,10 @@ class ProductCore extends ObjectModel
WHERE id_product='.(int)$this->id.Shop::addSqlRestriction()
);
else
{
$this->setFieldsToUpdate(array('advanced_stock_management' => true));
$this->save();
}
}
/**

View File

@@ -299,10 +299,10 @@ class ProductDownloadCore extends ObjectModel
*/
public static function getNewFilename()
{
$ret = sha1(microtime());
if (file_exists(_PS_DOWNLOAD_DIR_.$ret))
$ret = ProductDownload::getNewFilename();
return $ret;
do {
$filename = sha1(microtime());
} while (file_exists(_PS_DOWNLOAD_DIR_.$filename));
return $filename;
}
/**
@@ -314,4 +314,4 @@ class ProductDownloadCore extends ObjectModel
{
return Configuration::get('PS_VIRTUAL_PROD_FEATURE_ACTIVE');
}
}
}

View File

@@ -74,11 +74,22 @@ class ProductSaleCore
$groups = FrontController::getCurrentCustomerGroups();
$sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');
$interval = Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20;
//Subquery: get product ids in a separate query to (greatly!) improve performances and RAM usage
$sql = 'SELECT cp.`id_product`
FROM `'._DB_PREFIX_.'category_group` cg
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
WHERE cg.`id_group` '.$sql_groups;
$products = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
$ids = array();
foreach ($products as $product)
$ids[$product['id_product']] = 1;
$ids = array_keys($ids);
$ids = array_filter($ids);
sort($ids);
$ids = count($ids) > 0 ? implode(',', $ids) : 'NULL';
$prefix = '';
if ($order_by == 'date_add')
$prefix = 'p.';
//Main query
$sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity,
pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`,
pl.`meta_keywords`, pl.`meta_title`, pl.`name`,
@@ -104,12 +115,7 @@ class ProductSaleCore
'.Product::sqlStock('p').'
WHERE product_shop.`active` = 1
AND p.`visibility` != \'none\'
AND p.`id_product` IN (
SELECT cp.`id_product`
FROM `'._DB_PREFIX_.'category_group` cg
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
WHERE cg.`id_group` '.$sql_groups.'
)
AND p.`id_product` IN ('.$ids.')
GROUP BY product_shop.id_product
ORDER BY '.(!empty($order_table) ? '`'.pSQL($order_table).'`.' : '').'`'.pSQL($order_by).'` '.pSQL($order_way).'
LIMIT '.(int)($page_number * $nb_products).', '.(int)$nb_products;
@@ -141,11 +147,28 @@ class ProductSaleCore
$groups = FrontController::getCurrentCustomerGroups();
$sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');
//Subquery: get product ids in a separate query to (greatly!) improve performances and RAM usage
$sql = 'SELECT cp.`id_product`
FROM `'._DB_PREFIX_.'category_group` cg
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
WHERE cg.`id_group` '.$sql_groups.' AND cp.`id_product` IS NOT NULL';
$products = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
$ids = array();
foreach ($products as $product)
$ids[$product['id_product']] = 1;
$ids = array_keys($ids);
sort($ids);
$ids = array_filter($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`,
ps.`quantity` AS sales, p.`ean13`, p.`upc`, cl.`link_rewrite` AS category
ps.`quantity` AS sales, p.`ean13`, p.`upc`, cl.`link_rewrite` AS category, p.show_price, p.available_for_order, p.quantity, p.customizable,
IFNULL(pa.minimal_quantity, p.minimal_quantity) as minimal_quantity, p.out_of_stock
FROM `'._DB_PREFIX_.'product_sale` ps
LEFT JOIN `'._DB_PREFIX_.'product` p ON ps.`id_product` = p.`id_product`
'.Shop::addSqlAssociation('product', 'p').'
LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (ps.`id_product` = pa.`id_product` AND pa.default_on = 1)
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl
ON p.`id_product` = pl.`id_product`
AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').'
@@ -157,15 +180,11 @@ class ProductSaleCore
AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').'
WHERE product_shop.`active` = 1
AND p.`visibility` != \'none\'
AND p.`id_product` IN (
SELECT cp.`id_product`
FROM `'._DB_PREFIX_.'category_group` cg
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
WHERE cg.`id_group` '.$sql_groups.'
)
AND p.`id_product` IN ('.$ids.')
GROUP BY product_shop.id_product
ORDER BY sales DESC
LIMIT '.(int)($page_number * $nb_products).', '.(int)$nb_products;
if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql))
return false;
@@ -173,6 +192,13 @@ class ProductSaleCore
{
$row['link'] = $context->link->getProductLink($row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']);
$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;
}

View File

@@ -139,21 +139,22 @@ class ReferrerCore extends ObjectModel
}
$sql = 'SELECT COUNT(DISTINCT cs.id_connections_source) AS visits,
COUNT(DISTINCT cs.id_connections) as visitors,
COUNT(DISTINCT c.id_guest) as uniqs,
COUNT(DISTINCT cp.time_start) as pages
FROM '._DB_PREFIX_.'referrer_cache rc
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_.'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_page cp ON cp.id_connections = c.id_connections
'.$join.'
WHERE cs.date_add BETWEEN '.ModuleGraph::getDateBetween($employee).'
'.Shop::addSqlRestriction(false, 'rs').'
'.Shop::addSqlRestriction(false, 'c').'
AND rc.id_referrer = '.(int)$this->id
.$where;
COUNT(DISTINCT cs.id_connections) as visitors,
COUNT(DISTINCT c.id_guest) as uniqs,
COUNT(DISTINCT cp.time_start) as pages
FROM '._DB_PREFIX_.'referrer_cache rc
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_.'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_page cp ON cp.id_connections = c.id_connections
'.$join.'
WHERE 1'.
((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, 'c').
' AND rc.id_referrer = '.(int)$this->id.
$where;
return Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql);
}
@@ -314,6 +315,7 @@ class ReferrerCore extends ObjectModel
FROM '._DB_PREFIX_.'referrer r
LEFT JOIN '._DB_PREFIX_.'connections_source cs ON ('.self::$_join.')
WHERE id_referrer = '.(int)$row['id_referrer'].'
AND id_connections_source IS NOT NULL
)');
}
}

View File

@@ -245,9 +245,10 @@ class RequestSqlCore extends ObjectModel
*/
public function cutAttribute($attr, $from)
{
if (preg_match('#^((`(\()?([a-z0-9_])+`(\))?)|((\()?([a-z0-9_])+(\))?))\.((`(\()?([a-z0-9_])+`(\))?)|((\()?([a-z0-9_])+(\))?))$#i', $attr))
$matches = array();
if (preg_match('/((`(\()?([a-z0-9_])+`(\))?)|((\()?([a-z0-9_])+(\))?))\.((`(\()?([a-z0-9_])+`(\))?)|((\()?([a-z0-9_])+(\))?))$/i', $attr, $matches, PREG_OFFSET_CAPTURE))
{
$tab = explode('.', str_replace(array('`', '(', ')'), '', $attr));
$tab = explode('.', str_replace(array('`', '(', ')'), '', $matches[0][0]));
if (!$table = $this->returnNameTable($tab[0], $from))
return false;
else
@@ -256,9 +257,9 @@ class RequestSqlCore extends ObjectModel
'attribut' => $tab[1],
'string' => $attr);
}
elseif (preg_match('#^((`(\()?([a-z0-9_])+`(\))?)|((\()?([a-z0-9_])+(\))?))$#i', $attr))
elseif (preg_match('/((`(\()?([a-z0-9_])+`(\))?)|((\()?([a-z0-9_])+(\))?))$/i', $attr, $matches, PREG_OFFSET_CAPTURE))
{
$attribut = str_replace(array('`', '(', ')'), '', $attr);
$attribut = str_replace(array('`', '(', ')'), '', $matches[0][0]);
if (!$table = $this->returnNameTable(false, $from))
return false;
else

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