From 1d1a2def5fb9da6628205e4797ca55546ae3dcb8 Mon Sep 17 00:00:00 2001 From: ToutPratique Date: Tue, 17 May 2016 15:54:37 +0200 Subject: [PATCH] push prod --- .gitignore | 3 +- google4923b609d4e89885.html | 1 + modules/atos/certif.fr.039956369100050 | 44 + modules/atos/parmcom.039956369100050 | 2 + modules/atos/pathfile | 2 +- modules/gls/AdminGls.gif | Bin 0 -> 800 bytes modules/gls/AdminGls.php | 133 + modules/gls/ajax.php | 137 + modules/gls/ajaxFront.php | 93 + modules/gls/changelog.txt | 89 + modules/gls/classes/GLSManagement.php | 489 + modules/gls/classes/GLSTools.php | 261 + modules/gls/classes/index.php | 28 + modules/gls/config.xml | 12 + modules/gls/config_fr.xml | 12 + modules/gls/cron.php | 14 + modules/gls/docs/index.php | 28 + modules/gls/docs/install.pdf | Bin 0 -> 930199 bytes modules/gls/gls.php | 1338 ++ .../import/GlsWinExpe6_2016051117380679.csv | 2 + modules/gls/import/index.php | 28 + modules/gls/index.php | 28 + modules/gls/logo.png | Bin 0 -> 1884 bytes modules/gls/tpl/admintab/export_orders.tpl | 70 + modules/gls/tpl/admintab/index.php | 28 + modules/gls/tpl/admintab/settings.tpl | 54 + modules/gls/tpl/index.php | 28 + modules/gls/translations/en.php | 6 + modules/gls/translations/fr.php | 103 + modules/gls/translations/index.php | 28 + modules/gls/translations/translate_en.js | 5 + modules/gls/translations/translate_fr.js | 5 + modules/gls/views/css/gls-mobile.css | 277 + modules/gls/views/css/gls-mobile.less | 286 + modules/gls/views/css/gls.css | 1 + modules/gls/views/css/gls.less | 406 + modules/gls/views/css/index.php | 28 + modules/gls/views/css/prepros.cfg | 307 + modules/gls/views/css/style.css | 559 + modules/gls/views/img/btn_fermer.png | Bin 0 -> 1962 bytes modules/gls/views/img/details.gif | Bin 0 -> 954 bytes modules/gls/views/img/getTickets.gif | Bin 0 -> 1849 bytes .../gls/views/img/icones/account_detail.png | Bin 0 -> 6781 bytes modules/gls/views/img/icones/index.php | 28 + modules/gls/views/img/icones/info.png | Bin 0 -> 6690 bytes modules/gls/views/img/icones/settings.png | Bin 0 -> 7348 bytes modules/gls/views/img/icones/supplier.png | Bin 0 -> 6288 bytes modules/gls/views/img/index.php | 28 + modules/gls/views/img/logo.png | Bin 0 -> 1493 bytes modules/gls/views/img/marker.png | Bin 0 -> 3188 bytes modules/gls/views/img/marker_current.png | Bin 0 -> 3324 bytes modules/gls/views/img/pdf_icon.jpg | Bin 0 -> 9713 bytes modules/gls/views/img/picto-arrow.png | Bin 0 -> 1126 bytes modules/gls/views/img/picto_ado.png | Bin 0 -> 6160 bytes modules/gls/views/img/picto_bp.png | Bin 0 -> 5424 bytes modules/gls/views/img/picto_mid.png | Bin 0 -> 5865 bytes modules/gls/views/img/picto_shd.png | Bin 0 -> 5651 bytes modules/gls/views/img/search-repeat.png | Bin 0 -> 1012 bytes modules/gls/views/img/title-repeat.png | Bin 0 -> 1201 bytes modules/gls/views/index.php | 28 + modules/gls/views/js/gls.js | 1164 ++ modules/gls/views/js/glsFront.js | 608 + modules/gls/views/js/index.php | 28 + modules/gls/views/js/jquery.popupoverlay.js | 786 + .../gls/views/templates/admin/post_action.tpl | 33 + .../gls/views/templates/hook/bo-header.tpl | 38 + .../views/templates/hook/checkout_process.tpl | 57 + .../hook/checkout_process_errors.tpl | 36 + .../gls/views/templates/hook/configure.tpl | 144 + .../views/templates/hook/header-mobile.tpl | 48 + modules/gls/views/templates/hook/header.tpl | 38 + modules/gls/views/templates/hook/index.php | 28 + .../gls/views/templates/hook/listRelais.tpl | 47 + modules/gls/views/templates/index.php | 28 + ...90d3d29cf225f658674a27b73a6f45ed4f_new.jpg | Bin 0 -> 114557 bytes .../AdminOrderTaxProfitReport.php | 136 + modules/ordertaxprofitreport/changelog.txt | 227 + .../ordertaxprofitreport/conf/admin.conf.php | 119 + .../ordertaxprofitreport/conf/common.conf.php | 2012 +++ .../ordertaxprofitreport/conf/hook.conf.php | 22 + modules/ordertaxprofitreport/conf/index.php | 35 + .../conf/install.conf.php | 37 + modules/ordertaxprofitreport/config.xml | 13 + modules/ordertaxprofitreport/en.php | 6 + modules/ordertaxprofitreport/es.php | 235 + modules/ordertaxprofitreport/fr.php | 235 + modules/ordertaxprofitreport/index.php | 35 + modules/ordertaxprofitreport/it.php | 235 + .../lib/admin/admin-ctrl_class.php | 74 + .../lib/admin/admin-display_class.php | 223 + .../lib/admin/admin-export_class.php | 503 + .../lib/admin/admin-update_class.php | 283 + .../lib/admin/i-admin.php | 15 + .../ordertaxprofitreport/lib/admin/index.php | 35 + .../lib/common/dir-reader.class.php | 222 + .../ordertaxprofitreport/lib/common/index.php | 35 + .../lib/common/pagination.class.php | 173 + .../lib/common/verbose.class.php | 280 + .../lib/hook/hook_class.php | 125 + .../ordertaxprofitreport/lib/hook/index.php | 35 + modules/ordertaxprofitreport/lib/index.php | 35 + .../lib/install/i-install.php | 22 + .../lib/install/index.php | 35 + .../lib/install/install-config_class.php | 101 + .../lib/install/install-ctrl_class.php | 65 + .../lib/install/install-sql_class.php | 74 + .../lib/install/install-tab_class.php | 108 + .../lib/module-dao_class.php | 1115 ++ .../lib/module-tools_class.php | 644 + .../lib/warnings_class.php | 36 + modules/ordertaxprofitreport/logo.gif | Bin 0 -> 30360 bytes modules/ordertaxprofitreport/logo.png | Bin 0 -> 30360 bytes .../ordertaxprofitreport.php | 570 + modules/ordertaxprofitreport/readme_en.pdf | Bin 0 -> 111628 bytes modules/ordertaxprofitreport/readme_fr.pdf | Bin 0 -> 111783 bytes modules/ordertaxprofitreport/sql/index.php | 35 + modules/ordertaxprofitreport/sql/install.sql | 5 + .../ordertaxprofitreport/sql/uninstall.sql | 5 + modules/ordertaxprofitreport/sql/update.sql | 4 + .../views/css/admin-15-14.css | 72 + .../views/css/admin-theme.css | 4083 ++++++ .../ordertaxprofitreport/views/css/admin.css | 1246 ++ .../views/css/bootstrap-theme.min.css | 7 + .../views/css/bootstrap.min.css | 7 + .../views/css/datepicker.css | 875 ++ .../ordertaxprofitreport/views/css/index.php | 35 + .../views/css/jquery.fancybox-1.3.4.css | 359 + .../views/css/jquery.ui.core.css | 38 + .../views/fonts/FontAwesome.otf | Bin 0 -> 62856 bytes .../views/fonts/fontawesome-webfont.eot | Bin 0 -> 38205 bytes .../views/fonts/fontawesome-webfont.ttf | Bin 0 -> 80652 bytes .../views/fonts/fontawesome-webfont.woff | Bin 0 -> 44432 bytes .../views/fonts/img/fontawesome-webfont.svg | 414 + .../views/fonts/img/index.php | 35 + .../views/fonts/index.php | 35 + .../ordertaxprofitreport/views/img/000000.png | Bin 0 -> 178 bytes .../ordertaxprofitreport/views/img/666666.png | Bin 0 -> 395 bytes .../views/img/AdminOrderTaxProfitReport.gif | Bin 0 -> 601 bytes .../ordertaxprofitreport/views/img/b81900.png | Bin 0 -> 403 bytes .../ordertaxprofitreport/views/img/blank.gif | Bin 0 -> 43 bytes .../ordertaxprofitreport/views/img/eeeeee.png | Bin 0 -> 201 bytes .../ordertaxprofitreport/views/img/f6a828.png | Bin 0 -> 3762 bytes .../ordertaxprofitreport/views/img/f6f6f6.png | Bin 0 -> 895 bytes .../views/img/fancy_close.png | Bin 0 -> 1517 bytes .../views/img/fancy_loading.png | Bin 0 -> 10195 bytes .../views/img/fancy_nav_left.png | Bin 0 -> 1446 bytes .../views/img/fancy_nav_right.png | Bin 0 -> 1454 bytes .../views/img/fancy_shadow_e.png | Bin 0 -> 107 bytes .../views/img/fancy_shadow_n.png | Bin 0 -> 106 bytes .../views/img/fancy_shadow_ne.png | Bin 0 -> 347 bytes .../views/img/fancy_shadow_nw.png | Bin 0 -> 324 bytes .../views/img/fancy_shadow_s.png | Bin 0 -> 111 bytes .../views/img/fancy_shadow_se.png | Bin 0 -> 352 bytes .../views/img/fancy_shadow_sw.png | Bin 0 -> 340 bytes .../views/img/fancy_shadow_w.png | Bin 0 -> 103 bytes .../views/img/fancy_title_left.png | Bin 0 -> 503 bytes .../views/img/fancy_title_main.png | Bin 0 -> 96 bytes .../views/img/fancy_title_over.png | Bin 0 -> 70 bytes .../views/img/fancy_title_right.png | Bin 0 -> 506 bytes .../views/img/fancybox-x.png | Bin 0 -> 203 bytes .../views/img/fancybox-y.png | Bin 0 -> 176 bytes .../views/img/fancybox.png | Bin 0 -> 15287 bytes .../views/img/fancybox_loading.gif | Bin 0 -> 6567 bytes .../views/img/fancybox_loading@2x.gif | Bin 0 -> 13984 bytes .../views/img/fancybox_overlay.png | Bin 0 -> 1003 bytes .../views/img/fancybox_sprite.png | Bin 0 -> 1362 bytes .../views/img/fancybox_sprite@2x.png | Bin 0 -> 6553 bytes .../ordertaxprofitreport/views/img/fdf5ce.png | Bin 0 -> 235 bytes .../ordertaxprofitreport/views/img/ffe45c.png | Bin 0 -> 249 bytes .../ordertaxprofitreport/views/img/ffffff.png | Bin 0 -> 207 bytes .../views/img/icone-info.png | Bin 0 -> 922 bytes .../views/img/icons222222.png | Bin 0 -> 10566 bytes .../views/img/icons228ef1.png | Bin 0 -> 10653 bytes .../views/img/iconsef8c08.png | Bin 0 -> 10636 bytes .../views/img/iconsffd27a.png | Bin 0 -> 10662 bytes .../views/img/iconsffffff.png | Bin 0 -> 10356 bytes .../ordertaxprofitreport/views/img/index.php | 35 + .../ordertaxprofitreport/views/img/less.png | Bin 0 -> 186 bytes .../ordertaxprofitreport/views/img/loader.gif | Bin 0 -> 3719 bytes .../views/img/loading.gif | Bin 0 -> 2767 bytes .../ordertaxprofitreport/views/img/more.png | Bin 0 -> 203 bytes .../views/img/top_header.png | Bin 0 -> 57603 bytes .../views/img/transmit_go.png | Bin 0 -> 842 bytes .../views/img/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../views/img/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../views/img/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../views/img/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../views/img/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../views/img/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../views/img/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../views/img/ui-bt-bg.png | Bin 0 -> 657 bytes .../views/img/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../views/img/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../views/img/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../views/img/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../views/img/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../ordertaxprofitreport/views/img/ui_bg.png | Bin 0 -> 391 bytes modules/ordertaxprofitreport/views/index.php | 35 + .../ordertaxprofitreport/views/js/admin.js | 348 + .../views/js/bootstrap.min.js | 6 + .../ordertaxprofitreport/views/js/index.php | 35 + .../views/js/jquery-1.11.0.min.js | 4 + .../views/js/jquery-1.4.4.min.js | 167 + .../views/js/jquery-ui-1.8.18.custom.min.js | 356 + .../views/js/jquery.easing-1.3.pack.js | 72 + .../views/js/jquery.fancybox-1.3.4.pack.js | 46 + .../views/js/jquery.mousewheel-3.0.4.pack.js | 14 + .../views/templates/admin/basic-settings.tpl | 225 + .../views/templates/admin/confirm.tpl | 3 + .../views/templates/admin/error.tpl | 10 + .../views/templates/admin/header.tpl | 41 + .../views/templates/admin/index.php | 35 + .../views/templates/admin/module-update.tpl | 11 + .../templates/admin/multi-shop-config.tpl | 3 + .../views/templates/admin/register-orders.tpl | 10 + .../views/templates/admin/tab/form.tpl | 327 + .../views/templates/admin/tab/index.php | 35 + .../views/templates/admin/tab/report-csv.tpl | 8 + .../views/templates/admin/tab/report-html.tpl | 126 + .../views/templates/hook/index.php | 35 + .../views/templates/hook/order-validation.tpl | 1 + .../views/templates/index.php | 35 + modules/paypal/api/Results.txt | 12215 ++++++++++++++++ modules/shopymind/Readme.md | 47 + .../ShopymindClient/bin/Configuration.php | 471 + .../shopymind/ShopymindClient/bin/Notify.php | 136 + .../ShopymindClient/bin/RequestServer.php | 98 + .../shopymind/ShopymindClient/bin/index.php | 11 + modules/shopymind/ShopymindClient/call.php | 225 + .../shopymind/ShopymindClient/callback.php | 1992 +++ .../ShopymindClient/configuration.php | 10 + .../ShopymindClient/doc/CHANGELOG.md | 6 + .../shopymind/ShopymindClient/doc/README.md | 17 + .../shopymind/ShopymindClient/doc/index.php | 11 + modules/shopymind/ShopymindClient/index.php | 11 + .../shopymind/ShopymindClient/src/Client.php | 235 + .../src/Reminders/Abstract.php | 154 + .../src/Reminders/BirthdayClients.php | 115 + .../src/Reminders/BirthdayClientsSignUp.php | 93 + .../src/Reminders/DroppedOutCart.php | 92 + .../src/Reminders/GoodClientsByAmount.php | 225 + .../Reminders/GoodClientsByNumberOrders.php | 245 + .../src/Reminders/InactiveClients.php | 145 + .../src/Reminders/MissingClients.php | 147 + .../src/Reminders/OrdersByStatus.php | 155 + .../src/Reminders/VoucherUnused.php | 168 + .../ShopymindClient/src/Reminders/index.php | 11 + .../shopymind/ShopymindClient/src/Server.php | 182 + .../ShopymindClient/src/definitions.php | 24 + .../shopymind/ShopymindClient/src/index.php | 11 + .../library/SZend/Controller/Exception.php | 34 + .../SZend/Controller/Request/Abstract.php | 338 + .../SZend/Controller/Request/Exception.php | 36 + .../library/SZend/Controller/Request/Http.php | 885 ++ .../SZend/Controller/Request/index.php | 11 + .../src/library/SZend/Controller/index.php | 11 + .../src/library/SZend/Exception.php | 30 + .../src/library/SZend/Http/Client.php | 1100 ++ .../SZend/Http/Client/Adapter/Exception.php | 33 + .../SZend/Http/Client/Adapter/Interface.php | 78 + .../SZend/Http/Client/Adapter/Proxy.php | 267 + .../SZend/Http/Client/Adapter/Socket.php | 319 + .../SZend/Http/Client/Adapter/Test.php | 193 + .../SZend/Http/Client/Adapter/index.php | 11 + .../library/SZend/Http/Client/Exception.php | 33 + .../src/library/SZend/Http/Client/index.php | 11 + .../src/library/SZend/Http/Exception.php | 36 + .../src/library/SZend/Http/Response.php | 625 + .../src/library/SZend/Http/index.php | 11 + .../src/library/SZend/Json.php | 241 + .../src/library/SZend/Json/Decoder.php | 457 + .../src/library/SZend/Json/Encoder.php | 413 + .../src/library/SZend/Json/Exception.php | 37 + .../src/library/SZend/Json/index.php | 11 + .../src/library/SZend/Loader.php | 258 + .../ShopymindClient/src/library/SZend/Uri.php | 158 + .../src/library/SZend/Uri/Exception.php | 36 + .../src/library/SZend/Uri/Http.php | 631 + .../src/library/SZend/Uri/index.php | 11 + .../src/library/SZend/Validate/Abstract.php | 337 + .../src/library/SZend/Validate/Hostname.php | 444 + .../library/SZend/Validate/Hostname/At.php | 50 + .../library/SZend/Validate/Hostname/Ch.php | 50 + .../library/SZend/Validate/Hostname/De.php | 58 + .../library/SZend/Validate/Hostname/Fi.php | 50 + .../library/SZend/Validate/Hostname/Hu.php | 50 + .../SZend/Validate/Hostname/Interface.php | 52 + .../library/SZend/Validate/Hostname/Li.php | 50 + .../library/SZend/Validate/Hostname/No.php | 52 + .../library/SZend/Validate/Hostname/Se.php | 50 + .../library/SZend/Validate/Hostname/index.php | 11 + .../src/library/SZend/Validate/Interface.php | 54 + .../src/library/SZend/Validate/Ip.php | 70 + .../src/library/SZend/Validate/index.php | 11 + .../src/library/SZend/index.php | 11 + .../ShopymindClient/src/library/index.php | 11 + .../backward_compatibility/Context.php | 347 + .../backward_compatibility/Display.php | 68 + .../backward_compatibility/backward.ini | 1 + .../backward_compatibility/backward.php | 55 + .../backward_compatibility/index.php | 35 + modules/shopymind/config.xml | 12 + modules/shopymind/config_fr.xml | 12 + modules/shopymind/en.php | 52 + modules/shopymind/index.php | 11 + modules/shopymind/logo.gif | Bin 0 -> 2077 bytes modules/shopymind/logo.png | Bin 0 -> 2861 bytes modules/shopymind/shopymind.php | 637 + modules/shopymind/views/index.php | 11 + .../shopymind/views/templates/front/index.php | 11 + .../views/templates/front/shopymind.tpl | 10 + modules/shopymind/views/templates/index.php | 11 + themes/toutpratique/css/global.css | 3 +- themes/toutpratique/footer.tpl | 13 + themes/toutpratique/header.tpl | 8 +- themes/toutpratique/lang/fr.php | 1 + .../blocknewsletter/translations/fr.php | 1 + .../modules/blocksearch/translations/fr.php | 1 - .../modules/gls/translations/fr.php | 78 + .../ordertaxprofitreport/translations/fr.php | 234 + .../modules/shopymind/translations/fr.php | 0 322 files changed, 52119 insertions(+), 6 deletions(-) create mode 100644 google4923b609d4e89885.html create mode 100644 modules/atos/certif.fr.039956369100050 create mode 100644 modules/atos/parmcom.039956369100050 create mode 100644 modules/gls/AdminGls.gif create mode 100644 modules/gls/AdminGls.php create mode 100644 modules/gls/ajax.php create mode 100644 modules/gls/ajaxFront.php create mode 100644 modules/gls/changelog.txt create mode 100644 modules/gls/classes/GLSManagement.php create mode 100644 modules/gls/classes/GLSTools.php create mode 100644 modules/gls/classes/index.php create mode 100644 modules/gls/config.xml create mode 100644 modules/gls/config_fr.xml create mode 100644 modules/gls/cron.php create mode 100644 modules/gls/docs/index.php create mode 100644 modules/gls/docs/install.pdf create mode 100644 modules/gls/gls.php create mode 100644 modules/gls/import/GlsWinExpe6_2016051117380679.csv create mode 100644 modules/gls/import/index.php create mode 100644 modules/gls/index.php create mode 100644 modules/gls/logo.png create mode 100644 modules/gls/tpl/admintab/export_orders.tpl create mode 100644 modules/gls/tpl/admintab/index.php create mode 100644 modules/gls/tpl/admintab/settings.tpl create mode 100644 modules/gls/tpl/index.php create mode 100644 modules/gls/translations/en.php create mode 100644 modules/gls/translations/fr.php create mode 100644 modules/gls/translations/index.php create mode 100644 modules/gls/translations/translate_en.js create mode 100644 modules/gls/translations/translate_fr.js create mode 100644 modules/gls/views/css/gls-mobile.css create mode 100644 modules/gls/views/css/gls-mobile.less create mode 100644 modules/gls/views/css/gls.css create mode 100644 modules/gls/views/css/gls.less create mode 100644 modules/gls/views/css/index.php create mode 100644 modules/gls/views/css/prepros.cfg create mode 100644 modules/gls/views/css/style.css create mode 100644 modules/gls/views/img/btn_fermer.png create mode 100644 modules/gls/views/img/details.gif create mode 100644 modules/gls/views/img/getTickets.gif create mode 100644 modules/gls/views/img/icones/account_detail.png create mode 100644 modules/gls/views/img/icones/index.php create mode 100644 modules/gls/views/img/icones/info.png create mode 100644 modules/gls/views/img/icones/settings.png create mode 100644 modules/gls/views/img/icones/supplier.png create mode 100644 modules/gls/views/img/index.php create mode 100644 modules/gls/views/img/logo.png create mode 100644 modules/gls/views/img/marker.png create mode 100644 modules/gls/views/img/marker_current.png create mode 100644 modules/gls/views/img/pdf_icon.jpg create mode 100644 modules/gls/views/img/picto-arrow.png create mode 100644 modules/gls/views/img/picto_ado.png create mode 100644 modules/gls/views/img/picto_bp.png create mode 100644 modules/gls/views/img/picto_mid.png create mode 100644 modules/gls/views/img/picto_shd.png create mode 100644 modules/gls/views/img/search-repeat.png create mode 100644 modules/gls/views/img/title-repeat.png create mode 100644 modules/gls/views/index.php create mode 100644 modules/gls/views/js/gls.js create mode 100644 modules/gls/views/js/glsFront.js create mode 100644 modules/gls/views/js/index.php create mode 100644 modules/gls/views/js/jquery.popupoverlay.js create mode 100644 modules/gls/views/templates/admin/post_action.tpl create mode 100644 modules/gls/views/templates/hook/bo-header.tpl create mode 100644 modules/gls/views/templates/hook/checkout_process.tpl create mode 100644 modules/gls/views/templates/hook/checkout_process_errors.tpl create mode 100644 modules/gls/views/templates/hook/configure.tpl create mode 100644 modules/gls/views/templates/hook/header-mobile.tpl create mode 100644 modules/gls/views/templates/hook/header.tpl create mode 100644 modules/gls/views/templates/hook/index.php create mode 100644 modules/gls/views/templates/hook/listRelais.tpl create mode 100644 modules/gls/views/templates/index.php create mode 100644 modules/homeslider/images/4e128b90d3d29cf225f658674a27b73a6f45ed4f_new.jpg create mode 100644 modules/ordertaxprofitreport/AdminOrderTaxProfitReport.php create mode 100644 modules/ordertaxprofitreport/changelog.txt create mode 100644 modules/ordertaxprofitreport/conf/admin.conf.php create mode 100644 modules/ordertaxprofitreport/conf/common.conf.php create mode 100644 modules/ordertaxprofitreport/conf/hook.conf.php create mode 100644 modules/ordertaxprofitreport/conf/index.php create mode 100644 modules/ordertaxprofitreport/conf/install.conf.php create mode 100644 modules/ordertaxprofitreport/config.xml create mode 100644 modules/ordertaxprofitreport/en.php create mode 100644 modules/ordertaxprofitreport/es.php create mode 100644 modules/ordertaxprofitreport/fr.php create mode 100644 modules/ordertaxprofitreport/index.php create mode 100644 modules/ordertaxprofitreport/it.php create mode 100644 modules/ordertaxprofitreport/lib/admin/admin-ctrl_class.php create mode 100644 modules/ordertaxprofitreport/lib/admin/admin-display_class.php create mode 100644 modules/ordertaxprofitreport/lib/admin/admin-export_class.php create mode 100644 modules/ordertaxprofitreport/lib/admin/admin-update_class.php create mode 100644 modules/ordertaxprofitreport/lib/admin/i-admin.php create mode 100644 modules/ordertaxprofitreport/lib/admin/index.php create mode 100644 modules/ordertaxprofitreport/lib/common/dir-reader.class.php create mode 100644 modules/ordertaxprofitreport/lib/common/index.php create mode 100644 modules/ordertaxprofitreport/lib/common/pagination.class.php create mode 100644 modules/ordertaxprofitreport/lib/common/verbose.class.php create mode 100644 modules/ordertaxprofitreport/lib/hook/hook_class.php create mode 100644 modules/ordertaxprofitreport/lib/hook/index.php create mode 100644 modules/ordertaxprofitreport/lib/index.php create mode 100644 modules/ordertaxprofitreport/lib/install/i-install.php create mode 100644 modules/ordertaxprofitreport/lib/install/index.php create mode 100644 modules/ordertaxprofitreport/lib/install/install-config_class.php create mode 100644 modules/ordertaxprofitreport/lib/install/install-ctrl_class.php create mode 100644 modules/ordertaxprofitreport/lib/install/install-sql_class.php create mode 100644 modules/ordertaxprofitreport/lib/install/install-tab_class.php create mode 100644 modules/ordertaxprofitreport/lib/module-dao_class.php create mode 100644 modules/ordertaxprofitreport/lib/module-tools_class.php create mode 100644 modules/ordertaxprofitreport/lib/warnings_class.php create mode 100644 modules/ordertaxprofitreport/logo.gif create mode 100644 modules/ordertaxprofitreport/logo.png create mode 100644 modules/ordertaxprofitreport/ordertaxprofitreport.php create mode 100644 modules/ordertaxprofitreport/readme_en.pdf create mode 100644 modules/ordertaxprofitreport/readme_fr.pdf create mode 100644 modules/ordertaxprofitreport/sql/index.php create mode 100644 modules/ordertaxprofitreport/sql/install.sql create mode 100644 modules/ordertaxprofitreport/sql/uninstall.sql create mode 100644 modules/ordertaxprofitreport/sql/update.sql create mode 100644 modules/ordertaxprofitreport/views/css/admin-15-14.css create mode 100644 modules/ordertaxprofitreport/views/css/admin-theme.css create mode 100644 modules/ordertaxprofitreport/views/css/admin.css create mode 100644 modules/ordertaxprofitreport/views/css/bootstrap-theme.min.css create mode 100644 modules/ordertaxprofitreport/views/css/bootstrap.min.css create mode 100644 modules/ordertaxprofitreport/views/css/datepicker.css create mode 100644 modules/ordertaxprofitreport/views/css/index.php create mode 100644 modules/ordertaxprofitreport/views/css/jquery.fancybox-1.3.4.css create mode 100644 modules/ordertaxprofitreport/views/css/jquery.ui.core.css create mode 100644 modules/ordertaxprofitreport/views/fonts/FontAwesome.otf create mode 100644 modules/ordertaxprofitreport/views/fonts/fontawesome-webfont.eot create mode 100644 modules/ordertaxprofitreport/views/fonts/fontawesome-webfont.ttf create mode 100644 modules/ordertaxprofitreport/views/fonts/fontawesome-webfont.woff create mode 100644 modules/ordertaxprofitreport/views/fonts/img/fontawesome-webfont.svg create mode 100644 modules/ordertaxprofitreport/views/fonts/img/index.php create mode 100644 modules/ordertaxprofitreport/views/fonts/index.php create mode 100644 modules/ordertaxprofitreport/views/img/000000.png create mode 100644 modules/ordertaxprofitreport/views/img/666666.png create mode 100644 modules/ordertaxprofitreport/views/img/AdminOrderTaxProfitReport.gif create mode 100644 modules/ordertaxprofitreport/views/img/b81900.png create mode 100644 modules/ordertaxprofitreport/views/img/blank.gif create mode 100644 modules/ordertaxprofitreport/views/img/eeeeee.png create mode 100644 modules/ordertaxprofitreport/views/img/f6a828.png create mode 100644 modules/ordertaxprofitreport/views/img/f6f6f6.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_close.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_loading.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_nav_left.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_nav_right.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_shadow_e.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_shadow_n.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_shadow_ne.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_shadow_nw.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_shadow_s.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_shadow_se.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_shadow_sw.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_shadow_w.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_title_left.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_title_main.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_title_over.png create mode 100644 modules/ordertaxprofitreport/views/img/fancy_title_right.png create mode 100644 modules/ordertaxprofitreport/views/img/fancybox-x.png create mode 100644 modules/ordertaxprofitreport/views/img/fancybox-y.png create mode 100644 modules/ordertaxprofitreport/views/img/fancybox.png create mode 100644 modules/ordertaxprofitreport/views/img/fancybox_loading.gif create mode 100644 modules/ordertaxprofitreport/views/img/fancybox_loading@2x.gif create mode 100644 modules/ordertaxprofitreport/views/img/fancybox_overlay.png create mode 100644 modules/ordertaxprofitreport/views/img/fancybox_sprite.png create mode 100644 modules/ordertaxprofitreport/views/img/fancybox_sprite@2x.png create mode 100644 modules/ordertaxprofitreport/views/img/fdf5ce.png create mode 100644 modules/ordertaxprofitreport/views/img/ffe45c.png create mode 100644 modules/ordertaxprofitreport/views/img/ffffff.png create mode 100644 modules/ordertaxprofitreport/views/img/icone-info.png create mode 100644 modules/ordertaxprofitreport/views/img/icons222222.png create mode 100644 modules/ordertaxprofitreport/views/img/icons228ef1.png create mode 100644 modules/ordertaxprofitreport/views/img/iconsef8c08.png create mode 100644 modules/ordertaxprofitreport/views/img/iconsffd27a.png create mode 100644 modules/ordertaxprofitreport/views/img/iconsffffff.png create mode 100644 modules/ordertaxprofitreport/views/img/index.php create mode 100644 modules/ordertaxprofitreport/views/img/less.png create mode 100644 modules/ordertaxprofitreport/views/img/loader.gif create mode 100644 modules/ordertaxprofitreport/views/img/loading.gif create mode 100644 modules/ordertaxprofitreport/views/img/more.png create mode 100644 modules/ordertaxprofitreport/views/img/top_header.png create mode 100644 modules/ordertaxprofitreport/views/img/transmit_go.png create mode 100644 modules/ordertaxprofitreport/views/img/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 modules/ordertaxprofitreport/views/img/ui-bg_flat_75_ffffff_40x100.png create mode 100644 modules/ordertaxprofitreport/views/img/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 modules/ordertaxprofitreport/views/img/ui-bg_glass_65_ffffff_1x400.png create mode 100644 modules/ordertaxprofitreport/views/img/ui-bg_glass_75_dadada_1x400.png create mode 100644 modules/ordertaxprofitreport/views/img/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 modules/ordertaxprofitreport/views/img/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 modules/ordertaxprofitreport/views/img/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 modules/ordertaxprofitreport/views/img/ui-bt-bg.png create mode 100644 modules/ordertaxprofitreport/views/img/ui-icons_222222_256x240.png create mode 100644 modules/ordertaxprofitreport/views/img/ui-icons_2e83ff_256x240.png create mode 100644 modules/ordertaxprofitreport/views/img/ui-icons_454545_256x240.png create mode 100644 modules/ordertaxprofitreport/views/img/ui-icons_888888_256x240.png create mode 100644 modules/ordertaxprofitreport/views/img/ui-icons_cd0a0a_256x240.png create mode 100644 modules/ordertaxprofitreport/views/img/ui_bg.png create mode 100644 modules/ordertaxprofitreport/views/index.php create mode 100644 modules/ordertaxprofitreport/views/js/admin.js create mode 100644 modules/ordertaxprofitreport/views/js/bootstrap.min.js create mode 100644 modules/ordertaxprofitreport/views/js/index.php create mode 100644 modules/ordertaxprofitreport/views/js/jquery-1.11.0.min.js create mode 100644 modules/ordertaxprofitreport/views/js/jquery-1.4.4.min.js create mode 100644 modules/ordertaxprofitreport/views/js/jquery-ui-1.8.18.custom.min.js create mode 100644 modules/ordertaxprofitreport/views/js/jquery.easing-1.3.pack.js create mode 100644 modules/ordertaxprofitreport/views/js/jquery.fancybox-1.3.4.pack.js create mode 100644 modules/ordertaxprofitreport/views/js/jquery.mousewheel-3.0.4.pack.js create mode 100644 modules/ordertaxprofitreport/views/templates/admin/basic-settings.tpl create mode 100644 modules/ordertaxprofitreport/views/templates/admin/confirm.tpl create mode 100644 modules/ordertaxprofitreport/views/templates/admin/error.tpl create mode 100644 modules/ordertaxprofitreport/views/templates/admin/header.tpl create mode 100644 modules/ordertaxprofitreport/views/templates/admin/index.php create mode 100644 modules/ordertaxprofitreport/views/templates/admin/module-update.tpl create mode 100644 modules/ordertaxprofitreport/views/templates/admin/multi-shop-config.tpl create mode 100644 modules/ordertaxprofitreport/views/templates/admin/register-orders.tpl create mode 100644 modules/ordertaxprofitreport/views/templates/admin/tab/form.tpl create mode 100644 modules/ordertaxprofitreport/views/templates/admin/tab/index.php create mode 100644 modules/ordertaxprofitreport/views/templates/admin/tab/report-csv.tpl create mode 100644 modules/ordertaxprofitreport/views/templates/admin/tab/report-html.tpl create mode 100644 modules/ordertaxprofitreport/views/templates/hook/index.php create mode 100644 modules/ordertaxprofitreport/views/templates/hook/order-validation.tpl create mode 100644 modules/ordertaxprofitreport/views/templates/index.php create mode 100644 modules/shopymind/Readme.md create mode 100644 modules/shopymind/ShopymindClient/bin/Configuration.php create mode 100644 modules/shopymind/ShopymindClient/bin/Notify.php create mode 100644 modules/shopymind/ShopymindClient/bin/RequestServer.php create mode 100644 modules/shopymind/ShopymindClient/bin/index.php create mode 100644 modules/shopymind/ShopymindClient/call.php create mode 100644 modules/shopymind/ShopymindClient/callback.php create mode 100644 modules/shopymind/ShopymindClient/configuration.php create mode 100644 modules/shopymind/ShopymindClient/doc/CHANGELOG.md create mode 100644 modules/shopymind/ShopymindClient/doc/README.md create mode 100644 modules/shopymind/ShopymindClient/doc/index.php create mode 100644 modules/shopymind/ShopymindClient/index.php create mode 100644 modules/shopymind/ShopymindClient/src/Client.php create mode 100644 modules/shopymind/ShopymindClient/src/Reminders/Abstract.php create mode 100644 modules/shopymind/ShopymindClient/src/Reminders/BirthdayClients.php create mode 100644 modules/shopymind/ShopymindClient/src/Reminders/BirthdayClientsSignUp.php create mode 100644 modules/shopymind/ShopymindClient/src/Reminders/DroppedOutCart.php create mode 100644 modules/shopymind/ShopymindClient/src/Reminders/GoodClientsByAmount.php create mode 100644 modules/shopymind/ShopymindClient/src/Reminders/GoodClientsByNumberOrders.php create mode 100644 modules/shopymind/ShopymindClient/src/Reminders/InactiveClients.php create mode 100644 modules/shopymind/ShopymindClient/src/Reminders/MissingClients.php create mode 100644 modules/shopymind/ShopymindClient/src/Reminders/OrdersByStatus.php create mode 100644 modules/shopymind/ShopymindClient/src/Reminders/VoucherUnused.php create mode 100644 modules/shopymind/ShopymindClient/src/Reminders/index.php create mode 100644 modules/shopymind/ShopymindClient/src/Server.php create mode 100644 modules/shopymind/ShopymindClient/src/definitions.php create mode 100644 modules/shopymind/ShopymindClient/src/index.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Controller/Exception.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Controller/Request/Abstract.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Controller/Request/Exception.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Controller/Request/Http.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Controller/Request/index.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Controller/index.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Exception.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Http/Client.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Http/Client/Adapter/Exception.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Http/Client/Adapter/Interface.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Http/Client/Adapter/Proxy.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Http/Client/Adapter/Socket.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Http/Client/Adapter/Test.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Http/Client/Adapter/index.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Http/Client/Exception.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Http/Client/index.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Http/Exception.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Http/Response.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Http/index.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Json.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Json/Decoder.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Json/Encoder.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Json/Exception.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Json/index.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Loader.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Uri.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Uri/Exception.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Uri/Http.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Uri/index.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Validate/Abstract.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Validate/Hostname.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Validate/Hostname/At.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Validate/Hostname/Ch.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Validate/Hostname/De.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Validate/Hostname/Fi.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Validate/Hostname/Hu.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Validate/Hostname/Interface.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Validate/Hostname/Li.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Validate/Hostname/No.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Validate/Hostname/Se.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Validate/Hostname/index.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Validate/Interface.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Validate/Ip.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/Validate/index.php create mode 100644 modules/shopymind/ShopymindClient/src/library/SZend/index.php create mode 100644 modules/shopymind/ShopymindClient/src/library/index.php create mode 100644 modules/shopymind/backward_compatibility/Context.php create mode 100644 modules/shopymind/backward_compatibility/Display.php create mode 100644 modules/shopymind/backward_compatibility/backward.ini create mode 100644 modules/shopymind/backward_compatibility/backward.php create mode 100644 modules/shopymind/backward_compatibility/index.php create mode 100644 modules/shopymind/config.xml create mode 100644 modules/shopymind/config_fr.xml create mode 100644 modules/shopymind/en.php create mode 100644 modules/shopymind/index.php create mode 100644 modules/shopymind/logo.gif create mode 100644 modules/shopymind/logo.png create mode 100644 modules/shopymind/shopymind.php create mode 100644 modules/shopymind/views/index.php create mode 100644 modules/shopymind/views/templates/front/index.php create mode 100644 modules/shopymind/views/templates/front/shopymind.tpl create mode 100644 modules/shopymind/views/templates/index.php create mode 100644 themes/toutpratique/modules/gls/translations/fr.php create mode 100644 themes/toutpratique/modules/ordertaxprofitreport/translations/fr.php create mode 100644 themes/toutpratique/modules/shopymind/translations/fr.php diff --git a/.gitignore b/.gitignore index 06453c77..f0e2fc33 100644 --- a/.gitignore +++ b/.gitignore @@ -79,4 +79,5 @@ maj.php 1_index_sitemap.xml adm/export/* adm/import/* -themes/toutpratique/cache/* \ No newline at end of file +themes/toutpratique/cache/* +modules/blocknewsletter/*.csv \ No newline at end of file diff --git a/google4923b609d4e89885.html b/google4923b609d4e89885.html new file mode 100644 index 00000000..0338331b --- /dev/null +++ b/google4923b609d4e89885.html @@ -0,0 +1 @@ +google-site-verification: google4923b609d4e89885.html \ No newline at end of file diff --git a/modules/atos/certif.fr.039956369100050 b/modules/atos/certif.fr.039956369100050 new file mode 100644 index 00000000..f0f8f3bf --- /dev/null +++ b/modules/atos/certif.fr.039956369100050 @@ -0,0 +1,44 @@ +b30MJgmq7yax9WBJfmoyYqmULRtauX1bJriHYgSbCeDP6SOIBfPIIg0CD1vtdwSQPe +OIVl0BGqbt1aEvBZuWKwj67ObfcsKuB9Rkctfv9F73ngOjWUrguYRBJVZijcOStHoQ +UwUIdt8OzxIYPTlk0yJih2zVtUeiweQYOKbkb22m0OiNveHPP6LlnqpzXSiUikHNlU +nZdAUOZuoGUQeaJWJ9zUsUCdmbUGU40gZPFTEvlkMwU3G6ZaZ84Omq7GLIvPtAdx1U +DTGgO6ngDP8Si47NT0zedwssyMZYafqDvc2POFpXiq25q1kydSw7WaGBW9CZcWPF4m +6r28c7M63Tg3mb1lrAKhkl3pwVC4qx5djhrLcDp3oobdDrjey0pZx5bpoOSfl7N5xR +uFB0oDKEABFkuJKgjAeBEXfXYbvZlkyS7jNCOhsks9JmEJ1to8lkb1SUZLsnkagZMd +gyyMIzZBOJM21BUg5ytjFKq2WZjVXoXh79RWMTXzL51ytHEbmhRHFnLDxYfUv3wDHx +CBErWTYJB1bXoL18JopV3s6C62XO0kbFcjBY2CZs5wuGU21648JrZcBRKQAzDqojEk +eT7VDAHIwSTn3VE7rfIVeLvQBqeJ6GmvaiORk9hs1SBWpt9G5JYv4t1EWI7SzqrTJw +7o7iw4sC9Bm5Ff7CPcfPZ3yWa5LEaSQOPUGcZVdqAlRTAbenCimkOreXx6aEjEoEzf +Wk02Hd24xkqhiuuG6EagZP1Of0BlGCnSXbXUROBbUhcjNOJoQjQumBA56qYY780VKc +dXFEyydNIYo8F2wXD2BdcKefMsDc7Zb5D5NnuWxYuinwLyYcAzMPfjIzSPYVnAuaQK +0X9nUVm3UErfpb4pTOGzBXttdKW5K5f2qXu1Or7egCZO79HkTpqpu55Vk7a4b4eYOF +ORymq6wrP3hFymKTSD8dwNVInmiQDhDnAJfaNSxMFIrulVu8bRQTsixtlNDW5b024G +KwARP8bECbggsUplObcEKGPVcLgqnyVil1rXhjCybGKVTfekATWyJKIrtYcuPAcNvp +Lyc5dMqpJMehh4aI2ZCBx7JlDvkw0TIqIxfZvTGzxSY2lrz0yJmBEE7XQVL6HaMGlK +tDuYFgPFgOZbvpCNLdtiq06XNNIiHdruPHgqfOmsD3cOqhEE0cj1BSssAN5xDlL7da +qJYgwhTZ2jZfOJhbmofqBkoWAGshBGu4Oi7IncEV9B7K2wsVw6DI4YTHhbaEJZqLd8 +T4PwkShegr4HwxPue8EMwQxmmauFf5gcqK6sURirdszEMAK4R1yih4VPurXxT39dUr +rMkMqyk86ouJK9AwbPfI1lm0bkkjOwvU97J3FeNPwK8knUv4ewbVjcZSxzOtTY0oFY +1gULoac8gq5NLo6ZOZXNzQsXQghFUlYIRf2oiUtriCQnznPTLrAWXd9IBSlyUPmDug +QlUeCbXBCKbhgYzDWxHqlbG702g1nBg6tDI0vMZvaiS7Ins1292ljny1Z5vnN9TO5q +z0WhSplzhm1yw4j7n5pl0YuTyzKxzsfS3D3I74G496wdAmpLpvYJtYerY1aFdWNioR +rvonaTEJoe4MPvv2YwdgCMCa7833frbYYjoWucAz6av1dTyNABlUsx10gsGFRS5Gz0 +1282280B4B18B4C33FB82341D1D0F69D920299F1CCEA73D8D7148F8A217F0B7241 +F20F53592906B75D6279E1AD680F5614C275EA2D65C2AD47CAF0B236E329DEB18C +YhZYW3QiL6OW9eXqQr1zR6dLlJOiMDbG6OGmKSYrbRLjNxgYF6O0LOphKqjcTtEjC4 +qRYApJkYmWXLLANZn46w0I65L63PlBVrpYPSvFAu25aUMaSwcELNUKcpgFq5tsI1wG +112F26EAF22B941D68296122852EE412A24D0C95E1DF3B8E8C2E7C169D1BDB5041 +718B1F38845381DE26A6D7299C7E7F68EF0659C29A0F2C8D91eFcB1ZxNnOK4rRiC +YhZYW3QiL6OW9eXqQr1zR6dLlJOiMDbG6OGmKSYrbRLjNxgYF6O0LOphKqjcTtEjC4 +qRYApJkYmWXLLANZn46w0I65L63PlBVrpYPSvFAu25aUMaSwcELNUKcpgFq5tsI1wG +1282280B4B18B4C33FB82341D1D0F69D920299F1CCEA73D8D7148F8A217F0B7241 +F20F53592906B75D6279E1AD680F5614C275EA2D65C2AD47CAF0B236E329DEB18C +YhZYW3QiL6OW9eXqQr1zR6dLlJOiMDbG6OGmKSYrbRLjNxgYF6O0LOphKqjcTtEjC4 +qRYApJkYmWXLLANZn46w0I65L63PlBVrpYPSvFAu25aUMaSwcELNUKcpgFq5tsI1wG +1123D43D4C4E67A6ECC25D50435673612FCD517E79E35AAE9BF0BA809CB73BECB9 +89C2045BB2189707D639BC1BE7CEFBF4D1AFA1485FD19FB881eFcB1ZxNnOK4rRiC +YhZYW3QiL6OW9eXqQr1zR6dLlJOiMDbG6OGmKSYrbRLjNxgYF6O0LOphKqjcTtEjC4 +qRYApJkYmWXLLANZn46w0I65L63PlBVrpYPSvFAu25aUMaSwcELNUKcpgFq5tsI1wG +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +SIPSATIS_TOUTPRATIQUE,20/01/2016,V4,SOGENACTIF,PROD+++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++END diff --git a/modules/atos/parmcom.039956369100050 b/modules/atos/parmcom.039956369100050 new file mode 100644 index 00000000..0ea36c80 --- /dev/null +++ b/modules/atos/parmcom.039956369100050 @@ -0,0 +1,2 @@ + +ADVERT!logo.jpg! diff --git a/modules/atos/pathfile b/modules/atos/pathfile index 418d9d8a..25e3a98c 100644 --- a/modules/atos/pathfile +++ b/modules/atos/pathfile @@ -2,4 +2,4 @@ DEBUG!NO! D_LOGO!/modules/atos/img/logos/! F_CERTIFICATE!/home/www/toutpratique.com/www/modules/atos/certif! F_PARAM!/home/www/toutpratique.com/www/modules/atos/parmcom! -F_DEFAULT!/home/www/toutpratique.com/www/modules/atos/parmcom.elysnet! \ No newline at end of file +F_DEFAULT!/home/www/toutpratique.com/www/modules/atos/parmcom.sogenactif! \ No newline at end of file diff --git a/modules/gls/AdminGls.gif b/modules/gls/AdminGls.gif new file mode 100644 index 0000000000000000000000000000000000000000..7550096d4031efabf11da4324ce83acc8394bb9a GIT binary patch literal 800 zcmZ?wbhEHblw*)*IL5$`k|eTbRZUKw%9(Rpp5&EWadLSxZ^@HqS9;of-n8{RiHiC1 z>CKTtOIqq|zHHmFBuMAWr7IzN}jFWmL``kyY|$?$vg=P`Sb40n`v{-oZ9l`7|brlmZ|0$TLv$)hWO?%nzS|3Aaf1d2ad7#SFx7<53+2gL~k`@aUKrskGbCk0te zYX*(BzWydDYcXaiErtm*n;E7v^f+m8&zhj5p*c@O!HLmwai2oZJO(8vJq@FEO**@U zjg1yH+cT&;*{{>xts~9M*eWHpbC-^&{IMC$T^F0Ib{mL0ZDQcPu#-*K(MeuMzKK^) zPe=EnvX0qFc>^{!i&r{qtquZj44y1HwjhOL@hLC@?a|hqG#5xVzy+My_60oqelMf};6M zCPlj!%Wj7rythES8hl2-qrG&q)TC*a&!{~Tq;+sW|#wS|&B_n($Z1A4TTlzv| z!))!AqPC-AuWM&09GT})zndlW!fx;5?wr5A+%$dmJ-MlL7YD~LMw^)nBy=hSJR+{& bzwWNuU|+t(?|6xGn`pfHljhQe4h+@+apWM2 literal 0 HcmV?d00001 diff --git a/modules/gls/AdminGls.php b/modules/gls/AdminGls.php new file mode 100644 index 00000000..b25d2637 --- /dev/null +++ b/modules/gls/AdminGls.php @@ -0,0 +1,133 @@ + +* @copyright 2007-2014 Addonline +* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) +*/ + +require_once(dirname(__FILE__).'/gls.php'); + +class AdminGls extends AdminTab +{ + private $gls = NULL; + + public $post_errors = array(); + + public function __construct() + { + $this->gls = new Gls(); + + parent::__construct(); + $this->context = Context::getContext(); + } + + private function displayOrdersTable() + { + $order_state = new OrderState((int)(Configuration::get('GLS_ORDER_STATE')), $this->context->language->id); + $orders = Gls::getOrders(array(), Gls::NO_FILTER); //, $this->gls->account_shop['GLS_WEIGHT_COEFFICIENT']); + + foreach($orders as &$order) + { + $order['display_total_price'] = Tools::displayPrice($order['total'], new Currency($order['id_currency'])); + $order['display_shipping_price'] = Tools::displayPrice($order['shipping'], new Currency($order['id_currency'])); + $order['display_date'] = Tools::displayDate($order['date'], $order['id_lang']); + $order['weight'] = (!empty($order['gls_weight']) && $order['gls_weight'] > 0) ? $order['gls_weight'] : $order['order_weight']; + } + + $controller = (_PS_VERSION_ < '1.5') ? 'AdminContact' : 'AdminStores'; + + $this->context->smarty->assign(array( + 'GLS_token_admin_module' => Tools::getAdminToken('AdminModules'.(int)(Tab::getIdFromClassName('AdminModules')).(int)$this->context->employee->id), + 'GLS_token_admin_contact' => array( + 'controller_name' => $controller, + 'token' => Tools::getAdminToken($controller.(int)(Tab::getIdFromClassName($controller)).(int)$this->context->employee->id)), + 'GLS_token_admin_orders' => Tools::getAdminToken('AdminOrders'.(int)(Tab::getIdFromClassName('AdminOrders')).(int)$this->context->employee->id), + 'GLS_order_state_name' => $order_state->name, + 'GLS_orders' => $orders, + 'GLS_PS_IMG_DIR_' => _PS_IMG_DIR_, + //'GLS_errors_type' => $GLSCreateTicket->checkPreValidation() + ) + ); + + unset($order_state); + echo $this->gls->fetchTemplate('/tpl/admintab/', 'export_orders'); + } + + public function displaySettings($post_action) + { + $curr_order_state = new OrderState((int)$this->gls->account_shop['GLS_ORDER_STATE']); + $order_state = array( + 'id_order_state' => $this->gls->account_shop['GLS_ORDER_STATE'], + 'name' => $curr_order_state->name[$this->context->language->id] + ); + + $order_state_import = array( + 'id_order_state' => $this->gls->account_shop['GLS_ORDER_STATE_IMPORT'], + 'name' => $curr_order_state->name[$this->context->language->id] + ); + + $this->context->smarty->assign(array( + 'GLS_token_admin_gls' => Tools::getAdminToken('AdminGls'.(int)(Tab::getIdFromClassName('AdminGls')).(int)$this->context->employee->id), + 'GLS_account_set' => Gls::isAccountSet(), + 'GLS_order_state' => $order_state, + 'GLS_order_state_import' => Configuration::get('GLS_ORDER_STATE_IMPORT'), + 'GLS_orders_states_list' => OrderState::getOrderStates($this->context->language->id), + 'GLS_form_action' => $post_action, + 'GLS_error_list' => $this->post_errors + )); + + echo $this->gls->fetchTemplate('/tpl/admintab/', 'settings'); + } + + public function postProcess() + { + $post_action = array( + 'type' => Tools::getValue('GLS_action_name'), + 'message_success' => $this->l('Action Succeed'), + 'had_errors' => false + ); + + parent::postProcess(); + + if (Tools::isSubmit('submit_order_state')) + if (($order_state = (int)Tools::getValue('id_order_state'))) + { + $this->gls->account_shop['GLS_ORDER_STATE'] = $order_state; + + if ($this->gls->updateAccountShop()) + $post_action['message_success'] = $this->l('Order State has been updated'); + else + $this->post_errors[] = $this->l('Cannot Update the account shop'); + } + + if (count($this->post_errors)) + $post_action['had_errors'] = true; + + return $post_action; + } + + public function display() + { + + $post_action = count($_POST) ? $this->postProcess() : NULL; + + $this->displaySettings($post_action); + + if (Gls::isAccountSet() && (int)$this->gls->account_shop['GLS_ORDER_STATE']) + { + $this->displayOrdersTable(); + } + } +} diff --git a/modules/gls/ajax.php b/modules/gls/ajax.php new file mode 100644 index 00000000..bd613650 --- /dev/null +++ b/modules/gls/ajax.php @@ -0,0 +1,137 @@ + +* @copyright 2007-2014 Addonline +* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) +*/ + + +/* + * File called by ajax. It's like a controller, you have to send the + * method name of the webservice and implement it. + * Each Name method allow to instanciate an object containing + * methods to manage correctly the data and name fields + */ + +header('Access-Control-Allow-Origin: *'); + +// Clean displayed content for Admin ajax query +if (ob_get_contents()) ob_clean(); + +// Front Ajax query, need the front cookie and GLS class +// When it's back query, the PS core made the work +if (!defined('_PS_ADMIN_DIR_')) +{ + require_once(realpath(dirname(__FILE__).'/../../config/config.inc.php')); + require_once(realpath(dirname(__FILE__).'/../../init.php')); + require_once(dirname(__FILE__).'/gls.php'); +} + +$gls = new Gls(); + +require_once(dirname(__FILE__).'/classes/GLSManagement.php'); + +// Can't use Tools at this time... Need to know if _PS_ADMIN_DIR_ has to be defined +$method = Tools::getValue('method'); +$token = Tools::getValue('glstoken'); +// Access page List liable to the generated token +$accessPageList = array( + Gls::getToken('front') => array( + 'GLSGetRelayPoint', + 'addSelectedCarrierToDB' + ), + Gls::getToken('back') => array( + 'GLSexportToWinExpe', + 'GLSImportFromWinExpe', + 'GLSCreateTickets', + 'GLSDeleteHistory', + 'uninstallDetail', + 'DeleteHistory' + ) +); + +$params = array(); +$result = array(); + +// If the method name associated to the token received doesn't match with +// the list, then we kill the request +if (!isset($accessPageList[$token]) || !in_array($method, $accessPageList[$token])) + exit(); + +// Method name allow to instanciate his object to properly call the +// implemented interface method and do his job +switch($method) +{ + case 'GLSexportToWinExpe': + $params['orderIdList'] = Tools::getValue('order_id_list'); + $params['totalOrder'] = Tools::getValue('numSelected'); + $params['weightList'] = Tools::getValue('weight_list'); + break; + case 'GLSImportFromWinExpe': + $params['orderStateImport'] = Tools::getValue('id_order_state'); + break; + case 'GLSGetTickets': + $params['detailedExpeditionList'] = Tools::getValue('detailedExpeditionList'); + break; + case 'uninstallDetail': + $params['action'] = Tools::getValue('action'); + break; + case 'GLSGetRelayPoint': + $params['id_carrier'] = Tools::getValue('id_carrier'); + $params['weight'] = Context::getContext()->cart->getTotalWeight(); + $params['id_address_delivery'] = Context::getContext()->cart->id_address_delivery; + break; + case 'addSelectedCarrierToDB': + $params['id_carrier'] = Tools::getValue('id_carrier'); + $params['id_cart'] = Context::getContext()->cart->id; + $params['id_customer'] = Context::getContext()->customer->id; + $params['id_gls_method'] = Tools::getValue('id_gls_method'); + $params['relayPointInfo'] = Tools::getValue('relayPointInfo'); + break; + default: +} + +// Try to instanciate the method object name and call the necessaries method +try +{ + if (class_exists($method, false)) + { + // $this is the current mondialrelay object loaded when use in BO. Use for perf + $obj = new $method($params, $mondialrelay); + + // Verify that the class implement correctly the interface + // Else use a Management class to do some ajax stuff + if (($obj instanceof IMondialRelayWSMethod)) + { + $obj->init(); + $obj->send(); + $result = $obj->getResult(); + } + unset($obj); + } + else if (($management = new GlsManagement($params)) && + method_exists($management, $method)) + $result = $management->{$method}(); + else + throw new Exception('Method Class : '.$method.' can\'t be found'); + unset($management); +} +catch(Exception $e) +{ + echo GLSTools::jsonEncode(array('other' => array('error' => array($e->getMessage())))); + exit(-1); +} +echo GLSTools::jsonEncode($result); +exit(0); diff --git a/modules/gls/ajaxFront.php b/modules/gls/ajaxFront.php new file mode 100644 index 00000000..e8eaf297 --- /dev/null +++ b/modules/gls/ajaxFront.php @@ -0,0 +1,93 @@ + +* @copyright 2007-2014 Addonline +* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) +*/ + + +/* + * File called by ajax. It's like a controller, you have to send the + * method name of the webservice and implement it. + * Each Name method allow to instanciate an object containing + * methods to manage correctly the data and name fields + */ + +// Clean displayed content for Admin ajax query +if (ob_get_contents()) ob_clean(); + +// Front Ajax query, need the front cookie and GLS class +// When it's back query, the PS core made the work +if (!defined('_PS_ADMIN_DIR_')) +{ + require_once(realpath(dirname(__FILE__).'/../../config/config.inc.php')); + require_once(realpath(dirname(__FILE__).'/../../init.php')); + require_once(dirname(__FILE__).'/gls.php'); +} + +$gls = new Gls(); + +// Can't use Tools at this time... Need to know if _PS_ADMIN_DIR_ has to be defined +$method = Tools::getValue('method'); + +$params = array(); +$result = array(); + +// Method name allow to instanciate his object to properly call the +// implemented interface method and do his job +switch($method) +{ + case 'getGLSRelayCarrierId': + break; + case 'getGLSRelayPointsForZipCode': + $params['zipcode'] = Tools::getValue('zipcode'); + $params['street'] = Tools::getValue('street'); + $params['city'] = Tools::getValue('city'); + break; + case 'getDefaultZipCode': + break; + case 'saveDeliveryDetails': + $params['name'] = Tools::getValue('name'); + $params['address'] = Tools::getValue('address'); + $params['city'] = Tools::getValue('city'); + $params['zipcode'] = Tools::getValue('zipcode'); + $params['relayId'] = Tools::getValue('relayId'); + $params['phone'] = Tools::getValue('phone'); + $params['warnbyphone'] = Tools::getValue('warnbyphone'); + break; + case 'getChoosenRelay': + break; + case 'resetDeliveryDetails': + break; + default: + exit; +} + +// Try to instanciate the method object name and call the necessaries method +try +{ + if (method_exists($gls,$method)) + { + $result = call_user_func(array($gls,$method),$params); + } +} +catch(Exception $e) +{ + echo GLSTools::jsonEncode(array('other' => array('error' => array($e->getMessage())))); + exit(-1); +} + +echo GLSTools::jsonEncode($result); +exit(0); diff --git a/modules/gls/changelog.txt b/modules/gls/changelog.txt new file mode 100644 index 00000000..abb8f949 --- /dev/null +++ b/modules/gls/changelog.txt @@ -0,0 +1,89 @@ +version 1.1.2 +14/07/2015 : - Ajout du test d'existence de la table avant l'import des agences + - Correction de l'affichage d'erreurs avec ajout pour les points relais + +version 1.1.1 +29/05/2015 : - Mise en place du contact lors de l'export des commandes livrées en Express + +27/05/2015 : - Ajout du mode de transport Express + - Corrections de standards prestashop + +01/04/2015 : - Gestion de la creation de la table d'export, pour les mises à jour par écrasement de dossier + - Gestion de l'export lors d'installation prestashop en sous dossier + +version 1.1.0 +04/03/2015 : - Suppression de jQuery tools au profit de popupoverlay + +version 1.0.16 +30/12/2014 : - Ajout des messages d'erreurs du webservices + +version 1.0.15 +19/11/2014 : - Ajout du champ « société » dans l'export vers WINEXPE6 + - Mise en place de l'automatisation par cron + - Ajout du service « Livraison à domicile premium » + +version 1.0.14 +27/10/2014 : Utilisation de la version 3 de la google map + +version 1.0.13 +09/09/2014 : Correction de compatibilité avec la commande rapide +15/09/2014 : Envoi d'email de suivi lors de la mise à jour des commandes par import +16/09/2014 : prise en compte des chagement de poids de commande avant l'export +17/09/2014 : changement de l'unité de poids des commande exportées + +version 1.0.12 +23/07/2014 : Correction de compatibilité avec le module Mondial Relay + changement javascript des fonction live en on. + +version 1.0.11 +23/07/2014 : bug javascript, lorsqu'on est pas connecté en mode one page checkout + +version 1.0.10 +09/07/2014 : message de warning +09/07/2014 : template de configuration pour suppression d'une notice + +version 1.0.9 +12/06/2014 : poids sur les exports de commande ayant plusieurs fois le même produit + +version 1.0.8 +09/06/2014 : nom du module +09/06/2014 : Obligation de mettre un numéro de téléphone pourla livraison en point relais + +version 1.0.7 +02/06/2014 : Gestion de la répartition des caractères de l'adresse sur plusieurs ligne de 35 caractères + +version 1.0.6 +21/05/2014 : Rajout de sécurités sur le chargement de la carte Google +20/05/2014 : Correction d'un bug aléatoire sur la carte sous FF +16/05/2014 : Adaptation pour la compatibilité avec le module de point de fidélité +13/05/2014 : Placement de la société dans le champs street 1 + +version 1.0.5 +28/04/2014 : Correction de l'export des commandes à la racine du module +28/04/2014 : Correction du non blocage du tunnel lors de la non sélection d'un relais GLS + +version 1.0.4 +24/04/2014 : Mise à jour de la documentation +22/04/2014 : Mise en place de la case à cocher pour la configuration des zones ou non à l'installation + +version 1.0.3 +11/04/2014 : Mise à jour pour la compatibilité prestashop 1.6 dans le BO +11/04/2014 : Suppression d'informations persistantes à la désinstallation du module +07/04/2014 : Correction d'un dysfontionnement de l'affichage du relais choisi + +version 1.0.2 +07/04/2014 : Correction d'un problème de structure de table GLS +01/04/2014 : Limitation du poids des relais XL + +version 1.0.1 +24/03/2014 : Correction du non ajout des transporteurs à la première installation +24/03/2014 : Correction de l'affichage du overlay GLS sur prestashop 1.6 +24/03/2014 : Gestion de la version 1.6 de prestashop dans le javascript du module GLS +20/03/2014 : Affichage du prix de la commande même non payé dans le module GLS + +version 1.0.0 +19/03/2014 : Mise en place du changement de status pour l'import des commandes +18/03/2014 : Enregistrement de plusieurs numéro de tracking pour la même commande +04/03/2014 : Suppression du Product number lorsde l'export des commande livré à domicile +04/03/2014 : Etre prévenu par SMS coché par défaut, et récupération du numéro de téléphone mobile de l'adresse de facturation +14/02/2014 : Implémentation de l'import des commandes +13/02/2014 : Implémentation de l'export des commandes \ No newline at end of file diff --git a/modules/gls/classes/GLSManagement.php b/modules/gls/classes/GLSManagement.php new file mode 100644 index 00000000..b93360c0 --- /dev/null +++ b/modules/gls/classes/GLSManagement.php @@ -0,0 +1,489 @@ + + * @copyright 2007-2014 Addonline + * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) + */ + +require_once(dirname(__FILE__) . '/../gls.php'); + +class GlsManagement extends Gls { + + private $_params = array(); + private $_filename = ''; + private $_resultList = array( + 'error' => array(), + 'success' => array()); + private $_aProductnoCorrespondance = array( + 'BP' => '02', + 'BP_international' => '01', + 'ADO' => '18', + 'ADO_international' => '19', + 'SHD' => '17', + 'EXP' => '16' + ); + + public function __construct($params) { + $this->_params = $params; + + parent::__construct(); + } + + public function __destruct() { + + } + + public function uninstallDetail() { + $html = ''; + + switch ($this->_params['action']) { + case 'showFancy': + $html .= ' +
+

' . $this->l('Uninstalling Gls') . '

+
+ ' . $this->l('You\'re about to uninstall the module, do you want to remove the database') . ' ? +

+ +
+ +
+ +
+

+
+
+ '; + $this->_resultList['html'] = $html; + break; + case 'backupAndUninstall': + + break; + default: + } + return $this->_resultList; + } + + public function GLSexportToWinExpe() { + + /* + * Csv export configuration + */ + $delimiter = ';'; + $encloser = '"'; + $this->_filename = 'GlsCmd_' . $this->udate('YmdHisu') . '.csv'; + + /* + * Get the export Folder + */ + $glsConfiguration = Gls::getAccountDetail(); + ($glsConfiguration['GLS_EXPORT_FOLDER']) ? $exportFolder = _PS_ROOT_DIR_ . DIRECTORY_SEPARATOR . $glsConfiguration['GLS_EXPORT_FOLDER'] : $exportFolder = dirname(__FILE__) . '/../export/'; + + (is_array($this->_params["orderIdList"])) ? $orderIdLists = implode(',', $this->_params["orderIdList"]) : $orderIdLists = ''; + + $aWeightList = array(); + if (is_array($this->_params["weightList"]) && count($this->_params["weightList"]) > 0) { + foreach ($this->_params["weightList"] as $weight) { + $aTemp = explode('-', $weight); + $aWeightList[$aTemp[1]] = $aTemp[0]; + } + } + + if ($orderIdLists && $orderIdLists != '') { + + $query = ' + SELECT o.id_order,daddress.lastname, daddress.firstname,daddress.address1,daddress.address2,daddress.postcode,daddress.city,daddress.phone,carrier.external_module_name,SUM(od.product_weight*od.product_quantity) as order_weight,customer.id_customer,customer.email,gls.relay_warnbyphone,gls.relay_phone,country.iso_code,gls.relay_id,daddress.company,daddress.phone_mobile + FROM `' . _DB_PREFIX_ . 'orders` o + LEFT JOIN `' . _DB_PREFIX_ . 'address` daddress ON (o.id_address_delivery = daddress.id_address) + LEFT JOIN `' . _DB_PREFIX_ . 'order_detail` od ON (o.id_order = od.id_order) + LEFT JOIN `' . _DB_PREFIX_ . 'carrier` carrier ON (o.id_carrier = carrier.id_carrier) + LEFT JOIN `' . _DB_PREFIX_ . 'customer` customer ON (o.id_customer = customer.id_customer) + LEFT JOIN `' . _DB_PREFIX_ . 'GLS_delivery_info` gls ON (o.id_customer = gls.id_customer AND o.id_cart = gls.id_cart) + LEFT JOIN `' . _DB_PREFIX_ . 'country` country ON (daddress.id_country = country.id_country) + WHERE o.id_order in(' . $orderIdLists . ') + GROUP BY o.id_order + ;'; + } else { + $query = ' + SELECT o.id_order,daddress.lastname, daddress.firstname,daddress.address1,daddress.address2,daddress.postcode,daddress.city,daddress.phone,carrier.external_module_name,SUM(od.product_weight*od.product_quantity) as order_weight,customer.id_customer,customer.email,gls.relay_warnbyphone,gls.relay_phone,country.iso_code,gls.relay_id,daddress.company,daddress.phone_mobile + FROM `' . _DB_PREFIX_ . 'orders` o + LEFT JOIN `' . _DB_PREFIX_ . 'address` daddress ON (o.id_address_delivery = daddress.id_address) + LEFT JOIN `' . _DB_PREFIX_ . 'order_detail` od ON (o.id_order = od.id_order) + LEFT JOIN `' . _DB_PREFIX_ . 'carrier` carrier ON (o.id_carrier = carrier.id_carrier) + LEFT JOIN `' . _DB_PREFIX_ . 'customer` customer ON (o.id_customer = customer.id_customer) + LEFT JOIN `' . _DB_PREFIX_ . 'GLS_delivery_info` gls ON (o.id_customer = gls.id_customer AND o.id_cart = gls.id_cart) + LEFT JOIN `' . _DB_PREFIX_ . 'GLS_orders_import_export` gls_ie ON (o.id_order = gls_ie.id_order) + LEFT JOIN `' . _DB_PREFIX_ . 'country` country ON (daddress.id_country = country.id_country) + WHERE gls_ie.exported IS NULL + GROUP BY o.id_order + ;'; + } + + //On teste la requete afin de créer la table si elle n'existe pas + $aOrdersToExport = Db::getInstance()->executeS($query); + + if (!$aOrdersToExport) { + //Test de la présence de la table + if ($this->tableExists(_DB_PREFIX_ . 'GLS_orders_import_export')) { + return false; + } else { + $sql = 'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'GLS_orders_import_export` ( + `id_order` int(10) NOT NULL, + `imported` tinyint(1) NULL, + `exported` tinyint(1) NULL, + PRIMARY KEY (`id_order`) + ) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8;'; + Db::getInstance()->execute($sql); + + $aOrdersToExport = Db::getInstance()->executeS($query); + } + } + + if (!is_array($aOrdersToExport)) + $aOrdersToExport = array(); + + if (count($aOrdersToExport) <= 0) { + return $this->l('Error : No order to export'); + } + + $aOrdersExported = array(); + + // HEADERS of the file + $aheaders = array('ORDERID', 'ORDERNAME', 'PRODUCTNO', 'ORDERWEIGHTTOT', 'CONSID', 'CONTACT', 'CONTACTMAIL', 'CONTACTMOBILE', 'CONTACTPHONE', 'STREET1', 'STREET2', 'STREET3', 'COUNTRYCODE', 'CITY', 'ZIPCODE', 'REFPR'); + $aOrdersExported[] = $aheaders; + + // Parsing of the orders + foreach ($aOrdersToExport as $order) { + $aRow = array(); + + // ORDERID + $aRow[] = $order['id_order']; + + //Test s'il y a un nom de société + if ($order['company']) { + $aRow[] = $order['company']; + } else { + $aRow[] = mb_strtoupper($order['firstname'] . ' ' . $order['lastname'], 'UTF-8'); + } + + // PRODUCTNO + if ($order['external_module_name'] == 'gls') { + $shippingMethod = 'EXP'; + } else { + $shippingMethod = mb_strtoupper(Tools::substr($order['external_module_name'], 4, 3), 'UTF-8'); + } + + if (mb_strtoupper($order['iso_code'], 'UTF-8') != 'FR') { + $aRow[] = $this->_aProductnoCorrespondance[$shippingMethod . '_international']; + } else { + $aRow[] = $this->_aProductnoCorrespondance[$shippingMethod]; + } + + // ORDERWEIGHTTOT + if ($order['order_weight'] != $aWeightList[$order['id_order']]) { + $aRow[] = str_pad(number_format($aWeightList[$order['id_order']] / 1000, 2, '.', ''), 5, "0", STR_PAD_LEFT); + } else { + $aRow[] = str_pad(number_format($order['order_weight'], 2, '.', ''), 5, "0", STR_PAD_LEFT); + } + + // CONSID + $aRow[] = $order['id_customer']; + + // CONTACT + if ($order['company']) { + $aRow[] = mb_strtoupper($order['firstname'] . ' ' . $order['lastname'], 'UTF-8'); + } else { + if ($shippingMethod == 'EXP') { + /* If Shipping method is express, CONTACT field is always FIRSTNAME - LASTNAME */ + $aRow[] = mb_strtoupper($order['firstname'] . ' ' . $order['lastname'], 'UTF-8'); + } else { + $aRow[] = ''; + } + } + + // CONTACTMAIL + $aRow[] = $order['email']; + + // CONTACTMOBILE + if ($shippingMethod != 'SHD') { + $aRow[] = $order['phone_mobile']; + } else { + $aRow[] = $order['relay_warnbyphone'] ? $order['relay_phone'] : ''; + } + + // CONTACTPHONE + if (!$order['phone']) { + $aRow[] = $order['phone_mobile']; + } else { + $aRow[] = $order['phone']; + } + + if ($order['address1'] > 35 || Tools::strlen($order['address2']) > 35) { + $street = $order['address1'] . ' ' . $order['address2']; + $street = wordwrap($street, 35, ';', true); + $aStreet = explode(';', $street); + + // STREET1 + $aRow[] = mb_strtoupper(isset($aStreet[0]) ? $aStreet[0] : null, 'UTF-8'); + // STREET2 + $aRow[] = mb_strtoupper(isset($aStreet[1]) ? $aStreet[1] : null, 'UTF-8'); + } else { + // STREET1 + $aRow[] = mb_strtoupper($order['address1'], 'UTF-8'); + + // STREET2 + $aRow[] = mb_strtoupper($order['address2'], 'UTF-8'); + } + + // STREET3 + $aRow[] = ''; + + // COUNTRYCODE + $aRow[] = mb_strtoupper($order['iso_code'], 'UTF-8'); + + // CITY + $aRow[] = mb_strtoupper($this->stripAccents($order['city']), 'UTF-8'); + + // ZIPCODE + $aRow[] = mb_strtoupper($order['postcode'], 'UTF-8'); + + // REFPR (identifiant du point relais) + $aRow[] = $order['relay_id']; + + // Adding the order to the export array + $aOrdersExported[] = $aRow; + + if (!$orderIdLists == '') { + + $query = 'DELETE FROM `' . _DB_PREFIX_ . 'GLS_orders_import_export` WHERE `id_order` = ' . $order['id_order'] . ';'; + if (!Db::getInstance()->execute($query)) { + if (!$this->tableExists(_DB_PREFIX_ . 'GLS_orders_import_export')) { + $sql = 'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'GLS_orders_import_export` ( + `id_order` int(10) NOT NULL, + `imported` tinyint(1) NULL, + `exported` tinyint(1) NULL, + PRIMARY KEY (`id_order`) + ) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8;'; + Db::getInstance()->execute($sql); + + $query = 'DELETE FROM `' . _DB_PREFIX_ . 'GLS_orders_import_export` WHERE `id_order` = ' . $order['id_order'] . ';'; + Db::getInstance()->execute($query); + } else { + return false; + } + } + } + + $query = 'INSERT INTO `' . _DB_PREFIX_ . 'GLS_orders_import_export` (`id_order`, + `imported`, + `exported`) + VALUES + (' . $order['id_order'] . ', + 0, + 1);'; + + if (!Db::getInstance()->execute($query)) + return false; + } + + /* + * Save the file + */ + $writeCsv = $this->array2csv($aOrdersExported, $this->_filename, $delimiter, $encloser, $exportFolder); + ($writeCsv) ? $return = $writeCsv : $return = count($aOrdersExported) - 1 . ' ' . $this->l('orders exported'); + + return _PS_BASE_URL_ . __PS_BASE_URI__ . DIRECTORY_SEPARATOR . $glsConfiguration['GLS_EXPORT_FOLDER'] . DIRECTORY_SEPARATOR . $this->_filename; + } + + private function udate($format = 'u', $utimestamp = null) { + if (is_null($utimestamp)) + $utimestamp = microtime(true); + + $timestamp = floor($utimestamp); + $milliseconds = round(($utimestamp - $timestamp) * 1000000); + $milliseconds = Tools::substr($milliseconds, 0, 2); + return date(preg_replace('`(?message()); + } + foreach ($array as $row) { + //WINEXPE attends de l'ISO-8859-1 + foreach (array_keys($row) as $key) { + $row[$key] = iconv('UTF-8', 'ISO-8859-9', $row[$key]); + } + + fputcsv($df, $row, $delimiter, $encloser); + } + fclose($df); + return ob_get_clean(); + } + + public function GLSImportFromWinExpe() { + + + Configuration::updateValue('GLS_ORDER_STATE_IMPORT', $this->_params["orderStateImport"]); + + /* + * Get the import Folder + */ + $glsConfiguration = Gls::getAccountDetail(); + ($glsConfiguration['GLS_IMPORT_FOLDER']) ? $importFolder = _PS_ROOT_DIR_ . DIRECTORY_SEPARATOR . $glsConfiguration['GLS_IMPORT_FOLDER'] : $importFolder = dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'import' . DIRECTORY_SEPARATOR; + + if (!file_exists($importFolder) and ! is_dir($importFolder)) { + return $importFolder . ' ' . $this->l('does not exist'); + } + + $dir = opendir($importFolder); + $count = 0; + + //Parcour du dossier + while ($file = readdir($dir)) { + if ($file != '.' && $file != '..' && !is_dir($importFolder . $file) && strpos($file, 'GlsWinExpe6_') !== FALSE) { + $aOrdersUpdated = array(); + // Parcour du fichier + if (($handle = fopen($importFolder . DIRECTORY_SEPARATOR . $file, "r")) !== FALSE) { + $row = 0; + while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) { + $num = count($data); + $row++; + if ($row > 1 && isset($data[4]) && $data[4]) { + // On récupère le champ 5 qui contient le numéro de la commande + // chargement de la commande + $order = new Order($data[4]); + + $id_order_carrier = Db::getInstance()->getValue('SELECT `id_order_carrier` FROM `' . _DB_PREFIX_ . 'order_carrier` WHERE `id_order` = ' . (int) $data[4]); + + //Si la commande n'existe pas + if (!$id_order_carrier) + continue; + + $order_carrier = new OrderCarrier($id_order_carrier); + + if (strpos($order_carrier->tracking_number, $data[17]) === false) { + if ($order_carrier->tracking_number) { + $order_carrier->tracking_number = $order_carrier->tracking_number . ',' . pSQL($data[17]); + } else { + $order_carrier->tracking_number = pSQL($data[17]); + } + $order_carrier->update(); + } + + // On met à jour le trackid avec le champ 18 + try { + if (strpos($order->shipping_number, $data[17]) === false) { + if ($order->shipping_number) { + $order->shipping_number .= ',' . $data[17]; + } else { + $order->shipping_number = $data[17]; + } + + $order->update(); + } + } catch (Exception $e) { + return $this->l('Order ') . $data[4] . ' ' . $this->l('has no shipping number in the import file '); + } + + try { + // Changement du status de la commande + $new_order_state = new OrderState($this->_params["orderStateImport"]); + $current_order_state = $order->getCurrentOrderState(); + if ($current_order_state->id != $new_order_state->id) { + // Create new OrderHistory + $history = new OrderHistory(); + $history->id_order = $order->id; + $history->id_order_state = $new_order_state->id; + + //Sauvegarde dans la base de donnée de l'import + $query = 'UPDATE `' . _DB_PREFIX_ . 'GLS_orders_import_export` set imported = 1 WHERE `id_order` = ' . $data[4] . ';'; + if (!Db::getInstance()->execute($query)) { + if (!$this->tableExists(_DB_PREFIX_ . 'GLS_orders_import_export')) { + $sql = 'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'GLS_orders_import_export` ( + `id_order` int(10) NOT NULL, + `imported` tinyint(1) NULL, + `exported` tinyint(1) NULL, + PRIMARY KEY (`id_order`) + ) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8;'; + Db::getInstance()->execute($sql); + + $query = 'DELETE FROM `' . _DB_PREFIX_ . 'GLS_orders_import_export` WHERE `id_order` = ' . $order['id_order'] . ';'; + Db::getInstance()->execute($query); + } else { + return false; + } + } + + $use_existings_payment = false; + if (!$order->hasInvoice()) + $use_existings_payment = true; + $history->changeIdOrderState((int) $new_order_state->id, $order, $use_existings_payment); + $history->addWithemail(true); + $history->save(); + } + } catch (Exception $e) { + Logger::addLog($e->getMessage()); + return $this->l('Order ') . $data[4] . ' ' . $this->l('No change of status '); + } + + $count++; + } + } + fclose($handle); + + try { + unlink($importFolder . DIRECTORY_SEPARATOR . $file); + } catch (Exception $e) { + return ("Import : unable to delete file : " . $importFolder . $file); + } + } + } + } + + closedir($dir); + return $count . ' ' . $this->l('orders imported'); + } + + public function stripAccents($string) { + return strtr($string, 'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ', 'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY'); + } + + public function tableExists($tableName) { + $tables = Db::getInstance()->executeS('SHOW TABLES'); + foreach ($tables as $key => $table) { + if ($table == $tableName) { + return true; + } + } + return false; + } + +} diff --git a/modules/gls/classes/GLSTools.php b/modules/gls/classes/GLSTools.php new file mode 100644 index 00000000..632a77d6 --- /dev/null +++ b/modules/gls/classes/GLSTools.php @@ -0,0 +1,261 @@ + +* @copyright 2007-2014 Addonline +* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) +*/ + +/* +** Some tools using used in the module +*/ +class GLSTools +{ + const REGEX_CLEAN_ADDR = '/[^a-zA-Z0-9-\s\'\!\,\|\(\)\.\*\&\#\/\:]/'; + + const REGEX_CLEAN_PHONE = '/[^0-9+\(\)]*/'; + + /** + * Check if a string could be UTF8 one + * + * @static + * @param $str + * @return bool + */ + public static function seemsUTF8($str) + { + $length = Tools::strlen($str); + + for($i = 0; $i < $length; $i++) + { + $c = ord($str[$i]); + if ($c < 0x80) + $n = 0; # 0bbbbbbb + else if (($c & 0xE0) == 0xC0) + $n = 1; # 110bbbbb + else if (($c & 0xF0) == 0xE0) + $n=2; # 1110bbbb + else if (($c & 0xF8) == 0xF0) + $n = 3; # 11110bbb + else if (($c & 0xFC) == 0xF8) + $n = 4; # 111110bb + else if (($c & 0xFE) == 0xFC) + $n=5; # 1111110b + else + return false; # Does not match any model + for ($j = 0; $j < $n; $j++) + { + # n bytes matching 10bbbbbb follow ? + if ((++$i == $length) || ((ord($str[$i]) & 0xC0) != 0x80)) + return false; + } + } + return true; + } + + /** + * Converts all accent characters to ASCII characters. + * + * If there are no accent characters, then the string given is just returned. + * + * @param string $string Text that might have accent characters + * @return string Filtered string with replaced "nice" characters. + */ + public static function removeAccents($string) + { + if (!preg_match('/[\x80-\xff]/', $string)) + return $string; + + if (GLSTools::seemsUTF8($string)) + { + $chars = array( + // Decompositions for Latin-1 Supplement + chr(195).chr(128) => 'A', chr(195).chr(129) => 'A', + chr(195).chr(130) => 'A', chr(195).chr(131) => 'A', + chr(195).chr(132) => 'A', chr(195).chr(133) => 'A', + chr(195).chr(135) => 'C', chr(195).chr(136) => 'E', + chr(195).chr(137) => 'E', chr(195).chr(138) => 'E', + chr(195).chr(139) => 'E', chr(195).chr(140) => 'I', + chr(195).chr(141) => 'I', chr(195).chr(142) => 'I', + chr(195).chr(143) => 'I', chr(195).chr(145) => 'N', + chr(195).chr(146) => 'O', chr(195).chr(147) => 'O', + chr(195).chr(148) => 'O', chr(195).chr(149) => 'O', + chr(195).chr(150) => 'O', chr(195).chr(153) => 'U', + chr(195).chr(154) => 'U', chr(195).chr(155) => 'U', + chr(195).chr(156) => 'U', chr(195).chr(157) => 'Y', + chr(195).chr(159) => 's', chr(195).chr(160) => 'a', + chr(195).chr(161) => 'a', chr(195).chr(162) => 'a', + chr(195).chr(163) => 'a', chr(195).chr(164) => 'a', + chr(195).chr(165) => 'a', chr(195).chr(167) => 'c', + chr(195).chr(168) => 'e', chr(195).chr(169) => 'e', + chr(195).chr(170) => 'e', chr(195).chr(171) => 'e', + chr(195).chr(172) => 'i', chr(195).chr(173) => 'i', + chr(195).chr(174) => 'i', chr(195).chr(175) => 'i', + chr(195).chr(177) => 'n', chr(195).chr(178) => 'o', + chr(195).chr(179) => 'o', chr(195).chr(180) => 'o', + chr(195).chr(181) => 'o', chr(195).chr(182) => 'o', + chr(195).chr(182) => 'o', chr(195).chr(185) => 'u', + chr(195).chr(186) => 'u', chr(195).chr(187) => 'u', + chr(195).chr(188) => 'u', chr(195).chr(189) => 'y', + chr(195).chr(191) => 'y', + // Decompositions for Latin Extended-A + chr(196).chr(128) => 'A', chr(196).chr(129) => 'a', + chr(196).chr(130) => 'A', chr(196).chr(131) => 'a', + chr(196).chr(132) => 'A', chr(196).chr(133) => 'a', + chr(196).chr(134) => 'C', chr(196).chr(135) => 'c', + chr(196).chr(136) => 'C', chr(196).chr(137) => 'c', + chr(196).chr(138) => 'C', chr(196).chr(139) => 'c', + chr(196).chr(140) => 'C', chr(196).chr(141) => 'c', + chr(196).chr(142) => 'D', chr(196).chr(143) => 'd', + chr(196).chr(144) => 'D', chr(196).chr(145) => 'd', + chr(196).chr(146) => 'E', chr(196).chr(147) => 'e', + chr(196).chr(148) => 'E', chr(196).chr(149) => 'e', + chr(196).chr(150) => 'E', chr(196).chr(151) => 'e', + chr(196).chr(152) => 'E', chr(196).chr(153) => 'e', + chr(196).chr(154) => 'E', chr(196).chr(155) => 'e', + chr(196).chr(156) => 'G', chr(196).chr(157) => 'g', + chr(196).chr(158) => 'G', chr(196).chr(159) => 'g', + chr(196).chr(160) => 'G', chr(196).chr(161) => 'g', + chr(196).chr(162) => 'G', chr(196).chr(163) => 'g', + chr(196).chr(164) => 'H', chr(196).chr(165) => 'h', + chr(196).chr(166) => 'H', chr(196).chr(167) => 'h', + chr(196).chr(168) => 'I', chr(196).chr(169) => 'i', + chr(196).chr(170) => 'I', chr(196).chr(171) => 'i', + chr(196).chr(172) => 'I', chr(196).chr(173) => 'i', + chr(196).chr(174) => 'I', chr(196).chr(175) => 'i', + chr(196).chr(176) => 'I', chr(196).chr(177) => 'i', + chr(196).chr(178) => 'IJ',chr(196).chr(179) => 'ij', + chr(196).chr(180) => 'J', chr(196).chr(181) => 'j', + chr(196).chr(182) => 'K', chr(196).chr(183) => 'k', + chr(196).chr(184) => 'k', chr(196).chr(185) => 'L', + chr(196).chr(186) => 'l', chr(196).chr(187) => 'L', + chr(196).chr(188) => 'l', chr(196).chr(189) => 'L', + chr(196).chr(190) => 'l', chr(196).chr(191) => 'L', + chr(197).chr(128) => 'l', chr(197).chr(129) => 'L', + chr(197).chr(130) => 'l', chr(197).chr(131) => 'N', + chr(197).chr(132) => 'n', chr(197).chr(133) => 'N', + chr(197).chr(134) => 'n', chr(197).chr(135) => 'N', + chr(197).chr(136) => 'n', chr(197).chr(137) => 'N', + chr(197).chr(138) => 'n', chr(197).chr(139) => 'N', + chr(197).chr(140) => 'O', chr(197).chr(141) => 'o', + chr(197).chr(142) => 'O', chr(197).chr(143) => 'o', + chr(197).chr(144) => 'O', chr(197).chr(145) => 'o', + chr(197).chr(146) => 'OE',chr(197).chr(147) => 'oe', + chr(197).chr(148) => 'R',chr(197).chr(149) => 'r', + chr(197).chr(150) => 'R',chr(197).chr(151) => 'r', + chr(197).chr(152) => 'R',chr(197).chr(153) => 'r', + chr(197).chr(154) => 'S',chr(197).chr(155) => 's', + chr(197).chr(156) => 'S',chr(197).chr(157) => 's', + chr(197).chr(158) => 'S',chr(197).chr(159) => 's', + chr(197).chr(160) => 'S', chr(197).chr(161) => 's', + chr(197).chr(162) => 'T', chr(197).chr(163) => 't', + chr(197).chr(164) => 'T', chr(197).chr(165) => 't', + chr(197).chr(166) => 'T', chr(197).chr(167) => 't', + chr(197).chr(168) => 'U', chr(197).chr(169) => 'u', + chr(197).chr(170) => 'U', chr(197).chr(171) => 'u', + chr(197).chr(172) => 'U', chr(197).chr(173) => 'u', + chr(197).chr(174) => 'U', chr(197).chr(175) => 'u', + chr(197).chr(176) => 'U', chr(197).chr(177) => 'u', + chr(197).chr(178) => 'U', chr(197).chr(179) => 'u', + chr(197).chr(180) => 'W', chr(197).chr(181) => 'w', + chr(197).chr(182) => 'Y', chr(197).chr(183) => 'y', + chr(197).chr(184) => 'Y', chr(197).chr(185) => 'Z', + chr(197).chr(186) => 'z', chr(197).chr(187) => 'Z', + chr(197).chr(188) => 'z', chr(197).chr(189) => 'Z', + chr(197).chr(190) => 'z', chr(197).chr(191) => 's', + // Euro Sign + chr(226).chr(130).chr(172) => 'E', + // GBP (Pound) Sign + chr(194).chr(163) => ''); + + $string = strtr($string, $chars); + } + else + { + // Assume ISO-8859-1 if not UTF-8 + $chars['in'] = chr(128).chr(131).chr(138).chr(142).chr(154).chr(158) + .chr(159).chr(162).chr(165).chr(181).chr(192).chr(193).chr(194) + .chr(195).chr(196).chr(197).chr(199).chr(200).chr(201).chr(202) + .chr(203).chr(204).chr(205).chr(206).chr(207).chr(209).chr(210) + .chr(211).chr(212).chr(213).chr(214).chr(216).chr(217).chr(218) + .chr(219).chr(220).chr(221).chr(224).chr(225).chr(226).chr(227) + .chr(228).chr(229).chr(231).chr(232).chr(233).chr(234).chr(235) + .chr(236).chr(237).chr(238).chr(239).chr(241).chr(242).chr(243) + .chr(244).chr(245).chr(246).chr(248).chr(249).chr(250).chr(251) + .chr(252).chr(253).chr(255); + + $chars['out'] = "EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy"; + + $double_chars = Array(); + $string = strtr($string, $chars['in'], $chars['out']); + $double_chars['in'] = array(chr(140), chr(156), chr(198), chr(208), chr(222), chr(223), chr(230), chr(240), chr(254)); + $double_chars['out'] = array('OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th'); + $string = str_replace($double_chars['in'], $double_chars['out'], $string); + } + return $string; + } + + // Add for 1.3 compatibility and avoid duplicate code + public static function jsonEncode($result) + { + return Tools::jsonEncode($result); + } + + /* + ** Fix security and compatibility for PS < 1.4.5 + */ + public static function bqSQL($string) + { + return str_replace('`', '\`', pSQL($string)); + } + + /* + ** Check zip code by country + */ + static public function checkZipcodeByCountry($zipcode, $params) + { + $id_country = $params['id_country']; + + $zipcodeFormat = Db::getInstance()->getValue(' + SELECT `zip_code_format` + FROM `'._DB_PREFIX_.'country` + WHERE `id_country` = '.(int)$id_country); + + // -1 to warn user that no layout exist + if (!$zipcodeFormat) + return -1; + + $regxMask = str_replace( + array('N', 'C', 'L'), + array( + '[0-9]', + Country::getIsoById((int)$id_country), + '[a-zA-Z]'), + $zipcodeFormat); + if (preg_match('/'.$regxMask.'/', $zipcode)) + return true; + return false; + } + + static public function getFormatedPhone($phone_number) + { + $begin = Tools::substr($phone_number, 0, 3); + $pad_number = (strpos($begin, '+3') !== false) ? 12 : + (strpos($begin, '00') ? 13 : 10); + + return str_pad(Tools::substr(preg_replace(GLSTools::REGEX_CLEAN_PHONE, '', $phone_number), 0, $pad_number), $pad_number, '0'); + } +} + +?> diff --git a/modules/gls/classes/index.php b/modules/gls/classes/index.php new file mode 100644 index 00000000..dc7351df --- /dev/null +++ b/modules/gls/classes/index.php @@ -0,0 +1,28 @@ + +* @copyright 2007-2014 Addonline +* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) +*/ + +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/modules/gls/config.xml b/modules/gls/config.xml new file mode 100644 index 00000000..4a40be85 --- /dev/null +++ b/modules/gls/config.xml @@ -0,0 +1,12 @@ + + + gls + + + + + + 1 + 1 + + \ No newline at end of file diff --git a/modules/gls/config_fr.xml b/modules/gls/config_fr.xml new file mode 100644 index 00000000..8af729a7 --- /dev/null +++ b/modules/gls/config_fr.xml @@ -0,0 +1,12 @@ + + + gls + + + + + + 1 + 1 + + \ No newline at end of file diff --git a/modules/gls/cron.php b/modules/gls/cron.php new file mode 100644 index 00000000..a3ec342e --- /dev/null +++ b/modules/gls/cron.php @@ -0,0 +1,14 @@ +GLSexportToWinExpe(); +$oGlsManagement->GLSImportFromWinExpe(); diff --git a/modules/gls/docs/index.php b/modules/gls/docs/index.php new file mode 100644 index 00000000..dc7351df --- /dev/null +++ b/modules/gls/docs/index.php @@ -0,0 +1,28 @@ + +* @copyright 2007-2014 Addonline +* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) +*/ + +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/modules/gls/docs/install.pdf b/modules/gls/docs/install.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d153af4b26e31a35987e6b871fcf18b9354ec22b GIT binary patch literal 930199 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