146 Commits

Author SHA1 Message Date
Damien Metzger
c51fe5b22d // Changelog 1.5.6.0 2013-10-07 18:07:25 +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
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
e3db5570d0 [-] BO : Retro compat, PS_ADMIN_DIR not defined //bad commit sorry 2013-10-07 11:24:42 +02: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
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
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
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
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
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
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
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
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
Damien Metzger
6e0c3e1aa2 // addFeatureValueImport partial fix 2013-10-03 12:24:35 +02:00
Jerome Nadaud
3585bf33c8 // Fix supply order change state save button 2013-10-03 11:49:16 +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
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
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
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
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
djfm
e706b531bc // updated br, es, fr, ru installer translations 2013-10-01 08:41:03 +00: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
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
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
gRoussac
7d764c5ce8 [-] BO : AdminImport, not matching by ref for updating 2013-09-30 11:50:51 +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
djfm
67d0ac95b5 Merge branch 'release' of https://github.com/PrestaShop/PrestaShop into release 2013-09-30 07:09:17 +00:00
gRoussac
813ef8bc7e [-] BO : Could not import empty linkrewrite for products and not matching refs 2013-09-27 19:22:10 +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
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
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
djfm
4e472fae50 // updated Indonesian installer 2013-09-27 07:16:23 +00: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
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
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
gRoussac
48d9c37590 [-] BO : Remove duplicate sql insert in setProductOutOfStock in monoshop 2013-09-25 18:41:52 +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
Damien Metzger
ae8c8218fd // Fixed ISO code of japanese todōfuken 2013-09-25 15:30:16 +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
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
gRoussac
6f840eceba [-] BO : Fix bug #PSCFV-9675 could not import non existent parent category 2013-09-24 18:00:01 +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
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
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
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
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
294 changed files with 7980 additions and 795 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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

@@ -38,6 +38,11 @@
var defaults_order_state = new Array();
var customization_errors = false;
var pic_dir = '{$pic_dir}';
var currency_format = 5;
var currency_sign = '';
var currency_blank = false;
var priceDisplayPrecision = 2;
{foreach from=$defaults_order_state key='module' item='id_order_state'}
defaults_order_state['{$module}'] = '{$id_order_state}';
{/foreach}
@@ -505,7 +510,6 @@
}
displaySummary(res);
resetBind();
updateCurrencySign();
}
});
}
@@ -652,11 +656,12 @@
var id_product = Number(this.id_product);
var id_product_attribute = Number(this.id_product_attribute);
cart_quantity[Number(this.id_product)+'_'+Number(this.id_product_attribute)+'_'+Number(this.id_customization)] = this.cart_quantity;
cart_content += '<tr><td><img src="'+this.image_link+'" title="'+this.name+'" /></td><td>'+this.name+'<br />'+this.attributes_small+'</td><td>'+this.reference+'</td><td><input type="text" size="7" rel="'+this.id_product+'_'+this.id_product_attribute+'" class="product_unit_price" value="'+this.price+'" />&nbsp;<span class="currency_sign"></span></td><td>';
cart_content += '<tr><td><img src="'+this.image_link+'" title="'+this.name+'" /></td><td>'+this.name+'<br />'+this.attributes_small+'</td><td>'+this.reference+'</td><td><input type="text" size="7" rel="'+this.id_product+'_'+this.id_product_attribute+'" class="product_unit_price" value="' + formatCurrency(parseFloat(this.price.replace(',', '.')), currency_format, currency_sign, currency_blank) + '" /></td><td>';
cart_content += (!this.id_customization ? '<div style="float:left;"><a href="#" class="increaseqty_product" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" ><img src="../img/admin/up.gif" /></a><br /><a href="#" class="decreaseqty_product" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'"><img src="../img/admin/down.gif" /></a></div>' : '');
cart_content += (!this.id_customization ? '<div style="float:left;"><input type="text" rel="'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" class="cart_quantity" size="2" value="'+this.cart_quantity+'" />' : '');
cart_content += (!this.id_customization ? '<a href="#" class="delete_product" rel="delete_'+this.id_product+'_'+this.id_product_attribute+'_'+(this.id_customization ? this.id_customization : 0)+'" ><img src="../img/admin/delete.gif" /></a></div>' : '');
cart_content += '</td><td>'+this.total+'&nbsp;<span class="currency_sign"></span></td></tr>';
cart_content += '</td><td>' + formatCurrency(parseFloat(this.total.replace(',', '.')), currency_format, currency_sign, currency_blank) + '</td></tr>';
if (this.id_customization && this.id_customization != 0)
{
$.each(this.customized_datas[this.id_product][this.id_product_attribute][id_address_delivery], function() {
@@ -712,6 +717,11 @@
function displaySummary(jsonSummary)
{
currency_format = jsonSummary.currency.format;
currency_sign = jsonSummary.currency.sign;
currency_blank = jsonSummary.currency.blank;
priceDisplayPrecision = jsonSummary.currency.decimals ? 2 : 0;
updateCartProducts(jsonSummary.summary.products, jsonSummary.summary.gift_products, jsonSummary.cart.id_address_delivery);
updateCartVouchers(jsonSummary.summary.discounts);
updateAddressesList(jsonSummary.addresses, jsonSummary.cart.id_address_delivery, jsonSummary.cart.id_address_invoice);
@@ -737,20 +747,19 @@
$('#free_shipping').removeAttr('checked');
$('#gift_message').html(jsonSummary.cart.gift_message);
if(!changed_shipping_price)
$('#shipping_price').html('<b>'+jsonSummary.summary.total_shipping+'</b>');
if (!changed_shipping_price)
$('#shipping_price').html('<b>' + formatCurrency(parseFloat(jsonSummary.summary.total_shipping), currency_format, currency_sign, currency_blank) + '</b>');
shipping_price_selected_carrier = jsonSummary.summary.total_shipping;
$('#total_vouchers').html(jsonSummary.summary.total_discounts_tax_exc);
$('#total_shipping').html(jsonSummary.summary.total_shipping_tax_exc);
$('#total_taxes').html(jsonSummary.summary.total_tax);
$('#total_without_taxes').html(jsonSummary.summary.total_price_without_tax);
$('#total_with_taxes').html(jsonSummary.summary.total_price);
$('#total_products').html(jsonSummary.summary.total_products);
$('#total_vouchers').html(formatCurrency(parseFloat(jsonSummary.summary.total_discounts_tax_exc.replace(',', '.')), currency_format, currency_sign, currency_blank));
$('#total_shipping').html(formatCurrency(parseFloat(jsonSummary.summary.total_shipping_tax_exc.replace(',', '.')), currency_format, currency_sign, currency_blank));
$('#total_taxes').html(formatCurrency(parseFloat(jsonSummary.summary.total_tax.replace(',', '.')), currency_format, currency_sign, currency_blank));
$('#total_without_taxes').html(formatCurrency(parseFloat(jsonSummary.summary.total_price_without_tax.replace(',', '.')), currency_format, currency_sign, currency_blank));
$('#total_with_taxes').html(formatCurrency(parseFloat(jsonSummary.summary.total_price.replace(',', '.')), currency_format, currency_sign, currency_blank));
$('#total_products').html(formatCurrency(parseFloat(jsonSummary.summary.total_products.replace(',', '.')), currency_format, currency_sign, currency_blank));
id_currency = jsonSummary.cart.id_currency;
$('#id_currency option').removeAttr('selected');
$('#id_currency option[value="'+id_currency+'"]').attr('selected', true);
updateCurrencySign();
id_lang = jsonSummary.cart.id_lang;
$('#id_lang option').removeAttr('selected');
$('#id_lang option[value="'+id_lang+'"]').attr('selected', true);
@@ -778,21 +787,21 @@
qty: qty,
id_customer: id_customer,
id_cart: id_cart,
},
},
success : function(res)
{
displaySummary(res);
var errors = '';
if(res.errors.length)
{
$.each(res.errors, function() {
errors += this+'<br />';
});
$('#products_err').show();
}
else
$('#products_err').hide();
$('#products_err').html(errors);
displaySummary(res);
var errors = '';
if (res.errors.length)
{
$.each(res.errors, function() {
errors += this + '<br />';
});
$('#products_err').show();
}
else
$('#products_err').hide();
$('#products_err').html(errors);
}
});
}
@@ -888,11 +897,6 @@
});
}
function updateCurrencySign()
{
$('.currency_sign').html(currencies[id_currency]);
}
function sendMailToCustomer()
{
$.ajax({
@@ -984,7 +988,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>
@@ -999,7 +1003,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">
@@ -1184,7 +1188,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>
@@ -1208,12 +1212,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

@@ -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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -399,6 +399,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 +421,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 +435,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 +469,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);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -305,7 +305,7 @@ class StockAvailableCore extends ObjectModel
if (!Validate::isUnsignedId($id_product))
return false;
$existing_id = StockAvailable::getStockAvailableIdByProductId((int)$id_product, (int)$id_product_attribute, (int)$id_shop);
$existing_id = StockAvailable::getStockAvailableIdByProductId((int)$id_product, (int)$id_product_attribute, $id_shop);
if ($existing_id > 0)
{
Db::getInstance()->update(

View File

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

View File

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

View File

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

View File

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

View File

@@ -30,6 +30,7 @@ class AdminGroupsControllerCore extends AdminController
{
$this->table = 'group';
$this->className = 'Group';
$this->list_id = 'group';
$this->lang = true;
$this->addRowAction('edit');
$this->addRowAction('view');
@@ -153,6 +154,16 @@ class AdminGroupsControllerCore extends AdminController
if (Tools::isSubmit('changeShowPricesVal') && $this->id_object)
$this->action = 'change_show_prices_val';
if (Tools::getIsset('viewgroup'))
{
$this->list_id = 'customer_group';
if (isset($_POST['submitReset'.$this->list_id]))
$this->processResetFilters();
}
else
$this->list_id = 'group';
parent::initProcess();
}
@@ -181,30 +192,29 @@ class AdminGroupsControllerCore extends AdminController
$genders_icon[$gender->id] = '../genders/'.(int)$gender->id.'.jpg';
$genders[$gender->id] = $gender->name;
}
$customer_fields_display = (array(
'id_customer' => array('title' => $this->l('ID'), 'width' => 15, 'align' => 'center'),
$this->table = 'customer_group';
$this->lang = false;
$this->list_id = 'customer_group';
$this->actions = array();
$this->bulk_actions = false;
$this->no_link = true;
$this->fields_list = (array(
'id_customer' => array('title' => $this->l('ID'), 'width' => 15, 'align' => 'center', 'filter_key' => 'c!id_customer'),
'id_gender' => array('title' => $this->l('Titles'), 'align' => 'center', 'width' => 50,'icon' => $genders_icon, 'list' => $genders),
'firstname' => array('title' => $this->l('Name'), 'align' => 'center'),
'lastname' => array('title' => $this->l('Name'), 'align' => 'center'),
'email' => array('title' => $this->l('Email address'), 'width' => 150, 'align' => 'center'),
'firstname' => array('title' => $this->l('First name'), 'align' => 'center'),
'lastname' => array('title' => $this->l('Last name'), 'align' => 'center'),
'email' => array('title' => $this->l('Email address'), 'width' => 150, 'align' => 'center', 'filter_key' => 'c!email', 'orderby' => true),
'birthday' => array('title' => $this->l('Birth date'), 'width' => 150, 'align' => 'right', 'type' => 'date'),
'date_add' => array('title' => $this->l('Register date'), 'width' => 150, 'align' => 'right', 'type' => 'date'),
'orders' => array('title' => $this->l('Orders'), 'align' => 'center'),
'active' => array('title' => $this->l('Enabled'),'align' => 'center','width' => 20, 'active' => 'status','type' => 'bool')
));
$customer_list = $group->getCustomers(false, 0, 100, true);
$helper = new HelperList();
$helper->currentIndex = Context::getContext()->link->getAdminLink('AdminCustomers', false);
$helper->token = Tools::getAdminTokenLite('AdminCustomers');
$helper->shopLinkType = '';
$helper->table = 'customer';
$helper->identifier = 'id_customer';
$helper->actions = array('edit', 'view');
$helper->show_toolbar = false;
return $helper->generateList($customer_list, $customer_fields_display);
$this->_select = 'c.*';
$this->_join = 'LEFT JOIN `'._DB_PREFIX_.'customer` c ON (a.`id_customer` = c.`id_customer`)';
$this->_where = 'AND a.`id_group` = '.(int)$group->id.' AND c.`deleted` != 1';
self::$currentIndex = self::$currentIndex.'&viewgroup';
$this->processFilter();
return parent::renderList();
}
public function renderForm()

View File

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

View File

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

View File

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

View File

@@ -1108,8 +1108,8 @@ class AdminModulesControllerCore extends AdminController
$modules[$km]->preferences = $modules_preferences[$modules[$km]->name];
}
unset($object);
if (isset($module->version_addons))
$upgrade_available[] = array('anchor' => ucfirst($module->name), 'name' => $module->displayName);;
if ($module->installed && isset($module->version_addons) && $module->version_addons)
$upgrade_available[] = array('anchor' => ucfirst($module->name), 'name' => $module->displayName);
}
// Don't display categories without modules

View File

@@ -2023,7 +2023,7 @@ class AdminProductsControllerCore extends AdminController
// Check multilingual fields validity
foreach ($rules['validateLang'] as $fieldLang => $function)
foreach ($languages as $language)
if ($this->isProductFieldUpdated('description_short', $language['id_lang']) && ($value = Tools::getValue($fieldLang.'_'.$language['id_lang'])))
if ($this->isProductFieldUpdated($fieldLang, $language['id_lang']) && ($value = Tools::getValue($fieldLang.'_'.$language['id_lang'])))
if (!Validate::$function($value, (int)Configuration::get('PS_ALLOW_HTML_IFRAME')))
$this->errors[] = sprintf(
Tools::displayError('The %1$s field (%2$s) is invalid.'),

View File

@@ -94,8 +94,6 @@ class OrderControllerCore extends ParentOrderController
*/
public function initContent()
{
global $isVirtualCart;
parent::initContent();
if (Tools::isSubmit('ajax') && Tools::getValue('method') == 'updateExtraCarrier')
@@ -117,7 +115,7 @@ class OrderControllerCore extends ParentOrderController
}
if ($this->nbProducts)
$this->context->smarty->assign('virtual_cart', $isVirtualCart);
$this->context->smarty->assign('virtual_cart', $this->context->cart->isVirtualCart());
// 4 steps to the order
switch ((int)$this->step)
@@ -225,12 +223,11 @@ class OrderControllerCore extends ParentOrderController
*/
public function autoStep()
{
global $isVirtualCart;
if ($this->step >= 2 && (!$this->context->cart->id_address_delivery || !$this->context->cart->id_address_invoice))
Tools::redirect('index.php?controller=order&step=1');
if ($this->step > 2 && !$isVirtualCart && count($this->context->cart->getDeliveryOptionList()) == 0)
if ($this->step > 2 && !$this->context->cart->isVirtualCart() && count($this->context->cart->getDeliveryOptionList()) == 0)
Tools::redirect('index.php?controller=order&step=2');
$delivery = new Address((int)$this->context->cart->id_address_delivery);

View File

@@ -40,7 +40,7 @@ class OrderOpcControllerCore extends ParentOrderController
parent::init();
if ($this->nbProducts)
$this->context->smarty->assign('virtual_cart', false);
$this->context->smarty->assign('virtual_cart', $this->context->cart->isVirtualCart());
$this->context->smarty->assign('is_multi_address_delivery', $this->context->cart->isMultiAddressDelivery() || ((int)Tools::getValue('multi-shipping') == 1));
$this->context->smarty->assign('open_multishipping_fancybox', (int)Tools::getValue('multi-shipping') == 1);

View File

@@ -56,8 +56,6 @@ class ParentOrderControllerCore extends FrontController
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
$this->nbProducts = $this->context->cart->nbProducts();
global $isVirtualCart;
if (!$this->context->customer->isLogged(true) && $this->context->getMobileDevice() && Tools::getValue('step'))
Tools::redirect($this->context->link->getPageLink('authentication', true, (int)$this->context->language->id, $params));
@@ -372,6 +370,7 @@ class ParentOrderControllerCore extends FrontController
'currencyFormat' => $this->context->currency->format,
'currencyBlank' => $this->context->currency->blank,
'show_option_allow_separate_package' => $show_option_allow_separate_package,
'smallSize' => Image::getSize(ImageType::getFormatedName('small')),
));

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,35 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../../');
exit;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,35 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../');
exit;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,35 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../../');
exit;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,35 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header('Location: ../../../../../');
exit;

View File

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

View File

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

View File

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

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