From 497e9cf649961094a2ba8a25a716319ff4d7f225 Mon Sep 17 00:00:00 2001 From: pandreani Date: Mon, 3 Jun 2024 16:22:11 +0200 Subject: [PATCH] Changement marque, page support, CI, coquilles --- .easya_info.json | 4 +- .gitlab-ci.yml | 3 + ChangeLog.md | 9 +- README.md | 6 +- VERSION | 2 +- admin/about.php | 5 +- admin/changelog.php | 103 +++ admin/order.php | 6 +- admin/product.php | 6 +- admin/setup.php | 6 +- admin/stock.php | 6 +- admin/thirdparty.php | 6 +- core/modules/modECommerceNg.class.php | 11 +- img/object_opendsi copy.png | Bin 0 -> 841 bytes img/object_opendsi_big.png | Bin 37788 -> 33522 bytes img/opendsi_dolibarr_preferred_partner.png | Bin 6124 -> 35099 bytes langs/fr_FR/ecommerce.lang | 21 +- langs/fr_FR/opendsi.lang | 3 +- lib/eCommerce.lib.php | 5 + lib/opendsi_common.lib.php | 732 +++++++++++++++++++++ tpl/index.tpl.php | 2 +- tpl/site.tpl.php | 8 +- 22 files changed, 900 insertions(+), 44 deletions(-) create mode 100644 .gitlab-ci.yml create mode 100755 admin/changelog.php create mode 100644 img/object_opendsi copy.png mode change 100755 => 100644 img/opendsi_dolibarr_preferred_partner.png create mode 100755 lib/opendsi_common.lib.php diff --git a/.easya_info.json b/.easya_info.json index 6a2581b..c80c9f2 100644 --- a/.easya_info.json +++ b/.easya_info.json @@ -1,4 +1,4 @@ { - "dol_min": 14, - "dol_max": 18 + "dlb_min_version": 14, + "dlb_max_version": 18 } diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..70cee73 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,3 @@ +include: + - project: "opendsi/ci-templates" + file: "/dolibarr/module/main.yml" \ No newline at end of file diff --git a/ChangeLog.md b/ChangeLog.md index 83fe9d1..e06514e 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,6 +1,9 @@ # ChangeLog -## 14.0.1 +## [14.0.2] - 03-06-2024 +- Changement de marque, page support, ajout CI, corrections de coquilles. + +## [14.0.1] - Changement de numérotation ## 4.1.72 @@ -884,3 +887,7 @@ ## 3.9.0.0 - Initial version. + + +[Non Distribué]: https://github.com/OPEN-DSI/ecommerceng_woosync/compare/14.0.2...HEAD +[14.0.2]: https://github.com/OPEN-DSI/ecommerceng_woosync/commits/14.0.2 \ No newline at end of file diff --git a/README.md b/README.md index eac1d43..a062db1 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,13 @@ ## You have to rename the folder to ecommerceng when you download the zip file or make a git clone. In other case the module will not work -Use it at you onwn risk Open-DSI does not provide support for the use, installation or bug fixing for this software. For this you have to acquire a time from our sales service https://www.easya.solutions/contact. You can also consult our company for any installation, configuration or development services. +Use it at you onwn risk Easya Solution does not provide support for the use, installation or bug fixing for this software. For this you have to acquire a time from our sales service https://www.easya.solutions/contact. You can also consult our company for any installation, configuration or development services. -Before any use, please refer to the documentatio to check the available functionnality +Before any use, please refer to the documentation to check the available functionnality https://link.easya.solutions/woosync_doc -Utilisation à vos risques et périls. Open-DSI ne fournit pas de support à l’utilisation, à l'installation ni de correction de bugs pour ce logiciel. Pour cela vous devrez faire l’acquisition d’un crédit temps auprès de notre service commercial : https://www.easya.solutions/contact. Vous pouvez également nous consulter pour toute prestation d’installation, configuration ou développement. +Utilisation à vos risques et périls. Easya Solutions ne fournit pas de support à l’utilisation, à l'installation ni de correction de bugs pour ce logiciel. Pour cela vous devrez faire l’acquisition d’un crédit temps auprès de notre service commercial : https://www.easya.solutions/contact. Vous pouvez également nous consulter pour toute prestation d’installation, configuration ou développement. Avant toute utilisation, merci de prendre connaissance de la documentation pour vérifier si le module répond en l'état à vos besoins https://link.easya.solutions/woosync_doc diff --git a/VERSION b/VERSION index 63dba86..112969d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -14.0.1 +14.0.2 \ No newline at end of file diff --git a/admin/about.php b/admin/about.php index 234ad36..a0bfc85 100644 --- a/admin/about.php +++ b/admin/about.php @@ -31,7 +31,7 @@ dol_include_once('/ecommerceng/core/modules/modECommerceNg.class.php'); $langs->load("admin"); -$langs->load("ecommerce@ecommerceng"); +$langs->load("ecommerceng@ecommerceng"); $langs->load("opendsi@ecommerceng"); if (!$user->admin && !$user->rights->ecommerceng->site) accessforbidden(); @@ -75,7 +75,8 @@ $linkback=''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("ECommerceSetup"),$linkback,'title_setup'); -include dol_buildpath('/ecommerceng/admin/tpl/selectsite.tpl.php'); +// include dol_buildpath('/ecommerceng/admin/tpl/selectsite.tpl.php'); +print '
'; $head=ecommercengConfigSitePrepareHead($object); diff --git a/admin/changelog.php b/admin/changelog.php new file mode 100755 index 0000000..9bb01fd --- /dev/null +++ b/admin/changelog.php @@ -0,0 +1,103 @@ + + * Copyright (C) 2019 Open-DSI + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/custom/ecommerceng/admin/about.php + * \ingroup ecommerceng + * \brief Page about of ecommerceng module + */ + +// Change this following line to use the correct relative path (../, ../../, etc) +$res=0; +if (! $res && file_exists("../../main.inc.php")) $res=@include '../../main.inc.php'; // to work if your module directory is into a subdir of root htdocs directory +if (! $res && file_exists("../../../main.inc.php")) $res=@include '../../../main.inc.php'; // to work if your module directory is into a subdir of root htdocs directory +if (! $res) die("Include of main fails"); +require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; +dol_include_once('/ecommerceng/lib/eCommerce.lib.php'); +dol_include_once('/ecommerceng/lib/opendsi_common.lib.php'); +dol_include_once('/ecommerceng/core/modules/modECommerceNg.class.php'); + +$langs->loadLangs(array("admin", "orders", "companies", "bills", "accountancy", "banks", "oauth", "ecommerce@ecommerceng", "woocommerce@ecommerceng", "opendsi@ecommerceng")); + +if (!$user->admin) accessforbidden(); + + + + + + + + + +$object = new eCommerceSite($db); +if (!($id > 0)) { + $sites = $object->listSites(); + if (!empty($sites)) { + $id = array_values($sites)[0]['id']; + } + $action = ''; +} +if ($id > 0) { + $result = $object->fetch($id); + if ($result < 0) { + accessforbidden($object->errorsToString()); + } elseif ($result == 0) { + $langs->load('errors'); + accessforbidden($langs->trans('ErrorRecordNotFound')); + } +} else { + accessforbidden($langs->trans('ErrorRecordNotFound')); +} + +/*if (empty($conf->facture->enabled) && empty($conf->facture->enabled)) { + accessforbidden($langs->trans('ModuleDisabled')); +} */ + + + + + + +/** + * View + */ + +$wikihelp='EN:ECommerceNg_En|FR:ECommerceNg_Fr|ES:ECommerceNg_Es'; +llxHeader('', $langs->trans("ECommerceSetup"), $wikihelp); + +$linkback=''.$langs->trans("BackToModuleList").''; +print load_fiche_titre($langs->trans("ECommerceSetup"),$linkback,'title_setup'); +print "
\n"; + + +$head=ecommercengConfigSitePrepareHead($object); + +print dol_get_fiche_head($head, 'changelog', $langs->trans("Module107100Name"), 0, 'opendsi@ecommerceng'); + +$changelog = opendsi_common_getChangeLog('ecommerceng'); + +print '
'."\n"; +print (!empty($changelog) ? $changelog : $langs->trans("NotAvailable")); +print '
'."\n"; + +print dol_get_fiche_end(); + + +llxFooter(); + +$db->close(); diff --git a/admin/order.php b/admin/order.php index 18a5ed1..d89e09f 100644 --- a/admin/order.php +++ b/admin/order.php @@ -34,7 +34,7 @@ dol_include_once('/ecommerceng/admin/class/data/eCommerceDict.class.php'); dol_include_once('/ecommerceng/class/data/eCommercePaymentGateways.class.php'); -$langs->loadLangs(array("admin", "orders", "companies", "bills", "accountancy", "banks", "oauth", "ecommerce@ecommerceng", "woocommerce@ecommerceng")); +$langs->loadLangs(array("admin", "orders", "companies", "bills", "accountancy", "banks", "oauth", "ecommerce@ecommerceng", "woocommerce@ecommerceng", "opendsi@ecommerceng")); if (!$user->admin && !$user->rights->ecommerceng->site) accessforbidden(); @@ -267,7 +267,7 @@ $form = new Form($db); $formmail = new FormMail($db); -$wikihelp=''; +$wikihelp='EN:ECommerceNg_En|FR:ECommerceNg_Fr|ES:ECommerceNg_Es'; llxHeader('', $langs->trans("ECommerceSetup"), $wikihelp, '', 0, 0, array( '/ecommerceng/js/form.js', )); @@ -297,7 +297,7 @@ $head=ecommercengConfigSitePrepareHead($object); -dol_fiche_head($head, 'order_invoice', $langs->trans("Module107100Name"), 0, 'eCommerce@ecommerceng'); +print dol_get_fiche_head($head, 'order_invoice', $langs->trans("Module107100Name"), 0, 'opendsi@ecommerceng'); print '
'; print ''.$langs->trans('ECommerceUpdatePaymentGateways').''; diff --git a/admin/product.php b/admin/product.php index 82bc85c..73cd8f7 100644 --- a/admin/product.php +++ b/admin/product.php @@ -35,7 +35,7 @@ dol_include_once('/ecommerceng/lib/eCommerce.lib.php'); dol_include_once('/ecommerceng/admin/class/data/eCommerceDict.class.php'); -$langs->loadLangs(array("admin", "companies", "bills", "accountancy", "banks", "oauth", "ecommerce@ecommerceng", "woocommerce@ecommerceng")); +$langs->loadLangs(array("admin", "companies", "bills", "accountancy", "banks", "oauth", "ecommerce@ecommerceng", "woocommerce@ecommerceng", "opendsi@ecommerceng")); if (!$user->admin && !$user->rights->ecommerceng->site) accessforbidden(); @@ -265,7 +265,7 @@ $formaccounting = new FormAccounting($db); $v10p = version_compare(DOL_VERSION, "10.0.0") >= 0; -$wikihelp=''; +$wikihelp='EN:ECommerceNg_En|FR:ECommerceNg_Fr|ES:ECommerceNg_Es'; llxHeader('', $langs->trans("ECommerceSetup"), $wikihelp, '', 0, 0, array( '/ecommerceng/js/form.js', )); @@ -299,7 +299,7 @@ $head=ecommercengConfigSitePrepareHead($object); -dol_fiche_head($head, 'product', $langs->trans("Module107100Name"), 0, 'eCommerce@ecommerceng'); +print dol_get_fiche_head($head, 'product', $langs->trans("Module107100Name"), 0, 'opendsi@ecommerceng'); print '
'; print ''.$langs->trans('ECommerceWoocommerceUpdateDictAttributes').''; diff --git a/admin/setup.php b/admin/setup.php index 4aece98..d24fc75 100644 --- a/admin/setup.php +++ b/admin/setup.php @@ -33,7 +33,7 @@ use OAuth\Common\Storage\DoliStorage; -$langs->loadLangs(array("admin", "companies", "bills", "accountancy", "banks", "oauth", "ecommerce@ecommerceng", "woocommerce@ecommerceng")); +$langs->loadLangs(array("admin", "companies", "bills", "accountancy", "banks", "oauth", "ecommerce@ecommerce", "woocommerce@ecommerceng", "opendsi@ecommerceng")); if (!$user->admin && !$user->rights->ecommerceng->site) accessforbidden(); @@ -278,7 +278,7 @@ $form = new Form($db); -$wikihelp=''; +$wikihelp='EN:ECommerceNg_En|FR:ECommerceNg_Fr|ES:ECommerceNg_Es'; llxHeader('', $langs->trans("ECommerceSetup"), $wikihelp); $formconfirm = ''; @@ -306,7 +306,7 @@ $head=ecommercengConfigSitePrepareHead($object); -dol_fiche_head($head, 'settings', $langs->trans("Module107100Name"), 0, 'eCommerce@ecommerceng'); +print dol_get_fiche_head($head, 'settings', $langs->trans("Module107100Name"), 0, 'opendsi@ecommerceng'); if ($object->id > 0) { print '
'; diff --git a/admin/stock.php b/admin/stock.php index 45e4c93..8d5ca4f 100644 --- a/admin/stock.php +++ b/admin/stock.php @@ -32,7 +32,7 @@ dol_include_once('/ecommerceng/class/html.formecommerceng.class.php'); dol_include_once('/ecommerceng/class/data/eCommerceRemoteWarehouses.class.php'); -$langs->loadLangs(array("admin", "stocks", "ecommerce@ecommerceng", "woocommerce@ecommerceng")); +$langs->loadLangs(array("admin", "stocks", "ecommerce@ecommerceng", "woocommerce@ecommerceng", "opendsi@ecommerceng")); if (!$user->admin && !$user->rights->ecommerceng->site) accessforbidden(); @@ -135,7 +135,7 @@ $formproduct = new FormProduct($db); $formecommerceng = new FormECommerceNg($db); -$wikihelp=''; +$wikihelp='EN:ECommerceNg_En|FR:ECommerceNg_Fr|ES:ECommerceNg_Es'; llxHeader('', $langs->trans("ECommerceSetup"), $wikihelp); $formconfirm = ''; @@ -163,7 +163,7 @@ $head=ecommercengConfigSitePrepareHead($object); -dol_fiche_head($head, 'stock', $langs->trans("Module107100Name"), 0, 'eCommerce@ecommerceng'); +print dol_get_fiche_head($head, 'stock', $langs->trans("Module107100Name"), 0, 'opendsi@ecommerceng'); if (!empty($object->parameters['enable_warehouse_plugin_support'])) { print '
'; diff --git a/admin/thirdparty.php b/admin/thirdparty.php index f031d9c..722149d 100644 --- a/admin/thirdparty.php +++ b/admin/thirdparty.php @@ -34,7 +34,7 @@ dol_include_once('/ecommerceng/lib/eCommerce.lib.php'); dol_include_once('/ecommerceng/admin/class/data/eCommerceDict.class.php'); -$langs->loadLangs(array("admin", "companies", "bills", "accountancy", "banks", "oauth", "ecommerce@ecommerceng", "woocommerce@ecommerceng")); +$langs->loadLangs(array("admin", "companies", "bills", "accountancy", "banks", "oauth", "ecommerce@ecommerce", "woocommerce@ecommerceng", "opendsi@ecommerceng")); if (!$user->admin && !$user->rights->ecommerceng->site && !empty($conf->societe->enabled)) accessforbidden(); @@ -139,7 +139,7 @@ $form = new Form($db); $category_static = new Categorie($db); -$wikihelp=''; +$wikihelp='EN:ECommerceNg_En|FR:ECommerceNg_Fr|ES:ECommerceNg_Es'; llxHeader('', $langs->trans("ECommerceSetup"), $wikihelp, '', 0, 0, array( '/ecommerceng/js/form.js', )); @@ -151,7 +151,7 @@ $head=ecommercengConfigSitePrepareHead($object); -dol_fiche_head($head, 'thirdparty', $langs->trans("Module107100Name"), 0, 'eCommerce@ecommerceng'); +print dol_get_fiche_head($head, 'thirdparty', $langs->trans("Module107100Name"), 0, 'opendsi@ecommerceng'); /** * Settings. diff --git a/core/modules/modECommerceNg.class.php b/core/modules/modECommerceNg.class.php index c2cd66d..3201702 100644 --- a/core/modules/modECommerceNg.class.php +++ b/core/modules/modECommerceNg.class.php @@ -54,18 +54,18 @@ function __construct($db) $this->family = 'easya'; $this->familyinfo = array('easya' => array('position' => '001', 'label' => $langs->trans("easyaFamily"))); // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module) - $this->name = 'EcommerceNg'; // Must be same than value used for if $conf->ecommerceng->enabled + $this->name = preg_replace('/^mod/i', '', get_class($this)); // Must be same than value used for if $conf->ecommerceng->enabled // Module description, used if translation string 'ModuleXXXDesc' not found (where XXX is value of numeric property 'numero' of module) $this->description = "Module to synchronise Dolibarr with ECommerce platform (currently ecommerce supported: WooCommerce)"; $this->descriptionlong = "See page https://wiki.dolibarr.org/index.php/Module_Magento_EN for more information"; - $this->editor_name = 'Easya Solutions (Ex Open-Dsi)'; + $this->editor_name = 'Easya Solutions)'; $this->editor_web = 'https://easya.solutions'; $this->editor_url = "https://easya.solutions"; $this->editor_email = 'support@easya.solutions'; // Possible values for version are: 'development', 'experimental', 'dolibarr' or version $this->version = file_get_contents(__DIR__.'/../../VERSION'); - $this->url_last_version = 'https://git.open-dsi.fr/dolibarr-extension/'.strtolower($this->name).'/-/raw/2022.5.3/VERSION'; + $this->url_last_version = 'https://git.open-dsi.fr/dolibarr-extension/'.strtolower($this->name).'/-/raw/2024/VERSION'; // Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase) $this->const_name = 'MAIN_MODULE_' . strtoupper($this->name); // Where to store the module in setup page (0=common,1=interface,2=others,3=very specific) @@ -114,8 +114,9 @@ function __construct($db) // Dependencies $this->depends = array("modSociete", "modProduct", "modCategorie", "modWebServices"); // List of modules id that must be enabled if this module is enabled $this->requiredby = array(); // List of modules id to disable if this one is disabled - $this->phpmin = array(5, 3); // Minimum version of PHP required by module - $this->need_dolibarr_version = array(3, 9); // Minimum version of Dolibarr required by module + $easya_info = json_decode(file_get_contents(__DIR__.'/../../.easya_info.json')); + $this->phpmin = explode('.', $easya_info->php_min_version); // Minimum version of PHP required by module + $this->need_dolibarr_version = explode('.', $easya_info->dlb_min_version); // Minimum version of Dolibarr required by module $this->langfiles = array("ecommerce@ecommerceng", "woocommerce@ecommerceng"); // Constants diff --git a/img/object_opendsi copy.png b/img/object_opendsi copy.png new file mode 100644 index 0000000000000000000000000000000000000000..57330480ea30081971cecfe905a3ed08eda34d69 GIT binary patch literal 841 zcmV-P1GfB$P)EX>4Tx04R}tkv&MmKpe$iQ?)7;2ZM+>WT;LSMMWI73Pq?8YK2xE%tybVNkfw2 z;wZQl9Q;_UI=DFN>fkB}f*&BRE>4OrQsV!TLW>v=j{EWM-sA2az|~5MX0?q2nr@rP zcuYuVR)x?jy3mgfjDeRF%a{|z1boNWJpydKi?S^LbAOH=HEStAKp>t~4AUmwAfDc| z4aWP#yi$-<;&b9rlP*a7$aLA`H^zCFIhM(rspLE{Pb}nHSZ-mZU~0ru#1U1~DW6Mw ztTNtWtd%NC4U+2z`-9)zTDi#yFDV=Y+Fu;!V;BhS0`;ond>=bb{R9X;16O*}U#*53X-)9CL9b-r?_2n!Qo00006VoOIv0RI600RN!9r;`8x010qNS#tmY zag6`~ag71lN-kUg000McNliru=Lr@DF)2Tl2*dyY0Y*tgK~y-)-O@d4l|d8);OD(0 zlEfqmD_RJCbwXej77=Xp4_HLhP74JE2}CW7b~a)P!>w!;tOC}4U=xL;T8l00#ZF{F zA%qCRO|uu0LQ?B=XP7h084mwEI>;e@!fNAwU Td3Ybe00000NkvXXu0mjfurhGL literal 0 HcmV?d00001 diff --git a/img/object_opendsi_big.png b/img/object_opendsi_big.png index b129a3a2e2013b42a1339a9201df8add3a2a1640..6ed22cdcbaeb3e942d286e924be0b10aa64f767c 100644 GIT binary patch literal 33522 zcmbrF1yfsHxP@_oTX1(RF2yA{h2riM_u}sERw(XTthjrD0>z8FyA;=ZzB_Y&!QGS0 zkT55*bIyL(yVkR#l$B)Akcp6?prFv?WF=LhprECIdpZaKc!nle!V7p1Y7K!X%RwL% zPG21@tnJL9pcs<;l7wXk#7KsW)D)z2NyaItk_!ZyD44d(H5eqql$jfkjYXc|6^W9; z_%eM>o14R?^L;})T8LWWm@iPy?oO(%N!ah{VBJAar_}_Hdoqs;s2Uv&?kY=?Dc6

nhFU*FmbD;VxH{~xLY!!|7Q*NYX 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 vb4|*O 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


u2*-(%U4` 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 diff --git a/img/opendsi_dolibarr_preferred_partner.png b/img/opendsi_dolibarr_preferred_partner.png old mode 100755 new mode 100644 index c94f5a01c0dc9407949710871526b6a5d701bb31..2b541614c833317c003be64b8b01d057ff365fde GIT binary patch literal 35099 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 N$jhim*Gigw{eQbrX*~b{ literal 6124 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 diff --git a/langs/fr_FR/ecommerce.lang b/langs/fr_FR/ecommerce.lang index 6144b29..666e416 100644 --- a/langs/fr_FR/ecommerce.lang +++ b/langs/fr_FR/ecommerce.lang @@ -185,7 +185,7 @@ ECommerceConfirmUpdatePriceLevel ThirdPartyForNonLoggedUsers =Tiers générique de recueil des clients sans compte créé SynchUnkownCustomersOnThirdParty =Tiers générique auquel seront rattachées les commandes de clients sans compte ECommerceDontSearchCompanyByNameAndZip =Recherche par nom et code postal -ECommerceDontSearchCompanyByNameAndZipDescription =Ne pas rechercher le tiers Dolibarr graçe au nom et code postal fournit par WooCommerce +ECommerceDontSearchCompanyByNameAndZipDescription =Ne pas rechercher le tiers Dolibarr grâce au nom et code postal fournit par WooCommerce ECommerceDontUpdateDolibarrCompany =Mise à jour du tiers ECommerceDontUpdateDolibarrCompanyDescription =Ne pas mettre à jour le tiers de Dolibarr lorsqu'il existe déja dans dolibarr @@ -193,7 +193,7 @@ ECommerceDontUpdateDolibarrCompanyDescription ECommerceWordpressAuthenticationOptions =Paramètres de connexion à WordPress ECommerceWordpressAuthenticationSetup =(Allez sur cette page , puis configurer la connexion) ECommerceWordpressAuthenticationType =Type d'authentification -ECommerceWordpressAuthenticationTypeDescription =Choissiez entre la connexion interne Wordpress avec un mot de passe d'application situé sur un utilisateur
Ou une authentification JWT grâçe à l'extension "WordPress REST API Authentication" de miniOrange +ECommerceWordpressAuthenticationTypeDescription =Choissiez entre la connexion interne Wordpress avec un mot de passe d'application situé sur un utilisateur
Ou une authentification JWT grâce à l'extension "WordPress REST API Authentication" de miniOrange ECommerceWordpressAuthenticationTypeWordpressApplication =Mot de passe d'application (Wordpress) ECommerceWordpressAuthenticationTypeJWTAuthentication =Authentification JWT ECommerceWordpressAuthenticationLogin =Identifiant @@ -312,21 +312,21 @@ ECommerceUpdateRemoteCompanyLinkWhenMergeCompany ECommerceSynchronizeStockToECommerce =Synchronisation du stock du produit sur le site %s. ECommerceCreateOrder =Créer la commande -ECommerceCreateOrderDescription =Activer la création de la commande a la synchronisation de la commande +ECommerceCreateOrderDescription =Activer la création de la commande à la synchronisation de la commande ECommerceCreateInvoice =Créer la facture -ECommerceCreateInvoiceDescription =Activer la création de la facture a la synchronisation de la commande -ECommerceCreateInvoiceType =Type la facture -ECommerceCreateInvoiceTypeDescription =Type la facture créée a la synchronisation de la commande +ECommerceCreateInvoiceDescription =Activer la création de la facture à la synchronisation de la commande +ECommerceCreateInvoiceType =Type de la facture +ECommerceCreateInvoiceTypeDescription =Type de la facture créée à la synchronisation de la commande ECommerceCreateInvoiceDepositType = ECommerceCreateInvoiceDepositTypeDescription = ECommerceCreateInvoiceDepositValue =Montant ou pourcentage ECommerceCreateInvoiceDepositValueDescription = ECommerceCreateSupplierInvoiceFromFee =Créer la facture fournisseur à partir des frais -ECommerceCreateSupplierInvoiceFromFeeDescription =Créer la facture fournisseur à partir des frais lors de la creation de la facture +ECommerceCreateSupplierInvoiceFromFeeDescription =Créer la facture fournisseur à partir des frais lors de la création de la facture ECommerceFeeLineAsItemLine =Considérer les lignes de frais comme des lignes de services ECommerceFeeLineAsItemLineDescription =Considérer les lignes de frais comme des lignes de services lors de la création de la commande/facture ECommerceSendInvoiceByMail =Envoyer la facture par courriel -ECommerceSendInvoiceByMailDescription =Envoyer la facture par courriel après la création avec succes de la facture +ECommerceSendInvoiceByMailDescription =Envoyer la facture par courriel après la création avec succès de la facture ECommerceCreateOrderDescription =Actions associées lors de la récupération des commandes WooCommerce (renseigner les modes de paiements associés à WooCommerce) ECommerceCreateInvoiceIfAmount0 =Créer la facture même si le montant est nul ECommerceCreateInvoiceIfAmount0Description =Créer la facture même si le montant est nul lors de la synchronisation de la commande @@ -359,6 +359,7 @@ RestrictSyncToCompanyRemoteID RestrictSyncToProductRemoteID =Limiter la synchronisation des produits aux ID distants suivants (product_id, product_id|variation_id, ...) RestrictSyncToOrderRemoteID =Limiter la synchronisation des commandes aux ID distants suivants (order_id, order_id, ...) DontSyncProductWhenSyncOrders =Ne pas synchroniser les produits lors de la synchronisation des commandes +RestrictNbInSync=Limiter le nombre d'enregistrements d'un même objet à synchroniser dans une même requête ECommerceSiteWebHooksSetup =Configuration des Crochets Web (WebHooks) ECommerceSiteWebHooksUrl =URL de livraison @@ -366,7 +367,7 @@ ECommerceSiteWebHooksUrlDescription ECommerceSiteWebHooksSecret =Secret ECommerceSiteWebHooksSecretDescription =La clé secrète est utilisée pour générer un hachage du crochet Web livré et indiqué dans les en-têtes de requête ECommerceSiteWebHooksVolumetryAlert =Alerte volumétrie -ECommerceSiteWebHooksVolumetryAlertDescription =Envoie un email grace a une tache planifié si le nombre de hooks en attente de traitement depasse cette valeur (0 signifie qu'il n'y a pas de verification) +ECommerceSiteWebHooksVolumetryAlertDescription =Envoie un email grâce à une tâche planifiée si le nombre de hooks en attente de traitement dépasse cette valeur (0 signifie qu'il n'y a pas de vérification) ECommerceShippingService =Frais de port ECommerceShippingServiceDescription =Service utilisé pour la gestion des frais de port ECommerceDiscountCodeService =Code promo @@ -403,7 +404,7 @@ ECommerceWoocommerceOrderFirstDateForECommerceToDolibarr ECommerceWoocommerceOrderFirstDateForECommerceToDolibarrDescription =Les commandes dont la date de création est antérieure seront ignorées ECommerceWoocommerceOrderMetaDataInProductLineToDescriptionForECommerceToDolibarr =Méta-données sur ligne de produit -ECommerceWoocommerceOrderMetaDataInProductLineToDescriptionForECommerceToDolibarrDescription =Ajoute les méta-données des lignes de produit de la commandes WooCommerce dans la description des lignes de produit dans la commande Dolibarr
Les méta-données des lignes de produits des commandes WooCommerce doivent posséder les propriétées 'display_key' et 'display_value' pour que cette fonctionnalité fonctionne +ECommerceWoocommerceOrderMetaDataInProductLineToDescriptionForECommerceToDolibarrDescription =Ajoute les méta-données des lignes de produit de la commande WooCommerce dans la description des lignes de produit dans la commande Dolibarr
Les méta-données des lignes de produits des commandes WooCommerce doivent posséder les propriétées 'display_key' et 'display_value' pour que cette fonctionnalité fonctionne ECommerceWoocommerceOrderFilterMetaDataInProductLineToDescriptionForECommerceToDolibarr =Méta-données sur ligne de produit ECommerceWoocommerceOrderFilterMetaDataInProductLineToDescriptionForECommerceToDolibarrDescription =Liste des clés des méta-données à inclure ou non dans la description (séparées par des virgules) ECommerceExclude =Exclure diff --git a/langs/fr_FR/opendsi.lang b/langs/fr_FR/opendsi.lang index b962104..9634872 100755 --- a/langs/fr_FR/opendsi.lang +++ b/langs/fr_FR/opendsi.lang @@ -2,8 +2,7 @@ CHARSET=UTF-8 easyaFamily=Easya Solutions opendsiFamily=Opendsi -OpenDsiAboutDesc=Ce module a été développé par Open-DSI

Pour toute question technique ou retour, contactez-nous sur support@open-dsi.fr

Pour toute question commerciale, contactez-nous sur contact@open-dsi.fr ou au +33 4 82 53 94 76

Retrouvez nos autres modules sur Dolistore OpenDsiChangeLog=Fichier de log OpenDsiAboutDesc1=Ce module a été développé par Easya Solutions

Pour toute question technique ou retour, déposez une demande de support sur OpenDsiAboutDesc2=notre support -OpenDsiAboutDesc3=ou contactez-nous sur support@easya.solutions

Pour toute question commerciale, contactez-nous sur info@easya.solutions ou au +33 4 82 53 94 76

Retrouvez nos autres modules sur Dolistore +OpenDsiAboutDesc3=

Pour toute question commerciale, contactez-nous sur info@easya.solutions ou au +33 4 82 53 94 76

Retrouvez nos autres modules sur Dolistore diff --git a/lib/eCommerce.lib.php b/lib/eCommerce.lib.php index cd384f1..9e5448f 100644 --- a/lib/eCommerce.lib.php +++ b/lib/eCommerce.lib.php @@ -89,6 +89,11 @@ function ecommercengConfigSitePrepareHead($object) $head[$h][2] = 'about'; $h++; + $head[$h][0] = dol_buildpath("/ecommerceng/admin/changelog.php", 1); + $head[$h][1] = $langs->trans("OpenDsiChangeLog"); + $head[$h][2] = 'changelog'; + $h++; + return $head; } diff --git a/lib/opendsi_common.lib.php b/lib/opendsi_common.lib.php new file mode 100755 index 0000000..bada05d --- /dev/null +++ b/lib/opendsi_common.lib.php @@ -0,0 +1,732 @@ + + * Copyright (C) 2017 Open-DSI + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/module/lib/opendsi_common.lib.php + * \ingroup module + * \brief Common functions opendsi for the module + */ + +/** + * Gives the changelog. First check ChangeLog-la_LA.md then ChangeLog.md + * + * @param string $moduleName Name of module + * + * @return string Content of ChangeLog + */ +function opendsi_common_getChangeLog($moduleName) +{ + global $langs; + $langs->load("admin"); + + include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; + include_once DOL_DOCUMENT_ROOT . '/core/lib/geturl.lib.php'; + + $filefound = false; + + $modulePath = dol_buildpath('/'.strtolower($moduleName), 0); + + // Define path to file README.md. + // First check README-la_LA.md then README.md + $pathoffile = $modulePath . '/ChangeLog-' . $langs->defaultlang . '.md'; + if (dol_is_file($pathoffile)) { + $filefound = true; + } + if (!$filefound) { + $pathoffile = $modulePath . '/ChangeLog.md'; + if (dol_is_file($pathoffile)) { + $filefound = true; + } + } + + $content = ''; + + if ($filefound) // Mostly for external modules + { + $moduleUrlPath = dol_buildpath('/'.strtolower($moduleName), 1); + $content = file_get_contents($pathoffile); + + if ((float)DOL_VERSION >= 6.0) { + @include_once DOL_DOCUMENT_ROOT . '/core/lib/parsemd.lib.php'; + $content = dolMd2Html($content, 'parsedown', array('doc/' => $moduleUrlPath . '/doc/')); + } else { + $content = opendsi_common_dolMd2Html('codenaf', $content, 'parsedown', array('doc/' => $moduleUrlPath . '/doc/')); + } + + } + + return $content; +} + +/** + * Function to parse MD content into HTML + * + * @param string $moduleName Name of module + * @param string $content MD content + * @param string $parser 'parsedown' or 'nl2br' + * @param string $replaceimagepath Replace path to image with another path. Exemple: ('doc/'=>'xxx/aaa/') + * + * @return string Parsed content + */ +function opendsi_common_dolMd2Html($moduleName, $content, $parser='parsedown',$replaceimagepath=null) +{ + if (is_array($replaceimagepath)) { + foreach ($replaceimagepath as $key => $val) { + $keytoreplace = '](' . $key; + $valafter = '](' . $val; + $content = preg_replace('/' . preg_quote($keytoreplace, '/') . '/m', $valafter, $content); + } + } + + if ($parser == 'parsedown') { + dol_include_once('/' . strtolower($moduleName) . '/includes/parsedown/Parsedown.php'); + $Parsedown = new Parsedown(); + $content = $Parsedown->text($content); + } else { + $content = nl2br($content); + } + + return $content; +} + +/** + * Generate natural SQL search string for a criteria (this criteria can be tested on one or several fields) + * + * @param string|string[] $fields String or array of strings, filled with the name of all fields in the SQL query we must check (combined with a OR). Example: array("p.field1","p.field2") + * @param string[] $nullfields Array of strings, filled with the name of the field in the SQL query we must check if the searched fields is NULL (when mode = 4). Example: array("p.field1"=>"p.field3") + * @param string $value The value to look for. + * If param $mode is 0, can contains several keywords separated with a space or | + * like "keyword1 keyword2" = We want record field like keyword1 AND field like keyword2 + * or like "keyword1|keyword2" = We want record field like keyword1 OR field like keyword2 + * If param $mode is 1, can contains an operator <, > or = like "<10" or ">=100.5 < 1000" + * If param $mode is 2, can contains a list of int id separated by comma like "1,3,4" + * If param $mode is 3, can contains a list of string separated by comma like "a,b,c" + * If param $mode is 4, can contains a datetime or a date and an operator <, > or = of string like "<=YYYY-MM-DD HH:mm:ss" or "<=YYYY-MM-DD HH:mm" or "=YYYY-MM-DD" or ">YYYY" ( support &, | and () ) + * @param integer $mode 0=value is list of keyword strings, 1=value is a numeric test (Example ">5.5 <10"), 2=value is a list of id separated with comma (Example '1,3,4') + * @param integer $nofirstand 1=Do not output the first 'AND' + * @return string $res The statement to append to the SQL query + */ +function opendsi_natural_search($fields, $value, $mode=0, $nofirstand=0, $nullfields=array()) +{ + global $db; + if ($mode == 4) { + if (!is_array($fields)) $fields = array($fields); + + $criterias = array(); + if (preg_match_all('/\s*(&|\|)?\s*(\()?\s*([<>=]+)?\s*([0-9]{4})(?:\s*-\s*([0-9]{2}))?(?:\s*-\s*([0-9]{2}))?(?:\s+([0-9]{2})?(?:\s*\:\s*([0-9]{2}))?(?:\s*\:\s*([0-9]{2}))?)?\s*(\))?\s*/', $value, $matches, PREG_SET_ORDER)) { + require_once DOL_DOCUMENT_ROOT . '/core/lib/date.lib.php'; + foreach ($matches as $match) { + $operatorSQL = !empty($match[1]) && $match[1] == '&' ? ' AND ' : ' OR '; + $openingParenthesis = !empty($match[2]) ? $match[2] : ''; + $operator = !empty($match[3]) ? $match[3] : '='; + $end_limit = $operator == '<=' || $operator == '>'; + $date = $match[4]; // Year + $date .= '-' . (!empty($match[5]) ? $match[5] : ($end_limit ? '12' : '00')); // Month + $date .= '-' . (!empty($match[6]) ? $match[6] : ($end_limit ? (!empty($match[5]) ? dol_get_last_day($match[4], $match[5]) : '31') : '00')); // Day + $date .= ' ' . (!empty($match[7]) ? $match[7] : ($end_limit ? '23' : '00')); // Hour + $date .= ':' . (!empty($match[8]) ? $match[8] : ($end_limit ? '59' : '00')); // Minute + $date .= ':' . (!empty($match[9]) ? $match[9] : ($end_limit ? '59' : '00')); // second + $date = "'" . $db->escape($date) . "'"; + $closingParenthesis = !empty($match[10]) ? $match[10] : ''; + + $not_complete = empty($match[9]) || empty($match[8]) || empty($match[7]) || empty($match[6]) || empty($match[5]); + if ($operator == '=' && $not_complete) { + $criterias[] = array($operatorSQL, $openingParenthesis.'(', '>=', $date, $closingParenthesis); + + $end_limit = true; + $date = $match[4]; // Year + $date .= '-' . (!empty($match[5]) ? $match[5] : ($end_limit ? '12' : '00')); // Month + $date .= '-' . (!empty($match[6]) ? $match[6] : ($end_limit ? (!empty($match[5]) ? dol_get_last_day($match[4], $match[5]) : '31') : '00')); // Day + $date .= ' ' . (!empty($match[7]) ? $match[7] : ($end_limit ? '23' : '00')); // Hour + $date .= ':' . (!empty($match[8]) ? $match[8] : ($end_limit ? '59' : '00')); // Minute + $date .= ':' . (!empty($match[9]) ? $match[9] : ($end_limit ? '59' : '00')); // second + $date = "'" . $db->escape($date) . "'"; + $operatorSQL = ' AND '; + $openingParenthesis = ''; + $operator = '<='; + $closingParenthesis .= ')'; + } + + $criterias[] = array($operatorSQL, $openingParenthesis, $operator, $date, $closingParenthesis); + } + } + + $to_print = array(); + foreach ($fields as $field) { + $ifnull = isset($nullfields[$field]) ? $nullfields[$field] : ''; + $statementSQL = ''; + foreach ($criterias as $criteria) { + $statementSQL .= $criteria[0] . $criteria[1] . (!empty($ifnull) ? $db->ifsql($field . ' IS NULL', $ifnull, $field) : $field) . ' ' . $criteria[2] . ' ' . $criteria[3] . $criteria[4]; + } + $statementSQL = preg_replace('/^( (?:AND|OR) )/', '', $statementSQL); + if (!empty($statementSQL)) $to_print[] = $statementSQL; + } + + return (!empty($to_print) ? ($nofirstand ? "" : " AND ") . "((" . implode(') OR (', $to_print) . "))" : ''); + } else { + require_once DOL_DOCUMENT_ROOT . '/core/lib/functions.lib.php'; + return natural_search($fields, $value, $mode, $nofirstand); + } +} + +/** + * Return the handle of the object of the specified element + * + * @param DoliDB $db Database handler + * @param string $element_type Type of the element + * @param int $element_id Id of the element + * @return object|int <0 if KO otherwise object handler + */ +function opendsi_get_object($db, $element_type, $element_id) +{ + global $conf; + + $element_prop = getElementProperties($element_type); + if (is_array($element_prop) && $conf->{$element_prop['module']}->enabled) { + if (dol_include_once('/' . $element_prop['classpath'] . '/' . $element_prop['classfile'] . '.class.php')) { + if (class_exists($element_prop['classname'], false)) { + $objecttmp = new $element_prop['classname']($db); + $ret = $objecttmp->fetch($element_id); + if ($ret >= 0) { + return $objecttmp; + } + } + } + } + + // Parse element/subelement (ex: project_task) + $element = $subelement = $element_type; + if (preg_match('/^([^_]+)_([^_]+)/i', $element_type, $regs)) { + $element = $regs [1]; + $subelement = $regs [2]; + } + + $classpath = $element; + if ($element_type == 'order' || $element_type == 'commande') { + $classpath = $subelement = 'commande'; + } else if ($element_type == 'propal') { + $classpath = 'comm/propal'; + $subelement = 'propal'; + } else if ($element_type == 'facture') { + $classpath = 'compta/facture'; + $subelement = 'facture'; + } else if ($element_type == 'contract') { + $classpath = $subelement = 'contrat'; + } else if ($element_type == 'shipping') { + $classpath = $subelement = 'expedition'; + } else if ($element_type == 'deplacement') { + $classpath = 'compta/deplacement'; + $subelement = 'deplacement'; + } else if ($element_type == 'order_supplier') { + $classpath = 'fourn'; + $subelement = 'fournisseur.commande'; + } else if ($element_type == 'invoice_supplier') { + $classpath = 'fourn'; + $subelement = 'fournisseur.facture'; + } else if ($element_type == 'chargesociales') { + $classpath = 'compta/sociales'; + } else if ($element_type == 'tva') { + $classpath = 'compta/tva'; + } else if ($element_type == 'salary') { + $classpath = 'salaries'; + } else if ($element_type == 'payment_various') { + $classpath = 'compta/bank'; + $subelement = 'paymentvarious'; + } else if ($element_type == 'bank_account') { + $classpath = 'compta/bank'; + } else if ($element_type == 'stock') { + $classpath = 'product/stock'; + $subelement = 'entrepot'; + } + + $result = dol_include_once('/' . $classpath . '/class/' . $subelement . '.class.php'); + if (!$result) { + return -1; + } + + if ($element_type == 'order_supplier') { + $classname = 'CommandeFournisseur'; + } else if ($element_type == 'invoice_supplier') { + $classname = 'FactureFournisseur'; + } else if ($element_type == 'payment_various') { + $classname = 'PaymentVarious'; + } else if ($element_type == 'stock') { + $classname = 'Entrepot'; + } else $classname = ucfirst($subelement); + + if (!class_exists($classname, false)) { + return -1; + } + + $srcobject = new $classname($db); + $result = $srcobject->fetch($element_id); + if ($result < 0) { + return -1; + } + + return $srcobject; +} + +/** + * Return info of the documents path of the element + * + * @param DoliDB $db Database handler + * @param User $user User handler + * @param string $element_type Type of the element + * @param int $element_id Id of the element + * @return array Return info of the documents path of the element array('module_part' => '', 'file_dir' => '') + */ +function opendsi_get_object_documents_path_info($db, User $user, $element_type, $element_id) +{ + global $conf, $hookmanager; + + $module_part = ''; + $module_sub_dir = ''; + $file_dir = ''; + + if (opendsi_check_user_access_to_object($user, $element_type, $element_id)) { + $object = opendsi_get_object($db, $element_type, $element_id); + if (is_object($object) && $object->id > 0) { + // Add custom element by hook + if (!is_object($hookmanager)) { + include_once DOL_DOCUMENT_ROOT . '/core/class/hookmanager.class.php'; + $hookmanager = new HookManager($db); + } + $hookmanager2 = clone $hookmanager; // Génère des erreurs de resultat disparaissant si appelé dans une autre hooks donc on copie la hook + $hookmanager2->initHooks(array('opendsidao')); + $parameters = array('module_part' => &$module_part, 'file_dir' => &$file_dir, 'module_sub_dir' => &$module_sub_dir); + $reshook = $hookmanager2->executeHooks('opendsiGetObjectDocumentsPathInfo', $parameters); // Note that $action and $object may have been + if (empty($reshook)) { + $module_part = $element_type; + $module_sub_dir = dol_sanitizeFileName($object->ref); + + if ($element_type == 'order_supplier') { + $module_part = 'commande_fournisseur'; + } elseif ($element_type == 'invoice_supplier') { + $module_part = 'facture_fournisseur'; + $module_sub_dir = get_exdir($object->id, 2, 0, 0, $object, 'invoice_supplier') . $module_sub_dir; + } elseif ($element_type == 'contrat') { + $module_part = 'contract'; + } elseif ($element_type == 'fichinter') { + $module_part = 'ficheinter'; + } elseif ($element_type == 'project_task') { + require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'; + $projectstatic = new Project($db); + $projectstatic->fetch($object->fk_project); + $module_sub_dir = dol_sanitizeFileName($projectstatic->ref) . '/' . $module_sub_dir; + } elseif ($element_type == 'product') { + if (!empty($conf->product->enabled) || !empty($conf->service->enabled)) { + if (!empty($conf->global->PRODUCT_USE_OLD_PATH_FOR_PHOTO)) { // For backward compatiblity, we scan also old dirs + $module_sub_dir = substr(substr("000" . $object->id, -2), 1, 1) . '/' . substr(substr("000" . $object->id, -2), 0, 1) . '/' . $object->id . "/photos"; + } else { + $module_sub_dir = get_exdir(0, 0, 0, 1, $object, 'product'); + } + } + } elseif ($element_type == 'action') { + // Note: This 'elseif' block had been deleted, and it caused a bug in agenda display. + // It may be linked to DLB version. + // If this bug happens anew, contact kkhelifa or tnegre by open-dsi. + $module_sub_dir = $object->id; + $module_part = 'actions'; + } elseif ($element_type == 'salary') { + $module_part = 'salaries'; + $module_sub_dir = dol_sanitizeFileName($object->id); + } elseif ($element_type == 'payment_various') { + $module_part = 'banque'; + $module_sub_dir = dol_sanitizeFileName($object->id); + } elseif ($element_type == 'bank_account') { + $module_part = 'bank'; + } elseif ($element_type == 'webhost') { + $module_sub_dir = "/webhost/" . dol_sanitizeFileName($object->id); + } elseif ($element_type == 'webhost_webinstance') { + $module_part = 'webhost'; + $module_sub_dir = "/webinstance/" . dol_sanitizeFileName($object->id); + } elseif ($element_type == 'webhost_webmodule') { + $module_part = 'webhost'; + $module_sub_dir = "/webmodule/" . dol_sanitizeFileName($object->id); + } elseif ($element_type == 'usergroup') { + if (DOL_VERSION > 14) { + $module_part = 'user'; + } + } + + + require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; + $check_access = dol_check_secure_access_document($module_part, $module_sub_dir, $conf->entity, $user, $object->ref); + if ($check_access['accessallowed']) { + $file_dir = $check_access['original_file']; + } else { + $module_part = ''; + } + } + } + } + + return array('module_part' => $module_part, 'file_dir' => $file_dir, 'module_sub_dir' => $module_sub_dir); +} + +/** + * Return if the user is authorized to access to the specified element + * + * @param User $user User handler + * @param string $element_type Type of the element + * @param int $element_id Id of the element + * @return bool + */ +function opendsi_check_user_access_to_object(User $user, $element_type, $element_id) +{ + global $db, $hookmanager; + + // Add custom element by hook + if (!is_object($hookmanager)) { + include_once DOL_DOCUMENT_ROOT . '/core/class/hookmanager.class.php'; + $hookmanager = new HookManager($db); + } + $hookmanager2 = clone $hookmanager; // Génère des erreurs de resultat disparaissant si appelé dans une autre hooks donc on copie la hook + $hookmanager2->initHooks(array('opendsidao')); + $parameters = array(); + $reshook = $hookmanager2->executeHooks('opendsiCheckUserAccessToObject', $parameters); // Note that $action and $object may have been + if (empty($reshook)) { + $features = $element_type; + $objectid = $element_id; + $tableandshare = ''; + $feature2 = ''; + $dbt_keyfield = 'fk_soc'; + $dbt_select = 'rowid'; + $objcanvas = null; + $v14p = version_compare(DOL_VERSION, '4.0.0', '>='); + + if ($element_type == 'invoice_supplier') { + $features = 'fournisseur'; + $tableandshare = 'facture_fourn'; + $feature2 = 'facture'; + } elseif ($element_type == 'order_supplier') { + $features = 'fournisseur'; + $tableandshare = 'commande_fournisseur'; + $feature2 = 'commande'; + } elseif ($element_type == 'fichinter') { + $features = 'ficheinter'; + $tableandshare = 'fichinter'; + } elseif ($element_type == 'project') { + $features = 'projet'; + $tableandshare = 'projet&project'; + } elseif ($element_type == 'project_task') { + require_once DOL_DOCUMENT_ROOT.'/projet/class/task.class.php'; + $object = new Task($db); + $object->fetch($element_id); + $objectid = $object->fk_project; + $features = 'projet'; + $tableandshare = 'projet&project'; + } elseif ($element_type == 'expensereport') { + $objectid = 0; + $tableandshare = 'expensereport'; + } elseif ($element_type == 'action') { + $features = 'agenda'; + $tableandshare = 'actioncomm&societe'; + $feature2 = 'myactions|allactions'; + $dbt_select = 'id'; + } elseif ($element_type == 'product') { + $features = 'produit|service'; + $tableandshare = 'product&product'; + } elseif ($element_type == 'tva') { + $features = 'tax'; + $tableandshare = 'tva'; + $feature2 = 'charges'; + } elseif ($element_type == 'salary') { + $features = 'salaries'; + $tableandshare = 'salary'; + } elseif ($element_type == 'payment_various') { + $features = 'banque'; + $objectid = ''; + } elseif ($element_type == 'bank_account') { + $features = 'banque'; + $tableandshare = 'bank_account'; + } elseif ($element_type == 'webhost_webinstance') { + return empty($user->rights->webhost->instance->read) ? 0 : 1; + } elseif ($element_type == 'webhost_webmodule') { + return 1; + } + + return opendsi_restrictedArea($user, $features, $objectid, $tableandshare, $feature2, $dbt_keyfield, $dbt_select, $objcanvas); + } + + // $reshook: =-1 not authorized, =1 authorized + return $reshook > 0 ? 1 : 0; +} + +/** + * Check permissions of a user to show a page and an object. Check read permission. + * If GETPOST('action','aZ09') defined, we also check write and delete permission. + * + * @param User $user User to check + * @param string $features Features to check (it must be module name. Examples: 'societe', 'contact', 'produit&service', 'produit|service', ...) + * @param int $objectid Object ID if we want to check a particular record (optional) is linked to a owned thirdparty (optional). + * @param string $tableandshare 'TableName&SharedElement' with Tablename is table where object is stored. SharedElement is an optional key to define where to check entity for multicompany modume. Param not used if objectid is null (optional). + * @param string $feature2 Feature to check, second level of permission (optional). Can be a 'or' check with 'level1|level2'. + * @param string $dbt_keyfield Field name for socid foreign key if not fk_soc. Not used if objectid is null (optional) + * @param string $dbt_select Field name for select if not rowid. Not used if objectid is null (optional) + * @param Canvas $objcanvas Object canvas + * @return int Always 1, die process if not allowed + * @see dol_check_secure_access_document + */ +function opendsi_restrictedArea($user, $features, $objectid=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $objcanvas=null) +{ + global $db, $conf; + + $v14p = version_compare(DOL_VERSION, '4.0.0', '>='); + + if ($v14p) { + $result = restrictedArea($user, $features, $objectid, $tableandshare, $feature2, $dbt_keyfield, $dbt_select, 0, 1); + return $result; + } + + //dol_syslog("functions.lib:restrictedArea $feature, $objectid, $dbtablename,$feature2,$dbt_socfield,$dbt_select"); + //print "user_id=".$user->id.", features=".$features.", feature2=".$feature2.", objectid=".$objectid; + //print ", dbtablename=".$dbtablename.", dbt_socfield=".$dbt_keyfield.", dbt_select=".$dbt_select; + //print ", perm: ".$features."->".$feature2."=".($user->rights->$features->$feature2->lire)."
"; + + // If we use canvas, we try to use function that overlod restrictarea if provided with canvas + if (is_object($objcanvas)) + { + if (method_exists($objcanvas->control,'restrictedArea')) return $objcanvas->control->restrictedArea($user,$features,$objectid,$tableandshare,$feature2,$dbt_keyfield,$dbt_select); + } + + if ($dbt_select != 'rowid' && $dbt_select != 'id') $objectid = "'".$objectid."'"; + + // Features/modules to check + $featuresarray = array($features); + if (preg_match('/&/', $features)) $featuresarray = explode("&", $features); + elseif (preg_match('/\|/', $features)) $featuresarray = explode("|", $features); + + // More subfeatures to check + if (! empty($feature2)) $feature2 = explode("|", $feature2); + + // More parameters + $params = explode('&', $tableandshare); + $dbtablename=(! empty($params[0]) ? $params[0] : ''); + $sharedelement=(! empty($params[1]) ? $params[1] : $dbtablename); + + $listofmodules=explode(',',$conf->global->MAIN_MODULES_FOR_EXTERNAL); + + // Check read permission from module + $readok=1; $nbko=0; + foreach ($featuresarray as $feature) // first we check nb of test ko + { + $featureforlistofmodule=$feature; + if ($featureforlistofmodule == 'produit') $featureforlistofmodule='product'; + if (! empty($user->societe_id) && ! empty($conf->global->MAIN_MODULES_FOR_EXTERNAL) && ! in_array($featureforlistofmodule,$listofmodules)) // If limits on modules for external users, module must be into list of modules for external users + { + $readok=0; $nbko++; + continue; + } + + if ($feature == 'societe') + { + if (! $user->rights->societe->lire && ! $user->rights->fournisseur->lire) { $readok=0; $nbko++; } + } + elseif ($feature == 'contact') + { + if (! $user->rights->societe->contact->lire) { $readok=0; $nbko++; } + } + elseif ($feature == 'produit|service') + { + if (! $user->rights->produit->lire && ! $user->rights->service->lire) { $readok=0; $nbko++; } + } + elseif ($feature == 'prelevement') + { + if (! $user->rights->prelevement->bons->lire) { $readok=0; $nbko++; } + } + elseif ($feature == 'cheque') + { + if (! $user->rights->banque->cheque) { $readok=0; $nbko++; } + } + elseif ($feature == 'projet') + { + if (! $user->rights->projet->lire && ! $user->rights->projet->all->lire) { $readok=0; $nbko++; } + } + elseif (! empty($feature2)) // This should be used for future changes + { + $tmpreadok=1; + foreach($feature2 as $subfeature) + { + if (! empty($subfeature) && empty($user->rights->$feature->$subfeature->lire) && empty($user->rights->$feature->$subfeature->read)) { $tmpreadok=0; } + elseif (empty($subfeature) && empty($user->rights->$feature->lire) && empty($user->rights->$feature->read)) { $tmpreadok=0; } + else { $tmpreadok=1; break; } // Break is to bypass second test if the first is ok + } + if (! $tmpreadok) // We found a test on feature that is ko + { + $readok=0; // All tests are ko (we manage here the and, the or will be managed later using $nbko). + $nbko++; + } + } + elseif (! empty($feature) && ($feature!='user' && $feature!='usergroup')) // This is for old permissions + { + if (empty($user->rights->$feature->lire) + && empty($user->rights->$feature->read) + && empty($user->rights->$feature->run)) { $readok=0; $nbko++; } + } + } + + // If a or and at least one ok + if (preg_match('/\|/', $features) && $nbko < count($featuresarray)) $readok=1; + + if (! $readok) return 0; + //print "Read access is ok"; + + // Check write permission from module + $createok=1; $nbko=0; + if (GETPOST('action','aZ09') == 'create') + { + foreach ($featuresarray as $feature) + { + if ($feature == 'contact') + { + if (! $user->rights->societe->contact->creer) { $createok=0; $nbko++; } + } + elseif ($feature == 'produit|service') + { + if (! $user->rights->produit->creer && ! $user->rights->service->creer) { $createok=0; $nbko++; } + } + elseif ($feature == 'prelevement') + { + if (! $user->rights->prelevement->bons->creer) { $createok=0; $nbko++; } + } + elseif ($feature == 'commande_fournisseur') + { + if (! $user->rights->fournisseur->commande->creer) { $createok=0; $nbko++; } + } + elseif ($feature == 'banque') + { + if (! $user->rights->banque->modifier) { $createok=0; $nbko++; } + } + elseif ($feature == 'cheque') + { + if (! $user->rights->banque->cheque) { $createok=0; $nbko++; } + } + elseif (! empty($feature2)) // This should be used + { + foreach($feature2 as $subfeature) + { + if (empty($user->rights->$feature->$subfeature->creer) + && empty($user->rights->$feature->$subfeature->write) + && empty($user->rights->$feature->$subfeature->create)) { $createok=0; $nbko++; } + else { $createok=1; break; } // Break to bypass second test if the first is ok + } + } + elseif (! empty($feature)) // This is for old permissions ('creer' or 'write') + { + //print '
feature='.$feature.' creer='.$user->rights->$feature->creer.' write='.$user->rights->$feature->write; + if (empty($user->rights->$feature->creer) + && empty($user->rights->$feature->write) + && empty($user->rights->$feature->create)) { $createok=0; $nbko++; } + } + } + + // If a or and at least one ok + if (preg_match('/\|/', $features) && $nbko < count($featuresarray)) $createok=1; + + if (! $createok) return 0; + //print "Write access is ok"; + } + + // Check create user permission + $createuserok=1; + if (GETPOST('action','aZ09') == 'confirm_create_user' && GETPOST("confirm") == 'yes') + { + if (! $user->rights->user->user->creer) $createuserok=0; + + if (! $createuserok) return 0; + //print "Create user access is ok"; + } + + // Check delete permission from module + $deleteok=1; $nbko=0; + if ((GETPOST('action','aZ09') == 'confirm_delete' && GETPOST("confirm") == 'yes') || GETPOST('action','aZ09') == 'delete') + { + foreach ($featuresarray as $feature) + { + if ($feature == 'contact') + { + if (! $user->rights->societe->contact->supprimer) $deleteok=0; + } + elseif ($feature == 'produit|service') + { + if (! $user->rights->produit->supprimer && ! $user->rights->service->supprimer) $deleteok=0; + } + elseif ($feature == 'commande_fournisseur') + { + if (! $user->rights->fournisseur->commande->supprimer) $deleteok=0; + } + elseif ($feature == 'banque') + { + if (! $user->rights->banque->modifier) $deleteok=0; + } + elseif ($feature == 'cheque') + { + if (! $user->rights->banque->cheque) $deleteok=0; + } + elseif ($feature == 'ecm') + { + if (! $user->rights->ecm->upload) $deleteok=0; + } + elseif ($feature == 'ftp') + { + if (! $user->rights->ftp->write) $deleteok=0; + }elseif ($feature == 'salaries') + { + if (! $user->rights->salaries->delete) $deleteok=0; + } + elseif ($feature == 'salaries') + { + if (! $user->rights->salaries->delete) $deleteok=0; + } + elseif (! empty($feature2)) // This should be used for future changes + { + foreach($feature2 as $subfeature) + { + if (empty($user->rights->$feature->$subfeature->supprimer) && empty($user->rights->$feature->$subfeature->delete)) $deleteok=0; + else { $deleteok=1; break; } // For bypass the second test if the first is ok + } + } + elseif (! empty($feature)) // This is for old permissions + { + //print '
feature='.$feature.' creer='.$user->rights->$feature->supprimer.' write='.$user->rights->$feature->delete; + if (empty($user->rights->$feature->supprimer) + && empty($user->rights->$feature->delete) + && empty($user->rights->$feature->run)) $deleteok=0; + } + } + + // If a or and at least one ok + if (preg_match('/\|/', $features) && $nbko < count($featuresarray)) $deleteok=1; + + if (! $deleteok) return 0; + //print "Delete access is ok"; + } + + // If we have a particular object to check permissions on, we check this object + // is linked to a company allowed to $user. + if (! empty($objectid) && $objectid > 0) + { + require_once DOL_DOCUMENT_ROOT . '/core/lib/security.lib.php'; + $ok = checkUserAccessToObject($user, $featuresarray, $objectid, $tableandshare, $feature2, $dbt_keyfield, $dbt_select); + return $ok ? 1 : 0; + } + + return 1; +} diff --git a/tpl/index.tpl.php b/tpl/index.tpl.php index 91d2fa0..f50ad3e 100644 --- a/tpl/index.tpl.php +++ b/tpl/index.tpl.php @@ -5,7 +5,7 @@ $form = new Form($db); $linkback=''; -print load_fiche_titre($langs->trans("ECommerceDashboard"), $linkback, 'eCommerceTitle@ecommerceng'); +print load_fiche_titre($langs->trans("ECommerceDashboard"), $linkback, 'title_setup'); print '
'; diff --git a/tpl/site.tpl.php b/tpl/site.tpl.php index 4262c5b..95596b9 100644 --- a/tpl/site.tpl.php +++ b/tpl/site.tpl.php @@ -6,7 +6,9 @@ dol_include_once("/ecommerceng/lib/eCommerce.lib.php"); $linkback = '' . $langs->trans("BackToListOfSites") . ''; - print_fiche_titre($langs->trans('ECommerceSiteSynchro') . ' ' . $site->name, $linkback, 'eCommerceTitle@ecommerceng'); + //print_fiche_titre($langs->trans('ECommerceSiteSynchro') . ' ' . $site->name, $linkback, 'eCommerceTitle@ecommerceng'); + + print load_fiche_titre($langs->trans("ECommerceSiteSynchro"), $linkback, 'title_setup'); print '
'; @@ -15,7 +17,9 @@ $head[1][1] = $langs->trans("Direction") . ' : Ecommerce -> Dolibarr'; $head[1][2] = 'ecommerce2dolibarr'; - dol_fiche_head($head, 'ecommerce2dolibarr', ''); + // dol_fiche_head($head, 'ecommerce2dolibarr', ''); + + print dol_get_fiche_head($head, 'ecommerce2dolibarr', $langs->trans("Module107100Name"), 0, 'opendsi@ecommerceng'); $disabled = $synchRights != true && empty($conf->global->ECOMMERCE_PROCESSING_WEBHOOK_SYNCHRONIZATION);