From 4f3903d86de4b2620eb494b6b7f6c444678fdfd2 Mon Sep 17 00:00:00 2001
From: mMarinetti
Date: Wed, 18 Jan 2012 10:33:47 +0000
Subject: [PATCH] [*] Installer : thanks to the old installer/upgrader which is
now removed
git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@12525 b9a71923-0436-4b27-9f14-aed3839534dd
---
install-dev/classes/AddConfToFile.php | 91 -
install-dev/classes/GetVersionFromDb.php | 667 -----
install-dev/classes/Language.php | 652 -----
install-dev/classes/LanguagesManager.php | 110 -
install-dev/classes/Module.php | 1057 --------
install-dev/classes/ToolsInstall.php | 208 --
install-dev/classes/index.php | 36 -
install-dev/controller.js | 1070 --------
install-dev/img/01-gd100.png | Bin 170 -> 0 bytes
install-dev/img/01-pt100.png | Bin 158 -> 0 bytes
install-dev/img/01-pt70.png | Bin 157 -> 0 bytes
install-dev/img/02-gd100.png | Bin 284 -> 0 bytes
install-dev/img/02-pt100.png | Bin 248 -> 0 bytes
install-dev/img/02-pt70.png | Bin 279 -> 0 bytes
install-dev/img/03-gd100.png | Bin 308 -> 0 bytes
install-dev/img/03-pt100.png | Bin 270 -> 0 bytes
install-dev/img/03-pt70.png | Bin 292 -> 0 bytes
install-dev/img/04-gd100.png | Bin 241 -> 0 bytes
install-dev/img/04-pt100.png | Bin 211 -> 0 bytes
install-dev/img/04-pt70.png | Bin 217 -> 0 bytes
install-dev/img/05-gd100.png | Bin 302 -> 0 bytes
install-dev/img/05-pt100.png | Bin 259 -> 0 bytes
install-dev/img/05-pt70.png | Bin 259 -> 0 bytes
install-dev/img/ajax-loader.gif | Bin 11314 -> 0 bytes
install-dev/img/bad.gif | Bin 594 -> 0 bytes
install-dev/img/bg-body.png | Bin 143 -> 0 bytes
install-dev/img/bg-contentTitle.png | Bin 215 -> 0 bytes
install-dev/img/bg-ctnr.png | Bin 306 -> 0 bytes
install-dev/img/bg-input-text.png | Bin 141 -> 0 bytes
install-dev/img/bg-li-headerLinks.png | Bin 233 -> 0 bytes
install-dev/img/bg-li-tabs-finished.png | Bin 298 -> 0 bytes
install-dev/img/bg-li-tabs.png | Bin 139 -> 0 bytes
install-dev/img/bg-phone_block.png | Bin 1006 -> 0 bytes
install-dev/img/bg-tab.png | Bin 190 -> 0 bytes
install-dev/img/bg_blockInfoEnd.png | Bin 218 -> 0 bytes
install-dev/img/bg_bt_blockInfoEnd.png | Bin 885 -> 0 bytes
install-dev/img/bg_field.png | Bin 126 -> 0 bytes
install-dev/img/bg_help.png | Bin 908 -> 0 bytes
install-dev/img/bg_input_button.png | Bin 141 -> 0 bytes
install-dev/img/bg_li_stepList.png | Bin 2426 -> 0 bytes
install-dev/img/bg_li_title.png | Bin 204 -> 0 bytes
install-dev/img/bg_loaderSpace.png | Bin 109 -> 0 bytes
install-dev/img/bg_moduleTable_th.png | Bin 262 -> 0 bytes
install-dev/img/boutonpt-disabled.png | Bin 719 -> 0 bytes
install-dev/img/boutonpt-on.png | Bin 714 -> 0 bytes
install-dev/img/boutonpt-over.png | Bin 701 -> 0 bytes
install-dev/img/bt - Copie.png | Bin 772 -> 0 bytes
install-dev/img/bt-dsbl - Copie.png | Bin 474 -> 0 bytes
install-dev/img/bt-dsbl.png | Bin 248 -> 0 bytes
install-dev/img/bt-hover.png | Bin 251 -> 0 bytes
install-dev/img/bt.png | Bin 251 -> 0 bytes
install-dev/img/bt_off.png | Bin 251 -> 0 bytes
install-dev/img/bt_off_hover.png | Bin 251 -> 0 bytes
install-dev/img/btn-installeur.png | Bin 2330 -> 0 bytes
install-dev/img/bullet.png | Bin 1265 -> 0 bytes
install-dev/img/ico_help.gif | Bin 1246 -> 0 bytes
install-dev/img/index.php | 36 -
install-dev/img/logo.png | Bin 4431 -> 0 bytes
install-dev/img/ok.gif | Bin 610 -> 0 bytes
install-dev/img/ombrage-bas.png | Bin 342 -> 0 bytes
install-dev/img/ombrage-droit.png | Bin 243 -> 0 bytes
install-dev/img/phone.png | Bin 697 -> 0 bytes
install-dev/img/pict_error.png | Bin 450 -> 0 bytes
install-dev/img/pict_h3_infos.png | Bin 453 -> 0 bytes
install-dev/img/pict_ok.png | Bin 374 -> 0 bytes
install-dev/img/puce.gif | Bin 683 -> 0 bytes
install-dev/img/shadow-left.png | Bin 254 -> 0 bytes
install-dev/img/visu_boBlock.png | Bin 7583 -> 0 bytes
install-dev/img/visu_foBlock.png | Bin 11338 -> 0 bytes
install-dev/index.php | 1367 ----------
install-dev/langs/de.php | 290 --
install-dev/langs/es.php | 293 --
install-dev/langs/fr.php | 299 ---
install-dev/langs/index.php | 36 -
install-dev/langs/it.php | 284 --
install-dev/langs/list.xml | 52 -
install-dev/langs/us.php | 76 -
install-dev/model.php | 118 -
install-dev/module_tools.php | 37 -
install-dev/php/add_accounting_tab.php | 20 -
install-dev/php/add_attribute_position.php | 51 -
install-dev/php/add_carrier_position.php | 45 -
...dd_default_restrictions_modules_groups.php | 54 -
install-dev/php/add_feature_position.php | 42 -
.../php/add_group_attribute_position.php | 42 -
install-dev/php/add_missing_rewrite_value.php | 46 -
install-dev/php/add_module_to_hook.php | 58 -
install-dev/php/add_new_groups.php | 50 -
install-dev/php/add_new_tab.php | 66 -
install-dev/php/add_order_state.php | 63 -
install-dev/php/add_stock_tab.php | 80 -
install-dev/php/alter_blocklink.php | 36 -
install-dev/php/alter_cms_block.php | 40 -
.../php/alter_productcomments_guest_index.php | 39 -
install-dev/php/blocknewsletter.php | 33 -
.../php/check_webservice_account_table.php | 44 -
install-dev/php/cms_block.php | 33 -
install-dev/php/confcleaner.php | 48 -
install-dev/php/country_to_timezone.php | 278 --
install-dev/php/create_multistore.php | 53 -
install-dev/php/customizations.php | 44 -
install-dev/php/database_structure.php | 47 -
install-dev/php/deactivate_custom_modules.php | 65 -
install-dev/php/deliverynumber.php | 55 -
.../php/drop_image_type_non_unique_index.php | 8 -
install-dev/php/editorial_update.php | 73 -
install-dev/php/generate_ntree.php | 31 -
install-dev/php/generate_order_reference.php | 17 -
install-dev/php/generate_tax_rules.php | 87 -
install-dev/php/gridextjs_deprecated.php | 47 -
.../php/hook_blocksearch_on_header.php | 49 -
install-dev/php/index.php | 36 -
install-dev/php/invoicenumber.php | 55 -
.../php/migrate_block_info_to_cms_block.php | 57 -
install-dev/php/migrate_orders.php | 251 --
install-dev/php/module_tools.php | 37 -
install-dev/php/move_crossselling.php | 14 -
install-dev/php/price_converter.php | 48 -
install-dev/php/regenerate_level_depth.php | 58 -
.../php/remove_duplicate_category_groups.php | 52 -
install-dev/php/remove_module_from_hook.php | 53 -
install-dev/php/remove_tab.php | 11 -
install-dev/php/reorderpositions.php | 75 -
install-dev/php/set_product_suppliers.php | 51 -
install-dev/php/set_stock_available.php | 51 -
.../php/setallgroupsonhomecategory.php | 40 -
install-dev/php/setdiscountcategory.php | 37 -
install-dev/php/setpaymentmodule.php | 54 -
install-dev/php/setpaymentmodulegroup.php | 50 -
install-dev/php/shop_url.php | 35 -
install-dev/php/update_carrier_url.php | 43 -
.../php/update_feature_detachable_cache.php | 49 -
install-dev/php/update_for_13version.php | 16 -
install-dev/php/update_image_size_in_db.php | 42 -
install-dev/php/update_module_followup.php | 37 -
install-dev/php/update_module_loyalty.php | 45 -
install-dev/php/update_modules_multishop.php | 39 -
install-dev/php/update_order_canada.php | 97 -
install-dev/php/update_order_detail_taxes.php | 60 -
install-dev/php/update_order_details.php | 39 -
.../php/update_products_ecotax_v133.php | 36 -
install-dev/php/update_stock_mvt_reason.php | 108 -
install-dev/php/updatemodulessql.php | 41 -
install-dev/php/updateproductcomments.php | 58 -
.../php/updatetabicon_from_11version.php | 47 -
install-dev/php/utf8.php | 136 -
install-dev/preactivation.php | 125 -
install-dev/sql/db.sql | 2376 -----------------
install-dev/sql/db_settings_extends.sql | 1753 ------------
install-dev/sql/db_settings_lite.sql | 1652 ------------
install-dev/sql/index.php | 36 -
install-dev/sql/upgrade/0.9.1.2.sql | 30 -
install-dev/sql/upgrade/0.9.1.sql | 9 -
install-dev/sql/upgrade/0.9.5.1.sql | 66 -
install-dev/sql/upgrade/0.9.5.2.sql | 5 -
install-dev/sql/upgrade/0.9.6.1.sql | 51 -
install-dev/sql/upgrade/0.9.6.2.sql | 7 -
install-dev/sql/upgrade/0.9.7.1.sql | 14 -
install-dev/sql/upgrade/0.9.7.2.sql | 21 -
install-dev/sql/upgrade/0.9.sql | 39 -
install-dev/sql/upgrade/1.0.0.1.sql | 122 -
install-dev/sql/upgrade/1.0.0.2.sql | 13 -
install-dev/sql/upgrade/1.0.0.3.sql | 441 ---
install-dev/sql/upgrade/1.0.0.4.sql | 88 -
install-dev/sql/upgrade/1.0.0.5.sql | 35 -
install-dev/sql/upgrade/1.0.0.6.sql | 11 -
install-dev/sql/upgrade/1.0.0.7.sql | 21 -
install-dev/sql/upgrade/1.0.0.8.sql | 17 -
install-dev/sql/upgrade/1.1.0.1.sql | 629 -----
install-dev/sql/upgrade/1.1.0.2.sql | 3 -
install-dev/sql/upgrade/1.1.0.3.sql | 10 -
install-dev/sql/upgrade/1.1.0.4.sql | 28 -
install-dev/sql/upgrade/1.1.0.5.sql | 20 -
install-dev/sql/upgrade/1.2.0.1.sql | 1071 --------
install-dev/sql/upgrade/1.2.0.2.sql | 610 -----
install-dev/sql/upgrade/1.2.0.3.sql | 33 -
install-dev/sql/upgrade/1.2.0.4.sql | 10 -
install-dev/sql/upgrade/1.2.0.5.sql | 17 -
install-dev/sql/upgrade/1.2.0.6.sql | 14 -
install-dev/sql/upgrade/1.2.0.7.sql | 12 -
install-dev/sql/upgrade/1.2.0.8.sql | 10 -
install-dev/sql/upgrade/1.2.1.0.sql | 16 -
install-dev/sql/upgrade/1.2.2.0.sql | 6 -
install-dev/sql/upgrade/1.2.3.0.sql | 3 -
install-dev/sql/upgrade/1.2.4.0.sql | 1 -
install-dev/sql/upgrade/1.2.5.0.sql | 1 -
install-dev/sql/upgrade/1.3.0.1.sql | 92 -
install-dev/sql/upgrade/1.3.0.10.sql | 5 -
install-dev/sql/upgrade/1.3.0.2.sql | 147 -
install-dev/sql/upgrade/1.3.0.3.sql | 15 -
install-dev/sql/upgrade/1.3.0.4.sql | 83 -
install-dev/sql/upgrade/1.3.0.5.sql | 1 -
install-dev/sql/upgrade/1.3.0.6.sql | 1 -
install-dev/sql/upgrade/1.3.0.7.sql | 3 -
install-dev/sql/upgrade/1.3.0.8.sql | 5 -
install-dev/sql/upgrade/1.3.0.9.sql | 1 -
install-dev/sql/upgrade/1.3.1.1.sql | 1 -
install-dev/sql/upgrade/1.3.2.1.sql | 3 -
install-dev/sql/upgrade/1.3.2.2.sql | 27 -
install-dev/sql/upgrade/1.3.2.3.sql | 1 -
install-dev/sql/upgrade/1.3.3.0.sql | 8 -
install-dev/sql/upgrade/1.3.4.0.sql | 1 -
install-dev/sql/upgrade/1.3.5.0.sql | 1 -
install-dev/sql/upgrade/1.3.6.0.sql | 3 -
install-dev/sql/upgrade/1.3.7.0.sql | 1 -
install-dev/sql/upgrade/1.4.0.1.sql | 2 -
install-dev/sql/upgrade/1.4.0.10.sql | 20 -
install-dev/sql/upgrade/1.4.0.11.sql | 35 -
install-dev/sql/upgrade/1.4.0.12.sql | 7 -
install-dev/sql/upgrade/1.4.0.13.sql | 1 -
install-dev/sql/upgrade/1.4.0.14.sql | 24 -
install-dev/sql/upgrade/1.4.0.15.sql | 41 -
install-dev/sql/upgrade/1.4.0.16.sql | 38 -
install-dev/sql/upgrade/1.4.0.17.sql | 22 -
install-dev/sql/upgrade/1.4.0.2.sql | 694 -----
install-dev/sql/upgrade/1.4.0.3.sql | 67 -
install-dev/sql/upgrade/1.4.0.4.sql | 21 -
install-dev/sql/upgrade/1.4.0.5.sql | 73 -
install-dev/sql/upgrade/1.4.0.6.sql | 12 -
install-dev/sql/upgrade/1.4.0.7.sql | 10 -
install-dev/sql/upgrade/1.4.0.8.sql | 35 -
install-dev/sql/upgrade/1.4.0.9.sql | 16 -
install-dev/sql/upgrade/1.4.1.0.sql | 43 -
install-dev/sql/upgrade/1.4.2.0.sql | 20 -
install-dev/sql/upgrade/1.4.2.1.sql | 3 -
install-dev/sql/upgrade/1.4.2.2.sql | 11 -
install-dev/sql/upgrade/1.4.2.3.sql | 30 -
install-dev/sql/upgrade/1.4.2.4.sql | 10 -
install-dev/sql/upgrade/1.4.2.5.sql | 4 -
install-dev/sql/upgrade/1.4.3.0.sql | 16 -
install-dev/sql/upgrade/1.4.4.0.sql | 79 -
install-dev/sql/upgrade/1.4.4.1.sql | 1 -
install-dev/sql/upgrade/1.4.5.0.sql | 55 -
install-dev/sql/upgrade/1.4.5.1.sql | 1 -
install-dev/sql/upgrade/1.4.6.0.sql | 25 -
install-dev/sql/upgrade/1.5.0.0.sql | 317 ---
install-dev/sql/upgrade/1.5.0.1.sql | 685 -----
install-dev/sql/upgrade/1.5.0.2.sql | 438 ---
install-dev/sql/upgrade/1.5.0.3.sql | 8 -
install-dev/sql/upgrade/1.5.0.4.sql | 21 -
install-dev/sql/upgrade/index.php | 36 -
install-dev/view.css | 763 ------
install-dev/xml/checkConfig.php | 89 -
install-dev/xml/checkDB.php | 29 -
install-dev/xml/checkMail.php | 44 -
install-dev/xml/checkShopInfos.php | 294 --
install-dev/xml/createDB.php | 235 --
install-dev/xml/getNonNativeModules.php | 36 -
install-dev/xml/getVersionFromDb.php | 85 -
install-dev/xml/index.php | 36 -
install-dev/xml/uploadLogo.php | 116 -
.../upgrade/upgrade.php | 0
252 files changed, 24954 deletions(-)
delete mode 100644 install-dev/classes/AddConfToFile.php
delete mode 100644 install-dev/classes/GetVersionFromDb.php
delete mode 100644 install-dev/classes/Language.php
delete mode 100644 install-dev/classes/LanguagesManager.php
delete mode 100644 install-dev/classes/Module.php
delete mode 100644 install-dev/classes/ToolsInstall.php
delete mode 100644 install-dev/classes/index.php
delete mode 100644 install-dev/controller.js
delete mode 100644 install-dev/img/01-gd100.png
delete mode 100644 install-dev/img/01-pt100.png
delete mode 100644 install-dev/img/01-pt70.png
delete mode 100644 install-dev/img/02-gd100.png
delete mode 100644 install-dev/img/02-pt100.png
delete mode 100644 install-dev/img/02-pt70.png
delete mode 100644 install-dev/img/03-gd100.png
delete mode 100644 install-dev/img/03-pt100.png
delete mode 100644 install-dev/img/03-pt70.png
delete mode 100644 install-dev/img/04-gd100.png
delete mode 100644 install-dev/img/04-pt100.png
delete mode 100644 install-dev/img/04-pt70.png
delete mode 100644 install-dev/img/05-gd100.png
delete mode 100644 install-dev/img/05-pt100.png
delete mode 100644 install-dev/img/05-pt70.png
delete mode 100644 install-dev/img/ajax-loader.gif
delete mode 100644 install-dev/img/bad.gif
delete mode 100644 install-dev/img/bg-body.png
delete mode 100755 install-dev/img/bg-contentTitle.png
delete mode 100644 install-dev/img/bg-ctnr.png
delete mode 100755 install-dev/img/bg-input-text.png
delete mode 100755 install-dev/img/bg-li-headerLinks.png
delete mode 100755 install-dev/img/bg-li-tabs-finished.png
delete mode 100755 install-dev/img/bg-li-tabs.png
delete mode 100755 install-dev/img/bg-phone_block.png
delete mode 100644 install-dev/img/bg-tab.png
delete mode 100755 install-dev/img/bg_blockInfoEnd.png
delete mode 100755 install-dev/img/bg_bt_blockInfoEnd.png
delete mode 100644 install-dev/img/bg_field.png
delete mode 100644 install-dev/img/bg_help.png
delete mode 100755 install-dev/img/bg_input_button.png
delete mode 100755 install-dev/img/bg_li_stepList.png
delete mode 100755 install-dev/img/bg_li_title.png
delete mode 100755 install-dev/img/bg_loaderSpace.png
delete mode 100755 install-dev/img/bg_moduleTable_th.png
delete mode 100644 install-dev/img/boutonpt-disabled.png
delete mode 100644 install-dev/img/boutonpt-on.png
delete mode 100644 install-dev/img/boutonpt-over.png
delete mode 100755 install-dev/img/bt - Copie.png
delete mode 100755 install-dev/img/bt-dsbl - Copie.png
delete mode 100644 install-dev/img/bt-dsbl.png
delete mode 100644 install-dev/img/bt-hover.png
delete mode 100644 install-dev/img/bt.png
delete mode 100755 install-dev/img/bt_off.png
delete mode 100755 install-dev/img/bt_off_hover.png
delete mode 100644 install-dev/img/btn-installeur.png
delete mode 100644 install-dev/img/bullet.png
delete mode 100644 install-dev/img/ico_help.gif
delete mode 100644 install-dev/img/index.php
delete mode 100644 install-dev/img/logo.png
delete mode 100644 install-dev/img/ok.gif
delete mode 100644 install-dev/img/ombrage-bas.png
delete mode 100644 install-dev/img/ombrage-droit.png
delete mode 100644 install-dev/img/phone.png
delete mode 100755 install-dev/img/pict_error.png
delete mode 100755 install-dev/img/pict_h3_infos.png
delete mode 100755 install-dev/img/pict_ok.png
delete mode 100644 install-dev/img/puce.gif
delete mode 100644 install-dev/img/shadow-left.png
delete mode 100755 install-dev/img/visu_boBlock.png
delete mode 100755 install-dev/img/visu_foBlock.png
delete mode 100644 install-dev/index.php
delete mode 100644 install-dev/langs/de.php
delete mode 100644 install-dev/langs/es.php
delete mode 100644 install-dev/langs/fr.php
delete mode 100644 install-dev/langs/index.php
delete mode 100644 install-dev/langs/it.php
delete mode 100644 install-dev/langs/list.xml
delete mode 100644 install-dev/langs/us.php
delete mode 100644 install-dev/model.php
delete mode 100644 install-dev/module_tools.php
delete mode 100644 install-dev/php/add_accounting_tab.php
delete mode 100755 install-dev/php/add_attribute_position.php
delete mode 100755 install-dev/php/add_carrier_position.php
delete mode 100644 install-dev/php/add_default_restrictions_modules_groups.php
delete mode 100644 install-dev/php/add_feature_position.php
delete mode 100644 install-dev/php/add_group_attribute_position.php
delete mode 100644 install-dev/php/add_missing_rewrite_value.php
delete mode 100644 install-dev/php/add_module_to_hook.php
delete mode 100644 install-dev/php/add_new_groups.php
delete mode 100644 install-dev/php/add_new_tab.php
delete mode 100644 install-dev/php/add_order_state.php
delete mode 100644 install-dev/php/add_stock_tab.php
delete mode 100644 install-dev/php/alter_blocklink.php
delete mode 100644 install-dev/php/alter_cms_block.php
delete mode 100644 install-dev/php/alter_productcomments_guest_index.php
delete mode 100644 install-dev/php/blocknewsletter.php
delete mode 100644 install-dev/php/check_webservice_account_table.php
delete mode 100644 install-dev/php/cms_block.php
delete mode 100644 install-dev/php/confcleaner.php
delete mode 100644 install-dev/php/country_to_timezone.php
delete mode 100755 install-dev/php/create_multistore.php
delete mode 100644 install-dev/php/customizations.php
delete mode 100644 install-dev/php/database_structure.php
delete mode 100644 install-dev/php/deactivate_custom_modules.php
delete mode 100644 install-dev/php/deliverynumber.php
delete mode 100644 install-dev/php/drop_image_type_non_unique_index.php
delete mode 100644 install-dev/php/editorial_update.php
delete mode 100644 install-dev/php/generate_ntree.php
delete mode 100644 install-dev/php/generate_order_reference.php
delete mode 100644 install-dev/php/generate_tax_rules.php
delete mode 100644 install-dev/php/gridextjs_deprecated.php
delete mode 100644 install-dev/php/hook_blocksearch_on_header.php
delete mode 100644 install-dev/php/index.php
delete mode 100644 install-dev/php/invoicenumber.php
delete mode 100644 install-dev/php/migrate_block_info_to_cms_block.php
delete mode 100644 install-dev/php/migrate_orders.php
delete mode 100644 install-dev/php/module_tools.php
delete mode 100644 install-dev/php/move_crossselling.php
delete mode 100644 install-dev/php/price_converter.php
delete mode 100644 install-dev/php/regenerate_level_depth.php
delete mode 100644 install-dev/php/remove_duplicate_category_groups.php
delete mode 100644 install-dev/php/remove_module_from_hook.php
delete mode 100644 install-dev/php/remove_tab.php
delete mode 100644 install-dev/php/reorderpositions.php
delete mode 100644 install-dev/php/set_product_suppliers.php
delete mode 100644 install-dev/php/set_stock_available.php
delete mode 100755 install-dev/php/setallgroupsonhomecategory.php
delete mode 100644 install-dev/php/setdiscountcategory.php
delete mode 100644 install-dev/php/setpaymentmodule.php
delete mode 100644 install-dev/php/setpaymentmodulegroup.php
delete mode 100644 install-dev/php/shop_url.php
delete mode 100644 install-dev/php/update_carrier_url.php
delete mode 100644 install-dev/php/update_feature_detachable_cache.php
delete mode 100644 install-dev/php/update_for_13version.php
delete mode 100644 install-dev/php/update_image_size_in_db.php
delete mode 100644 install-dev/php/update_module_followup.php
delete mode 100644 install-dev/php/update_module_loyalty.php
delete mode 100644 install-dev/php/update_modules_multishop.php
delete mode 100644 install-dev/php/update_order_canada.php
delete mode 100644 install-dev/php/update_order_detail_taxes.php
delete mode 100644 install-dev/php/update_order_details.php
delete mode 100644 install-dev/php/update_products_ecotax_v133.php
delete mode 100644 install-dev/php/update_stock_mvt_reason.php
delete mode 100644 install-dev/php/updatemodulessql.php
delete mode 100644 install-dev/php/updateproductcomments.php
delete mode 100644 install-dev/php/updatetabicon_from_11version.php
delete mode 100644 install-dev/php/utf8.php
delete mode 100644 install-dev/preactivation.php
delete mode 100644 install-dev/sql/db.sql
delete mode 100644 install-dev/sql/db_settings_extends.sql
delete mode 100644 install-dev/sql/db_settings_lite.sql
delete mode 100644 install-dev/sql/index.php
delete mode 100644 install-dev/sql/upgrade/0.9.1.2.sql
delete mode 100644 install-dev/sql/upgrade/0.9.1.sql
delete mode 100644 install-dev/sql/upgrade/0.9.5.1.sql
delete mode 100644 install-dev/sql/upgrade/0.9.5.2.sql
delete mode 100644 install-dev/sql/upgrade/0.9.6.1.sql
delete mode 100644 install-dev/sql/upgrade/0.9.6.2.sql
delete mode 100644 install-dev/sql/upgrade/0.9.7.1.sql
delete mode 100644 install-dev/sql/upgrade/0.9.7.2.sql
delete mode 100644 install-dev/sql/upgrade/0.9.sql
delete mode 100644 install-dev/sql/upgrade/1.0.0.1.sql
delete mode 100644 install-dev/sql/upgrade/1.0.0.2.sql
delete mode 100644 install-dev/sql/upgrade/1.0.0.3.sql
delete mode 100644 install-dev/sql/upgrade/1.0.0.4.sql
delete mode 100644 install-dev/sql/upgrade/1.0.0.5.sql
delete mode 100644 install-dev/sql/upgrade/1.0.0.6.sql
delete mode 100644 install-dev/sql/upgrade/1.0.0.7.sql
delete mode 100644 install-dev/sql/upgrade/1.0.0.8.sql
delete mode 100644 install-dev/sql/upgrade/1.1.0.1.sql
delete mode 100644 install-dev/sql/upgrade/1.1.0.2.sql
delete mode 100644 install-dev/sql/upgrade/1.1.0.3.sql
delete mode 100644 install-dev/sql/upgrade/1.1.0.4.sql
delete mode 100644 install-dev/sql/upgrade/1.1.0.5.sql
delete mode 100644 install-dev/sql/upgrade/1.2.0.1.sql
delete mode 100644 install-dev/sql/upgrade/1.2.0.2.sql
delete mode 100644 install-dev/sql/upgrade/1.2.0.3.sql
delete mode 100644 install-dev/sql/upgrade/1.2.0.4.sql
delete mode 100644 install-dev/sql/upgrade/1.2.0.5.sql
delete mode 100644 install-dev/sql/upgrade/1.2.0.6.sql
delete mode 100644 install-dev/sql/upgrade/1.2.0.7.sql
delete mode 100644 install-dev/sql/upgrade/1.2.0.8.sql
delete mode 100644 install-dev/sql/upgrade/1.2.1.0.sql
delete mode 100644 install-dev/sql/upgrade/1.2.2.0.sql
delete mode 100644 install-dev/sql/upgrade/1.2.3.0.sql
delete mode 100644 install-dev/sql/upgrade/1.2.4.0.sql
delete mode 100644 install-dev/sql/upgrade/1.2.5.0.sql
delete mode 100644 install-dev/sql/upgrade/1.3.0.1.sql
delete mode 100644 install-dev/sql/upgrade/1.3.0.10.sql
delete mode 100644 install-dev/sql/upgrade/1.3.0.2.sql
delete mode 100644 install-dev/sql/upgrade/1.3.0.3.sql
delete mode 100644 install-dev/sql/upgrade/1.3.0.4.sql
delete mode 100644 install-dev/sql/upgrade/1.3.0.5.sql
delete mode 100644 install-dev/sql/upgrade/1.3.0.6.sql
delete mode 100755 install-dev/sql/upgrade/1.3.0.7.sql
delete mode 100644 install-dev/sql/upgrade/1.3.0.8.sql
delete mode 100644 install-dev/sql/upgrade/1.3.0.9.sql
delete mode 100644 install-dev/sql/upgrade/1.3.1.1.sql
delete mode 100755 install-dev/sql/upgrade/1.3.2.1.sql
delete mode 100755 install-dev/sql/upgrade/1.3.2.2.sql
delete mode 100755 install-dev/sql/upgrade/1.3.2.3.sql
delete mode 100644 install-dev/sql/upgrade/1.3.3.0.sql
delete mode 100644 install-dev/sql/upgrade/1.3.4.0.sql
delete mode 100644 install-dev/sql/upgrade/1.3.5.0.sql
delete mode 100755 install-dev/sql/upgrade/1.3.6.0.sql
delete mode 100644 install-dev/sql/upgrade/1.3.7.0.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.1.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.10.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.11.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.12.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.13.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.14.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.15.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.16.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.17.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.2.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.3.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.4.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.5.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.6.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.7.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.8.sql
delete mode 100644 install-dev/sql/upgrade/1.4.0.9.sql
delete mode 100755 install-dev/sql/upgrade/1.4.1.0.sql
delete mode 100644 install-dev/sql/upgrade/1.4.2.0.sql
delete mode 100644 install-dev/sql/upgrade/1.4.2.1.sql
delete mode 100644 install-dev/sql/upgrade/1.4.2.2.sql
delete mode 100644 install-dev/sql/upgrade/1.4.2.3.sql
delete mode 100644 install-dev/sql/upgrade/1.4.2.4.sql
delete mode 100644 install-dev/sql/upgrade/1.4.2.5.sql
delete mode 100644 install-dev/sql/upgrade/1.4.3.0.sql
delete mode 100644 install-dev/sql/upgrade/1.4.4.0.sql
delete mode 100755 install-dev/sql/upgrade/1.4.4.1.sql
delete mode 100644 install-dev/sql/upgrade/1.4.5.0.sql
delete mode 100755 install-dev/sql/upgrade/1.4.5.1.sql
delete mode 100644 install-dev/sql/upgrade/1.4.6.0.sql
delete mode 100755 install-dev/sql/upgrade/1.5.0.0.sql
delete mode 100644 install-dev/sql/upgrade/1.5.0.1.sql
delete mode 100644 install-dev/sql/upgrade/1.5.0.2.sql
delete mode 100644 install-dev/sql/upgrade/1.5.0.3.sql
delete mode 100644 install-dev/sql/upgrade/1.5.0.4.sql
delete mode 100644 install-dev/sql/upgrade/index.php
delete mode 100644 install-dev/view.css
delete mode 100644 install-dev/xml/checkConfig.php
delete mode 100644 install-dev/xml/checkDB.php
delete mode 100644 install-dev/xml/checkMail.php
delete mode 100644 install-dev/xml/checkShopInfos.php
delete mode 100644 install-dev/xml/createDB.php
delete mode 100644 install-dev/xml/getNonNativeModules.php
delete mode 100644 install-dev/xml/getVersionFromDb.php
delete mode 100644 install-dev/xml/index.php
delete mode 100644 install-dev/xml/uploadLogo.php
rename install-dev/xml/doUpgrade.php => install-new/upgrade/upgrade.php (100%)
diff --git a/install-dev/classes/AddConfToFile.php b/install-dev/classes/AddConfToFile.php
deleted file mode 100644
index c3205de4b..000000000
--- a/install-dev/classes/AddConfToFile.php
+++ /dev/null
@@ -1,91 +0,0 @@
-
-* @copyright 2007-2011 PrestaShop SA
-* @version Release: $Revision: 6844 $
-* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
-* International Registered Trademark & Property of PrestaShop SA
-*/
-
-class AddConfToFile
-{
- public $fd;
- public $file;
- public $mode;
- public $error = false;
-
- public function __construct($file, $mode = 'r+')
- {
- $this->file = $file;
- $this->mode = $mode;
- $this->checkFile($file);
- if ($mode == 'w' AND !$this->error)
- if (!$res = @fwrite($this->fd, 'error = 6;
- }
-
- public function __destruct()
- {
- if (!$this->error)
- @fclose($this->fd);
- }
-
- private function checkFile($file)
- {
- if (!$fd = @fopen($this->file, $this->mode))
- $this->error = 5;
- elseif (!is_writable($this->file))
- $this->error = 6;
- $this->fd = $fd;
- }
-
- public function writeInFile($name, $data)
- {
- if (!$res = @fwrite($this->fd,
- 'define(\''.$name.'\', \''.$this->checkString($data).'\');'."\n"))
- {
- $this->error = 6;
- return false;
- }
- return true;
- }
-
- public function writeEndTagPhp()
- {
- if (!$res = @fwrite($this->fd, '?>'."\n")) {
- $this->error = 6;
- return false;
- }
- return true;
- }
-
- public function checkString($string)
- {
- if (get_magic_quotes_gpc())
- $string = stripslashes($string);
- if (!is_numeric($string))
- {
- $string = addslashes($string);
- $string = strip_tags(nl2br($string));
- }
- return $string;
- }
-}
diff --git a/install-dev/classes/GetVersionFromDb.php b/install-dev/classes/GetVersionFromDb.php
deleted file mode 100644
index a5d106065..000000000
--- a/install-dev/classes/GetVersionFromDb.php
+++ /dev/null
@@ -1,667 +0,0 @@
-
-* @copyright 2007-2011 PrestaShop SA
-* @version Release: $Revision: 6844 $
-* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
-* International Registered Trademark & Property of PrestaShop SA
-*/
-
-/**
- * This class search Prestashop version from current database structure
- *
- * @since 1.4.2.3
- * @todo (priority low) compare index keys updates ; compare types range ; add custom methods to search versions with no SQL updates
- */
-class GetVersionFromDb
-{
- /**
- * @var array Because of some errors and differences between some upgrades files and some db.sql files, we need to ignore some fields.
- */
- private $ignore = array(
- 'blocklink' => array(
- 'fields' => array('id_link', 'id_blocklink'),
- ),
- 'blocklink_lang' => array(
- 'fields' => array('id_link', 'id_blocklink'),
- 'keys' => array('primary'),
- ),
- 'cms_block' => array(
- 'fields' => array('id_block_cms', 'id_cms_block', 'display_store'),
- ),
- 'cms_block_lang' => array(
- 'fields' => array('id_block_cms', 'id_cms_block'),
- ),
- 'cms_block_page' => array(
- 'fields' => array('id_block_cms_page', 'id_cms_block_page'),
- ),
- 'cms_lang' => array(
- 'types' => array('content'),
- ),
- 'log_email' => array(
- 'keys' => array('date_add', 'id_cart'),
- ),
- 'newsletter' => array(
- 'fields' => array('http_referer'),
- ),
- 'order_detail' => array(
- 'fields' => array('group_reduction', 'ecotax_tax_rate', 'id_currency', 'reduction_percent', 'reduction_amount'),
- ),
- 'webservice_account' => array(
- 'fields' => array('is_module', 'module_name'),
- ),
- );
-
- /**
- * @var string Path to install directory
- */
- private $installPath;
-
- /**
- * @var array Store schemas of all upgrades
- */
- private $schemas = array();
-
- /**
- * @var array Store db.sql schema
- */
- private $generalSchema = null;
-
- /**
- * @var array Store current database schema
- */
- private $currentSchema = null;
-
- /**
- * @var bool If set to false, will compare all data of each table to get full error log
- */
- private $fastExecution = false;
-
- /**
- * @var bool If true, fields type will be compared too
- */
- private $compareTypes = true;
-
- /**
- * @var int Store microtime of the script execution
- */
- private $totalTime = 0;
-
- /**
- * @var array Error log
- */
- private $errors = array();
-
- /**
- * @var array Prefix for current database
- */
- private $prefix;
-
- /**
- * @var string Found versions
- */
- private $versions = array();
-
- /**
- * Constructor, launch the compare algorithm
- *
- * @param bool $compareTypes If true, will compare field types
- * @param bool $fastExecution If false, will loose some performance but log all errors
- */
- public function __construct($compareTypes = true, $fastExecution = false)
- {
- // added for compatibility prestashop version < 1.3.7
- if(!defined('_PS_CACHE_ENABLED_'))
- define('_PS_CACHE_ENABLED_', '0');
-
- $this->installPath = INSTALL_PATH . '/';
- $this->prefix = _DB_PREFIX_;
- $this->compareTypes = $compareTypes;
- $this->fastExecution = $fastExecution;
-
- $start = microtime(true);
- $this->generateSchemasFromUpdates();
- $this->getDatabaseSchema();
- $this->versions = $this->searchCurrentVersion();
- $this->totalTime = microtime(true) - $start;
- }
-
- /**
- * @return int Get total execution time of class
- */
- public function getTotalTime()
- {
- return $this->totalTime;
- }
-
- /**
- * @return array Get list of differences between current database and all upgrades
- */
- public function getErrors($version = null)
- {
- if (!is_null($version))
- {
- return isset($this->errors[$version]) ? $this->errors[$version] : array();
- }
- return $this->errors;
- }
-
- /**
- * @return string Get found versions
- */
- public function getVersions()
- {
- return $this->versions;
- }
-
- /**
- * Add more informations in database schema property in order to fix some troubles with missing data between db.sql and upgrades
- */
- private function completeDatabaseSchema()
- {
- // Add key "discount" in "discount_category" table, because the name is different between the 1.2.2 upgrade and db.sql
- if (isset($this->currentSchema['discount_category']['@keys']['id_discount']))
- $this->currentSchema['discount_category']['@keys']['discount'] = $this->currentSchema['discount_category']['@keys']['id_discount'];
- }
-
- /**
- * Get the schema of all updates
- */
- private function generateSchemasFromUpdates()
- {
- // Get list of sorted upgrades
- $fd = opendir($this->installPath . 'sql/upgrade');
- while ($file = readdir($fd))
- {
- if (substr($file, -3, 3) == 'sql' && version_compare(substr($file, 0, -4), INSTALL_VERSION) <= 0)
- {
- $list[] = $file;
- }
- }
- closedir($fd);
- usort($list, 'version_compare');
- $list = array_reverse($list);
-
- for ($i = 0, $total = count($list); $i < $total - 1; $i++)
- {
- $file = $list[$i];
- $next = $list[$i + 1];
-
- $this->generateSchema(substr($file, 0, -4), substr($next, 0, -4));
- }
- }
-
- /**
- * Generate the schema of the given version
- *
- * @param string $currentVersion Version name
- * @param string $nextVersion Next version
- */
- private function generateSchema($currentVersion, $nextVersion)
- {
- static $storeTypes = array();
-
- // Load db.sql once
- if (is_null($this->generalSchema))
- {
- $this->loadGeneralSchema();
- }
-
- $this->schemas[] = array(
- 'name' => $nextVersion,
- 'struct' => array(),
- );
-
- // Read queries in upgrade files, and reverse structure from db.sql
- if (!file_exists($this->installPath . 'sql/upgrade/' . $currentVersion . '.sql'))
- {
- throw new Exception('File sql/upgrade/' . $currentVersion . '.sql not found');
- }
-
- $struct = (count($this->schemas) >= 2) ? $this->schemas[count($this->schemas) - 2]['struct'] : $this->generalSchema;
- $content = file_get_contents($this->installPath . 'sql/upgrade/' . $currentVersion . '.sql');
- $queries = array_reverse(preg_split("/;\s*[\r\n]+/", $content));
- foreach ($queries as $query)
- {
- $query = trim($query);
-
- // ALTER TABLE -> add, delete or update fields
- if (preg_match('#^alter\s+table\s+`?prefix_([a-z0-9_]+)`?\s+#si', $query, $m))
- {
- $table = $m[1];
-
- // Alter drop index
- preg_match_all('#\s*drop\s+(index|primary key)(\s+`?([a-z0-9_]+)`?)?#si', $query, $m);
- for ($i = 0, $total = count($m[0]); $i < $total; $i++)
- {
- $name = $m[3][$i];
- if (strtolower($m[1][$i]) == 'primary key')
- {
- $name = 'primary';
- }
-
- $struct[$table]['@keys'][$name] = '?';
- $query = str_replace($m[0][$i], '', $query);
- }
-
- // Alter add index
- preg_match_all('#\s*add\s+(index|primary key|key|unique key|unique)\s*\(?([a-z0-9_,`\s]+)\)?(\s+\(([a-z0-9_,` ]+)\))?\s*(,|;|$)#si', $query, $m);
- for ($i = 0, $total = count($m[0]); $i < $total; $i++)
- {
- $name = str_replace(array('`', ' '), array('', ''), $m[2][$i]);
- $tmpName = explode(',', $name);
- $name = $tmpName[0];
-
- if (strtolower($m[1][$i] == 'primary key'))
- {
- $name = 'primary';
- }
-
- if (isset($struct[$table]['@keys']) && !isset($struct[$table]['@keys'][$name]))
- {
- // If key name doesn't exist, we try to match with list of fields and type
- $type = strtolower($m[1][$i]);
- if ($type == 'primary key')
- {
- $type = 'primary';
- }
- else if ($type == 'key')
- {
- $type = 'index';
- }
- else if ($type == 'unique key')
- {
- $type = 'unique';
- }
-
- $fields = ($m[4][$i]) ? $m[4][$i] : $m[2][$i];
- $fields = explode(',', preg_replace('#[\s`]#si', '', $fields));
-
- foreach ($struct[$table]['@keys'] as $key => $data)
- {
- if ($data['type'] == $type && !array_diff($data['fields'], $fields))
- {
- // Found it !
- unset($struct[$table]['@keys'][$key]);
- break;
- }
- }
- }
- else
- {
- unset($struct[$table]['@keys'][$name]);
- }
- $query = str_replace($m[0][$i], '', $query);
- }
-
- // Alter add
- preg_match_all('#\s*add\s+`?([a-z0-9_]+)`?\s+(([a-z]+)(\([ 0-9,]+\))?(\s+unsigned)?)(\s+not)?(\s+null)?(\s+auto_increment)?(\s+primary)?#si', $query, $m);
- for ($i = 0, $total = count($m[0]); $i < $total; $i++)
- {
- unset($struct[$table][$m[1][$i]]);
- if (strtolower(trim($m[9][$i])) == 'primary')
- {
- unset($struct[$table]['@keys']['primary']);
- }
- }
-
- // Alter drop
- preg_match_all('#\s*drop\s+`?([a-z0-9_]+)`?#si', $query, $m);
- for ($i = 0, $total = count($m[0]); $i < $total; $i++)
- {
- $struct[$table][$m[1][$i]] = '?';
- }
-
- // Alter change
- preg_match_all('#\s*change\s+`([a-z0-9_]+)`\s+`?([a-z0-9_]+)`?\s+([a-z]+)(\s*\([ 0-9,]+\))?(\s+unsigned)?#si', $query, $m);
- for ($i = 0, $total = count($m[0]); $i < $total; $i++)
- {
- if ($m[1][$i] != $m[2][$i])
- {
- unset($struct[$table][$m[1][$i]]);
- }
- $struct[$table][$m[2][$i]] = '?';
- }
- }
- // CREATE TABLE -> delete this table from structure
- else if (preg_match('#^create\s+table\s+(if\s+not\s+exists\s+)?`?prefix_([a-z0-9_]+)`?#si', $query, $m) && !preg_match('#_tmp[0-9]?$#i', $m[2]))
- {
- unset($struct[$m[2]]);
- }
- // DROP TABLE -> add this table in structure
- else if (preg_match('#^drop\s*table\s+(if\s+exists\s+)?`?prefix_([a-z0-9_]+)`?#si', $query, $m) && !preg_match('#_tmp[0-9]?$#i', $m[2]))
- {
- $struct[$m[2]] = array();
- }
- }
-
- $this->schemas[count($this->schemas) - 1]['struct'] = $struct;
- }
-
- /**
- * Read db.sql file and load tables structure
- */
- private function loadGeneralSchema()
- {
- $this->generalSchema = array();
- if (!file_exists($this->installPath . 'sql/db.sql'))
- {
- throw new Exception('File sql/db.sql not found');
- }
-
- // Get create queries from db.sql file
- $content = file_get_contents($this->installPath . 'sql/db.sql');
- $queries = preg_split("/;\s*[\r\n]+/", $content);
- foreach ($queries as $query)
- {
- $query = trim($query);
- if (!preg_match('#^create table `?prefix_([a-z0-9_]+)`?\s#i', $query, $m))
- {
- continue;
- }
-
- $table = $m[1];
- $this->generalSchema[$table] = array();
-
- // Get fields list
- preg_match_all('#(\(|,)\s*`?([a-z0-9_]+)`?\s+(([a-z]+)(\([ 0-9,]+\))?(\s+unsigned)?)\s*[^,]*#si', $query, $m);
- for ($i = 0, $total = count($m[0]); $i < $total; $i++)
- {
- if (in_array(strtolower($m[2][$i]), array('primary', 'key', 'unique', 'index')))
- {
- continue;
- }
- $this->generalSchema[$table][$m[2][$i]] = $this->parseType($m[4][$i]);
- }
-
- // Get index
- $this->generalSchema[$table]['@keys'] = array();
- preg_match_all('#(primary\s+key|unique\s+key|key|index)\s+\(?`?([a-z0-9_,` ]+)`?\)?(\s+\(([a-z0-9_,` ]+)\))?\s*(,|\))#si', $query, $m);
- for ($i = 0, $total = count($m[0]); $i < $total; $i++)
- {
- $type = strtolower($m[1][$i]);
- if ($type == 'primary key')
- {
- $type = 'primary';
- }
- else if ($type == 'key')
- {
- $type = 'index';
- }
- else if ($type == 'unique key')
- {
- $type = 'unique';
- }
-
- $name = str_replace(array('`', ' '), array('', ''), $m[2][$i]);
- $tmpName = explode(',', $name);
- $name = $tmpName[0];
- if ($type == 'primary')
- {
- $name = 'primary';
- }
-
- $fields = ($m[4][$i]) ? $m[4][$i] : $m[2][$i];
- $fields = explode(',', preg_replace('#[\s`]#si', '', $fields));
-
- $this->generalSchema[$table]['@keys'][$name] = array(
- 'type' => $type,
- 'fields' => $fields,
- );
- }
- }
-
- $this->schemas[] = array(
- 'name' => INSTALL_VERSION,
- 'struct' => $this->generalSchema,
- );
- }
-
- /**
- * Get the schema of current database
- */
- private function getDatabaseSchema()
- {
- $struct = array();
- $sql = 'SHOW TABLES';
- foreach (Db::getInstance()->executeS($sql) as $row)
- {
- $table = current($row);
- if (substr($table, 0, strlen($this->prefix)) != $this->prefix)
- {
- continue;
- }
-
- $virtualTable = substr($table, strlen($this->prefix));
- $struct[$virtualTable] = array();
-
- // List fields
- $sql = 'SHOW FIELDS FROM ' . $table;
- foreach (Db::getInstance()->executeS($sql) as $rowField)
- {
- $struct[$virtualTable][$rowField['Field']] = $this->parseType($rowField['Type']);
- }
-
- // List keys
- $struct[$virtualTable]['@keys'] = array();
- $sql = 'SHOW INDEX FROM ' . $table;
- $results = Db::getInstance()->executeS($sql);
- if($results)
- foreach ($results as $rowIndex)
- {
- $keyName = strtolower($rowIndex['Key_name']);
- $type = 'index';
- if ($keyName == 'primary')
- {
- $type = 'primary';
- }
- else if (!$rowIndex['Non_unique'])
- {
- $type = 'unique';
- }
-
- if (!isset($struct[$virtualTable]['@keys'][$keyName]))
- {
- $struct[$virtualTable]['@keys'][$keyName] = array(
- 'type' => $type,
- 'fields' => array(),
- );
- }
- $struct[$virtualTable]['@keys'][$keyName]['fields'][] = $rowIndex['Column_name'];
- }
- }
-
- $this->currentSchema = $struct;
- $this->completeDatabaseSchema();
- }
-
- /**
- * Launch comparison and search current version
- */
- private function searchCurrentVersion()
- {
- $this->errors = array();
- $version = null;
- $versions = array();
- $state = 0;
-
- // Browse all schema, we will compare all data of listed schema to current database structure, evertytime something is different
- // we break and go to next schema
- foreach ($this->schemas as $schema)
- {
- $struct = $schema['struct'];
- $this->errors[$schema['name']] = array();
- $isThisVersion = true;
-
- // Browse all table for schema
- foreach ($struct as $table => $fields)
- {
- // Is this table ignored ?
- if (isset($this->ignore[$table]) && !$this->ignore[$table])
- {
- continue;
- }
-
- // Check if table exists
- if (!isset($this->currentSchema[$table]))
- {
- $this->errors[$schema['name']][] = "Table '$table' not found";
- $isThisVersion = false;
-
- if ($this->fastExecution)
- {
- break;
- }
- continue;
- }
-
- // Browse all fields for this table
- foreach ($fields as $field => $type)
- {
- if ($field == '@keys')
- {
- continue;
- }
-
- // Is this field ignored ?
- if (isset($this->ignore[$table], $this->ignore[$table]['fields']) && in_array($field, $this->ignore[$table]['fields']))
- {
- continue;
- }
-
- // Check if field exists
- if (!isset($this->currentSchema[$table][$field]))
- {
- $this->errors[$schema['name']][] = "Field '$field' in table '$table' not found";
- $isThisVersion = false;
-
- if ($this->fastExecution)
- {
- break 2;
- }
- continue;
- }
-
- // Is this type ignored ?
- if (isset($this->ignore[$table], $this->ignore[$table]['types']) && in_array($field, $this->ignore[$table]['types']))
- {
- continue;
- }
-
- // Compare the field type, ignore comparaison if we don't know the field type (? char)
- if ($this->compareTypes && $type != '?' && $this->currentSchema[$table][$field] != $type)
- {
- $this->errors[$schema['name']][] = "The field '$field' in table '$table' has a different type ('$type' :: '{$this->currentSchema[$table][$field]}')";
- $isThisVersion = false;
-
- if ($this->fastExecution)
- {
- break 2;
- }
- }
- }
-
- // Compare index
- if (isset($fields['@keys']))
- {
- foreach ($fields['@keys'] as $name => $data)
- {
- if ($data == '?')
- {
- continue;
- }
-
- // Is this index ignored ?
- if (isset($this->ignore[$table], $this->ignore[$table]['keys']) && in_array($name, $this->ignore[$table]['keys']))
- {
- continue;
- }
-
- // Test if index exists
- if (!isset($this->currentSchema[$table]['@keys'][$name]))
- {
- $this->errors[$schema['name']][] = "Key '$name' in table '$table' not found";
- $isThisVersion = false;
-
- if ($this->fastExecution)
- {
- break 2;
- }
- continue;
- }
-
- // Compare index type
- if ($this->currentSchema[$table]['@keys'][$name]['type'] != $data['type'])
- {
- $this->errors[$schema['name']][] = "Key '$name' in table '$table' has different type ('{$this->currentSchema[$table]['@keys'][$name]['type']}', '{$data['type']}')";
- $isThisVersion = false;
-
- if ($this->fastExecution)
- {
- break 2;
- }
- }
-
- // Compare list of fields
- $diff = array_diff($this->currentSchema[$table]['@keys'][$name]['fields'], $data['fields']);
- if ($diff)
- {
- $this->errors[$schema['name']][] = "Key '$name' in table '$table' has different fields ('" . implode("', '", $diff) . "')";
- $isThisVersion = false;
-
- if ($this->fastExecution)
- {
- break 2;
- }
- }
- }
- }
- }
-
- if ($isThisVersion)
- {
- $versions[] = $schema['name'];
- $state = 1;
- }
-
- if (!$isThisVersion && $state == 1)
- {
- break;
- }
- }
-
- return ($versions);
- }
-
- /**
- * Format correctly a field type name
- *
- * @param string $type Type name
- * @return Parsed type name
- */
- private function parseType($type)
- {
- $type = strtolower(preg_replace('#^([a-z]+).*$#i', '\\1', $type));
- $type = str_replace('boolean', 'tinyint', $type);
-
- return $type;
- }
-}
diff --git a/install-dev/classes/Language.php b/install-dev/classes/Language.php
deleted file mode 100644
index 9b46d326f..000000000
--- a/install-dev/classes/Language.php
+++ /dev/null
@@ -1,652 +0,0 @@
-
-* @copyright 2007-2011 PrestaShop SA
-* @version Release: $Revision: 7442 $
-* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
-* International Registered Trademark & Property of PrestaShop SA
-*/
-
-class Language extends ObjectModel
-{
- public $id;
-
- /** @var string Name */
- public $name;
-
- /** @var string 2-letter iso code */
- public $iso_code;
-
- /** @var string 5-letter iso code */
- public $language_code;
-
- /** @var bool true if this language is right to left language */
- public $is_rtl = false;
-
- /** @var boolean Status */
- public $active = true;
-
- protected $fieldsRequired = array('name', 'iso_code');
- protected $fieldsSize = array('name' => 32, 'iso_code' => 2, 'language_code' => 5);
- protected $fieldsValidate = array('name' => 'isGenericName', 'iso_code' => 'isLanguageIsoCode', 'language_code' => 'isLanguageCode', 'active' => 'isBool', 'is_rtl' => 'isBool');
-
- protected $table = 'lang';
- protected $identifier = 'id_lang';
-
- /** @var array Languages cache */
- protected static $_checkedLangs;
- protected static $_LANGUAGES;
- protected static $countActiveLanguages;
-
- protected $webserviceParameters = array(
- 'objectNodeName' => 'language',
- 'objectsNodeName' => 'languages',
- );
-
- public function __construct($id = NULL, $id_lang = NULL)
- {
- parent::__construct($id);
- }
-
- public function getFields()
- {
- parent::validateFields();
- $fields['name'] = pSQL($this->name);
- $fields['iso_code'] = pSQL(strtolower($this->iso_code));
- $fields['language_code'] = pSQL(strtolower($this->language_code));
- $fields['is_rtl'] = (int)$this->is_rtl;
- if (empty($fields['language_code']))
- $fields['language_code'] = $fields['iso_code'];
- $fields['active'] = (int)$this->active;
- return $fields;
- }
-
- public function add($autodate = true, $nullValues = false)
- {
- if (!parent::add($autodate))
- return false;
-
- $translationsFiles = array(
- 'fields' => '_FIELDS',
- 'errors' => '_ERRORS',
- 'admin' => '_LANGADM',
- 'pdf' => '_LANGPDF',
- );
- if (!file_exists(_PS_TRANSLATIONS_DIR_.$this->iso_code))
- mkdir(_PS_TRANSLATIONS_DIR_.$this->iso_code);
- foreach ($translationsFiles as $file => $var)
- if (!file_exists(_PS_TRANSLATIONS_DIR_.$this->iso_code.'/'.$file.'.php'))
- file_put_contents(_PS_TRANSLATIONS_DIR_.$this->iso_code.'/'.$file.'.php', '');
-
- $resUpdateSQL = $this->loadUpdateSQL();
- // If url_rewrite is not enabled, we don't need to regenerate .htaccess
- if(!Configuration::get('PS_REWRITING_SETTINGS'))
- return $resUpdateSQL;
-
- return ($resUpdateSQL AND Tools::generateHtaccess(dirname(__FILE__).'/../.htaccess',
- (int)(Configuration::get('PS_REWRITING_SETTINGS')),
- (int)(Configuration::get('PS_HTACCESS_CACHE_CONTROL')),
- ''
- ));
- }
-
- public function toggleStatus()
- {
- if (!parent::toggleStatus())
- return false;
-
- // If url_rewrite is not enabled, we don't need to regenerate .htaccess
- if(!Configuration::get('PS_REWRITING_SETTINGS'))
- return true;
- return (Tools::generateHtaccess(dirname(__FILE__).'/../.htaccess',
- (int)(Configuration::get('PS_REWRITING_SETTINGS')),
- (int)(Configuration::get('PS_HTACCESS_CACHE_CONTROL')),
- ''
- ));
- }
-
- public function checkFiles()
- {
- return self::checkFilesWithIsoCode($this->iso_code);
- }
-
-
- /**
- * This functions checks if every files exists for the language $iso_code.
- * Concerned files are those located in translations/$iso_code/
- * and translations/mails/$iso_code .
- *
- * @param mixed $iso_code
- * @returntrue if all files exists
- */
- public static function checkFilesWithIsoCode($iso_code)
- {
- if (isset(self::$_checkedLangs[$iso_code]) AND self::$_checkedLangs[$iso_code])
- return true;
- foreach (array_keys(self::getFilesList($iso_code, _THEME_NAME_, false, false, false, true)) as $key)
- if (!file_exists($key))
- return false;
- self::$_checkedLangs[$iso_code] = true;
- return true;
- }
-
- public static function getFilesList($iso_from, $theme_from, $iso_to = false, $theme_to = false, $select = false, $check = false, $modules = false)
- {
- if (empty($iso_from))
- die(Tools::displayError());
-
- $copy = ($iso_to AND $theme_to) ? true : false;
-
- $lPath_from = _PS_TRANSLATIONS_DIR_.(string)$iso_from.'/';
- $tPath_from = _PS_ROOT_DIR_.'/themes/'.(string)$theme_from.'/';
- $mPath_from = _PS_MAIL_DIR_.(string)$iso_from.'/';
-
- if ($copy)
- {
- $lPath_to = _PS_TRANSLATIONS_DIR_.(string)$iso_to.'/';
- $tPath_to = _PS_ROOT_DIR_.'/themes/'.(string)$theme_to.'/';
- $mPath_to = _PS_MAIL_DIR_.(string)$iso_to.'/';
- }
-
- $lFiles = array('admin'.'.php', 'errors'.'.php', 'fields'.'.php', 'pdf'.'.php');
- $mFiles = array(
- 'account.html', 'account.txt',
- 'bankwire.html', 'bankwire.txt',
- 'cheque.html', 'cheque.txt',
- 'contact.html', 'contact.txt',
- 'contact_form.html', 'contact_form.txt',
- 'credit_slip.html', 'credit_slip.txt',
- 'download_product.html', 'download_product.txt',
- 'download-product.tpl',
- 'employee_password.html', 'employee_password.txt',
- 'forward_msg.html', 'forward_msg.txt',
- 'guest_to_customer.html', 'guest_to_customer.txt',
- 'in_transit.html', 'in_transit.txt',
- 'newsletter.html', 'newsletter.txt',
- 'order_canceled.html', 'order_canceled.txt',
- 'order_conf.html', 'order_conf.txt',
- 'order_customer_comment.html', 'order_customer_comment.txt',
- 'order_merchant_comment.html', 'order_merchant_comment.txt',
- 'order_return_state.html', 'order_return_state.txt',
- 'outofstock.html', 'outofstock.txt',
- 'password.html', 'password.txt',
- 'password_query.html', 'password_query.txt',
- 'payment.html', 'payment.txt',
- 'payment_error.html', 'payment_error.txt',
- 'preparation.html', 'preparation.txt',
- 'refund.html', 'refund.txt',
- 'reply_msg.html', 'reply_msg.txt',
- 'shipped.html', 'shipped.txt',
- 'test.html', 'test.txt',
- 'voucher.html', 'voucher.txt',
- );
-
- $number = -1;
-
- $files = array();
- $files_tr = array();
- $files_theme = array();
- $files_mail = array();
- $files_modules = array();
-
-
- // When a copy is made from a theme in specific language
- // to an other theme for the same language,
- // it's avoid to copy Translations, Mails files
- // and modules files which are not override by theme.
- if (!$copy OR $iso_from != $iso_to)
- {
- // Translations files
- if (!$check OR ($check AND (string)$iso_from != 'en'))
- foreach ($lFiles as $file)
- $files_tr[$lPath_from.$file] = ($copy ? $lPath_to.$file : ++$number);
- if ($select == 'tr')
- return $files_tr;
- $files = array_merge($files, $files_tr);
-
- // Mail files
- if (!$check OR ($check AND (string)$iso_from != 'en'))
- $files_mail[$mPath_from.'lang.php'] = ($copy ? $mPath_to.'lang.php' : ++$number);
- foreach ($mFiles as $file)
- $files_mail[$mPath_from.$file] = ($copy ? $mPath_to.$file : ++$number);
- if ($select == 'mail')
- return $files_mail;
- $files = array_merge($files, $files_mail);
-
- // Modules
- if ($modules)
- {
- $modList = Module::getModulesDirOnDisk();
- foreach ($modList as $mod)
- {
- $modDir = _PS_MODULE_DIR_.$mod;
- // Lang file
- if (file_exists($modDir.'/'.(string)$iso_from.'.php'))
- $files_modules[$modDir.'/'.(string)$iso_from.'.php'] = ($copy ? $modDir.'/'.(string)$iso_to.'.php' : ++$number);
- // Mails files
- $modMailDirFrom = $modDir.'/mails/'.(string)$iso_from;
- $modMailDirTo = $modDir.'/mails/'.(string)$iso_to;
- if (file_exists($modMailDirFrom))
- {
- $dirFiles = scandir($modMailDirFrom);
- foreach ($dirFiles as $file)
- if (file_exists($modMailDirFrom.'/'.$file) AND $file != '.' AND $file != '..' AND $file != '.svn')
- $files_modules[$modMailDirFrom.'/'.$file] = ($copy ? $modMailDirTo.'/'.$file : ++$number);
- }
- }
- if ($select == 'modules')
- return $files_modules;
- $files = array_merge($files, $files_modules);
- }
- }
- else if ($select == 'mail' OR $select == 'tr')
- {
- return $files;
- }
-
- // Theme files
- if (!$check OR ($check AND (string)$iso_from != 'en'))
- {
- $files_theme[$tPath_from.'lang/'.(string)$iso_from.'.php'] = ($copy ? $tPath_to.'lang/'.(string)$iso_to.'.php' : ++$number);
- $module_theme_files = (file_exists($tPath_from.'modules/') ? scandir($tPath_from.'modules/') : array());
- foreach ($module_theme_files as $module)
- if ($module !== '.' AND $module != '..' AND $module !== '.svn' AND file_exists($tPath_from.'modules/'.$module.'/'.(string)$iso_from.'.php'))
- $files_theme[$tPath_from.'modules/'.$module.'/'.(string)$iso_from.'.php'] = ($copy ? $tPath_to.'modules/'.$module.'/'.(string)$iso_to.'.php' : ++$number);
- }
- if ($select == 'theme')
- return $files_theme;
- $files = array_merge($files, $files_theme);
-
- // Return
- return $files;
- }
-
- /**
- * loadUpdateSQL will create default lang values when you create a new lang, based on default id lang
- *
- * @return boolean true if succeed
- */
- public function loadUpdateSQL()
- {
- $tables = Db::getInstance()->executeS('SHOW TABLES LIKE \''._DB_PREFIX_.'%_lang\' ');
- $langTables = array();
-
- foreach($tables as $table)
- foreach($table as $t)
- $langTables[] = $t;
-
- Db::getInstance()->execute('SET @id_lang_default = (SELECT c.`value` FROM `'._DB_PREFIX_.'configuration` c WHERE c.`name` = \'PS_LANG_DEFAULT\' LIMIT 1)');
- $return = true;
- foreach($langTables as $name)
- {
- $fields = '';
- $columns = Db::getInstance()->executeS('SHOW COLUMNS FROM `'.$name.'`');
- foreach($columns as $column)
- $fields .= $column['Field'].', ';
- $fields = rtrim($fields, ', ');
- $identifier = 'id_'.str_replace('_lang', '', str_replace(_DB_PREFIX_, '', $name));
-
- $sql = 'INSERT IGNORE INTO `'.$name.'` ('.$fields.') (SELECT ';
- foreach($columns as $column) {
- if ($identifier != $column['Field'] and $column['Field'] != 'id_lang')
- $sql .= '(SELECT `'.$column['Field'].'` FROM `'.$name.'` tl WHERE tl.`id_lang` = @id_lang_default AND tl.`'.$identifier.'` = `'.str_replace('_lang', '', $name).'`.`'.$identifier.'`), ';
- else
- $sql.= '`'.$column['Field'].'`, ';
- }
- $sql = rtrim($sql, ', ');
- $sql .= ' FROM `'._DB_PREFIX_.'lang` CROSS JOIN `'.str_replace('_lang', '', $name).'`) ;';
- $return &= Db::getInstance()->execute(pSQL($sql));
- }
- return $return;
- }
-
- public static function recurseDeleteDir($dir)
- {
- if (!is_dir($dir))
- return false;
- if ($handle = @opendir($dir))
- {
- while (false !== ($file = readdir($handle)))
- if ($file != '.' && $file != '..')
- {
- if (is_dir($dir.'/'.$file))
- self::recurseDeleteDir($dir.'/'.$file);
- elseif (file_exists($dir.'/'.$file))
- @unlink($dir.'/'.$file);
- }
- closedir($handle);
- }
- rmdir($dir);
- }
-
- public function delete()
- {
- if (empty($this->iso_code))
- $this->iso_code = self::getIsoById($this->id);
-
- // Database translations deletion
- $result = Db::getInstance()->executeS('SHOW TABLES FROM `'._DB_NAME_.'`');
- foreach ($result AS $row)
- if (preg_match('/_lang/', $row['Tables_in_'._DB_NAME_]))
- if (!Db::getInstance()->execute('DELETE FROM `'.$row['Tables_in_'._DB_NAME_].'` WHERE `id_lang` = '.(int)($this->id)))
- return false;
-
- // Delete tags
- Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'tag WHERE id_lang = '.(int)($this->id));
-
- // Delete search words
- Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'search_word WHERE id_lang = '.(int)($this->id));
-
- // Files deletion
- foreach (self::getFilesList($this->iso_code, _THEME_NAME_, false, false, false, true, true) as $key => $file)
- if (file_exists($key))
- unlink($key);
- $modList = scandir(_PS_MODULE_DIR_);
- foreach ($modList as $mod)
- {
- self::recurseDeleteDir(_PS_MODULE_DIR_.$mod.'/mails/'.$this->iso_code);
- $files = @scandir(_PS_MODULE_DIR_.$mod.'/mails/');
- if (count($files) <= 2)
- self::recurseDeleteDir(_PS_MODULE_DIR_.$mod.'/mails/');
-
- if(file_exists(_PS_MODULE_DIR_.$mod.'/'.$this->iso_code.'.php'))
- {
- unlink(_PS_MODULE_DIR_.$mod.'/'.$this->iso_code.'.php');
- $files = @scandir(_PS_MODULE_DIR_.$mod);
- if (count($files) <= 2)
- self::recurseDeleteDir(_PS_MODULE_DIR_.$mod);
- }
- }
-
- if (file_exists(_PS_MAIL_DIR_.$this->iso_code))
- self::recurseDeleteDir(_PS_MAIL_DIR_.$this->iso_code);
- if (file_exists(_PS_TRANSLATIONS_DIR_.$this->iso_code))
- self::recurseDeleteDir(_PS_TRANSLATIONS_DIR_.$this->iso_code);
- if (!parent::delete())
- return false;
-
- // delete images
- $files_copy = array('/en.jpg', '/en-default-thickbox.jpg', '/en-default-home.jpg', '/en-default-large.jpg', '/en-default-medium.jpg', '/en-default-small.jpg', '/en-default-large_scene.jpg');
- $tos = array(_PS_CAT_IMG_DIR_, _PS_MANU_IMG_DIR_, _PS_PROD_IMG_DIR_, _PS_SUPP_IMG_DIR_);
- foreach($tos AS $to)
- foreach($files_copy AS $file)
- {
- $name = str_replace('/en', ''.$this->iso_code, $file);
-
- if (file_exists($to.$name))
- unlink($to.$name);
- if (file_exists(dirname(__FILE__).'/../img/l/'.$this->id.'.jpg'))
- unlink(dirname(__FILE__).'/../img/l/'.$this->id.'.jpg');
- }
-
- // If url_rewrite is not enabled, we don't need to regenerate .htaccess
- if(!Configuration::get('PS_REWRITING_SETTINGS'))
- return true;
-
- return Tools::generateHtaccess(dirname(__FILE__).'/../.htaccess',
- (int)(Configuration::get('PS_REWRITING_SETTINGS')),
- (int)(Configuration::get('PS_HTACCESS_CACHE_CONTROL')),
- ''
- );
- }
-
-
- public function deleteSelection($selection)
- {
- if (!is_array($selection) OR !Validate::isTableOrIdentifier($this->identifier) OR !Validate::isTableOrIdentifier($this->table))
- die(Tools::displayError());
- $result = true;
- foreach ($selection AS $id)
- {
- $this->id = (int)($id);
- $result = $result AND $this->delete();
- }
-
- // If url_rewrite is not enabled, we don't need to regenerate .htaccess
- if(!Configuration::get('PS_REWRITING_SETTINGS'))
- return true;
-
- Tools::generateHtaccess(dirname(__FILE__).'/../.htaccess',
- (int)(Configuration::get('PS_REWRITING_SETTINGS')),
- (int)(Configuration::get('PS_HTACCESS_CACHE_CONTROL')),
- ''
- );
-
- return $result;
- }
-
- /**
- * Return available languages
- *
- * @param boolean $active Select only active languages
- * @return array Languages
- */
- public static function getLanguages($active = true)
- {
- if(!self::$_LANGUAGES)
- self::loadLanguages();
-
- $languages = array();
- foreach (self::$_LANGUAGES AS $language)
- {
- if ($active AND !$language['active'])
- continue;
- $languages[] = $language;
- }
- return $languages;
- }
-
- public static function getLanguage($id_lang)
- {
- if (!array_key_exists((int)($id_lang), self::$_LANGUAGES))
- return false;
- return self::$_LANGUAGES[(int)($id_lang)];
- }
-
- /**
- * Return iso code from id
- *
- * @param integer $id_lang Language ID
- * @return string Iso code
- */
- public static function getIsoById($id_lang)
- {
- if (isset(self::$_LANGUAGES[(int)$id_lang]['iso_code']))
- return self::$_LANGUAGES[(int)$id_lang]['iso_code'];
- return false;
- }
-
- /**
- * Return id from iso code
- *
- * @param string $iso_code Iso code
- * @return integer Language ID
- */
- public static function getIdByIso($iso_code)
- {
- if (!Validate::isLanguageIsoCode($iso_code))
- die(Tools::displayError('Fatal error : iso code is not correct : ').$iso_code);
-
- return Db::getInstance()->getValue('SELECT `id_lang` FROM `'._DB_PREFIX_.'lang` WHERE `iso_code` = \''.pSQL(strtolower($iso_code)).'\'');
- }
-
- public static function getLanguageCodeByIso($iso_code)
- {
- if (!Validate::isLanguageIsoCode($iso_code))
- die(Tools::displayError('Fatal error : iso code is not correct : ').$iso_code);
-
- return Db::getInstance()->getValue('SELECT `language_code` FROM `'._DB_PREFIX_.'lang` WHERE `iso_code` = \''.pSQL(strtolower($iso_code)).'\'');
- }
-
- /**
- * Return array (id_lang, iso_code)
- *
- * @param string $iso_code Iso code
- * @return array Language (id_lang, iso_code)
- */
- public static function getIsoIds($active = true)
- {
- return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('SELECT `id_lang`, `iso_code` FROM `'._DB_PREFIX_.'lang` '.($active ? 'WHERE active = 1' : ''));
- }
-
- public static function copyLanguageData($from, $to)
- {
- $result = Db::getInstance()->executeS('SHOW TABLES FROM `'._DB_NAME_.'`');
- foreach ($result AS $row)
- if (preg_match('/_lang/', $row['Tables_in_'._DB_NAME_]) AND $row['Tables_in_'._DB_NAME_] != _DB_PREFIX_.'lang')
- {
- $result2 = Db::getInstance()->executeS('SELECT * FROM `'.$row['Tables_in_'._DB_NAME_].'` WHERE `id_lang` = '.(int)($from));
- if (!sizeof($result2))
- continue;
- Db::getInstance()->execute('DELETE FROM `'.$row['Tables_in_'._DB_NAME_].'` WHERE `id_lang` = '.(int)($to));
- $query = 'INSERT INTO `'.$row['Tables_in_'._DB_NAME_].'` VALUES ';
- foreach ($result2 AS $row2)
- {
- $query .= '(';
- $row2['id_lang'] = $to;
- foreach ($row2 AS $field)
- $query .= '\''.pSQL($field, true).'\',';
- $query = rtrim($query, ',').'),';
- }
- $query = rtrim($query, ',');
- Db::getInstance()->execute($query);
- }
- return true;
- }
-
- /**
- * Load all languages in memory for caching
- */
- public static function loadLanguages()
- {
- self::$_LANGUAGES = array();
-
- $result = Db::getInstance()->executeS('
- SELECT `id_lang`, `name`, `iso_code`, `active`
- FROM `'._DB_PREFIX_.'lang`');
-
- foreach ($result AS $row)
- self::$_LANGUAGES[(int)$row['id_lang']] = array('id_lang' => (int)$row['id_lang'], 'name' => $row['name'], 'iso_code' => $row['iso_code'], 'active' => (int)$row['active']);
- }
-
- public function update($nullValues = false)
- {
- if (!parent::update($nullValues))
- return false;
-
- // If url_rewrite is not enabled, we don't need to regenerate .htaccess
- if(!Configuration::get('PS_REWRITING_SETTINGS'))
- return true;
-
- return Tools::generateHtaccess(dirname(__FILE__).'/../.htaccess',
- (int)(Configuration::get('PS_REWRITING_SETTINGS')),
- (int)(Configuration::get('PS_HTACCESS_CACHE_CONTROL')),
- ''
- );
- }
-
- public static function checkAndAddLanguage($iso_code)
- {
- if (Language::getIdByIso($iso_code))
- return true;
- else
- {
- if(@fsockopen('api.prestashop.com', 80))
- {
- $lang = new Language();
- $lang->iso_code = $iso_code;
- $lang->active = true;
-
- if ($lang_pack = Tools::jsonDecode(Tools::file_get_contents('http://api.prestashop.com/download/lang_packs/get_language_pack.php?version='._PS_VERSION_.'&iso_lang='.$iso_code)))
- {
- if (isset($lang_pack->name)
- && isset($lang_pack->version)
- && isset($lang_pack->iso_code))
- $lang->name = $lang_pack->name;
- }
- if (!$lang->name OR !$lang->add())
- return false;
- $insert_id = (int)($lang->id);
-
- if ($lang_pack)
- {
- $flag = Tools::file_get_contents('http://api.prestashop.com/download/lang_packs/flags/jpeg/'.$iso_code.'.jpg');
- if ($flag != NULL && !preg_match('//', $flag))
- {
- $file = fopen(dirname(__FILE__).'/../img/l/'.$insert_id.'.jpg', 'w');
- if ($file)
- {
- fwrite($file, $flag);
- fclose($file);
- }
- else
- self::_copyNoneFlag($insert_id);
- }
- else
- self::_copyNoneFlag($insert_id);
- }
- else
- self::_copyNoneFlag($insert_id);
-
- $files_copy = array('/en.jpg', '/en-default-thickbox.jpg', '/en-default-home.jpg', '/en-default-large.jpg', '/en-default-medium.jpg', '/en-default-small.jpg', '/en-default-large_scene.jpg');
- $tos = array(_PS_CAT_IMG_DIR_, _PS_MANU_IMG_DIR_, _PS_PROD_IMG_DIR_, _PS_SUPP_IMG_DIR_);
- foreach($tos AS $to)
- foreach($files_copy AS $file)
- {
- $name = str_replace('/en', '/'.$iso_code, $file);
- copy(dirname(__FILE__).'/../img/l'.$file, $to.$name);
- }
- return true;
- }
- else
- return false;
- }
- }
-
- protected static function _copyNoneFlag($id)
- {
- return copy(dirname(__FILE__).'/../img/l/none.jpg', dirname(__FILE__).'/../img/l/'.$id.'.jpg');
- }
-
- private static $_cache_language_installation = null;
- public static function isInstalled($iso_code)
- {
- if (self::$_cache_language_installation === null)
- {
- self::$_cache_language_installation = array();
- $result = Db::getInstance()->executeS('SELECT `id_lang`, `iso_code` FROM `'._DB_PREFIX_.'lang`');
- foreach ($result as $row)
- self::$_cache_language_installation[$row['iso_code']] = $row['id_lang'];
- }
- return (isset(self::$_cache_language_installation[$iso_code]) ? self::$_cache_language_installation[$iso_code] : false);
- }
-
- public static function countActiveLanguages()
- {
- if (!self::$countActiveLanguages)
- self::$countActiveLanguages = Db::getInstance()->getValue('SELECT COUNT(*) FROM `'._DB_PREFIX_.'lang` WHERE `active` = 1');
- return self::$countActiveLanguages;
- }
-}
-
diff --git a/install-dev/classes/LanguagesManager.php b/install-dev/classes/LanguagesManager.php
deleted file mode 100644
index 4beda9429..000000000
--- a/install-dev/classes/LanguagesManager.php
+++ /dev/null
@@ -1,110 +0,0 @@
-
-* @copyright 2007-2011 PrestaShop SA
-* @version Release: $Revision: 6844 $
-* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
-* International Registered Trademark & Property of PrestaShop SA
-*/
-
-class LanguageManager
-{
- private $url_xml;
- private $lang;
- private $xml_file;
-
- function __construct ($url_xml)
- {
- $this->loadXML($url_xml);
- $this->setLanguage();
- $this->getIncludeTradFilename();
- }
-
- private function loadXML($url_xml)
- {
- global $errors;
- if (!$this->xml_file = simplexml_load_file($url_xml))
- $errors = 'Error when loading XML language file : '.$url_xml;
- }
-
- public function getIdSelectedLang()
- {
- return $this->lang['id'];
- }
-
- public function getIsoCodeSelectedLang()
- {
- return $this->lang->idLangPS;
- }
-
- public function countLangs()
- {
- return sizeof($this->xml_file);
- }
-
- public function getAvailableLangs()
- {
- return $this->xml_file;
- }
-
- public function getSelectedLang()
- {
- return $this->lang;
- }
-
- /** get the http_accept_language isocode (if exists),
- * and use it to find the corresponding prestashop id_lang
- * otherwise, return 0.
- * @return int id_lang to use
- */
- private function getIdByHAL(){
- if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
- {
- $FirstHAL = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
- $iso = $FirstHAL[0];
- if ($iso != "en-us")
- foreach ($this->xml_file as $lang)
- foreach ($lang->isos->iso as $anIso)
- if ($anIso == $iso)
- return $lang['id'];
- }
- else
- return 0;
- }
-
- /** set lang property with param $_GET['language'] if present,
- * or by $_SERVER['HTTP_ACCEPT_LANGUAGE'] otherwise
- */
- private function setLanguage()
- {
- if (isset($_GET['language']))
- $id_lang = (int)($_GET['language'])>0 ? $_GET['language'] : 0;
- if (!isset($id_lang))
- $id_lang = ($this->getIdByHAL());
- $this->lang = $this->xml_file->lang[(int)($id_lang)];
- }
-
- public function getIncludeTradFilename()
- {
- return ($this->lang == NULL) ? false : dirname(__FILE__).$this->lang['trad_file'];
- }
-}
-
diff --git a/install-dev/classes/Module.php b/install-dev/classes/Module.php
deleted file mode 100644
index 3a313b170..000000000
--- a/install-dev/classes/Module.php
+++ /dev/null
@@ -1,1057 +0,0 @@
-
-* @copyright 2007-2011 PrestaShop SA
-* @version Release: $Revision: 7441 $
-* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
-* International Registered Trademark & Property of PrestaShop SA
-*/
-
-abstract class Module
-{
- /** @var integer Module ID */
- public $id = NULL;
-
- /** @var float Version */
- public $version;
-
- /** @var string Unique name */
- public $name;
-
- /** @var string Human name */
- public $displayName;
-
- /** @var string A little description of the module */
- public $description;
-
- /** @var string author of the module */
- public $author;
-
- /** @var int need_instance */
- public $need_instance = 1;
-
- /** @var string Admin tab correponding to the module */
- public $tab = NULL;
-
- /** @var boolean Status */
- public $active = false;
-
- /** @var array current language translations */
- protected $_lang = array();
-
- /** @var string Module web path (eg. '/shop/modules/modulename/') */
- protected $_path = NULL;
-
- /** @var string Fill it if the module is installed but not yet set up */
- public $warning;
-
- /** @var string Message display before uninstall a module */
- public $beforeUninstall = NULL;
-
- public $_errors = false;
-
- protected $table = 'module';
-
- protected $identifier = 'id_module';
-
- static public $_db;
-
- /** @var array to store the limited country */
- public $limited_countries = array();
-
- /**
- * Constructor
- *
- * @param string $name Module unique name
- */
- protected static $modulesCache;
- protected static $_hookModulesCache;
-
- protected static $_INSTANCE = array();
-
- protected static $_generateConfigXmlMode = false;
-
- protected static $l_cache = array();
-
- /**
- * @var array used by AdminTab to determine which lang file to use (admin.php or module lang file)
- */
- public static $classInModule = array();
-
- public function __construct($name = NULL)
- {
- if ($this->name == NULL)
- $this->name = $this->id;
- if ($this->name != NULL)
- {
- if (self::$modulesCache == NULL AND !is_array(self::$modulesCache))
- {
- self::$modulesCache = array();
- $result = Db::getInstance()->executeS('SELECT * FROM `'.pSQL(_DB_PREFIX_.$this->table).'`');
- foreach ($result as $row)
- self::$modulesCache[$row['name']] = $row;
- }
- if (isset(self::$modulesCache[$this->name]))
- {
- $this->active = true;
- $this->id = self::$modulesCache[$this->name]['id_module'];
- foreach (self::$modulesCache[$this->name] AS $key => $value)
- if (key_exists($key, $this))
- $this->{$key} = $value;
- $this->_path = __PS_BASE_URI__.'modules/'.$this->name.'/';
- }
- }
- }
-
- /**
- * Insert module into datable
- */
- public function install()
- {
- if (!Validate::isModuleName($this->name))
- die(Tools::displayError());
- $result = Db::getInstance()->getRow('
- SELECT `id_module`
- FROM `'._DB_PREFIX_.'module`
- WHERE `name` = \''.pSQL($this->name).'\'');
- if ($result)
- return false;
- $result = Db::getInstance()->AutoExecute(_DB_PREFIX_.$this->table, array('name' => $this->name, 'active' => 1), 'INSERT');
- if (!$result)
- return false;
- $this->id = Db::getInstance()->Insert_ID();
- return true;
- }
-
- /**
- * Delete module from datable
- *
- * @return boolean result
- */
- public function uninstall()
- {
- if (!Validate::isUnsignedId($this->id))
- return false;
- $result = Db::getInstance()->executeS('
- SELECT `id_hook`
- FROM `'._DB_PREFIX_.'hook_module` hm
- WHERE `id_module` = '.(int)($this->id));
- foreach ($result AS $row)
- {
- Db::getInstance()->execute('
- DELETE FROM `'._DB_PREFIX_.'hook_module`
- WHERE `id_module` = '.(int)($this->id).'
- AND `id_hook` = '.(int)($row['id_hook']));
- $this->cleanPositions($row['id_hook']);
- }
- return Db::getInstance()->execute('
- DELETE FROM `'._DB_PREFIX_.'module`
- WHERE `id_module` = '.(int)($this->id));
- }
-
- /**
- * This function enable module $name. If an $name is an array,
- * this will enable all of them
- *
- * @param array|string $name
- * @return true if succeed
- * @since 1.4.1
- */
- public static function enableByName($name)
- {
- if (!is_array($name))
- $name = array($name);
-
- foreach ($name as $k=>$v)
- $name[$k] = '"'.pSQL($v).'"';
-
- return Db::getInstance()->execute('
- UPDATE `'._DB_PREFIX_.'module`
- SET `active`= 1
- WHERE `name` IN ('.implode(',',$name).')');
- }
- /**
- * Called when module is set to active
- */
- public function enable()
- {
- return Db::getInstance()->execute('
- UPDATE `'._DB_PREFIX_.'module`
- SET `active`= 1
- WHERE `name` = \''.pSQL($this->name).'\'');
- }
-
- /**
- * This function disable module $name. If an $name is an array,
- * this will disable all of them
- *
- * @param array|string $name
- * @return true if succeed
- * @since 1.4.1
- */
- public static function disableByName($name)
- {
- if (!is_array($name))
- $name = array($name);
-
- foreach ($name as $k=>$v)
- $name[$k] = '"'.pSQL($v).'"';
-
- return Db::getInstance()->execute('
- UPDATE `'._DB_PREFIX_.'module`
- SET `active`= 0
- WHERE `name` IN ('.implode(',',$name).')');
- }
-
- /**
- * Called when module is set to deactive
- */
- public function disable()
- {
- return Module::disableByName($this->name);
- }
-
- /**
- * Connect module to a hook
- *
- * @param string $hook_name Hook name
- * @return boolean result
- */
- public function registerHook($hook_name)
- {
- if (!Validate::isHookName($hook_name))
- die(Tools::displayError());
- if (!isset($this->id) OR !is_numeric($this->id))
- return false;
-
- // Check if already register
- $result = Db::getInstance()->getRow('
- SELECT hm.`id_module` FROM `'._DB_PREFIX_.'hook_module` hm, `'._DB_PREFIX_.'hook` h
- WHERE hm.`id_module` = '.(int)($this->id).'
- AND h.`name` = \''.pSQL($hook_name).'\'
- AND h.`id_hook` = hm.`id_hook`');
- if ($result)
- return true;
-
- // Get hook id
- $result = Db::getInstance()->getRow('
- SELECT `id_hook`
- FROM `'._DB_PREFIX_.'hook`
- WHERE `name` = \''.pSQL($hook_name).'\'');
- if (!isset($result['id_hook']))
- return false;
-
- // Get module position in hook
- $result2 = Db::getInstance()->getRow('
- SELECT MAX(`position`) AS position
- FROM `'._DB_PREFIX_.'hook_module`
- WHERE `id_hook` = '.(int)($result['id_hook']));
- if (!$result2)
- return false;
-
- // Register module in hook
- $return = Db::getInstance()->execute('
- INSERT INTO `'._DB_PREFIX_.'hook_module` (`id_module`, `id_hook`, `position`)
- VALUES ('.(int)($this->id).', '.(int)($result['id_hook']).', '.(int)($result2['position'] + 1).')');
-
- $this->cleanPositions((int)($result['id_hook']));
-
- return $return;
- }
-
- /**
- * Display flags in forms for translations
- *
- * @param array $languages All languages available
- * @param integer $defaultLanguage Default language id
- * @param string $ids Multilingual div ids in form
- * @param string $id Current div id]
- * #param boolean $return define the return way : false for a display, true for a return
- */
- public function displayFlags($languages, $defaultLanguage, $ids, $id, $return = false)
- {
- if (sizeof($languages) == 1)
- return false;
- $output = '
-
-

-
-
- '.$this->l('Choose language:').'
';
- foreach ($languages as $language)
- $output .= '
!['.$language['name'].' '.$language['name'].'](../img/l/'.(int)($language['id_lang']).'.jpg)
';
- $output .= '
';
-
- if ($return)
- return $output;
- echo $output;
- }
-
- /**
- * Unregister module from hook
- *
- * @param int $id_hook Hook id
- * @return boolean result
- */
- public function unregisterHook($hook_id)
- {
- return Db::getInstance()->execute('
- DELETE
- FROM `'._DB_PREFIX_.'hook_module`
- WHERE `id_module` = '.(int)($this->id).'
- AND `id_hook` = '.(int)($hook_id));
- }
-
- /**
- * Unregister exceptions linked to module
- *
- * @param int $id_hook Hook id
- * @return boolean result
- */
- public function unregisterExceptions($hook_id)
- {
- return Db::getInstance()->execute('
- DELETE
- FROM `'._DB_PREFIX_.'hook_module_exceptions`
- WHERE `id_module` = '.(int)($this->id).'
- AND `id_hook` = '.(int)($hook_id));
- }
-
- /**
- * Add exceptions for module->Hook
- *
- * @param int $id_hook Hook id
- * @param array $excepts List of file name
- * @return boolean result
- */
- public function registerExceptions($id_hook, $excepts)
- {
- foreach ($excepts AS $except)
- {
- if (!empty($except))
- {
- $result = Db::getInstance()->execute('
- INSERT INTO `'._DB_PREFIX_.'hook_module_exceptions` (`id_module`, `id_hook`, `file_name`)
- VALUES ('.(int)($this->id).', '.(int)($id_hook).', \''.pSQL(strval($except)).'\')');
- if (!$result)
- return false;
- }
- }
- return true;
- }
-
- public function editExceptions($id_hook, $excepts)
- {
- // Cleaning...
- Db::getInstance()->execute('
- DELETE FROM `'._DB_PREFIX_.'hook_module_exceptions`
- WHERE `id_module` = '.(int)($this->id).' AND `id_hook` ='.(int)($id_hook));
- return $this->registerExceptions($id_hook, $excepts);
- }
-
-
- /**
- * This function is used to determine the module name
- * of an AdminTab which belongs to a module, in order to keep translation
- * related to a module in its directory (instead of $_LANGADM)
- *
- * @param mixed $currentClass the
- * @return boolean|string if the class belongs to a module, will return the module name. Otherwise, return false.
- */
- public static function getModuleNameFromClass($currentClass)
- {
- // Module can now define AdminTab keeping the module translations method,
- // i.e. in modules/[module name]/[iso_code].php
- if (!isset(self::$classInModule[$currentClass]))
- {
- global $_MODULES;
- $_MODULE = array();
- $reflectionClass = new ReflectionClass($currentClass);
- $filePath = realpath($reflectionClass->getFileName());
- $realpathModuleDir = realpath(_PS_MODULE_DIR_);
- if (substr(realpath($filePath), 0, strlen($realpathModuleDir)) == $realpathModuleDir)
- {
- self::$classInModule[$currentClass] = substr(dirname($filePath), strlen($realpathModuleDir)+1);
-
- $id_lang = (!isset($cookie) OR !is_object($cookie)) ? (int)(Configuration::get('PS_LANG_DEFAULT')) : (int)($cookie->id_lang);
- $file = _PS_MODULE_DIR_.self::$classInModule[$currentClass].'/'.Language::getIsoById($id_lang).'.php';
- if (Tools::file_exists_cache($file) AND include_once($file))
- $_MODULES = !empty($_MODULES) ? array_merge($_MODULES, $_MODULE) : $_MODULE;
- }
- else
- self::$classInModule[$currentClass] = false;
- }
- // return name of the module, or false
- return self::$classInModule[$currentClass];
- }
-
- /**
- * Return an instance of the specified module
- *
- * @param string $moduleName Module name
- * @return Module instance
- */
- static public function getInstanceByName($moduleName)
- {
- if (!Tools::file_exists_cache(_PS_MODULE_DIR_.$moduleName.'/'.$moduleName.'.php'))
- return false;
- include_once(_PS_MODULE_DIR_.$moduleName.'/'.$moduleName.'.php');
- if (!class_exists($moduleName, false))
- return false;
-
- if (!isset(self::$_INSTANCE[$moduleName]))
- self::$_INSTANCE[$moduleName] = new $moduleName;
- return self::$_INSTANCE[$moduleName];
- }
-
- /**
- * Load modules Ids from Ids
- *
- * @param array|int $ids Modules ID
- * @return Array of module name
- */
- static public function preloadModuleNameFromId($ids)
- {
- static $preloadedModuleNameFromId;
- if(!isset($preloadedModuleNameFromId)) {
- $preloadedModuleNameFromId = array();
- }
-
- if(is_array($ids))
- {
- foreach($ids as $id)
- $preloadedModuleNameFromId[$id] = false;
-
- $results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
- SELECT `name`,`id_module`
- FROM `'._DB_PREFIX_.'module`
- WHERE `id_module` IN ('.join(',',$ids) .');');
- foreach($results as $result)
- $preloadedModuleNameFromId[$result['id_module']] = $result['name'];
- }
- elseif(!isset($preloadedModuleNameFromId[$ids]))
- {
- $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
- SELECT `name`
- FROM `'._DB_PREFIX_.'module`
- WHERE `id_module` = '.(int)($ids));
- if($result)
- $preloadedModuleNameFromId[$ids] = $result['name'];
- else
- $preloadedModuleNameFromId[$ids] = false;
- }
-
-
- if(is_array($ids)) {
- return $preloadedModuleNameFromId;
- } else {
- if(!isset($preloadedModuleNameFromId[$ids]))
- return false;
- return $preloadedModuleNameFromId[$ids];
- }
- }
-
- /**
- * Return an instance of the specified module
- *
- * @param integer $id_module Module ID
- * @return Module instance
- */
- static public function getInstanceById($id_module)
- {
- $moduleName = Module::preloadModuleNameFromId($id_module);
- return ($moduleName ? Module::getInstanceByName($moduleName) : false);
- }
-
- /**
- * Return available modules
- *
- * @param boolean $useConfig in order to use config.xml file in module dir
- * @return array Modules
- */
- public static function getModulesOnDisk($useConfig = false)
- {
- global $cookie, $_MODULES;
-
- $moduleList = array();
- $moduleListCursor = 0;
- $moduleNameList = array();
- $modulesNameToCursor = array();
- $errors = array();
- $modules_dir = self::getModulesDirOnDisk();
- foreach ($modules_dir AS $module)
- {
- $configFile = _PS_MODULE_DIR_.$module.'/config.xml';
- $xml_exist = file_exists($configFile);
- if ($xml_exist)
- $needNewConfigFile = (filemtime($configFile) < filemtime(_PS_MODULE_DIR_.$module.'/'.$module.'.php'));
- else
- $needNewConfigFile = true;
- if ($useConfig AND $xml_exist)
- {
- libxml_use_internal_errors(true);
- $xml_module = simplexml_load_file($configFile);
- foreach (libxml_get_errors() as $error)
- $errors[] = '['.$module.'] '.Tools::displayError('Error found in config file:').' '.htmlentities($error->message);
- libxml_clear_errors();
-
- if (!count($errors) AND (int)$xml_module->need_instance == 0 AND !$needNewConfigFile)
- {
- $file = _PS_MODULE_DIR_.$module.'/'.Language::getIsoById($cookie->id_lang).'.php';
- if (Tools::file_exists_cache($file) AND include_once($file))
- if(isset($_MODULE) AND is_array($_MODULE))
- $_MODULES = !empty($_MODULES) ? array_merge($_MODULES, $_MODULE) : $_MODULE;
-
- $xml_module->displayName = Module::findTranslation($xml_module->name, $xml_module->displayName, (string)$xml_module->name);
- $xml_module->description = Module::findTranslation($xml_module->name, $xml_module->description, (string)$xml_module->name);
- $xml_module->author = Module::findTranslation($xml_module->name, $xml_module->author, (string)$xml_module->name);
-
- if(isset($xml_module->confirmUninstall))
- $xml_module->confirmUninstall = Module::findTranslation($xml_module->name, $xml_module->confirmUninstall, (string)$xml_module->name);
-
-
- $moduleList[$moduleListCursor] = $xml_module;
- $moduleNameList[$moduleListCursor] = '\''.strval($xml_module->name).'\'';
- $modulesNameToCursor[strval($xml_module->name)] = $moduleListCursor;
- $moduleListCursor++;
- }
- }
- if (!$useConfig OR !$xml_exist OR (isset($xml_module->need_instance) AND (int)$xml_module->need_instance == 1) OR $needNewConfigFile)
- {
- $file = trim(file_get_contents(_PS_MODULE_DIR_.$module.'/'.$module.'.php'));
- if (substr($file, 0, 5) == '')
- $file = substr($file, 0, -2);
- if (class_exists($module, false) OR eval($file) !== false)
- {
- $moduleList[$moduleListCursor++] = new $module;
- if (!$xml_exist OR $needNewConfigFile)
- {
- self::$_generateConfigXmlMode = true;
- $tmpModule = new $module;
- $tmpModule->_generateConfigXml();
- self::$_generateConfigXmlMode = false;
- }
- }
- else
- $errors[] = $module;
- }
- }
-
- // Get modules information from database
- if(!empty($moduleNameList))
- {
- $results = Db::getInstance()->executeS('SELECT `id_module`, `active`, `name` FROM `'._DB_PREFIX_.'module` WHERE `name` IN ('.join(',',$moduleNameList).')');
- foreach($results as $result)
- {
- $moduleCursor = $modulesNameToCursor[$result['name']];
- if (isset($result['active']) AND $result['active'])
- $moduleList[$moduleCursor]->active = $result['active'];
- if (isset($result['id_module']) AND $result['id_module'])
- $moduleList[$moduleCursor]->id = $result['id_module'];
- }
- }
-
- if (sizeof($errors))
- {
- echo ''.Tools::displayError('Parse error(s) in module(s)').'
';
- foreach ($errors AS $error)
- echo '- '.$error.'
';
- echo '
';
- }
-
- return $moduleList;
- }
-
- public static function getModulesDirOnDisk()
- {
- $moduleList = array();
- $modules = scandir(_PS_MODULE_DIR_);
- foreach ($modules AS $name)
- {
- if (Tools::file_exists_cache(_PS_MODULE_DIR_.$name.'/'.$name.'.php'))
- {
- if (!Validate::isModuleName($name))
- die(Tools::displayError().' (Module '.$name.')');
- $moduleList[] = $name;
- }
- }
- return $moduleList;
- }
-
- /**
- * Return non native module
- *
- * @param int $position Take only positionnables modules
- * @return array Modules
- */
- public static function getNonNativeModuleList()
- {
- $db = Db::getInstance();
-
- $module_list_xml = _PS_ROOT_DIR_.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'xml'.DIRECTORY_SEPARATOR.'modules_list.xml';
- $nativeModules = simplexml_load_file($module_list_xml);
- $nativeModules = $nativeModules->modules;
- foreach ($nativeModules as $nativeModulesType)
- if (in_array($nativeModulesType['type'],array('native','partner')))
- {
- $arrNativeModules[] = '""';
- foreach ($nativeModulesType->module as $module)
- $arrNativeModules[] = '"'.pSQL($module['name']).'"';
- }
-
- return $db->executeS('
- SELECT *
- FROM `'._DB_PREFIX_.'module` m
- WHERE name NOT IN ('.implode(',',$arrNativeModules).') ');
- }
-
- /**
- * Return installed modules
- *
- * @param int $position Take only positionnables modules
- * @return array Modules
- */
- public static function getModulesInstalled($position = 0)
- {
- return Db::getInstance()->executeS('
- SELECT *
- FROM `'._DB_PREFIX_.'module` m
- '.($position ? '
- LEFT JOIN `'._DB_PREFIX_.'hook_module` hm ON m.`id_module` = hm.`id_module`
- LEFT JOIN `'._DB_PREFIX_.'hook` k ON hm.`id_hook` = k.`id_hook`
- WHERE k.`position` = 1' : ''));
- }
-
- /*
- * Execute modules for specified hook
- *
- * @param string $hook_name Hook Name
- * @param array $hookArgs Parameters for the functions
- * @return string modules output
- */
- public static function hookExec($hook_name, $hookArgs = array(), $id_module = NULL)
- {
- global $cookie;
- if ((!empty($id_module) AND !Validate::isUnsignedId($id_module)) OR !Validate::isHookName($hook_name))
- die(Tools::displayError());
-
- global $cart, $cookie;
- $live_edit = false;
- if (!isset($hookArgs['cookie']) OR !$hookArgs['cookie'])
- $hookArgs['cookie'] = $cookie;
- if (!isset($hookArgs['cart']) OR !$hookArgs['cart'])
- $hookArgs['cart'] = $cart;
- $hook_name = strtolower($hook_name);
-
- if (!isset(self::$_hookModulesCache))
- {
- $db = Db::getInstance(_PS_USE_SQL_SLAVE_);
- $results = $db->executeS('
- SELECT h.`name` as hook, m.`id_module`, h.`id_hook`, m.`name` as module, h.`live_edit`
- FROM `'._DB_PREFIX_.'module` m
- LEFT JOIN `'._DB_PREFIX_.'hook_module` hm ON hm.`id_module` = m.`id_module`
- LEFT JOIN `'._DB_PREFIX_.'hook` h ON hm.`id_hook` = h.`id_hook`
- AND m.`active` = 1
- ORDER BY hm.`position`');
- self::$_hookModulesCache = array();
-
- if ($results)
- foreach ($results as $row)
- {
- $row['hook'] = strtolower($row['hook']);
- if (!isset(self::$_hookModulesCache[$row['hook']]))
- self::$_hookModulesCache[$row['hook']] = array();
- self::$_hookModulesCache[$row['hook']][] = array('id_hook' => $row['id_hook'], 'module' => $row['module'], 'id_module' => $row['id_module'], 'live_edit' => $row['live_edit']);
- }
- }
-
- if (!isset(self::$_hookModulesCache[$hook_name]))
- return;
-
- $altern = 0;
- $output = '';
- foreach (self::$_hookModulesCache[$hook_name] AS $array)
- {
- if ($id_module AND $id_module != $array['id_module'])
- continue;
- if (!($moduleInstance = Module::getInstanceByName($array['module'])))
- continue;
-
- $exceptions = $moduleInstance->getExceptions((int)$array['id_hook'], (int)$array['id_module']);
- foreach ($exceptions AS $exception)
- if (strstr(basename($_SERVER['PHP_SELF']).'?'.$_SERVER['QUERY_STRING'], $exception['file_name']) && !strstr($_SERVER['QUERY_STRING'], $exception['file_name']))
- continue 2;
-
- if (is_callable(array($moduleInstance, 'hook'.$hook_name)))
- {
- $hookArgs['altern'] = ++$altern;
-
- $display = call_user_func(array($moduleInstance, 'hook'.$hook_name), $hookArgs);
- if ($array['live_edit'] && ((Tools::isSubmit('live_edit') AND Tools::getValue('ad') AND (Tools::getValue('liveToken') == sha1(Tools::getValue('ad')._COOKIE_KEY_)))))
- {
- $live_edit = true;
- $output .= '
-
-
'
- .$moduleInstance->displayName.'
-
-
-
-
- '.$display.'
';
- }
- else
- $output .= $display;
- }
- }
- return ($live_edit ? '' : '').$output.($live_edit ? '
' : '');
- }
-
- public static function hookExecPayment()
- {
- global $cart, $cookie;
- $hookArgs = array('cookie' => $cookie, 'cart' => $cart);
- $id_customer = (int)($cookie->id_customer);
- $billing = new Address((int)($cart->id_address_invoice));
- $output = '';
-
- $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
- SELECT DISTINCT h.`id_hook`, m.`name`, hm.`position`
- FROM `'._DB_PREFIX_.'module_country` mc
- LEFT JOIN `'._DB_PREFIX_.'module` m ON m.`id_module` = mc.`id_module`
- INNER JOIN `'._DB_PREFIX_.'module_group` mg ON (m.`id_module` = mg.`id_module`)
- INNER JOIN `'._DB_PREFIX_.'customer_group` cg on (cg.`id_group` = mg.`id_group` AND cg.`id_customer` = '.(int)($id_customer).')
- LEFT JOIN `'._DB_PREFIX_.'hook_module` hm ON hm.`id_module` = m.`id_module`
- LEFT JOIN `'._DB_PREFIX_.'hook` h ON hm.`id_hook` = h.`id_hook`
- WHERE h.`name` = \'payment\'
- AND mc.id_country = '.(int)($billing->id_country).'
- AND m.`active` = 1
- ORDER BY hm.`position`, m.`name` DESC');
- if ($result)
- foreach ($result AS $module)
- if (($moduleInstance = Module::getInstanceByName($module['name'])) AND is_callable(array($moduleInstance, 'hookpayment')))
- if (!$moduleInstance->currencies OR ($moduleInstance->currencies AND sizeof(Currency::checkPaymentCurrencies($moduleInstance->id))))
- $output .= call_user_func(array($moduleInstance, 'hookpayment'), $hookArgs);
- return $output;
- }
-
- /**
- * find translation from $_MODULES and put it in self::$l_cache if not already exist
- * and return it.
- *
- * @param string $name name of the module
- * @param string $string term to find
- * @param string $source additional param for building translation key
- * @return string
- */
- public static function findTranslation($name, $string, $source)
- {
- global $_MODULES;
-
- $cache_key = $name . '|' . $string . '|' . $source;
-
- if (!isset(self::$l_cache[$cache_key]))
- {
- if (!is_array($_MODULES))
- return str_replace('"', '"', $string);
- // set array key to lowercase for 1.3 compatibility
- $_MODULES = array_change_key_case($_MODULES);
- $currentKey = '<{'.strtolower($name).'}'.strtolower(_THEME_NAME_).'>'.strtolower($source).'_'.md5($string);
- $defaultKey = '<{'.strtolower($name).'}prestashop>'.strtolower($source).'_'.md5($string);
-
- if (isset($_MODULES[$currentKey]))
- $ret = stripslashes($_MODULES[$currentKey]);
- elseif (isset($_MODULES[Tools::strtolower($currentKey)]))
- $ret = stripslashes($_MODULES[Tools::strtolower($currentKey)]);
- elseif (isset($_MODULES[$defaultKey]))
- $ret = stripslashes($_MODULES[$defaultKey]);
- elseif (isset($_MODULES[Tools::strtolower($defaultKey)]))
- $ret = stripslashes($_MODULES[Tools::strtolower($defaultKey)]);
- else
- $ret = stripslashes($string);
-
- self::$l_cache[$cache_key] = str_replace('"', '"', $ret);
- }
- return self::$l_cache[$cache_key];
- }
- /**
- * Get translation for a given module text
- *
- * Note: $specific parameter is mandatory for library files.
- * Otherwise, translation key will not match for Module library
- * when module is loaded with eval() Module::getModulesOnDisk()
- *
- * @param string $string String to translate
- * @param boolean|string $specific filename to use in translation key
- * @return string Translation
- */
- public function l($string, $specific = false)
- {
- if (self::$_generateConfigXmlMode)
- return $string;
-
- global $_MODULES, $_MODULE, $cookie;
-
- $id_lang = (!isset($cookie) OR !is_object($cookie)) ? (int)(Configuration::get('PS_LANG_DEFAULT')) : (int)($cookie->id_lang);
- $file = _PS_MODULE_DIR_.$this->name.'/'.Language::getIsoById($id_lang).'.php';
- if (Tools::file_exists_cache($file) AND include_once($file))
- $_MODULES = !empty($_MODULES) ? array_merge($_MODULES, $_MODULE) : $_MODULE;
-
- $source = $specific ? $specific : $this->name;
- $string = str_replace('\'', '\\\'', $string);
- $ret = $this->findTranslation($this->name, $string, $source);
- return $ret;
- }
-
- /*
- * Reposition module
- *
- * @param boolean $id_hook Hook ID
- * @param boolean $way Up (1) or Down (0)
- * @param intger $position
- */
- public function updatePosition($id_hook, $way, $position = NULL)
- {
- if (!$res = Db::getInstance()->executeS('
- SELECT hm.`id_module`, hm.`position`, hm.`id_hook`
- FROM `'._DB_PREFIX_.'hook_module` hm
- WHERE hm.`id_hook` = '.(int)($id_hook).'
- ORDER BY hm.`position` '.((int)($way) ? 'ASC' : 'DESC')))
- return false;
- foreach ($res AS $key => $values)
- if ((int)($values[$this->identifier]) == (int)($this->id))
- {
- $k = $key ;
- break ;
- }
- if (!isset($k) OR !isset($res[$k]) OR !isset($res[$k + 1]))
- return false;
- $from = $res[$k];
- $to = $res[$k + 1];
-
- if (isset($position) and !empty($position))
- $to['position'] = (int)($position);
-
- return (Db::getInstance()->execute('
- UPDATE `'._DB_PREFIX_.'hook_module`
- SET `position`= position '.($way ? '-1' : '+1').'
- WHERE position between '.(int)(min(array($from['position'], $to['position']))) .' AND '.(int)(max(array($from['position'], $to['position']))).'
- AND `id_hook`='.(int)($from['id_hook']))
- AND
- Db::getInstance()->execute('
- UPDATE `'._DB_PREFIX_.'hook_module`
- SET `position`='.(int)($to['position']).'
- WHERE `'.pSQL($this->identifier).'` = '.(int)($from[$this->identifier]).' AND `id_hook`='.(int)($to['id_hook']))
- );
- }
-
- /*
- * Reorder modules position
- *
- * @param boolean $id_hook Hook ID
- */
- public function cleanPositions($id_hook)
- {
- $result = Db::getInstance()->executeS('
- SELECT `id_module`
- FROM `'._DB_PREFIX_.'hook_module`
- WHERE `id_hook` = '.(int)($id_hook).'
- ORDER BY `position`');
- $sizeof = sizeof($result);
- for ($i = 0; $i < $sizeof; ++$i)
- Db::getInstance()->execute('
- UPDATE `'._DB_PREFIX_.'hook_module`
- SET `position` = '.(int)($i + 1).'
- WHERE `id_hook` = '.(int)($id_hook).'
- AND `id_module` = '.(int)($result[$i]['id_module']));
- return true;
- }
-
- /*
- * Return module position for a given hook
- *
- * @param boolean $id_hook Hook ID
- * @return integer position
- */
- public function getPosition($id_hook)
- {
- if(isset(Hook::$preloadModulesFromHooks))
- if(isset(Hook::$preloadModulesFromHooks[$id_hook]))
- if(isset(Hook::$preloadModulesFromHooks[$id_hook]['module_position'][$this->id]))
- return Hook::$preloadModulesFromHooks[$id_hook]['module_position'][$this->id];
- else
- return 0;
- $result = Db::getInstance()->getRow('
- SELECT `position`
- FROM `'._DB_PREFIX_.'hook_module`
- WHERE `id_hook` = '.(int)($id_hook).'
- AND `id_module` = '.(int)($this->id));
- return $result['position'];
- }
-
- public function displayError($error)
- {
- $output = '
-
-

'.$error.'
-
';
- $this->error = true;
- return $output;
- }
-
- public function displayConfirmation($string)
- {
- $output = '
-
-

'.$string.'
-
';
- return $output;
- }
-
- /*
- * Return exceptions for module in hook
- *
- * @param int $id_hook Hook ID
- * @return array Exceptions
- */
- protected static $exceptionsCache = NULL;
- public function getExceptions($id_hook)
- {
- if (self::$exceptionsCache == NULL AND !is_array(self::$exceptionsCache))
- {
- self::$exceptionsCache = array();
- $result = Db::getInstance()->executeS('
- SELECT CONCAT(id_hook, \'-\', id_module) as `key`, `file_name` as value
- FROM `'._DB_PREFIX_.'hook_module_exceptions`');
- foreach ($result as $row)
- {
- if (empty($row['value']))
- continue;
- if (!array_key_exists($row['key'], self::$exceptionsCache))
- self::$exceptionsCache[$row['key']] = array();
- self::$exceptionsCache[$row['key']][] = array('file_name' => $row['value']);
- }
- }
- return (array_key_exists((int)($id_hook).'-'.(int)($this->id), self::$exceptionsCache) ? self::$exceptionsCache[(int)($id_hook).'-'.(int)($this->id)] : array());
- }
-
- public static function isInstalled($moduleName)
- {
- Db::getInstance()->executeS('SELECT `id_module` FROM `'._DB_PREFIX_.'module` WHERE `name` = \''.pSQL($moduleName).'\'');
- return (bool)Db::getInstance()->NumRows();
- }
-
- public function isRegisteredInHook($hook)
- {
- if (!$this->id)
- return false;
-
- return Db::getInstance()->getValue('
- SELECT COUNT(*)
- FROM `'._DB_PREFIX_.'hook_module` hm
- LEFT JOIN `'._DB_PREFIX_.'hook` h ON (h.`id_hook` = hm.`id_hook`)
- WHERE h.`name` = \''.pSQL($hook).'\'
- AND hm.`id_module` = '.(int)($this->id)
- );
- }
-
- /*
- ** Template management (display, overload, cache)
- */
- protected static function _isTemplateOverloadedStatic($moduleName, $template)
- {
- if (Tools::file_exists_cache(_PS_THEME_DIR_.'modules/'.$moduleName.'/'.$template))
- return true;
- elseif (Tools::file_exists_cache(_PS_MODULE_DIR_.$moduleName.'/'.$template))
- return false;
- return NULL;
- }
-
- protected function _isTemplateOverloaded($template)
- {
- return self::_isTemplateOverloadedStatic($this->name, $template);
- }
-
- public static function display($file, $template, $cacheId = NULL, $compileId = NULL)
- {
- global $smarty;
-
- $smarty->assign('module_dir', __PS_BASE_URI__.'modules/'.basename($file, '.php').'/');
- if (($overloaded = self::_isTemplateOverloadedStatic(basename($file, '.php'), $template)) === NULL)
- $result = Tools::displayError('No template found for module').' '.basename($file,'.php');
- else
- {
- $smarty->assign('module_template_dir', ($overloaded ? _THEME_DIR_ : __PS_BASE_URI__).'modules/'.basename($file, '.php').'/');
- $result = $smarty->fetch(($overloaded ? _PS_THEME_DIR_.'modules/'.basename($file, '.php') : _PS_MODULE_DIR_.basename($file, '.php')).'/'.$template, $cacheId, $compileId);
- }
- return $result;
- }
-
- protected function _getApplicableTemplateDir($template)
- {
- return $this->_isTemplateOverloaded($template) ? _PS_THEME_DIR_ : _PS_MODULE_DIR_.$this->name.'/';
- }
-
- public function isCached($template, $cacheId = NULL, $compileId = NULL)
- {
- global $smarty;
-
- return $smarty->isCached($this->_getApplicableTemplateDir($template).$template, $cacheId, $compileId);
- }
-
- protected function _clearCache($template, $cacheId = NULL, $compileId = NULL)
- {
- global $smarty;
-
- return $smarty->clearCache($template ? $this->_getApplicableTemplateDir($template).$template : NULL, $cacheId, $compileId);
- }
-
- protected function _generateConfigXml()
- {
- $xml = '
-
- '.$this->name.'
- displayName).']]>
- version.']]>
- description).']]>
- author).']]>
- tab).']]>'.(isset($this->confirmUninstall) ? "\n\t".''.$this->confirmUninstall.'' : '').'
- '.(int)method_exists($this, 'getContent').'
- '.(int)$this->need_instance.''.(isset($this->limited_countries) ? "\n\t".''.(sizeof($this->limited_countries) == 1 ? $this->limited_countries[0] : '').'' : '').'
-';
- if (is_writable(_PS_MODULE_DIR_.$this->name.'/'))
- file_put_contents(_PS_MODULE_DIR_.$this->name.'/config.xml', utf8_encode($xml));
- }
-
- /**
- * @param string $hook_name
- * @return bool if module can be transplanted on hook
- */
- public function isHookableOn($hook_name)
- {
- return is_callable(array($this, 'hook'.ucfirst($hook_name)));
- }
-}
-
diff --git a/install-dev/classes/ToolsInstall.php b/install-dev/classes/ToolsInstall.php
deleted file mode 100644
index 208c76253..000000000
--- a/install-dev/classes/ToolsInstall.php
+++ /dev/null
@@ -1,208 +0,0 @@
-
-* @copyright 2007-2011 PrestaShop SA
-* @version Release: $Revision: 6844 $
-* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
-* International Registered Trademark & Property of PrestaShop SA
-*/
-class ToolsInstall
-{
- /**
- * checkDB will call to the
- *
- * @param string $srv
- * @param string $login
- * @param string $password
- * @param string $name
- * @param string $posted
- * @return void
- */
- public static function checkDB ($srv, $login, $password, $name, $posted = true)
- {
- // Don't include theses files if classes are already defined
- if (!class_exists('Validate', false))
- {
- include_once(INSTALL_PATH.'/../classes/Validate.php');
- eval('class Validate extends ValidateCore{}');
- }
-
- if (!class_exists('Db', false))
- {
- include_once(INSTALL_PATH.'/../classes/db/Db.php');
- eval('abstract class Db extends DbCore{}');
- }
-
- if (!class_exists('MySQL', false))
- {
- include_once(INSTALL_PATH.'/../classes/db/MySQL.php');
- eval('class MySQL extends MySQLCore{}');
- }
-
- if ($posted)
- {
- // Check POST data...
- $data_check = array(
- !isset($_GET['server']) OR empty($_GET['server']) OR !Validate::isUrl($_GET['server']),
- !isset($_GET['engine']) OR empty($_GET['engine']) OR !Validate::isMySQLEngine($_GET['engine']),
- !isset($_GET['name']) OR empty($_GET['name']) OR !Validate::isUnixName($_GET['name']),
- !isset($_GET['login']) OR empty($_GET['login']) OR !Validate::isUnixName($_GET['login']),
- !isset($_GET['password']),
- (!isset($_GET['tablePrefix']) OR !Validate::isTablePrefix($_GET['tablePrefix'])) && !empty($_GET['tablePrefix']),
- );
-
- foreach ($data_check AS $data)
- if ($data)
- return 8;
- }
-
- switch (Db::checkConnection(trim($srv), trim($login), trim($password), trim($name)))
- {
- case 0:
- if (Db::checkEncoding(trim($srv), trim($login), trim($password)))
- return true;
- return 49;
- break;
- case 1:
- return 25;
- break;
- case 2:
- return 24;
- break;
- case 3:
- return 50;
- break;
- }
- }
-
- public static function getHttpHost($http = false, $entities = false, $ignore_port = false)
- {
- $host = (isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST']);
- if ($ignore_port && $pos = strpos($host, ':'))
- $host = substr($host, 0, $pos);
- if ($entities)
- $host = htmlspecialchars($host, ENT_COMPAT, 'UTF-8');
- if ($http)
- $host = 'http://'.$host;
- return $host;
- }
-
- public static function sendMail($smtpChecked, $smtpServer, $content, $subject, $type, $to, $from, $smtpLogin, $smtpPassword, $smtpPort = 25, $smtpEncryption)
- {
- require_once(INSTALL_PATH.'/../tools/swift/Swift.php');
- require_once(INSTALL_PATH.'/../tools/swift/Swift/Connection/SMTP.php');
- require_once(INSTALL_PATH.'/../tools/swift/Swift/Connection/NativeMail.php');
-
- $swift = NULL;
- $result = NULL;
- try
- {
- if($smtpChecked)
- {
-
- $smtp = new Swift_Connection_SMTP($smtpServer, $smtpPort, ($smtpEncryption == "off") ? Swift_Connection_SMTP::ENC_OFF : (($smtpEncryption == "tls") ? Swift_Connection_SMTP::ENC_TLS : Swift_Connection_SMTP::ENC_SSL));
- $smtp->setUsername($smtpLogin);
- $smtp->setpassword($smtpPassword);
- $smtp->setTimeout(5);
- $swift = new Swift($smtp);
- }
- else
- $swift = new Swift(new Swift_Connection_NativeMail());
-
- $message = new Swift_Message($subject, $content, $type);
-
- if ($swift->send($message, $to, $from))
- $result = true;
- else
- $result = 999;
-
- $swift->disconnect();
- }
- catch (Swift_Connection_Exception $e)
- {
- $result = $e->getCode();
- }
- catch (Swift_Message_MimeException $e)
- {
- $result = $e->getCode();
- }
- return $result;
- }
-
- public static function getNotificationMail($shopName, $shopUrl, $shopLogo, $firstname, $lastname, $password, $email)
- {
- $iso_code = $_GET['isoCodeLocalLanguage'];
- $pathTpl = INSTALL_PATH.'/../mails/en/employee_password.html';
- $pathTplLocal = INSTALL_PATH.'/../mails/'.$iso_code.'/employee_password.html';
-
- $content = (file_exists($pathTplLocal)) ? file_get_contents($pathTplLocal) : file_get_contents($pathTpl);
- $content = str_replace('{shop_name}', $shopName, $content);
- $content = str_replace('{shop_url}', $shopUrl, $content);
- $content = str_replace('{shop_logo}', $shopLogo, $content);
- $content = str_replace('{firstname}', $firstname, $content);
- $content = str_replace('{lastname}', $lastname, $content);
- $content = str_replace('{passwd}', $password, $content);
- $content = str_replace('{email}', $email, $content);
- return $content;
- }
-
- public static function getLangString($idLang)
- {
- switch ($idLang)
- {
- case 'en' : return 'English (English)';
- case 'fr' : return 'Français (French)';
- }
- }
-
- static function strtolower($str)
- {
- if (function_exists('mb_strtolower'))
- return mb_strtolower($str, 'utf-8');
- return strtolower($str);
- }
-
- static function strtoupper($str)
- {
- if (function_exists('mb_strtoupper'))
- return mb_strtoupper($str, 'utf-8');
- return strtoupper($str);
- }
-
- static function ucfirst($str)
- {
- return self::strtoupper(self::substr($str, 0, 1)).self::substr($str, 1);
- }
-
- static function substr($str, $start, $length = false, $encoding = 'utf-8')
- {
- if (function_exists('mb_substr'))
- return mb_substr($str, $start, ($length === false ? self::strlen($str) : $length), $encoding);
- return substr($str, $start, $length);
- }
-
- static function strlen($str)
- {
- if (function_exists('mb_strlen'))
- return mb_strlen($str, 'utf-8');
- return strlen($str);
- }
-}
diff --git a/install-dev/classes/index.php b/install-dev/classes/index.php
deleted file mode 100644
index 4e2611d37..000000000
--- a/install-dev/classes/index.php
+++ /dev/null
@@ -1,36 +0,0 @@
-
-* @copyright 2007-2011 PrestaShop SA
-* @version Release: $Revision$
-* @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;
\ No newline at end of file
diff --git a/install-dev/controller.js b/install-dev/controller.js
deleted file mode 100644
index 5a3590b8e..000000000
--- a/install-dev/controller.js
+++ /dev/null
@@ -1,1070 +0,0 @@
-/*
-* 2007-2011 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
-* @copyright 2007-2011 PrestaShop SA
-* @version Release: $Revision: 6844 $
-* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
-* International Registered Trademark & Property of PrestaShop SA
-*/
-
-//constant
-verifMailREGEX = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/;
-verifNameREGEX = /^[^0-9!<>,;?=+()@#"°{}_$%:]*$/;
-
-var errorOccured = false;
-
-//params
-configIsOk = false;
-createdBase = false;
-mailIsOk = false;
-smtpChecked = false;
-validShopInfos = false;
-upgradeCertify = false;
-dropdb=false;
-application="install";
-customModule="desactivate";
-
-function nextTab()
-{
- if(verifyThisStep())
- {
- showStep(step+1, 'next');
- }
-}
-function backTab()
-{
- if (step != 6) {
- showStep(step - 1, 'back');
- }
- else {
- constructInstallerTabs();
- showStep(1, 'back');
- }
-}
-
-function showStep(aStep, way)
-{
- step = aStep;
-
- //show the sheet
- $('div.sheet.shown').fadeOut('fast', function() {
- $($('div.sheet')[(step-1)]).fadeIn('slow').addClass('shown');
- }).removeClass('shown');
-
- //upgrade the tab
- $('#tabs li')
- .removeClass("selected")
- .removeClass("finished");
- if (step < 6) {
- if (step == 5)
- $('#tabs li:nth-child(' + step + ')').addClass("finished");
- else
- $('#tabs li:nth-child(' + step + ')').addClass("selected");
- $('#tabs li:lt(' + (step - 1) + ')').addClass("finished");
- }
- else
- {
- switch (step)
- {
-
- case 6 :
- $('#tabs li:nth-child(1)').removeClass("selected").addClass("finished");
- $('#tabs li:nth-child(2)').addClass("selected").removeClass("finished");
- $('#tabs li:nth-child(3)').removeClass("selected").removeClass("finished");
- $('#tabs li:nth-child(4)').removeClass("selected").removeClass("finished");
- break;
-
- case 7 :
- $('#tabs li:nth-child(1)').removeClass("selected").addClass("finished");
- $('#tabs li:nth-child(2)').removeClass("selected").addClass("finished");
- $('#tabs li:nth-child(3)').addClass("selected").removeClass("finished");
- $('#tabs li:nth-child(4)').removeClass("selected").removeClass("finished");
- break;
-
- case 8 :
- $('#tabs li:nth-child(1)').removeClass("selected").addClass("finished");
- $('#tabs li:nth-child(2)').removeClass("selected").addClass("finished");
- $('#tabs li:nth-child(3)').addClass("selected").removeClass("finished");
- $('#tabs li:nth-child(4)').removeClass("selected").removeClass("finished");
- break;
-
- case 9 :
- $('#tabs li:nth-child(1)').removeClass("selected").addClass("finished");
- $('#tabs li:nth-child(2)').removeClass("selected").addClass("finished");
- $('#tabs li:nth-child(3)').removeClass("selected").addClass("finished");
- $('#tabs li:nth-child(4)').addClass("finished");
- break;
-
- }
- }
-
- //title of the window and buttons
- switch(step)
- {
- case 1 :
- document.title = Step1Title;
- $("#btBack")
- .attr("disabled", "disabled")
- .addClass("disabled")
- .show('slow');
- $("#btNext")
- .removeAttr("disabled")
- .removeClass("disabled")
- .show('slow');
- break;
-
- case 2:
- document.title = step2title;
- application = "install";
- if (way == 'next')
- verifyAndSetRequire(1);
- else
- verifyAndSetRequire(0);
- $("#btBack")
- .removeAttr("disabled")
- .removeClass("disabled")
- .show('slow');
- break;
-
- case 3:
- document.title = step3title;
- $("#btBack")
- .removeAttr("disabled")
- .removeClass("disabled")
- .show('slow');
- break;
-
- case 4:
- document.title = step4title;
- $("#btBack")
- .attr("disabled", "disabled")
- .addClass("disabled")
- .hide('slow');
- break;
-
- case 5 :
- document.title = step5title;
- $("#btBack")
- .attr("disabled", "disabled")
- .addClass("disabled")
- .hide('slow');
- $("#btNext").hide('slow');
- break;
-
- case 6 :
- document.title = step6title;
- application = "update";
- if (!upgradeCertify) {
- $("#btNext")
- .attr("disabled", "disabled")
- .addClass("disabled");
- } else {
- $("#btNext")
- .removeAttr("disabled")
- .removeClass("disabled");
- }
- $("#btBack")
- .removeAttr("disabled")
- .removeClass("disabled")
- .show('slow');
- break;
-
- case 7:
- document.title = step7title;
- verifyAndSetRequire(0);
- $("#btBack")
- .removeAttr("disabled")
- .removeClass("disabled")
- .show('slow');
- break;
-
- case 8 :
- document.title = step8title;
- $("#btNext")
- .attr("disabled", "disabled")
- .addClass("disabled");
- $("#btBack")
- .removeAttr("disabled")
- .removeClass("disabled")
- .show('slow');
- break;
-
- case 9 :
- document.title = step9title;
- $("#btBack").hide();
- $("#btNext").hide();
- break;
- }
-}
-
-function verifyThisStep()
-{
- switch (step)
- {
- case 1 :
- if($("#formSetMethod input[type=radio]:checked").val() == "install" ){
- showStep(2, 'next');
- }
- else
- {
- constructUpdaterTabs();
- showStep(6, 'next');
- }
- return false;
- break;
-
- case 2 :
- return configIsOk;
- break;
-
- case 3 :
- createDB();
- return false;
- break;
-
- case 4 :
- verifyShopInfos();
- return validShopInfos;
- break;
-
- case 6 :
- return true;
- break;
-
- case 7 :
- doUpgrade();
- break;
-
- }
-
-}
-
-function setInstallerLanguage ()
-{
- $('#formSetInstallerLanguage').submit();
-}
-
-function verifyAndSetRequire(firsttime)
-{
- $("div#"+(application == "install" ? "sheet_require" : "sheet_require_update")+" > ul").slideUp("1500");
- $.ajax(
- {
- url: "model.php",
- data: "method=checkConfig&firsttime="+firsttime,
- success: function(ret)
- {
- isUpdate = application == "install" ? "" : "_update";
- testLists = ret.getElementsByTagName('testList');
-
- configIsOk = true;
-
- testListRequired = testLists[0].getElementsByTagName('test');
- for (i = 0; i < testListRequired.length; i++){
- result = testListRequired[i].getAttribute("result");
- $($("div#sheet_require"+isUpdate+" > ul#required"+isUpdate+" .required")[i])
- .removeClass( (result == "fail") ? "ok" : "fail" )
- .addClass(result);
- if (result == "fail") configIsOk = false;
- }
-
- testListOptional = testLists[1].getElementsByTagName('test');
- optionalIsOk = true
-
- for (i = 0; i < testListOptional.length; i++){
- result = testListOptional[i].getAttribute("result");
- $($("div#sheet_require"+isUpdate+" > ul#optional"+isUpdate+" li.optional")[i])
- .removeClass( (result == "fail") ? "ok" : "fail" )
- .addClass(result);
- if (result == "fail") optionalIsOk = false;
- }
-
- if (!configIsOk) {
- $('#btNext').attr({'disabled':'disabled','class':'button little disabled'});
- $('h3#resultConfig'+isUpdate).html(txtConfigIsNotOk).removeClass('okBlock').addClass('errorBlock').slideDown('slow');
- $('h3#resultConfigHelper').show();
- $("div#sheet_require"+isUpdate+" > ul").slideDown("1500");
- $('#stepList_2 li:contains("Etape 2")').addClass('ko');
- } else {
- $("#btNext").removeAttr('disabled');
- $('#btNext').removeClass('disabled');
- $("input#btNext").focus();
- var firsttime = ret.getElementsByTagName('firsttime');
- if (firsttime && firsttime[0].getAttribute("value") == 1 && optionalIsOk)
- $("input#btNext").click();
- else
- {
- $('h3#resultConfig'+isUpdate).html(txtConfigIsOk).removeClass('errorBlock').addClass('okBlock').slideDown('slow');
- $('h3#resultConfigHelper').hide();
- $("div#sheet_require"+isUpdate+" > ul").slideDown("1500");
- $('#stepList_2 li:contains("Etape 2")').removeClass('ko');
- }
- }
- }
- }
- );
-}
-
-function verifyDbAccess ()
-{
- //local verifications
- if($("#dbServer[value=]").length > 0)
- {
- $("#dbResultCheck").addClass("errorBlock").removeClass("okBlock").removeClass('infosBlock').html(txtDbServerEmpty).slideDown('slow');
- $('#stepList_3 li:contains("Etape 3")').addClass('ko');
- return false;
- }
- else
- {
- $("#dbResultCheck").removeClass("errorBlock").removeClass("okBlock").removeClass('infosBlock').html('');
- $('#stepList_3 li:contains("Etape 3")').removeClass('ko');
- }
-
- if($("#dbLogin[value=]").length > 0)
- {
- $("#dbResultCheck").addClass("errorBlock").removeClass("okBlock").removeClass('infosBlock').html(txtDbLoginEmpty).slideDown('slow');
- $('#stepList_3 li:contains("Etape 3")').addClass('ko');
- return false;
- }
- else
- {
- $("#dbResultCheck").removeClass("errorBlock").removeClass("okBlock").removeClass('infosBlock').html('');
- $('#stepList_3 li:contains("Etape 3")').removeClass('ko');
- }
-
- if($("#dbName[value=]").length > 0)
- {
- $("#dbResultCheck").addClass("errorBlock").removeClass("okBlock").removeClass('infosBlock').html(txtDbNameEmpty).slideDown('slow');
- $('#stepList_3 li:contains("Etape 3")').addClass('ko');
- return false;
- }
- else
- {
- $("#dbResultCheck").removeClass("errorBlock").removeClass("okBlock").removeClass('infosBlock').html('');
- $('#stepList_3 li:contains("Etape 3")').removeClass('ko');
- }
-
- //external verifications and sets
- $.ajax(
- {
- cache: false,
- url: "model.php",
- data:
- "method=checkDB"
- +"&server="+ $("#dbServer").val()
- +"&login="+ $("#dbLogin").val()
- +"&password="+encodeURIComponent($("#dbPassword").val())
- +"&engine="+$("#dbEngine option:selected").val()
- + "&name=" + $("#dbName").val()
- + "&tablePrefix=" + encodeURIComponent($("#db_prefix").val()),
- success: function(ret)
- {
- ret = ret.getElementsByTagName('action')[0];
- if (ret.getAttribute("result") == "ok")
- {
- $("#dbResultCheck")
- .addClass("okBlock")
- .removeClass("errorBlock")
- .html(txtError[23])
- .slideDown('slow');
- $("#dbCreateResultCheck")
- .slideUp('slow');
- $('#stepList_3 li:contains("Etape 3")').removeClass('ko');
- } else
- {
- $("#dbResultCheck")
- .addClass("errorBlock")
- .removeClass("okBlock")
- .html(txtError[parseInt(ret.getAttribute("error"))])
- .slideDown('slow');
- $("#dbCreateResultCheck")
- .slideUp('slow');
- $('#stepList_3 li:contains("Etape 3")').addClass('ko');
- }
- }
- }
- );
-
-}
-
-function createDB()
-{
- $("#dbResultCheck").hide();
- $.ajax(
- {
- url: "model.php",
- cache: false,
- data:
- "method=createDB"
- +"&tablePrefix="+ $("#db_prefix").val()
- +"&mode="+ $("#dbTableParam input[type=radio]:checked").val()+
- "&type=MySQL"+
- "&server="+ $("#dbServer").val()+
- "&login="+ $("#dbLogin").val()+
- "&password="+encodeURIComponent($("#dbPassword").val())+
- "&engine="+$("#dbEngine option:selected").val()+
- "&name="+ $("#dbName").val()+
- "&language="+ id_lang+
- (dropdb ? "&dropAndCreate=true" : '')
- ,
- success: function(ret)
- {
- var action_ret;
- try {
- action_ret = ret.getElementsByTagName('action')[0];
- } catch (e) {
- $("#dbCreateResultCheck")
- .addClass("errorBlock")
- .removeClass("okBlock")
- .removeClass('infosBlock')
- .html(ret)
- .show();
- $('#stepList_3 li:contains("Etape 3")').addClass('ko');
- return;
- }
- if (action_ret.getAttribute("result") == "ok")
- {
- var countries_ret = ret.getElementsByTagName('country');
- var timezone_ret = ret.getElementsByTagName('timezone');
- var html = '';
- for (i = 0; countries_ret[i]; i=i+1)
- {
- html = html + '';
- }
- $('#infosCountry').append(html);
- html = '';
- for (i = 0; timezone_ret[i]; i=i+1)
- {
- html = html + '';
- }
- $('#infosTimezone').append(html);
- showStep(step+1, 'next');
- }
- else
- {
- if (action_ret.getAttribute("error") == "11")
- {
- $("#dbCreateResultCheck")
- .addClass("errorBlock")
- .removeClass("okBlock")
- .removeClass('infosBlock')
- .html(
- txtError[11]+ "
\'"+
- action_ret.getAttribute("sqlQuery") + "\'
"+
- action_ret.getAttribute("sqlMsgError") + "(" + txtError[18] + " : " + action_ret.getAttribute("sqlNumberError") +")"
- )
- .show();
- }
- else
- {
- $("#dbCreateResultCheck")
- .addClass("errorBlock")
- .removeClass("okBlock")
- .removeClass('infosBlock')
- .html(txtError[parseInt(action_ret.getAttribute("error"))])
- .show();
- }
- $('#stepList_3 li:contains("Etape 3")').addClass('ko');
- }
- }
- });
-}
-
-
-function verifyMail()
-{
- //local verifications
- if ($("#testEmail[value=]").length > 0)
- {
- $("#mailResultCheck").addClass("errorBlock").removeClass("okBlock").removeClass('infosBlock').html(txtError[0]);
- return false;
- }
- else if (!verifMailREGEX.test( $("#testEmail").val() ))
- {
- $("#mailResultCheck").addClass("errorBlock").removeClass("okBlock").removeClass('infosBlock').html(txtError[3]);
- return false;
- }
- else
- {
- if (smtpChecked)
- {
- //local verifications
- if($("#smtpSrv[value=]").length > 0)
- {
- $("#mailResultCheck").addClass("errorBlock").removeClass("okBlock").removeClass('infosBlock').html(txtSmtpSrvEmpty);
- smtpIsOk = false;
- return false;
- }
- }
-
- //external verifications and sets
- $.ajax(
- {
- url: "model.php",
- cache: false,
- data:
- "method=checkMail"+
- "&mailMethod= "+(smtpChecked ? "smtp" : "native")+
- "&smtpSrv="+ $("input#smtpSrv").val()+
- "&testEmail="+ $("#testEmail").val()+
- "&smtpLogin="+ $("input#smtpLogin").val()+
- "&smtpPassword="+ $("input#smtpPassword").val()+
- "&smtpPort="+ $("input#smtpPort").val()+
- "&smtpEnc="+ $("select#smtpEnc option:selected").val()+
- "&testMsg="+testMsg+
- "&testSubject="+testSubject
- ,
- success: function(ret)
- {
- ret = ret.getElementsByTagName('action')[0];
-
- if (ret.getAttribute("result") == "ok")
- {
- $('#mailResultCheck').addClass("okBlock").removeClass("errorBlock").removeClass('infosBlock').html(mailSended+' '+$('#testEmail').val());
- $('#mailResultCheck').css('margin-top', '10px');
- mailIsOk = true;
- }
- else
- {
- mailIsOk = false;
- $("#mailResultCheck").addClass("errorBlock").removeClass("okBlock").removeClass('infosBlock').html(txtError[26]);
- $('#mailResultCheck').css('margin-top', '10px');
- }
- }
- }
- );
- }
-}
-
-function uploadLogo ()
-{
- $.ajaxFileUpload
- (
- {
- url:'xml/uploadLogo.php',
- secureuri:false,
- fileElementId:'fileToUpload',
- dataType: 'json',
- success: function (data, status)
- {
- if(typeof(data.error) != 'undefined')
- {
- $("#uploadedImage").slideUp('slow', function()
- {
- if(data.error != '')
- {
- $("#resultInfosLogo").html( txtError[parseInt(data.error)] ).addClass("errorBlock").show();
- }
- else
- {
- $(this).attr('src', ps_base_uri + 'img/logo.jpg?' + (new Date()))
- $(this).show('slow');
- $("#resultInfosLogo").html("").removeClass("errorBlock").hide();
- }
- });
- }
- },
- error: function (data, status, e)
- {
- $("#uploadedImage").attr('src', ps_base_uri + 'img/logo.jpg?' + (new Date()));
- $("#resultInfosLogo").html("").addClass("errorBlock");
- }
- }
- )
-}
-
-function moveLanguage(direction)
-{
-
- switch (direction)
- {
-
- case "al2wl" :
- $("#aLList option:selected").each(
- function()
- {
- $(this).appendTo("#wLList");
- $(this).clone().prependTo("#dLList");
- }
- );
-
- break;
-
- case "wl2al" :
- if ($("#wLList option").length > 1)
- {
- $("#wLList option:selected").each(
- function()
- {
- if($(this).val() != "en" )
- {
- $(this).appendTo("#aLList");
- $("#dLList option[value = '" + $(this).attr('value') + "']").remove();
- }
- }
- );
- }
- break;
- }
-}
-
-function ajaxRefreshField(ret, idResultField, fieldMsg)
-{
- var pattern = 'field[id='+idResultField+']';
- var result = $(ret).children().find(pattern).attr('result');
- var error = $(ret).children().find(pattern).attr('error');
-
- if (error === undefined || result === undefined)
- return true;
-
- if (result != 'ok')
- {
- $('#'+fieldMsg).html(txtError[parseInt(error)]).addClass('errorBlock').show('slow');
- if (validShopInfos)
- $('#'+idResultField).focus();
- return false;
- }
- else
- {
- $('#'+fieldMsg).html('').removeClass('errorBlock').show('slow');
- return true;
- }
-}
-
-function verifyShopInfos()
-{
- urlLanguages = "";
- $("#wLList option").each(
- function()
- {
- urlLanguages += "&infosWL[]=" + $(this).val();
- }
- );
- urlLanguages += "&infosDL[]=" + $("#dLList option:selected").val();
-
- $.ajax(
- {
- url: 'model.php',
- async: true,
- cache: false,
- data:
- "method=checkShopInfos"+
- "&isoCode="+isoCodeLocalLanguage+
- "&infosActivity="+ encodeURIComponent($("select#infosActivity").val())+
- "&infosCountry="+ encodeURIComponent($("select#infosCountry").val())+
- "&infosTimezone="+ encodeURIComponent($("select#infosTimezone").val())+
- "&infosShop="+ encodeURIComponent($("input#infosShop").val())+
- "&infosFirstname="+ encodeURIComponent($("input#infosFirstname").val())+
- "&infosName="+ encodeURIComponent($("input#infosName").val())+
- "&infosEmail="+ encodeURIComponent($("input#infosEmail").val())+
- "&infosPassword="+ encodeURIComponent($("input#infosPassword").val())+
- "&infosPasswordRepeat="+ encodeURIComponent($("input#infosPasswordRepeat").val())+
- "&infosNotification="+ ( ($("#infosNotification:checked").length > 0) ? "on" : "off" )+
- "&countryName="+encodeURIComponent($("select#infosCountry option:selected").attr('rel'))+
- urlLanguages+
- "&catalogMode="+ encodeURIComponent($("input[name=catalogMode]:checked").val())+
- "&infosMailMethod=" + ((smtpChecked) ? "smtp" : "native")+
- "&smtpSrv="+ encodeURIComponent($("input#smtpSrv").val())+
- "&smtpLogin="+ encodeURIComponent($("input#smtpLogin").val())+
- "&smtpPassword="+ encodeURIComponent($("input#smtpPassword").val())+
- "&smtpPort="+ encodeURIComponent($("input#smtpPort").val())+
- "&smtpEnc="+ encodeURIComponent($("select#smtpEnc option:selected").val())+
- "&mailSubject="+ encodeURIComponent(mailSubject)+
- "&isoCodeLocalLanguage="+isoCodeLocalLanguage,
- success: function(ret)
- {
- validShopInfos = true;
- if (!ajaxRefreshField(ret, 'infosShop', 'resultInfosShop')) validShopInfos = false;
- else if (!ajaxRefreshField(ret, 'infosCountry', 'resultInfosCountry')) validShopInfos = false;
- else if (!ajaxRefreshField(ret, 'infosTimezone', 'resultInfosTimezone')) validShopInfos = false;
- else if (!ajaxRefreshField(ret, 'validateShop', 'resultInfosShop')) validShopInfos = false;
- else if (!ajaxRefreshField(ret, 'infosFirstname', 'resultInfosFirstname')) validShopInfos = false;
- else if (!ajaxRefreshField(ret, 'infosName', 'resultInfosName')) validShopInfos = false;
- else if (!ajaxRefreshField(ret, 'infosEmail', 'resultInfosEmail')) validShopInfos = false;
- else if (!ajaxRefreshField(ret, 'infosPassword', 'resultInfosPassword')) validShopInfos = false;
- else if (!ajaxRefreshField(ret, 'infosPasswordRepeat', 'resultInfosPasswordRepeat')) validShopInfos = false;
- else if (!ajaxRefreshField(ret, 'infosLanguages', 'resultInfosLanguages')) validShopInfos = false;
- else if (!ajaxRefreshField(ret, 'infosSQL', 'resultInfosSQL')) validShopInfos = false;
- else if (!ajaxRefreshField(ret, 'infosNotification', 'resultInfosNotification')) validShopInfos = false;
- else if (!ajaxRefreshField(ret, 'validateFirstname', 'resultInfosFirstname')) validShopInfos = false;
- else if (!ajaxRefreshField(ret, 'validateName', 'resultInfosName')) validShopInfos = false;
- else if (!ajaxRefreshField(ret, 'validateCatalogMode', 'resultCatalogMode')) validCatalogMode = false;
- else
- {
- $('#endShopName').html($('input#infosShop').val());
- $('#endFirstName').html($('input#infosFirstname').val());
- $('#endName').html($('input#infosName').val());
- $('#endEmail').html($('input#infosEmail').val());
- showStep(5);
- }
- }
- }
- );
-}
-
-function checkRequired(idResultSpan, resValue)
-{
- if(resValue == "")
- {
- $(idResultSpan)
- .show("slow")
- .addClass("errorBlock")
- .html(txtError[0]);
- }
- else
- {
- $(idResultSpan)
- .hide("slow")
- .removeClass("errorBlock")
- .html("");
- }
- }
-
-function autoCheckField(idField, idResultSpan, typeVerif)
-{
- switch (typeVerif)
- {
- case "required" :
- $(idField).blur(function() { checkRequired(idResultSpan, $(this).val()); });
- if (idField == '#infosCountry' || idField == '#infosTimezone')
- $(idField).change(function() { checkRequired(idResultSpan, $(this).val()); });
- break;
-
- case "mailFormat" :
- $(idField).blur(
- function()
- {
- if (!verifMailREGEX.test( $(this).val() ))
- {
- $(idResultSpan)
- .show("slow")
- .addClass("errorBlock")
- .html(txtError[3]);
- }
- else
- {
- $(idResultSpan)
- .hide("slow")
- .removeClass("errorBlock")
- .html("");
- }
- }
- );
- break;
-
- case "firstnameFormat" :
- $(idField).blur(
- function()
- {
- if (!verifNameREGEX.test( $(this).val() ))
- {
- $(idResultSpan)
- .show("slow")
- .addClass("errorBlock")
- .html(txtError[47]);
- }
- else
- {
- $(idResultSpan)
- .hide("slow")
- .removeClass("errorBlock")
- .html("");
- }
- }
- );
- break;
-
- case "nameFormat" :
- $(idField).blur(
- function()
- {
- if (!verifNameREGEX.test( $(this).val() ))
- {
- $(idResultSpan)
- .show("slow")
- .addClass("errorBlock")
- .html(txtError[48]);
- }
- else
- {
- $(idResultSpan)
- .hide("slow")
- .removeClass("errorBlock")
- .html("");
- }
- }
- );
- break;
-
- default : return false;
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//upgrader
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-function constructUpdaterTabs()
-{
- $("#tabs")
- .empty()
- .append(""+txtTabUpdater1+"")
- .append(""+txtTabUpdater2+"")
- .append(""+txtTabUpdater3+"")
- .append(""+txtTabUpdater4+"")
- ;
- $(".installerVersion").hide();
- $(".updaterVersion").show();
-}
-
-function constructInstallerTabs()
-{
- $("#tabs")
- .empty()
- .append(""+txtTabInstaller1+"")
- .append(""+txtTabInstaller2+"")
- .append(""+txtTabInstaller3+"")
- .append(""+txtTabInstaller4+"")
- .append(""+txtTabInstaller5+"")
- ;
- $(".installerVersion").show();
- $(".updaterVersion").hide();
-}
-
-function doUpgrade()
-{
- $.ajax(
- {
- url: "model.php",
- cache: false,
- data:
- "method=doUpgrade&customModule=" + customModule+ "",
- success: function(ret)
- {
- var ret;
- try {
- ret = ret.getElementsByTagName('action')[0];
- } catch (e) {
- $("#resultUpdate").html(ret);
- showStep(8);
- return;
- }
-
- var countSqlError = 0;
- if (ret.getAttribute("result") == "ok" || (ret.getAttribute("result") == "fail" && (ret.getAttribute("error") == "34")))
- {
- requests = ret.getElementsByTagName('request');
- $("#updateLog").empty();
- $("#updateLog").hide();
- $(requests).each(function()
- {
- var html = "" + $(this).children("sqlQuery").text();
- if($(this).attr("result") == "fail")
- {
- countSqlError++;
- html += "
(" + $(this).children("sqlNumberError").text() + ") " + $(this).children("sqlMsgError").text() + "
";
- }
- $("#updateLog").append(html+"
");
- });
- if (ret.getAttribute("error") == "34")
- $("#txtErrorUpdateSQL").html(txtError[35]+" "+countSqlError+" "+txtError[36]).show();
- showStep(9);
- }
- else
- {
- $("#resultUpdate").html(txtError[parseInt(ret.getAttribute("error"))]);
- showStep(8);
- }
- },
- error: function (data, status, e)
- {
- $('#resultUpdate').html('Error during install/upgrade: '+data.responseText.replace(/<\/?[^>]+>/gi, '')+'
You may have to:
- Fix the error(s) displayed
- Put your database backup
- Modify the file settings.inc.php to put the old version for the line with _PS_VERSION_
- Restart the upgrade process from the begining
');
- $('#detailsError').html(data);
- showStep(8);
- }
- });
-}
-
-function showUpdateLog(){
- $("div#updateLog").toggle('slow');
-}
-
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// end upgrader
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//when ready....
-$(document).ready(
- function()
- {
- //show container only if JS is available
- $("#noJavaScript").hide();
- $("#container").show();
-
- //ajax animation
- $("#loaderSpace").ajaxStart(
- function()
- {
- $(this).fadeIn('slow');
- $(this).children('div').fadeIn('slow');
- }
- );
- $("#loaderSpace").ajaxComplete(
- function(e, xhr, settings)
- {
- $(this).fadeOut('slow');
- $(this).children('div').fadeOut('slow');
- errorOccured = false;
- }
- );
- //set actions on clicks
- $('#btNext').bind("click",nextTab);
- $('#btBack').bind("click",backTab);
- $('#btVerifyMail').bind("click",verifyMail);
-
- $('#al2wl, #wl2al').click(
- function()
- {
- moveLanguage(this.id);
- }
- );
- $('#req_bt_refresh, #req_bt_refresh_update').click(
- function()
- {
- verifyAndSetRequire(0);
- }
- );
-
- //set SMTP pannels states
- $("div#mailSMTPParam").hide();
- $("#set_stmp").bind("click",
- function()
- {
- switch ($("input#set_stmp:checked").length)
- {
- case 0 :
- $("div#mailSMTPParam").slideUp('slow');
- smtpChecked = false;
- break;
- case 1 :
- $("div#mailSMTPParam").slideDown('slow');
- smtpChecked = true;
- break;
- }
- }
- );
-
- //preset mail step 4
- $("#testEmail").change(
- function()
- {
- $('#infosEmail').val( $(this).val() );
- }
- );
-
- //certification needed for upgrade
- $('#btDisclaimerOk').click(function()
- {
- if ($(this).attr('checked'))
- {
- upgradeCertify = true;
- $('#btNext').removeAttr('disabled').removeClass('disabled');
- $('#upgradeProcess').slideDown(500);
- }
- else
- {
- upgradeCertify = false;
- $('#btNext').attr('disabled', 'disabled').addClass('disabled');
- $('#upgradeProcess').slideUp(500);
- }
- });
-
- //autocheck fields
- autoCheckField("#infosShop", "#resultInfosShop", "required");
- autoCheckField("#infosFirstname", "#resultInfosFirstname", "firstnameFormat");
- autoCheckField("#infosCountry", "#resultInfosCountry", "required");
- autoCheckField("#infosTimezone", "#resultInfosTimezone", "required");
- autoCheckField("#infosName", "#resultInfosName", "nameFormat");
- autoCheckField("#infosEmail", "#resultInfosEmail", "mailFormat");
- autoCheckField("#infosPassword", "#resultInfosPassword", "required");
- autoCheckField("#infosPasswordRepeat", "#resultInfosPasswordRepeat", "required");
- autoCheckField("#infosPasswordRepeat", "#resultInfosPassword", "required");
-
- constructInstallerTabs();
-
- //show 1st step
- step=1;
- $("input#btNext").focus();
-
- // hide next button for licence validation
- $("#btNext")
- .attr("disabled", "disabled")
- .addClass("disabled");
-
- function checkLicenseButton(elt)
- {
- if ($(elt).is(':checked'))
- {
- $("#btNext")
- .removeAttr('disabled')
- .removeClass('disabled');
- }
- else
- {
- $("#btNext")
- .attr("disabled", "disabled")
- .addClass("disabled");
- }
- }
-
- $('#set_license').click(function() {
- checkLicenseButton(this);
- });
- $("#customModuleDesactivation").bind('click',
- function(){
- if($("#customModuleDesactivation")[0].checked)
- customModule = 'desactivate';
- else
- customModule = 'take the risk';
- }
- )
- }
-);
diff --git a/install-dev/img/01-gd100.png b/install-dev/img/01-gd100.png
deleted file mode 100644
index 9734819977ea19856c5b9d9c44778afb2e9a5b48..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 170
zcmeAS@N?(olHy`uVBq!ia0vp^oIotd!3HGxMcSSLDajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9MLwP`jv*DdlK%YvZ_h0Dfa%E7fNxoB6O?o+zSpy89AB33
ztUe^*9FvJ3XNU8|3`d^Rjasq)9wmC9V-A!TD(=<%vb942~)JNvR5+
zxryniL8*x;m4zo$ZGeg#JY5_^DsCnH`TyUZSxSR_vI3_{%s+W9iN+fe8tYk(=sC<`
zyUsr4#$S2v1jbWyU5(;7y9#d~Jkr3-
CCNF{j
diff --git a/install-dev/img/01-pt70.png b/install-dev/img/01-pt70.png
deleted file mode 100644
index ad00a8ee0d6c5dc8fcbaf17a3749045051cfeff7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 157
zcmeAS@N?(olHy`uVBq!ia0vp^Y#=rVi0tB)?*>wmC9V-A!TD(=<%vb942~)JNvR5+
zxryniL8*x;m4zo$ZGejGJzX3_DsCnH`TyUZS&D;EuqQ)E;b6s#7On}?7?NrgzBR05
z@HAo0WG?v}(eQ&$D4waS@b`)J
BF0cRq
diff --git a/install-dev/img/02-gd100.png b/install-dev/img/02-gd100.png
deleted file mode 100644
index 48eb1bb30fe99332e21d5fa35f7ab07223610949..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 284
zcmeAS@N?(olHy`uVBq!ia0vp@KrF<;1|%D@LyUlwWQl7;NpOBzNqJ&XDuZK6ep0G}
zXKrG8YEWuoN@d~6R2!h8eV#6kAr-fh{`~)M&n%|EapYLQw@8J$ekJZpEiJu`72oT9
z7=(%&S2|x4_%+|a!}*#D$C39NX4J8DyQ$7tR%F7NtRlW-;mOhiDieI?bUyPJ*w_7r
zNiCy7Lb>&@&%7)X4DlOTpq#cJ*RZRabf1Dj=hJM
zG0s*Cs9Eb2{D)8KBhL*J$;GU1>sK%~z0f;2UFlN6Pw`_neAlqeP<#A;31dN5L85}7
ff#C#31|}Yc>HQ(o+~-Gw{LbL%>gTe~DWM4fW5{cq
diff --git a/install-dev/img/02-pt100.png b/install-dev/img/02-pt100.png
deleted file mode 100644
index ab6a27c007b6105f1e24f7556ab0804788ea9654..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 248
zcmeAS@N?(olHy`uVBq!ia0vp^U^WLEkTt>lKP!-uEOCt}3C>R|DNig)WpGT%PfAtr
z%uP&B4N6T+sVqF1Y6Da>%hSa%q~cc6kN^MenMI_TKd$=EQNY%5I`Pwqu6uuv^Q9?i
z-|1DE$aX|8KsfP$#1aoq&jrjUHBUTx>chjsi#v1}ph7KL5K5{^v{$M3Nw3H+7o
txV+GW*^6U=rHnX3`(g!VK?a2b3~ZdPrzJP3&jY%W!PC{xWt~$(69BW|Ro(yq
diff --git a/install-dev/img/02-pt70.png b/install-dev/img/02-pt70.png
deleted file mode 100644
index d84e1b7ec756ba229bfc3de95b43e24e548e108e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 279
zcmeAS@N?(olHy`uVBq!ia0vp^U^WLEkTt>lKP!-uEOCt}3C>R|DNig)WpGT%PfAtr
z%uP&B4N6T+sVqF1Y6DcX)6>NwSrQu>
zwH`IzG7`;_V&3G$ze0&k#k}6}I}iV)YKKYL3k4f^;u@0JZa&;`z$w6@$XI}pfr*EK
Y_q7)5e?K`dpeGnSUHx3vIVCg!05^DAM*si-
diff --git a/install-dev/img/03-gd100.png b/install-dev/img/03-gd100.png
deleted file mode 100644
index b4a20bafbc7eedcbd496e3209f49673538d887e6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 308
zcmeAS@N?(olHy`uVBq!ia0vp@KrF<;1|%D@LyUlwWQl7;NpOBzNqJ&XDuZK6ep0G}
zXKrG8YEWuoN@d~6R2!h8Yo0ESAr-fJf*A!58SwB}^IUP#J#%ORgHYB&u{1{Rh!-k6
zoC=8^94|fGICP)B|F>xs
zR-RJ62WIn`G_h=H%P47DDe?Wop}8{+9l2Yhz4N%l)}Ac-@idP8|6|85KhwAW`qwLC
zBP3hDw`*?HtOoOk$<8T!ot9xji^Z-Nax)u;e6h%`%#Z0}z5TT-_DIK(sSdmqkGKwo
zSY>Q9-X{3wazT#E%SsiwA647Tmd9-^d3rFfg3Ew`?}^FnsPb|Xpbr^5UHx3vIVCg!
E08zbkJOBUy
diff --git a/install-dev/img/03-pt100.png b/install-dev/img/03-pt100.png
deleted file mode 100644
index 1b74f7d6a789bfc3612415afe82f9bc88348f5c3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 270
zcmeAS@N?(olHy`uVBq!ia0vp^AT}Qd8;}%R+`Ae`NtU=qlmzFem6RtIr7}3Cm{gP5<_9|I?zJ|L+PlTfQt`xqhovhJc!4(q8V>0l!wMas}_b)|qc>_`o$-Oz4D`
z<&7-nvI37~$E;B%iZJaMo25jysuYO?jB}aEK={{((0s#)E{vBc*>k)cVgh$nNQWTIn2MPB0BiJ62Oc$7{(
z*zO6xnVHty?+MSWRLiOw69y(0y4D%rj0ZDwXB9INv$p?B2fjdhnJP1tFy;#{qr${x))GGR;c(SHXYeWq{QB
zWqd02ArC%rZ(0_x;(6k~8Alx$HZW`y61p$ZQLg-PpCNIAvEq^(
n$MngQzDaPj%GH`MvPdv+{>eJ})h?C==sX5bS3j3^P6lKP!-uEOCt}3C>R|DNig)WpGT%PfAtr
z%uP&B4N6T+sVqF1Y6DbM>gnPbQgJKk&;S4S%whsuN4x^c)Mv10x*R^{@aLU9Q^V1V
zqMS@0XZ~Nou=>!<0M9*Y%N$i5)TTWS;wTp9&`u0K!StnHL12B;r9_7s{%8XO#zJ-z
z4TpmpW-*F0NbUY@pSWRmXJbTz>H*0Om2DZqonagT2@IPPe;zh7xzG%B0E4HipUXO@
GgeCy&Vn^%%
diff --git a/install-dev/img/04-pt70.png b/install-dev/img/04-pt70.png
deleted file mode 100644
index 5bcd74e8ca174ce6416167d980920d36182f3b9e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 217
zcmeAS@N?(olHy`uVBq!ia0vp^U^WLEkTt>lKP!-uEOCt}3C>R|DNig)WpGT%PfAtr
z%uP&B4N6T+sVqF1Y6DbM?djqeQgJKk&;S4S%wh@5M}z{tNeLWma-GN}kj`w#zsX6>
z#MLIF>j6V-qRo{f`aeXf96rh_#C3ZwXbXmSADVoXO1g=K+&2^TY;0_cJXHb6J@7-8dwut`Mc@(7?zbRVDt=?5x8*pfeae
MUHx3vIVCg!0ENUw^#A|>
diff --git a/install-dev/img/05-gd100.png b/install-dev/img/05-gd100.png
deleted file mode 100644
index 7613288415a96fc25bf1d1616042542d35dbb476..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 302
zcmV+}0nz@6P)>4o1i4U6h)AJ#S
zQ&tcCv3m>0a4>?+m1?+SslL(AP5Lyku?fCF!uHo*WKo<1V-%z%3*m%UPZmTo3EMp7
zK~03Oc;xv%LWPnibAddAcZX9>;%=$Z0saaw0C>a^$Me+xEdT%j07*qoM6N<$g4q9g
A1ONa4
diff --git a/install-dev/img/05-pt100.png b/install-dev/img/05-pt100.png
deleted file mode 100644
index efede94542af85d487e9679a44c5bb54f3baf805..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 259
zcmV+e0sQ`nP)@D9LMoqL>w61Ii4P2$o%{f`YXl2y6Nq%R2?%%
z*^$^ESR8MxZ`|+fU-YVD!f}-&^fgyLBPQca9r>iri`#K&KPo2?BoYnEzOoJKzRt~-b3;-xc@`BhrPObm|002ov
JPDHLkV1kN9XaxWO
diff --git a/install-dev/img/05-pt70.png b/install-dev/img/05-pt70.png
deleted file mode 100644
index 97b6180de5fca3f8179459a2e4a348fcbf56826b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 259
zcmeAS@N?(olHy`uVBq!ia0vp^AT}Qd8;}%R+`Ae`NtU=qlmzFem6RtIr7}3CCgZF_RJzJ1`pV>B^Gj3HdI*3weHgiXycml
zkLgJE#+5GN73?XzcCC**xEyEkEcnA6V8}K@diKIe`VA3GXE(H-n0K@1$uZf0ZR}Sj
zD+F){onRJq*~pdkDMzE4T{*}iiP=CsHlcA=8t-N%U&S-8^nC)_7)6wi_pt|Uh;7-q
zQBqgu;^A!qmRye~+ORTPFF5#_^{%l^hFWc-Cj*NF!}2hzl5?TA?12tu@O1TaS?83{
F1OSY_S;_za
diff --git a/install-dev/img/ajax-loader.gif b/install-dev/img/ajax-loader.gif
deleted file mode 100644
index d2afc328e189bcbcf1111052902cc7e68f95dc16..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 11314
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
T_TOo7@5}E`Ez5`Z%JKgKG4VEy
diff --git a/install-dev/img/bad.gif b/install-dev/img/bad.gif
deleted file mode 100644
index adcfa44bb1c0c5e7d25234940b80213f892cf80f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 594
zcmZ?wbhEHb6krfwc*el+|NsBruU~(E{`Bj!hkx(f_;cm#&&y}Noj?Ec^x;3pcfLP$
z?A?jOKMw7Eeq`s*9qWE*JiMzh<_5pH%yHQtyWebzgcLesq_9?5%v)-SDBi>_bcbyXKm2
z&DpP-Y97_qJg%#GQCae`D*tmu(xcxZq=1!OvqNuEhtROALM%8F)Cw`+7{kvvBX*pbr6`Ga8Gt$SbKTD5%VE=w}enW|dV?*V?CL
zAml62q$?z%?s)37p|YM+lNFzWMw_RloL`fT$i8cKH=B&q6ihsyzwp#Fa&Hp$61TN|
z>FFlvFVnv)rDTVWq=ARyM0xR`9}<(2n1wWWxpWy09dYdtFkPh6nc=~}rszFK
P=AnbYBu}SC1_o;YGXm6g
diff --git a/install-dev/img/bg-body.png b/install-dev/img/bg-body.png
deleted file mode 100644
index ce9aa4c976a3ad579dd4251357bc21cd59f3bda7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 143
zcmeAS@N?(olHy`uVBq!ia0vp^AT}ol6Oe2{(
zJaZG%Q-e|yQz{EjrrH1%8G5=nhE&{2veA$}dHCqhr?<=5BpjX@J)Fqw`FJ98(aaAg
p7DSr
z1<%~X^wgl##FWaylc_d9MV0|RA+BG(eEIzO^V_#?fBg9I^XJcR-@bkP`0@Ae-(SCe
z{q*V6`}gnv{Q2|Y!-v0r|Ni>*>-+cb|Ni}Z_wL>Q|NoD$H}U`tG4XV945_%KbC6T4
zL4m`;@sQZ|OMCt&w*H?nQMK;a^j?1Zd1f~co=)3!SnS@LHGdX&!>s`;Z_b@WQx}80FKzAUzDmwS?JU03+W)@y
zB!1`Wi^Dg@Q|8n0=(|$tMcQLeFPi(U`h)pKUU0TB=-;cX9s8YGvuAmZu|9ilcndSN
zoYRT6pF07*qoM6N<$
Eg4R-r>;M1&
diff --git a/install-dev/img/bg-input-text.png b/install-dev/img/bg-input-text.png
deleted file mode 100755
index 777517706da020db945c673a245be14d94936397..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 141
zcmeAS@N?(olHy`uVBq!ia0vp^j6lrF!3-ofN0qGwQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JiueP3LR|m-`}g9-i*Mh)efaR<*RNk8Zy%HZr9?bk978H@
mB_*UJq$MOJBqlI$7%(u{F>sgEzjy$YXYh3Ob6Mw<&;$U(zA$D0
diff --git a/install-dev/img/bg-li-headerLinks.png b/install-dev/img/bg-li-headerLinks.png
deleted file mode 100755
index da414a8dd1cee6ba61bc069c0ffa9eab6a5669e9..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 233
zcmeAS@N?(olHy`uVBq!ia0vp^OhC-X!3-pgR@vqPDajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9MScN3A+7--5dpyw60!=(DJfd|X5o=B$;l}KB4XTp{EF(@
zEbQzKZhjF_vF3Je?mj`BJiKh2TwZ=5tQ;H$=5{g)szPECs@jIm9{zFhiD_wRI|@!+
z0-9{->Eaktaf{_3J5z%K55q=hhqgtVZvU^p(z5BLDErA`j)R}Hd{3&+7sy|hXtU;M1&U`a$lRCwA<$X6DFFc3r0F~tS~
zgiatq+W#(@m}2zv&Xw@7?<@h^w3tAbqUOzZ#E;6#Kea`t5wm6*W0C(~Nq|^-i|FM^
wbs7N!4>E%;=0(1N!UeKJ!v|S@PVNE>00CqX5dI`GtpET307*qoM6N<$g38l~DgXcg
diff --git a/install-dev/img/bg-li-tabs.png b/install-dev/img/bg-li-tabs.png
deleted file mode 100755
index 621237b7b3071edb45b29243b90c7b82cce7f1f7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 139
zcmeAS@N?(olHy`uVBq!ia0vp^EI`c8!3-oNcFQ~hQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>Jir4~tLR|m<{|{t_9=coyq@+Dv978H@B_*UVFuA!I9OO`w
hNYt4iA;8Qc!NBOsAlR#Ubq-J&gQu&X%Q~loCIB=-BuW4P
diff --git a/install-dev/img/bg-phone_block.png b/install-dev/img/bg-phone_block.png
deleted file mode 100755
index df8088484e6b8ec234fd73fda02849accd6c449b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1006
zcmV;Am)Q*4EaKkB^Ryjy*j+SXfv=K|%8J^7{Jv@9*zdS65?W
zW6jOYS6N(te}7?NVQp<~?(Xj5;^J0TR>Q-?US3{(eSOT#%s)Rr_4W1m`1tel^Zot(
zT3TA!+1XiHS*@+DK156$ASBh*)$#H1Wo2b+Yiqi?x?y5tUteF7laqUUdpgwv|=H}7S(PCm^udlDDsHkdcYVGaqhlht_V`R$8
z%DcO}rlzKvnwn>4XN-)Dva+&>h=}Ls=arR}zP`Spp`qpF<%5HR($dm+czB$goJ&ki
zw6wIhx3^MKQv3V+e0+RKN=i6AMD+CZ@bK{I>FG*KOwP{Eb#-+;LP@T!uBoZ1SXy1=
zAsi-N&r&z9K*D7b8`
z#DL&B30Ur{01H^aI&)atH(oqe)gb3QsH*D1=Ys^0#8|#--Mq1_NGF(@u{u+hPT{^U
z^GlZH^X2SNpEZ*LR|D2&q;@Cya^Ay>)@bF(TKgu7j!`D`uh0g^l0u`frE*a(jHJ>+3BeJZH_vKvjmg8`SPf_N#OxrYIsaK+d9-(FBCD4Zy#F2z&L;F3
zNS(y$@dt>Wm~X1kSbKFj955)5PM$0?7euykPR=eVS^tc?amuX!VGwK}n1?UE5WSu-HQO!~5C=&N>cQ
zY2Mrfl*Cv;0oGe6iLtmSC;*T!|^KcQTM@S?1MuX_+a?d`YUHR!OCK
c>R7dH<`2YX_07*qoM6N<$f^R_fKL7v#
diff --git a/install-dev/img/bg-tab.png b/install-dev/img/bg-tab.png
deleted file mode 100644
index 20d2f2c1ab4236edfc72ef6fb3f5920720d56da3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 190
zcmeAS@N?(olHy`uVBq!ia0vp^Oh9bS0V3}$JR=6ABuiW)N`mv#O3D+9QW+dm@{>{(
zJaZG%Q-e|yQz{EjrrH1%C3w0xhE&{2nzP{9=>rE29ARJ!SsEdcDAIB8P|KlaPNPMq
z8a2~qu!(dD&OFYuSVE!6Cqb@jQvUXN3ae96oE~jlFzXP?&t;ucLK6VD6h#IA
diff --git a/install-dev/img/bg_blockInfoEnd.png b/install-dev/img/bg_blockInfoEnd.png
deleted file mode 100755
index fcc8d9a2ad96f0cf9195e61767ee87cd256567ed..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 218
zcmeAS@N?(olHy`uVBq!ia0vp^j6l4NgBeKbvxt`gDajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9MV0|RA+F!QfB*93%m4rXfBg9I_3PJc)C>(HgG*kvx&6UA>g&EMA7BvYV&{91
S>~jlf1cRrmpUXO@geCx;WN3W=
diff --git a/install-dev/img/bg_bt_blockInfoEnd.png b/install-dev/img/bg_bt_blockInfoEnd.png
deleted file mode 100755
index b23dd7c65f5a6d9759fba5124dad104469d52860..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 885
zcmV-*1B(2KP)001Ef0{{R37>ucq0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzfKW_SMHYSr8=eV-w1GgZ6BCOD42J_5
zp%<{;uOpfYHl`5G>BGq8!Z(C6!PvkanhFt@1@QLo33vj|>BPg^zzdNB3UdPvoCH6w
z6A_&SJgyQJp9eOp5IL<86P^YjqY5mj4Ku0_CZ!A+pa?0Z3^1t<9H9v#qznK5|01Ib
zFsTm}o(Day5)PXL5u61Lm;`6QG8LN#@%Qj^#d7ia@Ckkc3zP#4kOK{f1n>3l6P*U9
z+K3FA11XdYFsT_9lm{rF48-EWoYaU6a0J2Fzgf9FV7fp0{rWDZ4bkkyQl~oL^50;+
zEJdp~2yFsAt{#fIgH5MIqt}(o<-_Oo;lbCyJFODI+`z`(!H>*^!r8!k$#;6kTn>8#
zB$5h6i$OD~4=kMxq}hfeq#-}96FICAVzEjUg9aUl2uQO+Wxhab!AM-RJv^!sGo}wX
zkupM@HA1iy44VT1mjG3`8UvRB1(*R+w;5Eo8V8vIQMMRGu@y|T7YUjJO0yPEwHQaT
z7DKY!Q~&@0i%CR5RCwC#*I8fEK^VpHBLWh!2tlPSmStEVDzXH$VS#CwORJQ&FQAB8
zn%cr!mzh5by@hAa_i8@B+jB89DCNd~kV(dK`0$HNgC~1r8XS;u@Q;jx-((#8CF7t;
z#=#*O2U{duwGa%t3&q|}!8sDG8jM($*Ec@38wNSpb6`}OYm>QfmbBv;Ra|NiOTX?u^#7$(8WlUDSr
z1<%~X^wgl##FWaylc_d9MQi~+A+G=b|37o)jK!-}%|H=8PZ!6Kid#tuDG3Z51`G`B
W3{0HMmrel6FnGH9xvXuJ$!k;Orj
z#zuv{EP%WuhQBY8#Y2d|GK|7Fe!C!z!#aw=HG{n=tI}bq(OsdKMP(B4t2M4#|f^wT-
zs@&$fsVw*ILZ(0Z!jzM%i1YiAK`19*^Gx#18o!*}TP2F)wQ@PR%s1pO-}Z8HlX1vj
zt+3_fz7;XYI24on4$fVUxz|Ll_CIc}C-+pibC#8=n0yjq9fmAS#~>QMuAUQ@#PmFW-Wrmv6$c
z%X605uq-nt`|i|{2hPPxU5vKIvr@)HvIZsf4MgNhbu{B^0+>`Uw5gv$m7=WyPg;<^0+PkzRv-Re2#%XT#X@-$CR~CEipLcF%8rDsh0*=o$-~
z+&9gaGh(@~@z^QM^5nk8=5o*0@6M>@L)t7yARklvj+@Ip<<^<1T$7bcR4V~
zZpq38%US-<$PHP!WI3I%oaHQMIm=o8pUb&!VL8iL&T^KsoaHQMIm=nj@>F@tyl?)2
i#b@A?7dh4Z6kq^ZpkntGQ?_>i00008U}fi7AzZCsS>JiueP3LR|m-`}g9-i*Mh)efaR<*RNk8Zy%HZr9?bk978H@
mB_*UJq$MOJBqlI$7%(u{F>sgEzjy$YXYh3Ob6Mw<&;$U(zA$D0
diff --git a/install-dev/img/bg_li_stepList.png b/install-dev/img/bg_li_stepList.png
deleted file mode 100755
index 98615f41dfde439e681a8b365ee13aebff7b78d3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 2426
zcmcgt`9BkmAD%0s6#0If^+^#T_Z1Q$N78I2)yF4fiss6ZBgd!uI7-NUCM3&Mj4?F#
z9Lv3#nH|o}u(_wXKK_dD^Ljnc^Ljl$KJWMI^&|ovtWOKe2m=6s)3!F2pku#!%swH$
zWBvB=4ei*ZgRNYG!Tw&sFWp~20p_0m9?*-nzV1(c+lwzs$0Z1&>f;_B+^^78WV@bLcr{_O1R*4EaiL2D|NN^nac5{cB<&%b~F
zW>&OQS)EHuOH3wnXJ==6dU`(d$NmCDW`7M@DNiMHp;&Y27^PTbD3-siImlENH1y{85yC`XuG?+dwYBH
z^Yb_yjzA#H&CPXnbffXj=sLW-q{Qag|aa~7#bRCYisN6?Ikel1_uY(
zZNmct0}BfaEiElQJw5b|(Sw77>5v=@1~WN1$>DIu$Hxy352vQ4+S}VZJ3GIQ-p69G
zKY#x0@9*#K?na~0jg5^ze*9=^YHDt7Mj#Nat*tdRHKU`WNF=hMp`pIMzOJq=x>Xnl
zi9I?x`t|GAag#(zQta^o0)jyf;N$TB2|%N}#~1)0XlZL{?i4n)lCyMQ#`bJ`Bx^-kS(h7?paWOYmaNY+;oG))$|d0O5Invo)j8#?
zl`{8z6y>EOaaJa0*7c514O|&Ymr@jYoqd2!v%`AxfX#zUh59xW#n
zaVlOyA(oS>Yzv+7b&3USY`154))?G@Cf7t;_UfMw`#1qX;=D&v}*MElXGod{Kb4#dkype
zJ(&XHo6k~p07}AePaCNOP?rWY%
ztfG(^QOnB_0TwG2-+PA*LQsu9y%!+0J?*90q4JHL}aA>)@{u;b{xzG86EIn+GJUPc
zl3uo63(J-L3I`3g>o)!=_w@_$GFaOdpXR&}e4aP?_z3{XxsJh7@+g5mgScYoN|23y
zFs#~N8n}33o^%2z@=)P#!Y)H%u*^I1k!s&p?2bt;d{}&Psa~96lLNTh8wZ7bgiZ6<
z>%|R-t!jS)#HD|*s>JTfXM{>`e0K6KPclQ^Ts|w6e7hFgWI7$!Go!q!eYL#pI;i_D
z?+keU*yUm6%w3)e
z-ln#S5w)9uXoP&O7pBy^84rcUbo#mFefJq34Ij_S)J;eWX=-4OBQ85C@h$Z9m>Fx0
zrvk&X&1e5bfMegIQ3-Ts{YXIs77mLx*Qe%-fUUz8=ygNtrFFk&+>-sf#8h=n&f$z&
zl3W-&7;6p)xzsMkT_)FRkRb08B}{G@muk+JGA2b9=U(DplT!>?yo%|q`)f{PzU5bN
zdv}X0xfD%1ucMjqj`x9?_N;6Z%tF>Zr5a9FNo6IzI-Yw=CAigfw2wwgRnEJRa_2!H
z?##Xc91eZ|e9L;~FGG0|794)(Fc~bB^+=tnt?fh}qp-pdL^&$?QD?cqq3N?7naFr2
zPb4vmXd`@0tho)!FkN}GgUKt@M$&<>!s^{aBegc)odFUwU+*5w1SNXs$zZfLviku-
z)TB8rDeCb&JXE78J;}8Z7^rvh8}Vz)udlSiL}z9YP=|gGXH)>m*CbSQ$acWa@3`mw
zBw87CzP;-}1N#&lwAkZ4mIL&jekga*MPVs*8Ohp>$7F+B4)-3sV`t6zKw70%BIcB7uhPM7+==X
zH}yMeOUiyV^M_Yn7xaW|+Tifb1mPp`ht0J&+}PK|6AeQ>!_5?mZ<1=hoDA|PBBUoG
zjlEPN_Q4p3kF_=xa{=X-o`fkAd7Pjzv5kk7;llHT62}qjtl4W
zi4BtE!eWh`s%=HJ15S)5Ez?Rp#Luh1`LxlFuqVzAS%lVXm>@ZX3*c@dRuFvNwr66X
z@aIZiK2iG*@^e2sY~NX#EApp5jhzB;2mmJpb_9u*8PdUDJGbgDt?=a4oo0lMoiqiS
zfZlwZ?x#;<1{N`PQ9;(kbV{?<`@rPySCj4FRi9#X3jPV^kHB9FkAl3yuyal^rd%CT
zRzc-<0!3qxh93JR8VPmV0;T)L*3g1azyqGKw5pwuu~~5ND(E{gyiD$9u
diff --git a/install-dev/img/bg_li_title.png b/install-dev/img/bg_li_title.png
deleted file mode 100755
index 86b2c833cc6cd5941f51335d88cc3803a5c9a10f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 204
zcmeAS@N?(olHy`uVBq!ia0vp^j6f{O!3-pi`)%{(
zJaZG%Q-e|yQz{EjrrH1%nFaWSxPJfs{mYjxA3uKl{rmTiA3wf+{rc(Cr}yvQ|NQy$
z^XJch|Ni~;>({@3|Ni{>^X=QW4gna094l_ST~LQ3-d#6y4QF)%Yo)-f`!s$_Zr)W_iI>gTe~DWM4f
D*d<^<
diff --git a/install-dev/img/bg_loaderSpace.png b/install-dev/img/bg_loaderSpace.png
deleted file mode 100755
index f9da304b50c7a75870fead62ff4acbf2aa283add..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 109
zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}bl$r9IylHmNblJdl&R0hYC{G?O`
z&)mfH)S%SFl*+=BsWw1G{GKk3Ar-fhHk5q0!y}Nu!1Ru>Y?;lXhd?O?Pgg&ebxsLQ
E09i906#xJL
diff --git a/install-dev/img/bg_moduleTable_th.png b/install-dev/img/bg_moduleTable_th.png
deleted file mode 100755
index 3c5db2d44852e0827d21af1e6f8889d389eaa465..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 262
zcmV+h0r~!kP))&CSi)+S={y?ep{V>gwv&*4F9i>Ez_(@$vED;o+8k~=
z>SQJwi8A#;!I&9i<{KtH>@V;i)Hn7f8Z|MFnHVLS8I6X`DGbJ7vn_4u^;{G-O?-s%
zaK3N?EpOkC@0@$NWyP5S9MO5K9M(y!IFQDn4%T<9a-mWDG`PwCyc<||W7)Gg^VTA?
ze;$BsJJ9odvTcM?H4dg}#1pZpxc#D%Sxw$6RCF5wSf^g!_}
zTkmZC&|yB+p1!z{$K+HMIa7=~SD>@K6D26&NqWDJ45G_d<>hq=X13LAf$zAS>dg7gVz^x9xH^zU
z3SW{#FaV=sQZyhi6S22J7DF%+icVlALXw3y1cUKuK7G?9Tf*1z2Zh5KBhzAHh)CgU
z(7A@K%wPm&Qd-$xU`(L><-~!}amJXGn8|2m>?jznfvIW$fgoqX6l0*PdKOws$Gu8yxnd3_d=8
z4Hyu4=3na1oBuo|a~f-koEwV{u)e`RPs#ieU;tpY#8ev7&R+lk002ovPDHLkV1iI=
BM_~W}
diff --git a/install-dev/img/boutonpt-on.png b/install-dev/img/boutonpt-on.png
deleted file mode 100644
index 17106acfd54af76f8285909d9c96d2eb19a0fe68..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 714
zcmV;*0yX`KP){D)P$b%7tgW
zNr}L4APyhjOU+KXRyG5#UW4y95q1J$+W@6#DlE%{lNy5ms)YK7^*o=x!vT5f{(tVK
z7caTnT8OPrU%-Npn1QiKxHmval8hP{%Bq6l%ml`!C*AVn7i9jDR2a?O#|yb-P>Kqqfq
z{R@WL#}pltn5FCh7z?U!C23%EzOGrKV-g|#K*p#VEJXt%CY*`&;4eW})IJzb)pf_x
z4X|cMm=h-#LxX0TG^`Pr_ZYFWsbixEHg<$Nai03e(}<3C!4wHhe&hLS_VoNLTEE^Q
z+VzD)F-SgQ!I+=H+R9sc%=fOA?@wJ{xP2nD(RsawXxjs8v_$3%oQ4F+HXx5V&@N8n
zyVAh=qm>7_a$%{rM_%R=ikCU%PA<-2xWS+{10WDr%Y$9JWCW&)-?oI$FN>&_zS5ol
wayM`O^Onp7UgN^KL(vajtN7WPXGV_
diff --git a/install-dev/img/boutonpt-over.png b/install-dev/img/boutonpt-over.png
deleted file mode 100644
index 851be19fe9e14d395149ed2d81e703f1b026111a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 701
zcmV;u0z&
zxql^hb80v{fbHNLloGAKDsr!*vUZ-9gB0sSrThtV3y&UXFt@Dn+x87zDYN-&fEQs6|%VSaiF_l(o+UZTG||fn|>$BosegabbXVgS+k6SK!+e-!f$90*3O%73yf+8
zDFSFLwF`_;2nb9xz}UONa0SU}zC^ELbhT90O5{oeG%`5(FBtAoD~m+M1bZrm`_#%J
z2Sx@Gfk$AXAj5(xCh8TVq}|;4D@Aa^-S_LAzh=<}Q?-<8Nar^qT$zQ=5%_dST+)|Bo1~R!O-!n9wh?LU(YsAFj?z2
zGkU=}(LY=`H4gP|;@IG*cJ2Sh(!{NQd%&6kQDRgmJS6z=j*bjoBoq-84C?z9kw3CCsy|HUWP;sm;Q)FUH
zNN#&8v?aEcf}=;g_3=w~g&4*0>(hIgIHfGO%4S!HQHZyD66>+-ff5tLB*y;|a}pDiC6;Hzj1$DT
zja~P1V#Wz#ew5`wPOz1ky&XI)iL)Rj@ex4%y6JP*l5yP}ZvsV%T0000RCwC#o6SnYP!NUhO(uV>Hd;jt
zN)b2i)UDvE2=ys^6J7W&`V6k(rqG?}(p?E^Koqfx(W=!Mdmq4M2F?ekxpaB>7>4H7
z9-2+#SmW$)GEU0?P%lQDk~28|xf;qB*2%k@%(wQ_PL@Qo4f4alLsy_qe2+gTA1`lT
z&qY~PPopyyxKA>1lXlw6wl`8#1nP#I%F1GM0L?TWlh
zK{Fv#0<_?KT^4y`&-W}U0a|dr#^f7oJOg)uvK^S6rNDZIEaU~sRtNDm;JND?{4xfV
z$;-}C$R7dL2B3`aPhRUA;@Jy;DtX1*hz))?zj#C)KojCEMHW*R=!9ad3_z{Cn7lx%
zyjU9m)&>BuHURM7wE>eCDBgMB`5B`Mpp3D+q`2op2VDSV+{x?VoDT;a+|B`7m~e8r
zRW_6ZXAhkKCFG0MX+bo-QP$_&nCV~NS2#212h@yL&Mjv!SDnbfHNOH300hQ5dTOk|
Q0000007*qoM6N<$f(ba#U;qFB
diff --git a/install-dev/img/bt-dsbl.png b/install-dev/img/bt-dsbl.png
deleted file mode 100644
index 4be0c2aef1967d9a29a94236bdd94405e9a517e1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 248
zcmVMc3EY&CSi{=jZ9^>E`C<)6>(?
z(9r7Y>e|}c+1c6P;NaZc+}76C(0*3+uPgd=;-C;
z<<-^I($do3-{0))?9b27?d|O_eq^oy001;eL_t(|+62Lc0e~<703hskcJKc;1yS@`
yRWgTE?lc-qT8~9%S8LF_1clqI^w}i800RI!*a6Wgp{0BP0000aI
zwo4kUaI
zwo4kUFVdQ&MBb@0O`g|^8f$<
diff --git a/install-dev/img/bt_off.png b/install-dev/img/bt_off.png
deleted file mode 100755
index 9de735db7da53c3e22a6f921dadb7b5b029ef466..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 251
zcmVgwv#)6?MK;OXh<%*@Q^=jY_)mTzV
z2wtm7>(I-c28BuEvB>NasYvWHs@-O#&xY<7U;snc0q}&l)aL*I002ovPDHLkV1kXE
BhGhT%
diff --git a/install-dev/img/bt_off_hover.png b/install-dev/img/bt_off_hover.png
deleted file mode 100755
index a8507e95d156700971cede3e444c204a027aac90..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 251
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
diff --git a/install-dev/img/bullet.png b/install-dev/img/bullet.png
deleted file mode 100644
index 1da7af138e3986c3cdb20c0ceaf3147dde4e3e03..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1265
zcmVPx#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF*
zm;eA5aGbhPJOBUy7<5HgbW?9;ba!ELWdKlNX>N2bPDNB8b~7$BH8Ae8p8x;^OG!jQ
zR5(v%l#5RkR}_b*is8>_+JZb5ide;(f&$f6Tcb9OtraE31tM=2$bty+SfB{Hi;ION
z3&^sI3xWu^`q&79Nq)nSNC7@sLodi>LlF7{6Ilu2b?m733`T2R2
zSFY#JpDQaXE6UQ+lCr$KtUP=6Oj)~jt+H<2I>p`HU2$`BQ`W3m^QufyBy9D5`0ydq
z)6?9(eVeYH78={jscp-_(wd5;MUSbWqSiDNV!$5!4^qjwyfa&^|
zl=SSOsCO47eY-K<*pFp2lB)hg!`eOh?5;*
zq&YT`Y}+920MeZs$-K0Qyzf4s?AmTjefvl=2h!Hrpz77y%cw?2M@3z9I0We24+qI<
z4<@xSkh3l=ZQ~`Bw?z?Kr6KwJyJWO%-@-Q4kWvMGpG7LBGaWLfrhhNTFKrR&1rTS^P~o#{O!N0G%VwC=&&eSj0qTSylkQ|dItp7kQ4z=JIF0TzCr
zR6#Qf6BN`RBv!zZYc*sxZRAv^gl$$gK^Y$($58VH#?JlZINv8#cucDCCC2DQj^#6c
zd-_NP{qkgvr1Eegi#<4I_9jKZj*HeQZQIF-%1@9S<^KKqSR5xY*u%(g4nb$t5P!}K
zZJ7t7Ke|}vU!E*3kX5;li2S#RKE0lVZ@oyh`jY1irobM|Iook0N12_S<@!KBsir`R
zo5Ru9i?*orCg!v!XD(yc?QADRJ%)knJRyd@wg;sP?O%mtd1{Y7(GSzdy-ZWq(;--*TKDe_g(_M29pai_nDa))mZk<(9jTrgM;c*e#`X-4<5XB
bFiP!z&_mQfi~x>_00000NkvXXu0mjfzA|AG
diff --git a/install-dev/img/ico_help.gif b/install-dev/img/ico_help.gif
deleted file mode 100644
index 511538f8ecbee4bc19127abe59ec4f3dcff1254a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1246
zcmV<41R?uJNk%w1VITk?0OkMyG;nTltQS_A)mfa@9cH$o)A`u%67-I~qxn!@EVe#MKz@J*D_X{g+c!t6GK$a%Eo
zcC#An^ZG=M&RdHVWTo3ijL*pN|6QQiVxQSyqS|w-+cSa3SBfP|j96`~;2&+fON-5(
z(D!bp7Hg&6N|De+k
zut9{%DR{v_ip)@!(^r?#8(^EX;{QX8%|wdLFMh_o>Hp#F_hY2nEPBI7kI!MG+_2yM
zxa9vXc*LB}`%jV4d$s2+b-z}f*bP>zVxruq+W$<=4W;ZDugprbiJvRnZ4G=9-6A%_JdOkNjlapv|1}|Ap
zNg}Qb3rSBc76JxsXr+S(L_1PYA`l}LE5$2F0~t^)4OM*yy1XO_3po`sGC)k*+dwjG
z5D9fGThNly2_j-LOkGG7@bO(0Ofn!vRC>>mr#o39OMp~hLoi-Ef^6uGcv3?FE6w0UBN
zSgL#fYE(&qCXJ34P*lt?V&q5=4K^dhWH83;pA$hm^bG^T!j2nh)R?ibz=n|~m_r0H
zLE+8}4`CQYu&LoPW+N9095J9KfEhU=!oZk4yNQR}P55@OsboeI+AyrH4&a)y5iJ*z
zCr1tg^KP4SnjlZ!yuc3w#Letk(8Pw2??P;Nzu@6{2M{qXfDaF&00Zo<5iEcq1dRRr
zLN1uF*#Y_e|27oB27G30ki-ZABsf5V2@2tWO?;FA27>}DD8K^~bm0SWItUQQ1{Xdc
z;s7EFfQL;cTu7pb4-7Cs4OA#_LjY=Uv4b2F3^2luJdQ9x88O6Ah7~>X_`n`u5Wt21
z8fm=YLjzENFhU7bQaOSZ5B}i*kyTnL0R$Spkp>zr=)i&;IZV04njm0dg;Q3Pz~&NI
zlwbh~E9l@tE^46Q0|{{;u!IDJN&vzGPCWoZp&)>e2LcNCfPxw*xd4Cy5+s0t1Q>LR
zffHFe;6$fhbV>!71OVWIIeu`k1{phKx`!8Dh#`g-AUNTK1hlH4f){l_zy<+!tO3a&
zXas-*tQaz*0uRvg;A;&v@X)|dQ4otm0J#uyfU;z)5W)rpK!Cso)Hcw-1_)RH!2>J!
zV8^zsdaEn|K6DWR76`OZKmjeZ06_y&$UuM(0MHvv0BfM2g8?g4(M1>D$e_SG3J2?e
z!Wse8YYGQ0;P3$#5Bp%U$vSZH0S+#3(5)`JsNsSeB7b1B%{aK>f*KyfjBI4Y1x@3a
IFb4tvJ2E36-v9sr
diff --git a/install-dev/img/index.php b/install-dev/img/index.php
deleted file mode 100644
index 4e2611d37..000000000
--- a/install-dev/img/index.php
+++ /dev/null
@@ -1,36 +0,0 @@
-
-* @copyright 2007-2011 PrestaShop SA
-* @version Release: $Revision$
-* @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;
\ No newline at end of file
diff --git a/install-dev/img/logo.png b/install-dev/img/logo.png
deleted file mode 100644
index 8275cd8762cc8c982f24ff4b6c141c8e2692696d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4431
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
diff --git a/install-dev/img/ombrage-bas.png b/install-dev/img/ombrage-bas.png
deleted file mode 100644
index 0451e3be52db1d686177f106c056d5368dcfdb4f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 342
zcmV-c0jd6pP)10000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy_(?=TRCwC#+`Uf2Fcbz*CoSbil^B?K
z|A*_uPzeDEA?056M#?+*9O-l7!Hc&~aXhrvUMp{r_j>01CGyY!008>&8~KV{BOj4V
zJ+H?YZjryp5}6}YB&GW0%Xzu_3
zfR5zJyzQ5!pDIy#jBg&QByD+Y_e&xUmBHQt0014??u5wX%Ra40BHR?xu-spBme*a07*qoM6N<$fEaktaqG=FU#>$20u2|ptZaI4iMfI)TyM|+m48-V
zm6X`PvF`4kM*RskLYJbmXJ_=ZX{Eo|_-66H-pYa%(R*v3O`ZMt)y_Gp-WF>UR?g#m
ze)ZwvS;Bf>kI2L>j(#L^T5p&8?Tl6aJjuDs-s|_jJr1-IFZjol&&bBmyiLUTipU}z
OkWx=qKbLh*2~7ZBuTwPu
diff --git a/install-dev/img/phone.png b/install-dev/img/phone.png
deleted file mode 100644
index 862e85be933076c3fcf555727b1c8640012bcb76..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 697
zcmV;q0!ICbP)gqbQ00wF@&i@QA*QHP1$jb
z4lp=kq4)D^IzF~BH0|=s7eXLRRYLL-%YwJF_s~r$c4iU!&$W$UX|3j3a|2&zrKQ9&
zjhWNc%@jq?huhjKx!p60T%pA6n!)95N+?ju1+F;>t)Z5RR2=|wU#@Vju7<8jH$n)H
z#v+QWl1DyL09|4X{k=cQFS$$#!`PfwY)&gqS
zIP~$Fd5_CV*ZaG?Y=4MIK2N+d9z*FH%zo{EB5VCPP4yK_WS3z|%OnEOuFF6xf6J5`
zuM`4xtQlkE2p@U|Sd)8;Gy9K_5CqKjVYR*B`h5#I1`S%{C5&1PDuBsOTARzb(P1ZH
z%MMl#J>#8y0s@BzGQtgw)Rz~{Ct|1V`6-%4cX6WNI0-W?JbqG(Bkc}nv-KVwzw@dt
ziK{(h_{QMV*oP1{W$yEk0?tO-#uC|Mt|TQwOIYktO7nA&4LqRR?G1{=n7)mmfVUDr
ztVFF2UNGh1#3iL6`!VBljX725lQ*MYl&J~{S+Z#gKT8ChhVDk!Re;6qV!Ur0wKUAH
zRo`fLm^qNaviQqNM`1d7k90=^EuGyU8>HWTj0?rt$d^wHsQ8ap>&Yv8N}k6wFB`l7
f@!$P!D@Obqdg{q6o(owq00000NkvXXu0mjf(ZD=O
diff --git a/install-dev/img/pict_error.png b/install-dev/img/pict_error.png
deleted file mode 100755
index 1995f45235d5350010c7174e6a5227199105ef18..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 450
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G}
zXKrG8YEWuoN@d~6R2!h8_5hy{*KG_8`x6pg&zyNYE$wt#+RX(EZltAso;mYQTG|f=
zhMzNMew;b;+sv8g)6(9~oOwAd?f!xVzvj>XGk^ZagoNJ-33nDOIFgWXG9lqxLc;&~
z^ZzF#e4ju6HUq+@Ykb&VN1H(}UhL;QsD;OBoGcY`2VEE6#Fq47d
z43Gf^TLQ#@YzEzuAirRU2yrCC()Zkdff{Fcx;TbZ+_LHS6lyl$VNrLuq4>LR?uMI;
zum8XA_6hltxMZG|EQ?ZAO{+S0N8e5N6X*6>lvJuexjXlR)TzX!GJYF6w_c0vJhDi0
z)-g-x%L?O_a6^yukiF%Mx#N|==kxgd&*Jnph0b@e
z^&+kr}+wt-7
z)YR0sx3`*_ny06yMw8di&(A`T)jo~W>gwvCprBEm-HeQk`1tt$|Nnvd?&AOe0Jcd)
zK~#9!WRKYrf-nq4!y>DIA`0TZ(n3W+n*aYa6UHY!4`(`eCe00KqE!Q-T7HApUEfH7
zC}h)j9CT)l;WSC6A=YL`L0_Y1S=*~+d06)v+6Du|FfMmefK3ZZI&Wsra-@Pm%&Mxo
z?T+MXCI%QV2Y|!*M1~wWh#o{7vm*|~;z?{a>;;V|>Ar~NlI_x`w03UWewO*RJ?FJt
vtXxfqRXG+Ls~72dofhBff5-it{}EsSdvYY~70VLr00000NkvXXu0mjf3&!mU
diff --git a/install-dev/img/pict_ok.png b/install-dev/img/pict_ok.png
deleted file mode 100755
index 429fc165672f83a01578b2d7746ff242e2aa131e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 374
zcmeAS@N?(olHy`uVBq!ia0vp^d_c^@!3-o*<7!?2DajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9MWq2gA+A%mM$JE5G<91{`(m5?7WOq)`a738Y(Y8O^_m>*InuE*}lq@
z{{Q#I<#&SsrrTd=raY6%Sf<@oq1auk%~z-0Uzpf0;Ejm0PJwhfD
z2X$~`DJVN2JUT!P1Q$aI0bK_SSpybD1PwqZ1qK&e39cY{!r)IBEG!HZIKj`~y8vJW
z{JAsdp28CkHuULcVv2}APRNwo@n*vV4huXm^PvTbhyl~8d060p#*8W%c(uu)Bp8bu
z8Pv?6;fKSSCV05Gf(2tm5;kWz45F}L1b`z}N|Yer0Ye%JjT}^1f&q;iF&LIqaL`DQ
R3JOLDT*x&-K?S2g06Wl5Bn$um
diff --git a/install-dev/img/shadow-left.png b/install-dev/img/shadow-left.png
deleted file mode 100644
index f3122811fdbe6ca82162cd4689c03fd98a64f1fe..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 254
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