<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.dolibarr.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vdegrandpre</id>
	<title>Dolibarr ERP CRM Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dolibarr.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vdegrandpre"/>
	<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php/Special:Contributions/Vdegrandpre"/>
	<updated>2026-10-22T05:17:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Vincent_de_Grandpr%C3%A9&amp;diff=64714</id>
		<title>Vincent de Grandpré</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Vincent_de_Grandpr%C3%A9&amp;diff=64714"/>
		<updated>2025-11-09T17:12:49Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: Version initiale&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |User card / Fiche compte / Ficha cuenta&lt;br /&gt;
|-&lt;br /&gt;
|Name/Nom/Nombre/Name/Όνομα&lt;br /&gt;
|Vincent de Grandpré&lt;br /&gt;
|-&lt;br /&gt;
|Country/Pays/Pais/Land/Χώρα&lt;br /&gt;
|Québec (form. Canada)&lt;br /&gt;
|-&lt;br /&gt;
|Company/Société/Empresa/Unternehmen/Εταιρεία&lt;br /&gt;
|de Grandpré Technologies&lt;br /&gt;
|-&lt;br /&gt;
|Web&lt;br /&gt;
|de-grandpre.quebec&lt;br /&gt;
|-&lt;br /&gt;
|Date/Datum/Ημερομηνία&lt;br /&gt;
|2023-07-01&lt;br /&gt;
|-&lt;br /&gt;
|Level/Grade/Grado/Grad/Επίπεδο&lt;br /&gt;
|[[Projet Dolibarr#D.C3.A9veloppeur grade Amiral .28R.C3.A9aliseur de GIT Pull Request.29|Amiral]] / [[Dolibarr Project#Developer grade Admiral .28GIT Pull Requesters.29|Admiral]]&lt;br /&gt;
|-&lt;br /&gt;
|Status/Statut/Estado/Κατάσταση&lt;br /&gt;
|[[:Category:User Active|Active]]&lt;br /&gt;
|-&lt;br /&gt;
|Picture/Photo/Foto/Φωτογραφία&lt;br /&gt;
|[[File:Vincent de Grandpré.png|thumb]]&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;Other informations / Autres informations / Otra información / Andere Infos / Άλλες πληροφορίες&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Informaticien généraliste indépendant diplômé en Techniques de l&#039;informatique - gestion (DEC) du Collège de Maisonneuve (2003) et en cheminement au baccalauréat en génie logiciel à l&#039;École de technologie supérieure (Université du Québec). Entrepreneur en informatique, il a utilisé Dolibarr pour la première fois à la version 3 dans un cadre d&#039;emploi. Au moment de s&#039;occuper de la compagnie à temps plein, Dolibarr a été choisi comme ERP/CRM. Quelques années plus tard, une opportunité a permis de choisir Dolibarr comme plateforme sur-mesure pour un projet d&#039;innovation en économie circulaire. Sous cette impulsion, la compagnie a débuté le développement sérieux de modules pour Dolibarr et soumis plusieurs changements et correctifs. En 2023, &#039;&#039;&#039;de Grandpré Technologies&#039;&#039;&#039; obtient le label [https://www.dolibarr.org/partners.php#countryid_14 Preffered Partner]. Il entre ainsi en contact avec les entreprises qui ont choisi Dolibarr qui l&#039;embauchent pour de la consultation et du développement spécialisé métier. Il est l&#039;auteur du module Québec et souhaite démarrer une communauté locale québécoise pour étendre l&#039;adoption du logiciel et représente Dolibarr auprès de la communauté Linux au Québec.&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=File:Vincent_de_Grandpr%C3%A9.png&amp;diff=64713</id>
		<title>File:Vincent de Grandpré.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=File:Vincent_de_Grandpr%C3%A9.png&amp;diff=64713"/>
		<updated>2025-11-09T16:29:57Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Photo INIS, juin 2018&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=List_of_modules_id&amp;diff=62072</id>
		<title>List of modules id</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=List_of_modules_id&amp;diff=62072"/>
		<updated>2025-01-02T17:53:47Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: Auto-attribution ID 156750 - 156799&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevEn}}&lt;br /&gt;
{{TemplateDocDevEs}}&lt;br /&gt;
{{TemplateDocDevFr}}&lt;br /&gt;
{{TemplateDocDevZh}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This page list all reserved modules numbers / ID. If you build or want to build your own modules (like thi , you should take an ID range here. Please pick range into existing holes first.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=ID 0 - 94999=&lt;br /&gt;
This range is reserved for Dolibarr&#039;s internal core modules, so all modules available into the standard distribution at https://github.com/Dolibarr/dolibarr&lt;br /&gt;
&lt;br /&gt;
=ID 95000 - 99999=&lt;br /&gt;
This range is reserved for Dolibarr&#039;s community modules availble on the github repository: https://github.com/Dolibarr/dolibarr-community-modules&lt;br /&gt;
&lt;br /&gt;
=ID 100000 - 499999=&lt;br /&gt;
&lt;br /&gt;
Reserved area for editors in need for an ID range. You can edit this page to add your own range (take a range of 50 numbers only the first time, ask us for more)&lt;br /&gt;
&lt;br /&gt;
[[File:Warning.png]] If you reserve more than 50, we may automatically change your reservation range without information and you may experience conflicts with other modules in a future, so please follow the rules! &lt;br /&gt;
&lt;br /&gt;
*ID 100000 - 100999: OpenThink (http://www.openthink.be) - Belgium&lt;br /&gt;
*ID 101000 - 101999: NLTechno (https://www.nltechno.com) - France&lt;br /&gt;
*ID 102000 - 102999: Tiaris (http://www.tiaris.fr) - France&lt;br /&gt;
*ID 103000 - 103999: Open-concept.pro (http://www.open-concept.pro) - France&lt;br /&gt;
*ID 104000 - 104999: ATM Consulting (http://www.atm-consulting.fr) - France&lt;br /&gt;
*ID 105000 - 105999: GPC.solutions - France&lt;br /&gt;
*ID 106000 - 106999: PHPASSO&lt;br /&gt;
*ID 107000 - 107999: TecLib (http://www.teclib.com) / Auguria (http://www.auguria.net) - France&lt;br /&gt;
*ID 108000 - 108999: ETHICWEB&lt;br /&gt;
*ID 109000 - 109999: Aplose ([http://www.aplose.fr https://www.aplose.fr]) - France&lt;br /&gt;
*ID 110000 - 110999: Association Dolibarr (https://www.dolibarr.org)&lt;br /&gt;
*ID 111000 - 111999: Asset IT (www.assetit.ch) - Suisse&lt;br /&gt;
*ID 112000 - 112999: Aarboard AG (www.aarboard.ch) - Suisse&lt;br /&gt;
*ID 113000 - 113999: Asilib - Alexandre Spangaro&lt;br /&gt;
*ID 114000 - 114999: Iceleaf OÜ&lt;br /&gt;
*ID 115000 - 115999: 2A2C Conseil - Cyril ZEKSER&lt;br /&gt;
*ID 116000 - 116999: Wolftec GmbH&lt;br /&gt;
*ID 117000 - 117999: Oscim (http://www.oscim.fr)&lt;br /&gt;
*ID 118000 - 118999: Oarces Web (dev.oarces.com)&lt;br /&gt;
*ID 119000 - 119999: Manuel Berrocal - Absolacom&lt;br /&gt;
*ID 120000 - 120999: Régis Houssin (http://www.inodbox.com) - France&lt;br /&gt;
*ID 121000 - 121999: Oscss - Shop - France&lt;br /&gt;
*ID 122000 - 122999: MrSof - la Nation du Web&lt;br /&gt;
*ID 123000 - 123999: Bruno Généré (webiseasy.org)&lt;br /&gt;
*ID 124000 - 124999: backbone internet service (www.backbone.co.at) - Austria&lt;br /&gt;
*ID 125000 - 125999: ProgSI (www.progsi.ma)&lt;br /&gt;
*ID 126000 - 126999: Catalanet&lt;br /&gt;
*ID 127000 - 127999: Virgilio Filho pt-BR Brasil (@dolibarr.br) - Brazil&lt;br /&gt;
*ID 128000 - 128999: Nicolas Frappé France (www.sospc.info)&lt;br /&gt;
*ID 129000 - 129999: Adeo-Informatique&lt;br /&gt;
*ID 130000 - 130999: Technicks ICT (http://www.technicks.eu) - Italy&lt;br /&gt;
*ID 131000 - 131999: Joan Louis (itaca.fr) - France&lt;br /&gt;
*ID 132000 - 132999: Jean-Marie Arsac (https://azimut.fr) - France&lt;br /&gt;
*ID 133000 - 133999: Oriel Systems Ltd, UK. (www.orielsystems.com)&lt;br /&gt;
*ID 134000 - 134999: ALSOFT PVT. LTD. (https://www.alsoft.org)&lt;br /&gt;
*ID 135000 - 135999: Net-Logic (https://netlogic.fr)&lt;br /&gt;
*ID 136000 - 136050: MONA.RE - France&lt;br /&gt;
*ID 136051 - 136099: La Vida Marketing&lt;br /&gt;
*ID 136100 - 136149: Synergies-Tech France. (https://www.synergies-france.fr/)&lt;br /&gt;
*ID 136150 - 136199: Lyta&lt;br /&gt;
*ID 136200 - 136219: Maison Théophile Leclerc&lt;br /&gt;
*ID 136220 - 136270: SegoFount - Spain&lt;br /&gt;
*ID 136271 - 136320: Labor Dispatch (Simon Sheng , China)&lt;br /&gt;
*ID 136321 - 136370: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 136371 - 136420: Daxit Solutions (https://www.daxit.be)&lt;br /&gt;
*ID 136421 - 136470: HUSCH GmbH (https://husch-gmbh.de)&lt;br /&gt;
*ID 136471 - 138999: NSINFO (https://www.ns-info.fr)&lt;br /&gt;
*ID 139000 - 139999: Synergies-Tech France. (https://www.synergies-france.fr/)&lt;br /&gt;
*ID 140000 - 140999: Altairis (http://altairis.fr)&lt;br /&gt;
*ID 141000 - 141050: Projet2Team (https://www.projet2team.fr)&lt;br /&gt;
*ID 141051 - 141099: Elistair (http://elistair.com)&lt;br /&gt;
*ID 141100 - 141149: Blue Networks Technologies (https://www.blnt.fr)&lt;br /&gt;
*ID 141150 - 141199: Mainlab S.r.l. (https://www.mainlabonline.it) - Italy&lt;br /&gt;
*ID 141200 - 141249: Florian DUFOURG - France&lt;br /&gt;
*ID 141250 - 141299: SoftAddicts - Canada&lt;br /&gt;
*ID 141300 - 141349: Finanboo - (https://www.finanboo.com)&lt;br /&gt;
*ID 141350 - 141399: ConstruxZion Soft - Colombia (https://www.construxzionsoft.com.co)&lt;br /&gt;
*ID 141400 - 141450: COEXDIS - République Démocratique du Congo (https://www.coexdis.com)&lt;br /&gt;
*ID 141451 - 141501: HALFWARE - Algeria (https://www.half-ware.com)&lt;br /&gt;
*ID 141502 - 141552: Quantraum (https://quantraum.com)&lt;br /&gt;
*ID 141553 - 141603: Nateo Group&lt;br /&gt;
*ID 141604 - 141653: digital centric GmbH (https://www.digitalcentric.de/dolibarr)&lt;br /&gt;
*ID 141654 - 141699: Decrypting (https://www.decrypting.fr)&lt;br /&gt;
*ID 141700 - 141749: Zeise IT Consulting - Germany (https://www.zeise-it.de)&lt;br /&gt;
*ID 141750 - 141799: Data Rooster - France (https://datarooster.io)&lt;br /&gt;
*ID 141800 - 141849: IP Développement (https://www.ipdeveloppement.fr)&lt;br /&gt;
*ID 141850 - 141899: MSICCA | MRVL Soluciones de Ingeniería y Construcción, c.a (https://msicca.com)&lt;br /&gt;
*ID 141900 - 141949: THERSANE (https://www.thersane.fr)&lt;br /&gt;
*ID 141950 - 141999: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 142000 - 142049: ITANéA (https://www.itanea.fr)&lt;br /&gt;
*ID 142050 - 142099: ERP Consulting NZ ([https://www.erpconsulting.co.nz www.erpconsulting.co.nz])&lt;br /&gt;
*ID 142100 - 142149: Bloxera GmbH (https://www.bloxera.com)&lt;br /&gt;
*ID 142150 - 142199: Evangelos Souglakos - Greece&lt;br /&gt;
*ID 142200 - 142249: Luc CALARESU - France&lt;br /&gt;
*ID 142250 - 142299: OmnIT Services - Belgique (https://www.omnitservices.biz)&lt;br /&gt;
*ID 142300 - 142349: Gwadeyes - Guadeloupe (https://www.gwadeyes-informatique.com/)&lt;br /&gt;
*ID 142350 - 142399: Solution Libre (https://www.solution-libre.fr/)&lt;br /&gt;
*ID 142400 - 142449: Res Digital (https://res.digital)&lt;br /&gt;
*ID 142450 - 142499: itopie informatique (https://www.itopie.ch)&lt;br /&gt;
*ID 142500 - 142549: Weblinx.IT GbR (https://weblinx.it/) - Germany&lt;br /&gt;
*ID 142550 - 142599: ASCI-Automation - Mexico (https://asci-automation.com.mx/)&lt;br /&gt;
*ID 142600 - 142649: ZENKO Design - Japan / France / Spain&lt;br /&gt;
*ID 142650 - 142699: AWeerWolf&lt;br /&gt;
*ID 142700 - 148749: Lysis (https://lysis.net/)&lt;br /&gt;
*ID 142750 - 142799: Hadritech (https://www.hadritech.com/)&lt;br /&gt;
*ID 142800 - 142849: Bloxera GmbH (https://www.bloxera.com)&lt;br /&gt;
*ID 142850 - 148999: Everlats S.L. - España (https://www.everlats.com)&lt;br /&gt;
*ID 149000 - 149999: SydTech - America Central (https://www.sydtech.io/)&lt;br /&gt;
*ID 150000 - 150999: Jeffinfo&lt;br /&gt;
*ID 151000 - 151999: Konverseo (https://konverseo.com)&lt;br /&gt;
*ID 152000 - 152049: Tanguy Pénet (http://tanguype.net)&lt;br /&gt;
*ID 152050 - 152099: Web Solutions&lt;br /&gt;
*ID 152100 - 152149: MagicNet (https://www.magicnet.it)&lt;br /&gt;
*ID 152150 - 152199: LAMAC Tech&lt;br /&gt;
*ID 152200 - 152249: Solauv&lt;br /&gt;
*ID 152250 - 156499: TecnoGestión Principado S.L. (https://www.tecnogestion.com) - Asturias - España&lt;br /&gt;
*ID 156500 - 156549: ACE Recycling  (https://www.acerecycling.net.au/)&lt;br /&gt;
*ID 156550 - 156599: Kreativität Works ([http://www.kreativitat.com http://kreativitat.com])&lt;br /&gt;
*ID 156600 - 156649: [https://pierre-couy.dev Pierre Couy]&lt;br /&gt;
*ID 156650 - 156699: CXI (https://cyrix.co.za)&lt;br /&gt;
*ID 156700 - 156749: Mustafa Kemerci - Turkiye&lt;br /&gt;
*ID 156750 - 156799: [https://de-grandpre.quebec de Grandpré Technologies] - Québec (Canada)&lt;br /&gt;
*ID 156800 - 159999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 160000 - 160999: Charles-François BENKE (http://www.patas-monkey.com)&lt;br /&gt;
*ID 161000 - 161999: Abbes Bahfir (https://01consulting.eu)&lt;br /&gt;
*ID 162000 - 162999: Jacques Rébiscoul&lt;br /&gt;
*ID 163000 - 163999: Open-DSI (https://www.open-dsi.fr)&lt;br /&gt;
*ID 164000 - 164999: Pixelada S. Coop. And. (https://pixelada.org)&lt;br /&gt;
*ID 165000 - 165049: DovConnect&lt;br /&gt;
*ID 165050 - 165099: Mind Operated Systems (https://www.mosystems.biz)&lt;br /&gt;
*ID 165100 - 165150: SD-Formation (https://sdformation.fr)&lt;br /&gt;
*ID 165151 - 165199: NUM&#039;X (https://www.numx-sets.eu)&lt;br /&gt;
*ID 165200 - 165249: Benjam Préjent (https://www.benjam-prejent.fr)&lt;br /&gt;
*ID 165250 - 165299: Dhi Loka Private Limited, India (https://www.dhiloka.com)&lt;br /&gt;
*ID 165300 - 169999: Accellier Limited (https://www.accellier.com/)&lt;br /&gt;
*ID 170000 - 170999: TRIDENT CONSULTING LTD (www.tridentdxb.com)&lt;br /&gt;
*ID 171000 - 171999: LVSInformatique (www.lvsinformatique.com)&lt;br /&gt;
*ID 172000 - 172299: Ray Soft-Systems (https://www.ray-soft-systems.com)&lt;br /&gt;
*ID 172300 - 172349: Günter Lukas Consulting (https://gl.co.at)&lt;br /&gt;
*ID 172350 - 172399: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 172400 - 172449: Professional Structures Limited (https://pstructures.com)&lt;br /&gt;
*ID 172450 - 172699: IT-BS (https://www.it-bs.fr)&lt;br /&gt;
*ID 172700 - 172749: Indelog (https://www.indelog.fr)&lt;br /&gt;
*ID 172750 - 172799: NS-INFO90 (https://www.ns-info90.fr)&lt;br /&gt;
*ID 172800 - 172849: E-Concept Applications (https://e-concept-applications.fr)&lt;br /&gt;
*ID 172850 - 179999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 180000 - 180999: Triangle Ingénierie&lt;br /&gt;
*ID 181000 - 181999: TI Sin Problemas (https://www.tisinproblemas.com)&lt;br /&gt;
*ID 182000 - 182049: Chipserv Pawel Wlizlo (https://www.testware.it)&lt;br /&gt;
*ID 182050 - 182999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 183000 - 183999: BB2A Anthony Berton (https://www.bb2a.fr)&lt;br /&gt;
*ID 184000 - 184999: DPS PRINTING &amp;amp; DOCUMENTS SOCIEDAD ANONIMA (https://www.dps-lat.com)&lt;br /&gt;
*ID 185000 - 185049: Telioskour (https://github.com/telioskour)&lt;br /&gt;
*ID 185050 - 189999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 190000 - 190999: Diciannove (http://19.coop)&lt;br /&gt;
*ID 191000 - 191999: Elonet (https://elonet.fr)&lt;br /&gt;
*ID 192000 - 192049: IDFOR Consulting (https://www.idfor-consulting.fr/)&lt;br /&gt;
*ID 192050 - 198999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 199000 - 199999: RFMS&lt;br /&gt;
*ID 200000 - 200999: Noxiome&lt;br /&gt;
*ID 201000 - 201999: Sasa Ostrouska (saxa)&lt;br /&gt;
*ID 202000 - 202999: Z-Application&lt;br /&gt;
*ID 203000 - 203099: Elidee - elidee.com&lt;br /&gt;
*ID 203100 - 203999: Garcia MICHEL (soamichel.fr)&lt;br /&gt;
*ID 204000 - 204999: Ari Elbaz elarifr - accedinfo.com&lt;br /&gt;
*ID 205000 - 205999: Kreiz IT&lt;br /&gt;
*ID 206000 - 206999: GBINFO (www.gbinfo.fr)&lt;br /&gt;
*ID 207000 - 207099: MacroProg (https://www.macroprog.com)&lt;br /&gt;
*ID 207100 - 207149: Reactiva Software&lt;br /&gt;
*ID 207150 - 207199: Ndejje University Water Research and Development Centre ([https://github.com/NDUWRDC/LIMS/])&lt;br /&gt;
*ID 207200 - 207299: Massaoud Bouzenad ([https://www.dzprod.net dzprod.net])&lt;br /&gt;
*ID 207300 - 207349: Ksar&lt;br /&gt;
*ID 207350 - 207399: Easylinux (www.easylinux.fr)&lt;br /&gt;
*ID 207400 - 207449: Arthur LENOBLE&lt;br /&gt;
*ID 207450 - 212099: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 212100 - 212149: Audio Vidéo Technologies (https://www.avtek.fr)&lt;br /&gt;
*ID 212150 - 221999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 222000 - 222999:  dolibit  (https://www.dolibit.de)&lt;br /&gt;
*ID 223000 - 223049: Tráfico Canada&lt;br /&gt;
*ID 223050 - 229949: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 229950 - 229999: Solucions Informàtiques, Serveis i Innovació SLU (https://6innova.es)&lt;br /&gt;
*ID 230000 - 230049: Unareil (https://www.unareil.eu)&lt;br /&gt;
*ID 230050 - 230099: Lyra Network (https://www.lyra.com/)&lt;br /&gt;
*ID 230100 - 230149: Gheorghe Iftimi - CTW - RO&lt;br /&gt;
*ID 230150 - 230199: MEMA Machinery &amp;amp; Tools (https://www.mema.be)&lt;br /&gt;
*ID 230200 - 230249: Teleassist&lt;br /&gt;
*ID 230250 - 230299: Nh Developer&lt;br /&gt;
*ID 230300 - 230499: Chickenforce/code-chicken, IT Services Hahn (https://github.com/code-chicken [http://itservices-hahn.de/ https://itservices-hahn.de])&lt;br /&gt;
*ID 230500 - 230549: Hidup Consulting (https://consulting.hidup.io)&lt;br /&gt;
*ID 230550 - 230599 : CMR Conseil (https://www.weblockup.fr)&lt;br /&gt;
*ID 230600 - 230649 : aFreeMind Studio&lt;br /&gt;
*ID 230650 - 230699 : Unideal (https://www.uni-deal.com)&lt;br /&gt;
*ID 230700 - 230749 : DevLansdes (https://devlandes.com/)&lt;br /&gt;
*ID 230750 - 262699: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 262700 - 262799: Scopen (https://www.scopen.fr)&lt;br /&gt;
*ID 262800 - 274249: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 274250 - 274299: Nerv Project (www.nerv-project.eu)&lt;br /&gt;
*ID 274300 - 274349: Knowhere Consulting S.L. (https://www.knowhere-consulting.eu)&lt;br /&gt;
*ID 274350 - 274399: Milen karaganski (https://blacktiehost.com)&lt;br /&gt;
*ID 274400 - 274449: Vincent MAURY ([https://www.timgroup.fr www.timgroup.fr])&lt;br /&gt;
*ID 274450 - 274499: Daraelmin&lt;br /&gt;
*ID 274500 - 274549: Emilie LAFORET (http://www.ermvallon.com)&lt;br /&gt;
*ID 274550 - 278999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 279000 - 279049: VSDigital Electronics (https://vsdigital.ar) - Argentina&lt;br /&gt;
*ID 279050 - 279999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 280000 - 280049: Bingroup (https://www.beinng.com)&lt;br /&gt;
*ID 280050 - 280099: Medialta (https://medialta.com)&lt;br /&gt;
*ID 280100 - 280149: Cédric Ancelin - Ancode (https://www.dolistore.com/fr/recherche?search_query=ancode)&lt;br /&gt;
*ID 280150 - 289999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 290000 - 290099: BNS - Project doliBRA ([https://www.beinng.com https://www.bns.net.br]) - Brasil&lt;br /&gt;
*ID 290100 - 299999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 300000 - 300049: RapidProgress (https://www.rapidprogress.eu) - Bulgaria&lt;br /&gt;
*ID 300050 : 300099: M@ Solution (https://www.ma-solution.fr/)&lt;br /&gt;
*ID 300100 : 300149: LAVA RUN (https://www.lavarun.re)&lt;br /&gt;
*ID 300150 - 300199: PsyCrow Code&lt;br /&gt;
*ID 300200 : 300249 : Computences (https://www.computences.com/)&lt;br /&gt;
*ID 300250 : 300299 : LEVEL IT (https://levelit.com.ar)&lt;br /&gt;
*ID 300300 : 300349 : Progiseize (https://progiseize.fr)&lt;br /&gt;
*ID 300350 - 300399: MB Informatique (https://www.mb-informatique.fr)&lt;br /&gt;
*ID 300400 - 300449: Anouar Touati&lt;br /&gt;
*ID 300450 - 300499: Martin Danger&lt;br /&gt;
*ID 300500 - 301499: Whale Blows&lt;br /&gt;
*ID 301500 - 301549: Tom Trust - International&lt;br /&gt;
*ID 301550 - 302499: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 302500 - 302549: Diamubi (https://diamubi.com)&lt;br /&gt;
*ID 302550 - 302599: Datolab (https://www.datolab.com)&lt;br /&gt;
*ID 302600 - 302649: DuMaCo (https://www.dumaco.de)&lt;br /&gt;
*ID 302650 - 302699: Resilio SA&lt;br /&gt;
*ID 302700 - 302749: Aroga&lt;br /&gt;
*ID 302750 - 302799: Productivix (https://www.productivix.com)&lt;br /&gt;
*ID 302800 - 302849: Slibzz&lt;br /&gt;
*ID 302850 - 302899: idea design (https://ideadesign.dz)&lt;br /&gt;
*ID 302900 - 302949: AL MISBAH INFORMATIQUE (https://www.almisbah.ma)&lt;br /&gt;
*ID 302950 - 302999: Atis Solutions - France&lt;br /&gt;
*ID 303000 - 303499: Obixav - Nigeria&lt;br /&gt;
*ID 303500 - 303549: buschler plus GmbH, Germany (https://buschler.plus)&lt;br /&gt;
*ID 303550 - 303599: Prestalidaire - France (https://prestalidaire.com)&lt;br /&gt;
*ID 303600 - 309999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 310000 - 310049: Neilson Dufour (&amp;lt;nowiki&amp;gt;https://hypercode.ca&amp;lt;/nowiki&amp;gt;)&lt;br /&gt;
*ID 310050 - 313999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 314000 - 314049: Ruemmler IT Solutions (https://www.ruemmler.net)&lt;br /&gt;
*ID 314050 - 314149: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 314150 - 314199: Benoît PASCAL&lt;br /&gt;
*ID 314200 - 319999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 320000 - 320999: Novus Studios (www.novusstudios.it)&lt;br /&gt;
*ID 321000 - 321999: AtooNet (http://www.atoo-net.com)&lt;br /&gt;
*ID 322000 - 329999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 330000 - 330049: XTEC Industries (www.xtec-ind.com)&lt;br /&gt;
*ID 330050 - 330099: 10100 S.R.L. - (www.10100.to)&lt;br /&gt;
*ID 330100 - 330149: AES Dana SRL (https://aes-dana.be)&lt;br /&gt;
*ID 330150 - 330199: Freshcore (https://www.freshcore.fr)&lt;br /&gt;
*ID 330200 - 331999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 332000 - 332099: Gecka (https://gecka.nc)&lt;br /&gt;
*ID 332100 - 332149: Agence Milkshake (http://agencemilkshake.com)&lt;br /&gt;
*ID 332150 - 332199: Daniel Prowald IT – Service (https://prowald-it.de)&lt;br /&gt;
*ID 332200 - 332249: UNITICE (https://unitice.com)&lt;br /&gt;
*ID 332250 - 332299: Sidonie Moulart&lt;br /&gt;
*ID 332300 - 332349: LTDJ (Antonin MARCHAL - Le Temple du Jeu)&lt;br /&gt;
*ID 332350 - 333299: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 333300 - 333349: Sense Africa (http://sense.africa)&lt;br /&gt;
*ID 333350 - 349999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 350000 - 350049: SOUNDOU &amp;amp; MIDAS (https://www.soundou.org/)&lt;br /&gt;
*ID 350050 - 350099: Ildefonso González (&#039;&#039;&#039;https://igontek.es&#039;&#039;&#039;)&lt;br /&gt;
*ID 359000 - 359049: Milen Karaganski0&lt;br /&gt;
*ID 350100 - 399999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 400000 - 400999: 2byte.es (http://www.2byte.es)&lt;br /&gt;
*ID 401000 - 401999: B&amp;amp;D Informática&lt;br /&gt;
*ID 402000 - 402999: Marcos García de La Fuente (marcosgdf)&lt;br /&gt;
*ID 403000 - 403999: Sergibyte&lt;br /&gt;
*ID 404000 - 404999: Aikhan&lt;br /&gt;
*ID 405000 - 405999: AIME (http://www.aime.mx)&lt;br /&gt;
*ID 406000 - 406999: Som Núvol (https://somnuvol.coop)&lt;br /&gt;
*ID 407000 - 408999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 409000 - 409999: LliureTIC (https://www.lliuretic.cat)&lt;br /&gt;
*ID 410000 - 410999: DoliGov&lt;br /&gt;
*ID 411000 - 411049: GATTEK SARL (https://www.ga-ttek.com)&lt;br /&gt;
*ID 411050 - 419999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 420000 - 420099: BBS Concept&lt;br /&gt;
*ID 420100 - 420199: LeMousticProduction (www.lemousticproduction.info) -&amp;lt; module DoliRH&lt;br /&gt;
*ID 420200 - 421199: VatCheck (www.abnc.be)&lt;br /&gt;
*ID 421200 - 422199: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 422200 - 422999: Artaban (http://artaban.fr)&lt;br /&gt;
*ID 423000 - 423049: cyberesprit&lt;br /&gt;
*ID 423050 - 423099: R.Bossard&lt;br /&gt;
*ID 423100 - 423199: Joliciel (www.joliciel.fr)&lt;br /&gt;
*ID 423200 - 423299: Pragma-tech (www.pragma-tech.fr)&lt;br /&gt;
*ID 423299 - 423999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 424000 - 424049: A3sys - Mon-Dolibarr (http://www.mon-dolibarr.fr) by Philazerty&lt;br /&gt;
*ID 424050 - 424099: Pragma-tech (www.pragma-tech.fr)&lt;br /&gt;
*ID 424100 - 424149: Ohoo Solutions (http://www.ohoosolutions.com)&lt;br /&gt;
*ID 424150 - 424199: DAGARCAM Informática (https://www.dagarcam.com/)&lt;br /&gt;
*ID 424200 - 424999: Lab51 (https://github.com/lab51org)&lt;br /&gt;
*ID 425000 - 425999: Sébastien SERRE Thivinfo (www.thivinfo.com)&lt;br /&gt;
*ID 426000 - 426099: Arkesis-Solution&lt;br /&gt;
*ID 426100 - 426149: GetLandy (www.getlandy.com)&lt;br /&gt;
*ID 426150 - 426649: OOB Software&lt;br /&gt;
*ID 426650 - 426849: Soft-Task Serviços e Sistemas (www.soft-task.com.br)&lt;br /&gt;
*ID 426850 - 426999: Bruno Caldas (https://github.com/BCaldas)&lt;br /&gt;
*ID 427000 - 427999: Kevin GUERRIER (alias xcl.saian)&lt;br /&gt;
*ID 428000 - 428099: af83&lt;br /&gt;
*ID 428100 - 428199: Arnaud Serrut - Adalon&lt;br /&gt;
*ID 428200 - 428249: imschweiler consulting (http://www.imschweiler-consulting.de&#039;&#039;&#039;&amp;lt;nowiki/&amp;gt;&#039;&#039;&#039;)&lt;br /&gt;
*ID 428250 - 428299: AL1FO&lt;br /&gt;
*ID 428300 - 428349: Federico García-Patiño Barbolani (&amp;lt;federico.garcia.patino@gmail.com&amp;gt;)&lt;br /&gt;
*ID 428350 - 428399: INTM Groupe - France (www.intm.com)&lt;br /&gt;
*ID 428400 - 428449: Nick Fragoulis - Greece&lt;br /&gt;
*ID 428450 - 428499: Letusgeek - France&lt;br /&gt;
*ID 428500 - 428549: hkwhitten - USA&lt;br /&gt;
*ID 428550 - 428999: SmartOne&lt;br /&gt;
*ID 429000 - 429999: induslab&lt;br /&gt;
*ID 430000 - 430099: Mixity sprl (www.mixity.be)&lt;br /&gt;
*ID 430100 - 430199: sgiraud&lt;br /&gt;
*ID 430200 - 430299: Merlion TI (www.merlion-si.com.br)&lt;br /&gt;
*ID 430300 - 431299: Libre Expert (www.libre-expert.com)&lt;br /&gt;
*ID 431300 - 431399: ptibogxiv (www.ptibogxiv.net)&lt;br /&gt;
*ID 431400 - 431499: Befox (www.befox.fr)&lt;br /&gt;
*ID 431500 - 431599: rue Béjo (www.ruebejo.fr)&lt;br /&gt;
*ID 431600 - 431699: Avizzeo (www.avizzeo.com)&lt;br /&gt;
*ID 431700 - 432199: Multisistemas (www.multisistemas.com.sv)&lt;br /&gt;
*ID 432200 - 432399: Burbuja - Chile (www.burbuja.cl)&lt;br /&gt;
*ID 432400 - 433399: INOVEA CONSEIL (https://www.inovea-conseil.com)&lt;br /&gt;
*ID 433400 - 434399: Rachid HRICH - Maroc (HricH ServiceS.)&lt;br /&gt;
*ID 434400 - 435399: Lance Bleakley - LanceIT (www.lanceit.net)&lt;br /&gt;
*ID 435400 - 435999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 436000 - 436099: SOWEBIO (www.soweb.io)&lt;br /&gt;
*ID 436100 - 436199: CAP-REL (www.cap-rel.fr)&lt;br /&gt;
*ID 436200 - 436300: TDE-INFORMATIQUE (www.tde-informatique.fr)&lt;br /&gt;
*ID 436301 - 436349: Evarisk ([https://www.evarisk.com/id-module-dolibarr/ www.evarisk.com])&lt;br /&gt;
*ID 436350 - 436399: Eoxia ([https://www.eoxia.com/dolibarr/modules/ www.eoxia.com])&lt;br /&gt;
*ID 436400 - 437399: Mohamed AHERDANE - Morocco - IT Consultant ( www.wave.ma )&lt;br /&gt;
*ID 437400 - 437449: Martin Neubauer - Germany&lt;br /&gt;
*ID 437450 - 437599: Club1click (www.club1click.es)&lt;br /&gt;
*ID 437600 - 437629: Coulon Vincent (https://github.com/HoverEpic)&lt;br /&gt;
*ID 437630 - 437649: Aytechnet (https://www.aytechnet.fr/) - François Pons&lt;br /&gt;
*ID 437650 - 437699: LibreMaster (https://libremaster.com) - Christophe T.&lt;br /&gt;
*ID 437700 - 437749: STELLAR Broadband (https://www.stellarbb.com) - U.S.A. - Philip Laycock&lt;br /&gt;
*ID 437750 - 437799: DIGITA.LU Ajous Solutions&lt;br /&gt;
*ID 437800 - 437850: iProspective (https://iprospective.fr) - Mathieu Moulin&lt;br /&gt;
*ID 437851 - 437900: Theobald Groupe.&lt;br /&gt;
*ID 437901 - 437950: Neuronnexion (http://neuronnexion.coop)&lt;br /&gt;
*ID 437951 - 437952: jmbc - APIA-ASSO (https://www.apia-asso.fr)&lt;br /&gt;
*ID 437953 - 438002: IPCZEN SARL (https://www.ipczeninformatique.fr/)&lt;br /&gt;
*ID 438003 - 438052: FESF IT Department (https://fesf.org.pk)&lt;br /&gt;
*ID 438053 - 438103: Pilot Engineering team&lt;br /&gt;
*ID 438104 - 438153: u2042 (https://u2042.com)&lt;br /&gt;
*ID 438154 - 438204: Djair E Pereira (ocultooooo@gmail.com) - Brasil&lt;br /&gt;
*ID 438205 - 438255: yoandm (https://yoandm.com)&lt;br /&gt;
*ID 438256 - 438299: Free&lt;br /&gt;
*ID 438300 - 438399: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 438400 - 439399: Tetras Libre - France - Développement logiciels libres (www.tetras-libre.fr)&lt;br /&gt;
*ID 439400 - 440399: Dolibarr-pro - France - Développement Dolibarr (www.dolibarr-pro.com)&lt;br /&gt;
*ID 440400 - 441399: Quidlab Co., Ltd - Thailand - ( www.quidlab.com )&lt;br /&gt;
*ID 441400 - 442399: Ide@log - France - (https://www.idealog-info.net) - Laurent Leblanc&lt;br /&gt;
*ID 442400 - 443399: Valerio Bianchi (www.valeriobianchi.com)&lt;br /&gt;
*ID 443400 - 444399: delassalle - France - (www.delassalle.fr) - Joseph Delassalle&lt;br /&gt;
*ID 444400 - 445399: Webartis - Maroc - (www.webartis.net) - François Dry&lt;br /&gt;
*ID 445400 - 445499: SCOP Au-delà des nuages - France&lt;br /&gt;
*ID 445500 - 445549: X Net Systems - Egypt - (https://www.xneteg.com)&lt;br /&gt;
*ID 445550 - 445999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 446000 - 446999: iouston (http://www.iouston.com) - France - Julien Marchand&lt;br /&gt;
*ID 447000 - 447999: rSanjoSEO - Rafael San José Tovar (www.rsanjoseo.com) - Spain&lt;br /&gt;
*ID 448000 - 448999: Code 42 (www.code42.fr)&lt;br /&gt;
*ID 449000 - 449999: TakePOS (www.takepos.com)&lt;br /&gt;
*ID 450000 - 450999: Pierre ARDOIN&lt;br /&gt;
*ID 451000 - 451999: Éditeur depordi.fr&lt;br /&gt;
*ID 452000 - 452999: Dylan NAKONG&lt;br /&gt;
*ID 453000 - 453999: Menahd Ouchenir - France - menahd-ouchenir.com&lt;br /&gt;
*ID 454000 - 454999: Withheld - Canada&lt;br /&gt;
*ID 455000 - 455999: Gaëtan MAISON - Info Libre @ Dom - France (https://www.infolibreadom.com)&lt;br /&gt;
*ID 456000 - 456999: Laurent LEBLEU - B.L.C. - Blue Line Company - Lille - France (www.bluelinecompany.fr/dolibarr)&lt;br /&gt;
*ID 457000 - 457999: Sébastien BOUCHER&lt;br /&gt;
*ID 458000 - 458999: Lester HERNÁNDEZ - Argentina - (freelancerlrhd@gmail.com)&lt;br /&gt;
*ID 459000 - 459999: Infopen - France&lt;br /&gt;
*ID 460000 - 460049: torvista - Spain&lt;br /&gt;
*ID 460050 - 460999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 461000 - 461999: MEGALOGI - Maroc (www.erpcloud.ma)&lt;br /&gt;
*ID 462000 - 462999: Making Digital (www.making-digital.fr) - France&lt;br /&gt;
*ID 463000 - 463999: linx s.r.l.s.&lt;br /&gt;
*ID 464000 - 464999: NimbleCubed Inc. (www.nimblecubed.com)&lt;br /&gt;
*ID 465000 - 465999: Artefacts - CourantAlternatif&lt;br /&gt;
*ID 466000 - 466999: CDM Consultores - (www.cdm.guru)&lt;br /&gt;
*ID 467000 - 467999: M71 Service GmbH - (www.m71-service.de)&lt;br /&gt;
*ID 468000 - 468049: Clément Segonzac - France (clement.segonzac@gmail.com)&lt;br /&gt;
*ID 468050 - 468099: Flavien Belli - France (https://github.com/Marshlyin || belliflaviencontactpro@gmail.com)&lt;br /&gt;
*ID 468100 - 468119: Chl (https://code.bugness.org/Dolibarr)&lt;br /&gt;
*ID 468120 - 468169: Commotron GmbH (https://www.commotron.com/)&lt;br /&gt;
*ID 468170 - &#039;&#039;&#039;468219&#039;&#039;&#039;: Infans Group (franck.lauby@infans.fr)&lt;br /&gt;
*ID &#039;&#039;&#039;468175&#039;&#039;&#039; - &#039;&#039;&#039;468199&#039;&#039;&#039;: Gaëlle Rauffet - France (kiwiscan.net)&lt;br /&gt;
*ID &#039;&#039;&#039;468200&#039;&#039;&#039; - 468249: Paulo Oliveira - Brasil (paulorcdo@gmail.com)&lt;br /&gt;
*ID 468250 - 468269:  CD-Systems - France (https://www.cd-systems.fr)&lt;br /&gt;
*ID 468270 - 468299: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 468300 - 468349: Uvensys - Germany (https://uvensys.de)&lt;br /&gt;
*ID 468350 - 468399: Laudeco - Belgium (http://github.com/laudeco)&lt;br /&gt;
*ID 468400 - 468449: Alexis LAURIER - France (https://www.alexislaurier.fr)&lt;br /&gt;
*ID 468450 - 468499: Mehdi Belkhayat - Maroc (https://opensi.ma)&lt;br /&gt;
*ID 468500 - 468599: InvIT GmbH - Germany (https://invit.sh)&lt;br /&gt;
*ID 468600 - 468649: Ricardo Sequeira - Portugal (https://ricardo-sequeira.com)&lt;br /&gt;
*ID 468650 - 468699: J-IT - Belgique (https://www.j-it.be)&lt;br /&gt;
*ID 468700 - 468749: Fidesio - France (https://www.fidesio.com/)&lt;br /&gt;
*ID 468750 - 468799: Sgestion - Spain (http://www.sgestion.net/)&lt;br /&gt;
*ID 468800 - 468849: Denis JULIEN - Brasil (matrinxa@free.fr)&lt;br /&gt;
*ID 468850 - 468899: Mmariko - Module GED - Effios&lt;br /&gt;
*ID 468900 - 468949: Maazou Amadou Abdoul aziz - Maroc (yaronfada@gmail.com)&lt;br /&gt;
*ID 468950 - 468999: Alexis LAURIER - France (https://www.alexislaurier.fr)&lt;br /&gt;
*ID 469000 - 469049: John Livingston (https://github.com/JohnXLivingston/)&lt;br /&gt;
*ID 469050 - 469099: Macrorom ICT-services (https://macrorom.nl/)&lt;br /&gt;
*ID 469100 - 469149: HABOT IT - France (https://habot.it)&lt;br /&gt;
*ID 469150 - 469159: CaribbeanConsult.Com CCC - France Guadeloupe (https://dolibarr.ccc.gp)&lt;br /&gt;
*ID 469160 - 469171: GMBG - Portugal&lt;br /&gt;
*ID 469172 - 469199: BGi Lda - Portugal&lt;br /&gt;
*ID 469200 - 469949: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 469950 - 469999: Goldoweb (http://goldoweb.com)&lt;br /&gt;
*ID 470000 - 470999: Reindeer Digital (https://rdeer.cz)&lt;br /&gt;
*ID 471000 - 471099: CAP-REL (www.cap-rel.fr)&lt;br /&gt;
*ID 471100 - 471199: M. Morillon&lt;br /&gt;
*ID 471200 - 471209: Pablo Nuñez&lt;br /&gt;
*ID 471210 - 471249: FANEL A.Ş  (https://www.fanel.com.tr)  [[mail@fanel.com.tr]]&lt;br /&gt;
*ID 471250 - 480999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 481000 - 481999: Alhaidab-ITIS (https://alhaidab.dolibarr.sd)&lt;br /&gt;
*ID 482000 - 482999: Basix IT (https://www.basix.de)&lt;br /&gt;
*ID 483000 - 483049: SASCO SpA (https://www.sasco.cl)&lt;br /&gt;
*ID 483050 - 483099: WIP Engineering (https://www.wip-gmbh.com)&lt;br /&gt;
*ID 483100 - 483149: J.Kaiser&lt;br /&gt;
*ID 483150 - 483199: CodLines (https://www.codlines.com)&lt;br /&gt;
*ID 483200 - 484999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 485000 - 485049: Gest Info Service Plus (contact@gest-plus.fr)&lt;br /&gt;
*ID 485050 - 489999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 490000 - 490049: VOLD (https://vold.lu)&lt;br /&gt;
*ID 490050 - 490999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 491000 - 491049: NORD ERP CRM (https://www.nord-erp-crm.fr/)&lt;br /&gt;
*ID 491050 - 491099: KJR-online (https://kjr-online.fr/)&lt;br /&gt;
*ID 491100 - 491149: eNova&lt;br /&gt;
*ID 491150 - 491199: App 4 Business&lt;br /&gt;
*ID 491200 - 491249: Mil24 (http://www.mil24.com.py)&lt;br /&gt;
*ID 491250 - 491299: M2AM&lt;br /&gt;
*ID 491300 - 491349: luigifab (https://github.com/luigifab), also reuse id:105009 for Sentry fork&lt;br /&gt;
*ID 491350 - 491399: Frédéric France (https://github.com/frederic34)&lt;br /&gt;
*ID 491400 - 491449: E-dem (https://www.e-dem.com/)&lt;br /&gt;
*ID 491450 - 491499: Burofree (https://burofree.es)&lt;br /&gt;
*ID 491500 - 491549: EMDELEN (https://emdelen.fr/)&lt;br /&gt;
*ID 491550 - 491599: eSoUrCeS Technologie (https://techno.esources.ca/) - Canada&lt;br /&gt;
*ID 491600 - 491999: &#039;&#039;&#039;Free (take ranges of 50 only please at once, ask us for more)&#039;&#039;&#039;&lt;br /&gt;
*ID 492000 - 492999: Anura (https://www.anura.fr/)&lt;br /&gt;
*ID 493000 - 493050: Bourez Bastien EI (https://bastien-b.fr/)&lt;br /&gt;
*ID 499000 - 499999: IT GENIUSES (https://www.itgeniuses.com)&lt;br /&gt;
&lt;br /&gt;
DO NOT ADD RECORD HERE, PLEASE FILL HOLES FIRST !!!!&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
=ID &amp;gt; 500000=&lt;br /&gt;
&lt;br /&gt;
This range can&#039;t be reserved. It is a common range. If you don&#039;t plan to distribute your module, you can use an ID in this range with no need to reserve it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t already have reserved ids and need some, please don&#039;t use hazardous number and use a number higher than 500000, but it is better to ask a wiki account, and reserve your own range by editing the  100000 - 499999 range (50 ids at once).&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Langages_et_normes&amp;diff=58675</id>
		<title>Langages et normes</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Langages_et_normes&amp;diff=58675"/>
		<updated>2023-11-09T13:51:40Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: /* PHP */ remplacement par le bon nom de variable $_COOKIE au lieu de $_COOKIES&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Language_and_development_rules --&amp;gt;&lt;br /&gt;
[[en:Language_and_development_rules]]&lt;br /&gt;
[[de:Sprachen_und_Programmierregeln]]&lt;br /&gt;
[[es:Lenguaje_y_Normas_de_Desarrollo]]&lt;br /&gt;
[[zh:语言和开发规则]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TemplateDocDev}}&lt;br /&gt;
&lt;br /&gt;
Voici les quelques règles sur le langage, la syntaxe et normes de développement en vigueur pour le projet Dolibarr :&lt;br /&gt;
&lt;br /&gt;
=Versions=&lt;br /&gt;
&lt;br /&gt;
*Dolibarr doit fonctionner sur:&lt;br /&gt;
&lt;br /&gt;
#Tous OS (Windows, Linux, MACOS...)&lt;br /&gt;
#PHP {{PHPMinVersion}} (Doit fonctionner sans aucun module PHP complémentaire hors les modules d&#039;accès base de donnée).&lt;br /&gt;
#Mysql {{MySqlMinVersion}}&lt;br /&gt;
&lt;br /&gt;
=Normes Copyright=&lt;br /&gt;
&lt;br /&gt;
*Tout fichier PHP doit avoir un en-tête selon le masque suivant&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/* Copyright (C) YYYY John Doe  &amp;lt;email@email.com&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * Licence information&lt;br /&gt;
 */&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Quand vous éditez un fichier existant du projet, ajouter une ligne Copyright sous celles existantes.&lt;br /&gt;
&lt;br /&gt;
=Normes PHP=&lt;br /&gt;
&lt;br /&gt;
==PHP==&lt;br /&gt;
&lt;br /&gt;
*Dolibarr est écrit en PHP et supporte toutes versions PHP supérieures à la {{PHPMinVersion}}. Les fichiers doivent tous comporter l&#039;extension .php&lt;br /&gt;
&lt;br /&gt;
*L&#039;appel aux variables superglobales PHP doit passer par les opérateurs dédiés $_COOKIE, $_SERVER, $_ENV. Mais pour récupérer les contenus de $_GET ou $_POST, il faut passer par la fonction dolibarr [[Fonctions utiles Dolibarr|GETPOST()]] ou [[Fonctions utiles Dolibarr|GETPOSTINT()]] .&lt;br /&gt;
&lt;br /&gt;
Les autres opérateurs ($HTTP_SERVER_GET, ...) ayant été passés en deprecated au sein de PHP, ne doivent plus être utilisés. Ainsi le code doit fonctionner y compris quand l&#039;option &#039;&#039;&#039;register_long_arrays&#039;&#039;&#039; est à off.&lt;br /&gt;
De plus, le code doit fonctionner aussi bien quand l&#039;option PHP &#039;&#039;&#039;register_globals&#039;&#039;&#039; est à off (recommandé par PHP)  que quand l&#039;option &#039;&#039;&#039;register_globals&#039;&#039;&#039; est à on (par défaut sur de nombreuses installations).&lt;br /&gt;
&lt;br /&gt;
*Pas d&#039;utilisation de la variable &#039;&#039;&#039;PHP_SELF&#039;&#039;&#039;. Utiliser à la place $_SERVER[&amp;quot;PHP_SELF&amp;quot;]. Notez aussi que le framework Dolibarr passe une routine pour rendre plus sûr le contenu du $_SERVER[&amp;quot;PHP_SELF&amp;quot;] (dans le fichier main.inc.php, donc avant tout traitement métier)&lt;br /&gt;
&lt;br /&gt;
*Quand plusieurs variables doivent être initialisées avec la même valeur, il faut utiliser plusieurs instructions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$var1 = 1; $var2 = 1; $var3 = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
plutôt que&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$var1 = $var2 = $var3 = 1;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
qui est moins performant.&lt;br /&gt;
&lt;br /&gt;
*Les chaines doivent avoir les variables sorties de la chaine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
print &amp;quot;Mon texte affiche ma &amp;quot;.$variable.&amp;quot; !\n&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Les commentaires doivent suivre la syntaxe C, ie un double antislash pour un commentaire d&#039;une ligne et utilisation slash-étoile pour ouvrir un bloc de plusieurs lignes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
/* Bloc de commentaire&lt;br /&gt;
 *&lt;br /&gt;
 * Fin du bloc&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
$monobjet = new MonObjet($db);&lt;br /&gt;
$result=$monobjet-&amp;gt;fetch($idobject);&lt;br /&gt;
&lt;br /&gt;
for ($i = 1 , $i &amp;lt; 2 ; $i++)&lt;br /&gt;
{&lt;br /&gt;
  // commentaire sur une ligne&lt;br /&gt;
  print $i;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Les fonctions doivent retourner une valeur strictement &amp;gt; à 0 en cas de succès, et un nombre &amp;lt; à 0 en cas d&#039;erreur.&lt;br /&gt;
&lt;br /&gt;
*Pas de code mort (non utilisé) dans le code principal de Dolibarr (le code utilisé uniquement par un module externe doit être inclus dans le module externe).&lt;br /&gt;
&lt;br /&gt;
*Utiliser &amp;quot;include_once&amp;quot; pour l&#039;inclusion de tout fichier contenant des définitions de fonction ou de classes (donc fichiers *.class.php et *.lib.php), utiliser &amp;quot;include&amp;quot; pour tout inclusion de fichier de type template ou contenant un mixte de HTML et PHP (donc fichiers *.inc.php et *.tpl.php).&lt;br /&gt;
&lt;br /&gt;
*Le style de code a utiliser est le PSR-12 (https://www.php-fig.org/psr/psr-12/). Seules les règles &amp;quot;MUST&amp;quot; sont imposées. Notez aussi les points/exceptions suivants:&lt;br /&gt;
**La longueur des lignes: PSR-12 indique que la longueur des lignes a une limite &amp;quot;soft&amp;quot; à 120. Il est en effet préférable d&#039;avoir de longues lignes de données de déclaration plutôt que de longues pages car ce code ne contient aucune logique intéressante ou utile, toutefois une limite &amp;quot;hard&amp;quot; a été instauré à &#039;&#039;&#039;1000&#039;&#039;&#039; caractères. Du code qui ira au delà provoquera des erreurs dans la plateforme d&#039;Intégration Continue.&lt;br /&gt;
**Les tabulations sont acceptées : L&#039;autre exception est qu&#039;on ne remplace pas les tabulations systématiquement par des espaces. L&#039;utilisation des tabulations simplifie la vie de certains développeurs. De plus, l&#039;utilisation d&#039;espaces rend certaines fonctions d&#039;autoformatage défectueuses (comme sur certaines versions d&#039;Eclipse, lors de copier-coller).&lt;br /&gt;
**Note 1: Les règles suivantes sont particulièrement importantes :&lt;br /&gt;
***Les fichiers doivent être sauvés en format Unix (LF) et non Windows (CR/LF). Le format Unix étant compatible sur les OS Unix like, Windows, Mac, alors que le format fichier texte Windows pose problème sous certains PHP sous Unix.&lt;br /&gt;
***Les smart tags PHP ne sont pas utilisés. Les sections de code doivent commencer par &#039;&#039;&#039;&amp;lt;?php&#039;&#039;&#039;&lt;br /&gt;
**Note 2: Vous pouvez utiliser le fichier &#039;&#039;&#039;dev/setup/codesniffer/ruleset.xml&#039;&#039;&#039; comme fichier de contrôle pour vérifier votre style de code avec PHPCodeSniffer.&lt;br /&gt;
**Note 3: Vous pouvez utiliser le fichier &#039;&#039;&#039;dev/setup/eclipse/PSR-12 [built-in].xml&#039;&#039;&#039; comme fichier de règles de syntax pour configurer Eclipse.&lt;br /&gt;
**Note 4: Vous remarquerez que le code actuel ne suit pas forcément tout cela. La raison est historique. La règle fut instaurée en cours de route, aussi, si vous trouvez du code non respectueux de ce standard, n&#039;hésitez pas à le corriger.&lt;br /&gt;
&lt;br /&gt;
==Structures des classes et champs==&lt;br /&gt;
&lt;br /&gt;
Certaines propriétés de classes se retrouvent dans de nombreuses classes. Pour homogénéité, on utilisera les noms suivants:&lt;br /&gt;
{{TemplatePHPFields}}&lt;br /&gt;
&lt;br /&gt;
=Normes SQL=&lt;br /&gt;
&lt;br /&gt;
==Structure des tables et champs==&lt;br /&gt;
&lt;br /&gt;
*Toutes les tables sont préfixées pour éviter les conflits de nommage. Aujourd&#039;hui, le préfixe est modifiable au moment de l&#039;installation. Sa valeur par défaut est &amp;lt;tt&amp;gt;llx_&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
*Structure des tables.&lt;br /&gt;
&lt;br /&gt;
Lorsque vous créez une table, il est recommandé de prendre les même conventions de nommages de tables que les autres tables Dolibarr. Avec, à minima les champs suivant:&lt;br /&gt;
 - rowid INTEGER AUTO_INCREMENT PRIMARY KEY    qui est l&#039;id technique&lt;br /&gt;
 - entity INTEGER default 1                    that is id for the multicompany feature&lt;br /&gt;
 - date_creation   datetime                    that is the creation date&lt;br /&gt;
 - tms             timestamp                   qui sera un champ contenant la date de chaque mise à jour (la base de donnée le gère tout seul, pas besoin de le gérer par le code)&lt;br /&gt;
 - import_key      varchar(32)                 qui contiendra le code d&#039;import YYYYMMDDHHMMSS si vous faites des imports en masse dans la table.&lt;br /&gt;
 - status          smallint                    pour stocker le status d&#039;un object&lt;br /&gt;
&lt;br /&gt;
Eventuellement&lt;br /&gt;
 - fk_user_creat  integer qui est l&#039;id du user de création (fk_user_author also found)&lt;br /&gt;
 - fk_user_modif  integer qui est l&#039;id du user de modification&lt;br /&gt;
 - fk_user_valid  integer qui est l&#039;id du user de validation&lt;br /&gt;
 - fk_soc integer qui est l&#039;id du tiers (si applicable)&lt;br /&gt;
&lt;br /&gt;
*Type des champs&lt;br /&gt;
&lt;br /&gt;
Dans la pratique, afin d&#039;être compatible avec toutes les précisions des pays, syntaxes des bases, on utilisera uniquement les types suivants:&lt;br /&gt;
 - integer pour tout nombre entier, id ou clé étrangère (bigint éventuellement accepté pour les id des très grosses tables)&lt;br /&gt;
 - smallint pour tout numérique entier de petite taille (comme pour stocker un code de status)&lt;br /&gt;
 - double(24,8) pour tout montant&lt;br /&gt;
 - double(6,3) pour les taux de tva&lt;br /&gt;
 - real pour une quantité&lt;br /&gt;
 - varchar pour une chaîne (y compris de longueur 1, le type char est de plus en plus déprécié)&lt;br /&gt;
 - timestamp pour un champ date+heure devant être mis a jour automatiquement&lt;br /&gt;
 - datetime pour un champ date+heure&lt;br /&gt;
 - date pour un champ date&lt;br /&gt;
&lt;br /&gt;
==Clé primaire==&lt;br /&gt;
La clé primaire d&#039;une table s&#039;appelle &amp;lt;tt&amp;gt;rowid&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il y a quelques tables qui échappent à cette règle actuellement (ex [[Table llx_c_actioncomm]]), pour des raisons historiques. Une évolution pourra être étudiée pour une prochaine version.&lt;br /&gt;
&lt;br /&gt;
==Clés étrangères==&lt;br /&gt;
Le nom d&#039;une clé étrangère commence par le préfixe &amp;lt;tt&amp;gt;fk_&amp;lt;/tt&amp;gt; suivi du nom de la table liée (requis pour éviter doublons globales à la base, problématiques sous certains SGBD comme postgresql) puis du champ lié (pour permettre plusieurs clés étrangères différentes sur une même table).&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
fk_facture_fourn_fk_soc&lt;br /&gt;
&lt;br /&gt;
Note: Si vous développez votre propre module externe, il ne doit pas y avoir de clé étrangère depuis vos tables qui pointent sur les tables standards de Dolibarr. Ceci casserait les fonctionnalités de mise à jour, de réparation, de sauvegardes et de restauration.&lt;br /&gt;
&lt;br /&gt;
==Clés alternatives==&lt;br /&gt;
Parfois, il n&#039;y a pas que la clé primaire qui doit être unique. On peut donc ajouter aussi un index clé alternative unique. Un tel index est nommé par un nom qui commence par le préfixe &amp;lt;tt&amp;gt;uk_&amp;lt;/tt&amp;gt; suivi du nom de la table (requis pour éviter doublons d&#039;index globals à la base, problématiques sous certains SGBD comme postgresql) puis d&#039;un suffixe qui caractérise la clé (pour permettre plusieurs index uniques sur une même table).&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
uk_societe_code_client&lt;br /&gt;
&lt;br /&gt;
==Index performance==&lt;br /&gt;
Certains champs sont souvent utilisés comme critère de recherche, de tri ou de jointure. Il convient dans ce cas, d&#039;y mettre un index de performance. De tels indexes seront nommés avec un préfix &amp;lt;tt&amp;gt;idx_&amp;lt;/tt&amp;gt; puis le nom de la table et le nom du champ sur lequel porte l&#039;index.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
idx_societe_user_creat&lt;br /&gt;
&lt;br /&gt;
==Format de fichier DDL==&lt;br /&gt;
Les fichiers qui contiennent la définition de la structure de la base (DDL) doivent être au nombre de 2 par tables:&lt;br /&gt;
Chaque table est définie dans son propre fichier dont le nom est &amp;lt;tt&amp;gt;llx_&#039;&#039;matable&#039;&#039;.sql&amp;lt;/tt&amp;gt;. &lt;br /&gt;
On mettra un commentaire à côté de chaque champ pour en expliquer la signification.&lt;br /&gt;
Les clés étrangères et index de performance ou autres contraintes d&#039;unicité sont définies dans un fichier séparé dont le nom est &amp;lt;tt&amp;gt;llx_&#039;&#039;matable&#039;&#039;.key.sql&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces fichiers sont placés dans le répertoire &#039;&#039;&#039;install/mysql/tables&#039;&#039;&#039; pour les fichiers standards ou &#039;&#039;&#039;monmodule/tables&#039;&#039;&#039; pour les tables amenées par un module.&lt;br /&gt;
&lt;br /&gt;
Exemple &#039;&#039;&#039;fichier table llx_matable.sql&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- Copyright (C) 2008 Author &amp;lt;email@author.com&amp;gt;&lt;br /&gt;
-- &lt;br /&gt;
-- This program is free software; you can redistribute it and/or modify&lt;br /&gt;
-- it under the terms of the GNU General Public License as published by&lt;br /&gt;
-- the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;
-- (at your option) any later version.&lt;br /&gt;
--&lt;br /&gt;
-- This program is distributed in the hope that it will be useful,&lt;br /&gt;
-- but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
-- GNU General Public License for more details.&lt;br /&gt;
--&lt;br /&gt;
-- You should have received a copy of the GNU General Public License&lt;br /&gt;
-- along with this program. If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
create table llx_matable&lt;br /&gt;
(&lt;br /&gt;
  rowid       integer AUTO_INCREMENT PRIMARY KEY,&lt;br /&gt;
  field_one   integer,&lt;br /&gt;
  field_two   integer NOT NULL,&lt;br /&gt;
  fk_field    integer,&lt;br /&gt;
  field_date  datetime,&lt;br /&gt;
  tms         timestamp&lt;br /&gt;
)ENGINE=innodb;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple &#039;&#039;&#039;fichier clés/index llx_matable.key.sql&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- Copyright (C) 2008 Author &amp;lt;email@author.com&amp;gt;&lt;br /&gt;
-- &lt;br /&gt;
-- This program is free software; you can redistribute it and/or modify&lt;br /&gt;
-- it under the terms of the GNU General Public License as published by&lt;br /&gt;
-- the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;
-- (at your option) any later version.&lt;br /&gt;
--&lt;br /&gt;
-- This program is distributed in the hope that it will be useful,&lt;br /&gt;
-- but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
-- GNU General Public License for more details.&lt;br /&gt;
--&lt;br /&gt;
-- You should have received a copy of the GNU General Public License&lt;br /&gt;
-- along with this program. If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE llx_matable ADD UNIQUE uk_matable_field(field_one, field_two);&lt;br /&gt;
&lt;br /&gt;
ALTER TABLE llx_matable ADD CONSTRAINT fk_matable_fk_field FOREIGN KEY (fk_field) REFERENCES llx_matablepere (rowid);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Règles de codage SQL==&lt;br /&gt;
&lt;br /&gt;
*Utilisation des alias/nommage de champs&lt;br /&gt;
&lt;br /&gt;
Dans le cas des select on pourra utiliser les alias pour simplifier l&#039;écriture des requêtes:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
select chp1, chpxxx2 as chp2 from table2 as t1, table2 as t2 where t1.chpx = t2.chpy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Toutefois, il ne faut pas utiliser ces alias sur des requêtes update car non compatible avec mysql 3.1.&lt;br /&gt;
&lt;br /&gt;
*Les SELECT * sont interdits ! Chaque SELECT doit spécifier la liste complète des champs à récupérer. Cela permet d&#039;éviter les confusions. Exemple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT field_a, field_b, field_c FROM table_1 WHERE field_d = &#039;$id&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Dans les requêtes SQL, on quote les champs mais pas les numériques qui contiennent des montants destinés à être stockés dans des champs de type double ou real. Les quotes sur les numériques de type float provoquent parfois un stockage d&#039;une valeur différente. Par exemple 412.62 dans le insert sera en fait stocké avec la valeur 412.61999512 en base (suite à des conversions chaines-numériques implicites) si le champ est de type double(24,8). Et seul le PHP voit 412.61999512. Les autres outils verront 412.62 donnant l&#039;impression qu&#039;il n&#039;y a pas de problème. Et c&#039;est le PHP qui a raison, il y a problème en base. En supprimant les quotes sur les numériques, cela va mieux.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
Bon:     INSERT INTO table_1 (field_txt, field_num) VALUES (&#039;txt&#039;, 412.62)&lt;br /&gt;
Mauvais: INSERT INTO table_1 (field_txt, field_num) VALUES (&#039;txt&#039;, &#039;412.62&#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarque, le problème des float est général et pas seulement sur les accès base, il est présent dans tous les languages quand on travaille sur des nombres réels, aussi ils doivent être, dès que affectés, nettoyés par la fonction price2num avec le 2eme paramètre renseigné à:&lt;br /&gt;
&#039;MU&#039; (si il s&#039;agit d&#039;un prix unitaire), &#039;MT&#039; (s&#039;il s&#039;agit d&#039;un prix total) ou &#039;MS&#039; (autres cas) selon le besoin.&lt;br /&gt;
Voir aussi le chapitre &amp;quot;Les nombres réels, montants et calculs&amp;quot; plus bas.&lt;br /&gt;
&lt;br /&gt;
*Les fonctions SQL de date NOW, SYSDATE, DATEDIFF sont interdites au sein des ordres SQL. S&#039;il faut saisir la date du moment dans un champ, la valeur doit venir du PHP, par exemple par la fonction dol_now(), et non du moteur de base de données. Ceci pour les raisons suivantes:&lt;br /&gt;
**afin d&#039;avoir une meilleure portabilité du code&lt;br /&gt;
**avoir une gestion correcte des TimeZone et ne pas dépendre du TimeZone de la base de donnée (le timezone de réference est le timezone de PHP et le timezone de la base de données peut être différent de celui-ci, aussi les conversions de date doivent se faire toute côté PHP).&lt;br /&gt;
**meilleurs performances (voir exemples et commentaire plus loin)&lt;br /&gt;
&lt;br /&gt;
Par exemple, on ne fera pas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$sql=&amp;quot;SELECT rowid FROM table where datefield = NOW()&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
mais:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$sql=&amp;quot;SELECT rowid FROM table where datefield = &#039;&amp;quot;.$this-&amp;gt;db-&amp;gt;idate(dol_now()).&amp;quot;&#039;&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple, on ne fera pas:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$sql=&amp;quot;SELECT rowid FROM table where DATEDIFF(table.datefield, NOW()) &amp;gt; 7&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
mais:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$sql=&amp;quot;SELECT rowid FROM table where datefield &amp;lt; &#039;&amp;quot;.$this-&amp;gt;db-&amp;gt;idate(dol_now() - (7 * 24 * 3600)).&amp;quot;&#039;&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un autre avantage de cette règle est que la requête peut bénéficier de l&#039;utilisation de l&#039;index puisqu&#039;on compare datefield à une valeur fixe. Dans le cas du datediff, on applique un traitement sur le champ avant comparaison, rendant impossible l&#039;utilisation de l&#039;index de ce champ. Les conséquences sont des performances très dégradées par rapport à la version sans datediff.&lt;br /&gt;
&lt;br /&gt;
*L&#039;instruction WITH ROLLUP est interdite :&lt;br /&gt;
&lt;br /&gt;
Cette instruction ne doit pas être utilisée : Elle n&#039;est pas gérée de la même manière par des bases de données différentes.&lt;br /&gt;
De plus, l&#039;utilisation de WITH ROLLUP brise la pureté des données retournées. L&#039;agrégation intermédiaire de génération de sous-totaux réalisée par cette instruction peut facilement être effectuée à l&#039;aide de PHP et permet de conserver le tableau de données retourné propre (non corrompu par des données insérées artificiellement).&lt;br /&gt;
Outres son côté pas bien standardisé, en insérant des résultats de calculs au sein des données, donnant un résultat qui est un mixe donnée et calculs métiers d&#039;aggrégation, la compréhension du code se trouve compliqué et même les évolutions du code sur ces agrégations plus possibles lorsque se complexifient.&lt;br /&gt;
&lt;br /&gt;
*Utilisez $db-&amp;gt;ifsql pour le IF SQL&lt;br /&gt;
&lt;br /&gt;
N&#039;incluez pas le IF dans votre requête SQL générée. Mais utilisez plutôt la méthode $db-&amp;gt;ifsql() pour créer un SQL IF compatible avec toutes les bases de données SQL.&lt;br /&gt;
&lt;br /&gt;
*Pas de DELETE CASCADE et ON UPDATE CASCADE&lt;br /&gt;
&lt;br /&gt;
De telles instructions SQL sont interdites car elles contournent les règles métiers de l&#039;application. Par exemple, s&#039;il existe une cascade de suppression entre la table A et B, lorsque l&#039;application exécutera le code pour supprimer un enregistrement dans A, les enfants de la table B seront également supprimés. S&#039;il y a eu un trigger Dolibarr PHP (par exemple apporté par un module externe) sur la suppression de l&#039;enregistrement de B (par exemple pour valider la suppression ou pour exécuter une action complémentaire), la DELETE CASCADE sera exécutée sans avoir le trigger Dolibarr PHP exécuté, manquant la validation ou les actions du déclencheur PHP du module. Donc toutes les règles métiers doivent être implémentées du même côté (côté serveur PHP), c&#039;est la raison pour laquelle les règles métier implémentées sur Database ne sont pas autorisées (même situation que le point suivant sur les triggers Database)&lt;br /&gt;
&lt;br /&gt;
==Règles de migration de base==&lt;br /&gt;
&lt;br /&gt;
*Les scripts de migration de structure sont les fichiers de type &#039;&#039;&#039;install/mysql/migration/a.b.c-x.y.z.sql&#039;&#039;&#039;. Dans un fichier de migration de n vers n+1, on ne détruit une table (DROP TABLE) qui n&#039;est plus utilisée en n+1 que lors de la migration de la version n+1 vers n+2. Ceci afin de toujours conserver les tables deprecated le temps d&#039;une version pour réparer une situation en cas d&#039;erreur de migration.&lt;br /&gt;
&lt;br /&gt;
==Spécificités MySQL==&lt;br /&gt;
&lt;br /&gt;
*Les tables doivent être au format InnoDB.&lt;br /&gt;
&lt;br /&gt;
En effet, ce format gère les clés étrangères, les éventuelles restrictions qui y sont attachées et la notion d&#039;intégrité de transactions requise pour avoir des données en base cohérente entre tables.&lt;br /&gt;
&lt;br /&gt;
*Dolibarr DOIT fonctionner même avec les options &#039;&#039;&#039;strict&#039;&#039;&#039; de Mysql active.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;activer (fortement recommandé en développement), ajouter la ligne suivante dans le fichier config du serveur Mysql (my.cnf ou my.ini)&lt;br /&gt;
{{MySqlStrictMode}}&lt;br /&gt;
&lt;br /&gt;
==Spécificités PostgreSQL==&lt;br /&gt;
Seuls les fichiers pour Mysql doivent être maintenus.&lt;br /&gt;
Les fichiers pour les autres bases sont convertis &amp;quot;à la volée&amp;quot; par le driver Dolibarr de la base.&lt;br /&gt;
&lt;br /&gt;
Il existe une exception.&lt;br /&gt;
Les requêtes &amp;quot;UPDATE FROM&amp;quot; : &lt;br /&gt;
Syntax MySQL :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
UPDATE table_taget as target, table_source as source SET fieldtarget=source.fieldsource&lt;br /&gt;
WHERE source.rowid=target.rowid;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Syntax PgSQL:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
UPDATE table_taget as target SET fieldtarget=source.fieldsource&lt;br /&gt;
FROM table_source as source WHERE source.rowid=target.rowid;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il n&#039;en existe pas dans Dolibarr, mais pour vos modules Vous devriez faire tel que :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
if ($this-&amp;gt;db-&amp;gt;type==&#039;pgsql&#039;) {&lt;br /&gt;
$sql=&amp;quot;UPDATE table_taget as target SET fieldtarget=source.fieldsource&lt;br /&gt;
FROM table_source as source WHERE source.rowid=target.rowid&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
$sql= &amp;quot;UPDATE table_taget as target, table_source as source SET fieldtarget=source.fieldsource&lt;br /&gt;
WHERE source.rowid=target.rowid&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Normes HTML=&lt;br /&gt;
&lt;br /&gt;
*Tous les attributs dans les balises HTML doivent être *en minuscule* et quotés avec des *doubles quote*.&lt;br /&gt;
&lt;br /&gt;
*Les liens href doivent être absolus en se basant sur la fonction dol_buildpath() obtenir un chemin absolu depuis un chemin relatif au répertoire htdocs (pour les modules externes) ou en utilisant DOL_URL_ROOT pour le code core. Pour les tags img, il faut faire appel à la fonction img_picto().&lt;br /&gt;
&lt;br /&gt;
Par example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
print &#039;&amp;lt;a href=&amp;quot;&#039;.dol_buildpath(&#039;/monrep/mapage.php&#039;).&#039;&amp;quot;&amp;gt;&#039;.img_picto(&#039;Texte alt&#039;,&#039;nompictopng&#039;,&#039;&#039;).&#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
print &#039;&amp;lt;a href=&amp;quot;&#039;.DOL_URL_ROOT.&#039;/repducore/pageducore.php&amp;quot;&amp;gt;&#039;.img_picto(&#039;Texte alt&#039;,&#039;nompictopng&#039;,&#039;&#039;).&#039;&amp;lt;/a&amp;gt;&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Les tables HTML doivent avoir des colonnes sans valeurs forcées, excepté pour les colonnes qui contiennent une information dont la longueur est non variable. Par exemple, une colonne avec un picto peut être forcée à with=&amp;quot;20px&amp;quot;. Dans les autres cas, il faut éviter de forcer la largeur des colonnes. La raison est que, dans la plupart des cas, le navigateur fait un meilleur travail pour définir automatiquement la bonne largeur des colonnes qu&#039;en forçant manuellement les largeurs. Et ceci marche quelle que soit la résolution de l&#039;écran.&lt;br /&gt;
&lt;br /&gt;
*Le javascript/ajax et l&#039;appel aux scripts java dans les pages php est à proscrire. Si toutefois du code javascript est inclus, il doit être conditionné par le test sur &amp;quot;$conf-&amp;gt;use_javascript_ajax&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
if ($conf-&amp;gt;use_javascript_ajax) {&lt;br /&gt;
...  // Le code php qui génère du javascript est ici&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Les popups windows ne doivent pas être utilisées, sauf pour des tooltips (et restent conditionnées par le point ci-dessus).&lt;br /&gt;
&lt;br /&gt;
*Les scripts externes sont écrits en Perl s&#039;ils ne peuvent l&#039;être en php, l&#039;utilisation d&#039;un autre langage n&#039;est pas interdit mais doit être discuté au préalable dans la mailing list des développeurs.&lt;br /&gt;
&lt;br /&gt;
=Normes Dolibarr et squelettes de code=&lt;br /&gt;
&lt;br /&gt;
==Squelettes de code==&lt;br /&gt;
Afin d&#039;uniformiser le code et d&#039;accélérer le développement de nouveaux composants dans Dolibarr, se trouvent dans le répertoire &#039;&#039;&#039;htdocs/modulebuilder/templates&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Par exemple:&lt;br /&gt;
&lt;br /&gt;
*1 fichier qui sert d&#039;exemple de descripteur de module: &#039;&#039;&#039;myModule.class.php&#039;&#039;&#039;&lt;br /&gt;
*1 fichier qui sert d&#039;exemple de code pour faire une nouvelle classe: &#039;&#039;&#039;skeleton_class.class.php&#039;&#039;&#039;&lt;br /&gt;
*1 fichier qui sert d&#039;exemple de code pour faire une nouvelle page: &#039;&#039;&#039;skeleton_page.php&#039;&#039;&#039;&lt;br /&gt;
*1 fichier qui sert d&#039;exemple de code pour faire un script à exécuter en ligne de commande: &#039;&#039;&#039;skeleton_script.php&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Servez-vous en comme exemple.&lt;br /&gt;
Notons que ces squelettes sont aussi utilisés par le générateur de code PHP ([[Module ModuleBuilder]]) qui est décrit dans la chapitre de développement de module Dolibarr pour accélérer vos développements.&lt;br /&gt;
&lt;br /&gt;
==Variables globales==&lt;br /&gt;
Certaines informations ou objets sont communs et fixes pour toute l&#039;exécution d&#039;une page PHP et doivent être utilisés presque partout dans le code. Pour éviter de propager partout ces&lt;br /&gt;
informations ou objets, ils sont stockés dans des variables globales auxquelles vous pouvez accéder partout. Ces variables globales sont initialisées au début de chaque appel PHP (dans le master.inc.php ou master.inc.php ou en haut de la page). Ces objets ne sont normalement instanciés qu’une seule fois. La liste des variables globales disponibles est définie ici :&lt;br /&gt;
{{Template:TemplateGlobalVariables}}&lt;br /&gt;
&lt;br /&gt;
*$conf est l&#039;objet qui contient la configuration (enregistrée dans la base de données)&lt;br /&gt;
*$user est l&#039;objet de l&#039;utilisateur actuel&lt;br /&gt;
*$mysoc est l&#039;objet contenant toutes les informations sur l&#039;entreprise actuelle&lt;br /&gt;
*$langs est l&#039;objet avec la langue actuelle&lt;br /&gt;
*$db est le gestionnaire de base de données de la connexion actuelle à la base de données&lt;br /&gt;
*$hookmanager est une classe d&#039;usine pour gérer les hooks&lt;br /&gt;
*$extrafields est une classe d&#039;usine pour gérer les extrafields&lt;br /&gt;
&lt;br /&gt;
==Les dates et TimeZone==&lt;br /&gt;
Dolibarr se veut une application multi-utilisateur et multi-localisation. Il convient donc de stocker les dates dans le bon format. Pour éviter les problèmes de conversion, les règles suivantes doivent être appliquées:&lt;br /&gt;
&lt;br /&gt;
*Une date en mémoire doit être au format Timestamp GMT.&lt;br /&gt;
*Une date stockée en base de données contient le Timestamp issue de la date soumise dans la requête en heure &amp;lt;b&amp;gt;locale du serveur PHP&amp;lt;/b&amp;gt;. Cela ne concerne pas les dates mises à jour automatiquement par la base (champ &#039;&#039;&#039;tms&#039;&#039;&#039; en base).&lt;br /&gt;
&lt;br /&gt;
Ainsi le 1er janvier 1970, 3 heures à Paris (TZ=+1) = 1er janvier 1970, 2 heures à Greenwich (TZ=0) sera stocké en mémoire par 7200 et sera soumis à la base de données avec la chaine &#039;19700101030000&#039; (PHP convertit en heure de son TZ et la base déconvertit avec son TZ qui est le même que celui de PHP).&lt;br /&gt;
&lt;br /&gt;
Les méthodes select doivent donc traduire les champs dates lus qui sont au format chaine TZ de la base (&#039;19700101030000&#039;) par appel de la méthode db-&amp;gt;jdate afin de récupérer une information en mémoire au format Timestamp GMT. Et les méthodes insert doivent lors de la génération de la requête convertir la date mémoire connue en variable, par la méthode db-&amp;gt;idate (Voir exemples générés par le squelette).&lt;br /&gt;
&lt;br /&gt;
*Les dates mises à jour automatiquement par la base (champ &#039;&#039;&#039;tms&#039;&#039;&#039; en base) contiennent le Timestamp où la modification est faite selon le timezone de la base de donnée. Les méthodes select récupèrent cette donnée en mémoire au format Timestamp GMT en appliquant également le db-&amp;gt;jdate. Si le timezone de la base de donnée diffère de celui du PHP (un des 2 est mal réglé), il peut donc y avoir des écarts entre date de création et modification.&lt;br /&gt;
&lt;br /&gt;
*La manipulation de dates en PHP doit être faite en utilisant les fonctions dates de Dolibarr: &#039;&#039;&#039;dol_now(), dol_mktime(), dol_stringtotime(), dol_getdate(), dol_time_plus_duree()&#039;&#039;&#039;. Vous trouverez également d&#039;autres fonctions prêtes à l&#039;emploi dans le fichier &#039;&#039;&#039;date.lib.php&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==L&#039;encodage UTF8/ISO==&lt;br /&gt;
Dolibarr stocke les informations de manière suivante:&lt;br /&gt;
&lt;br /&gt;
*En base de donnée, les données sont en UTF8 ou ISO. Cela dépend du pagecode de la base, donc des options à la création de cette base. Dans tous les cas le driver d&#039;accès base Dolibarr (dans /lib/database) s&#039;arrange à la lecture et insertion pour convertir vers et depuis de l&#039;UTF8.&lt;br /&gt;
*Les données en mémoires sont donc stockées en UTF8 (instances d&#039;objets PHP).&lt;br /&gt;
*Les pages web affichées à l&#039;écran sont au format UTF8&lt;br /&gt;
&lt;br /&gt;
==Les nombres réels, montants et calculs==&lt;br /&gt;
En PHP comme dans d&#039;autres langages (Java par exemple), les données non entières (float, real, double) ne sont pas fiables.&lt;br /&gt;
Essayer de faire par exemple &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
print 239.2 - 229.3 - 9.9;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Vous n&#039;obtiendrez pas zéro mais un nombre très petit en puissance de 10 négative. Si vous obtenez zéro, vous pourrez trouvez d&#039;autres exemples qui ne fonctionnent pas.&lt;br /&gt;
Le problème des float est général, une variable résultante de calcul de nombre réels doit SYSTEMATIQUEMENT être nettoyée par la fonction &#039;&#039;&#039;price2num()&#039;&#039;&#039; avec le 2eme paramètre renseigné à: &#039;MU&#039;, &#039;MT&#039; ou &#039;MS&#039; selon le besoin (voir doc fonction).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
print price2num(239.2 - 229.3 - 9.9, &#039;MT&#039;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
S&#039;il ne s&#039;agit pas d&#039;un prix sur lequel s&#039;adapte les paramètres MU, MT ou MS, il faut utiliser la fonction &#039;&#039;&#039;round()&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Création de tables==&lt;br /&gt;
Ne pas créer de table à l&#039;utilisation, c&#039;est-à-dire à la &#039;&#039;&#039;première utilisation&#039;&#039;&#039; du module.&lt;br /&gt;
Si vous créez un module qui utilise des tables qui ne sont pas intégrées en standard dans le code de Dolibarr, veillez à suivre le didacticiel [[Développement module]] qui explique comment joindre des tables qui se créent à l&#039;activation du module et non à son utilisation (voir plus haut).&lt;br /&gt;
&lt;br /&gt;
==Comparer la version==&lt;br /&gt;
&lt;br /&gt;
Si votre code a besoin de faire des choses différentes selon la version de Dolibarr, vous pouvez utiliser le truc suivant pour comparer les versions&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$version=preg_split(&#039;/[\.-]/&#039;,DOL_VERSION);&lt;br /&gt;
if (versioncompare($version,array(5,0,-4)) &amp;gt;= 0) { //mycode for 5.0 only; }	// For dolibarr 5.0.* (the -4 means we include also alpha, beta, rc and rcX)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mais cette solution requiert de faire un include avoir la fonction versioncompare. Une alternative est d&#039;utiliser le test suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
if ((float) DOL_VERSION &amp;gt;= 5.0) { //mycode for 5.0 only; }	// For dolibarr 5.0.*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Logs==&lt;br /&gt;
Ajouter des traces dans votre code avec la fonction&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
dol_syslog($yourmessage, LOG_INFO|LOG_DEBUG|LOG_WARNING|LOG_ERR);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Répertoires de travail==&lt;br /&gt;
Si vous avez besoin de créer un répertoire de travail, dans votre code, faites référence à ce répertoire par&lt;br /&gt;
&#039;&#039;&#039;DOL_DATA_ROOT.&#039;/monmodule&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Le répertoire peut être créé dans votre code à l&#039;exécution par le code suivant:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
$mymoduledir=DOL_DATA_ROOT.&#039;/monmodule&#039;;&lt;br /&gt;
dol_mkdir($mymoduledir);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous avez besoin d&#039;un répertoire qui contiendra des données temporaires, ce répertoire doit être&#039;&#039;&#039; DOL_DATA_ROOT.&#039;/monmodule/temp&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Design patterns et programmation objet=&lt;br /&gt;
&lt;br /&gt;
==Design patterns de Création (GoF)==&lt;br /&gt;
Design patterns définis par le Gang Of Four (voir la wikipédia sur les [[wikipedia:Patron de conception|Design patterns]]).&lt;br /&gt;
Dans Dolibarr, pas de mise en oeuvre de design patterns de comportement particulier.&lt;br /&gt;
On trouve des objets proches des Singletons et Fabriques conformes à 100% dans l&#039;esprit mais pas dans la syntaxe, ceci afin d’être compatible avec la plus large plage possible de versions de PHP.&lt;br /&gt;
&lt;br /&gt;
==Design patterns d&#039;entreprises (Martin Fowler)==&lt;br /&gt;
&lt;br /&gt;
===Mode d&#039;organisation du code===&lt;br /&gt;
[[wikipedia:Martin_Fowler|Martin Fowler]] a identifié 3 méthodes d&#039;organisation du code appelées &#039;&#039;&#039;patterns&#039;&#039;&#039; (&#039;&#039;&#039;motifs&#039;&#039;&#039;):&lt;br /&gt;
&lt;br /&gt;
*Le &#039;&#039;&#039;Transaction Script&#039;&#039;&#039; (Le code est linéaire en fonction d&#039;une action utilisateur).&lt;br /&gt;
&lt;br /&gt;
C&#039;est le motif à l&#039;ancienne utilisé dans les langages procéduraux.&lt;br /&gt;
Inconvénient: Redondance du code. Nécessité de connaitre le modèle physique pour développer les parties métiers.&lt;br /&gt;
&lt;br /&gt;
*Le &#039;&#039;&#039;Domain Model&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
C&#039;est un concept possible depuis les langages objets. Ce sont les procédures métiers (qui doivent être identifiés avant) qui servent de bases pour les classes objets.&lt;br /&gt;
Inconvénient : Motif complexe à maintenir.&lt;br /&gt;
&lt;br /&gt;
*Le &#039;&#039;&#039;Table Module&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Un intermédiaire entre les 2 précédents où l&#039;on a une instance unique de classe par table de la base de données.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Comme le montre les squelettes de code (voir point précédent), Dolibarr se base sur le principe du &#039;&#039;&#039;Table Module&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Communication Logique métier - Données (ORM)===&lt;br /&gt;
Il existe 3 modes de liaisons:&lt;br /&gt;
&lt;br /&gt;
*Le &#039;&#039;&#039;Table And Row Data Gateway&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
C&#039;est le plus simple. On crée une classe par table et chaque classe est un pont avec la table correspondante et propose les méthodes CRUD sur cette table (Create, Read, Update, Delete). Une instance de classe étant alors un enregistrement de la table. La classe ne contient que du code d&#039;accès aux lignes ou colonnes de tables. Le code métier doit alors être ajouté dans d&#039;autres classes. Les liens entre ces classes tables et les classes métiers devant être connues ou déduites de la connaissance du développeur.&lt;br /&gt;
&lt;br /&gt;
Exemple: C&#039;est le mode mis en oeuvre quand on utilise certains Frameworks d&#039;ORM comme &#039;&#039;&#039;iBatis&#039;&#039;&#039; (http://ibatis.apache.org/).&lt;br /&gt;
&lt;br /&gt;
*Le &#039;&#039;&#039;Active Record&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Identique au précédent, mais on se permet d&#039;ajouter quelques fonctions métiers sur la classe, à condition que ces fonctions soient bien  propres à la table ou à la notion métier portée par l&#039;enregistrement. C&#039;est le pattern qui offre le meilleur rapport fonctionnalité/complexité.&lt;br /&gt;
&lt;br /&gt;
Exemple: C&#039;est le mode choisi pour les développements Dolibarr et de nombreuses autres applications PHP qui ont leur propre framework et pratiques de développement.&lt;br /&gt;
&lt;br /&gt;
*Le &#039;&#039;&#039;Data Mapper&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Les classes représentent les entités du problème et non les données. Il faut donc doubler, tripler... ces classes avec des classes Mapper pour accéder aux données.&lt;br /&gt;
Plus &amp;quot;puriste&amp;quot; sur le papier car plus proche du métier, ce mode a aussi l&#039;inconvénient d&#039;être très complexe et difficile à maintenir dans la réalité (l&#039;expérience pratique constatée ne rejoignant pas les promesses de la théorie).&lt;br /&gt;
&lt;br /&gt;
Exemple: C&#039;est le choix si on utilise le Framework d&#039;ORM &#039;&#039;&#039;Propel&#039;&#039;&#039; (http://propel.phpdb.org/trac/). On le trouve donc sur des applications plus lourdes basées sur cet ORM entre autres.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Pour les développements Dolibarr, il est recommandé d&#039;utiliser le mode de liaison &#039;&#039;&#039;Active Record&#039;&#039;&#039; qui offre les avantages d&#039;un modèle proche du métier sans en avoir la complexité et sans trop masquer non plus la technique. C&#039;est dans ce mode que le développement, la compréhension du code et la maintenance technique et/ou fonctionnelle semble la plus productive (ceci est toutefois un éternel débat entre les puristes et les pragmatiques, débat dans lequel personne ne peut vraiment avoir raison, car tout dépend des objectifs à atteindre).&lt;br /&gt;
&lt;br /&gt;
==Design Pattern d&#039;Interface Graphique (MVC)==&lt;br /&gt;
Il existe plusieurs design pattern pour les interfaces utilisateurs (MVC, MVP, MVVM).&lt;br /&gt;
Beaucoup confonde ce design pattern avec celui consistant à utiliser un framework de templates. C&#039;est sans rapport. Un framework de templates (voir point précédent) n&#039;est en lien qu&#039;avec la partie &amp;quot;V&amp;quot; de ces modèles.&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Dolibarr utilise le Design Pattern &#039;&#039;&#039;MVC&#039;&#039;&#039; (Model - Vue - Contrôleur). La partie M est matérialisée par une classe DAO contenant les méthode CRUD (Create-Read-Update-Delete) d&#039;accès à la table.&lt;br /&gt;
Beaucoup de frameworks ont fait le choix de mettre la partie de code C (Contrôleur) et la partie de code du V (vue) dans des fichiers, voir même répertoires séparés. La maintenance semble plus aisé sur la papier, en pratique, il faut sans arrêt jongler entre n fichiers, le C étant fortement lié au V. Aussi dans Dolibarr, la séparation est faite par une simple section de commentaire. La partie de code C (Contrôleur) est donc le code qui se trouve sont la balise&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * Actions&lt;br /&gt;
 */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Elle est suivi par la partie de code V (Vue), bien séparé du C par la balise&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 * View&lt;br /&gt;
 */&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce mode de séparation a eu un effet neutre sur les nouveaux développement mais a permis de réduire de manière si importante le temps requis pour la maintenance et correction de bugs qu&#039;il n&#039;est pas envisagé de basculer vers un autre type de séparation (oui les constats fait dans la vraie vie ne sont pas toujours ceux attendus par la théorie scolaire). L&#039;important reste qu&#039;il y ait toujours séparation entre le C et le V, peut importe comment est matérialisé cette séparation, du moment qu&#039;elle l&#039;est (Rappel: Ne pas confondre la notion de séparation du C et du V avec la notion de séparation du code pour alimenter la données d&#039;une Vue et du code pour formater la Vue, ceci un principe de séparation relevant du Design Pattern de Vue, voir point suivant).&lt;br /&gt;
&lt;br /&gt;
==Design Pattern de Vue - Présentation==&lt;br /&gt;
Il existe des frameworks spécialisés dans le Design Pattern de Vue, la partie qui consiste à formater l&#039;écran vue par l&#039;utilisateur.&lt;br /&gt;
Les vieilles versions de Dolibarr utilisaient Smarty. Ce framework est une surcouche à un Framework, déjà très puissant, de formatage d&#039;écran nommé... PHP. Les bénéfices étant très inférieurs aux inconvénients, il a été abandonné au profit de templates PHP (fichiers .php ou .tpl.php) qui restent le plus simple, le plus universel, le plus évolutif et le plus performant, des frameworks de présentation. &lt;br /&gt;
&lt;br /&gt;
Son seul défaut est qu&#039;il ne peut garantir à 100% les écarts d&#039;un développeur qui irait intégrer dans la Vue, une logique sans rapport avec la présentation (donc autre que du code à vocation de génération, de formatage, de sortie HTML, de logique de test ou de boucle). Ce point est toutefois contrôlé par le mécanisme de validation du code des chefs de projets.&lt;br /&gt;
&lt;br /&gt;
La encore, c&#039;est l&#039;expérience et le constat &amp;quot;sur le terrain&amp;quot; d&#039;un meilleur rendement de productivité qui a motivé l&#039;abandon des frameworks de Présentation externes au profit du framework PHP.&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Dolibarr_suppliers_Canada&amp;diff=58404</id>
		<title>Dolibarr suppliers Canada</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Dolibarr_suppliers_Canada&amp;diff=58404"/>
		<updated>2023-10-17T00:22:36Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: Mise à jour de fiche.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Dolibar_partners_list}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TemplateCompany||country=Canada|desc=de Grandpré Technologies est une entreprise de consultation informatique québécoise enregistrée en 2003.&lt;br /&gt;
&lt;br /&gt;
Son expertise est orientée autour des logiciels libres, des techniques de l&#039;informatique, du génie logiciel et de la conception interactive.&lt;br /&gt;
&lt;br /&gt;
Elle analyse, conçoit, développe, implémente et soutien des solutions informatiques pour ses clients. &lt;br /&gt;
&lt;br /&gt;
Notamment, la société assiste les organisations dans leur transformation numérique et leurs différentes innovations.&lt;br /&gt;
&lt;br /&gt;
Enfin, elle est officiellement partenaire Dolibarr depuis septembre 2023.&lt;br /&gt;
|email=clientele@de-grandpre.quebec|name=de Grandpré Technologies|service_dev=yes|service_emailsupport=yes|service_formation=yes|service_local=yes|service_onlinesupport=yes|town=Montréal|zip=H1T 3A7|web=https://de-grandpre.quebec/|phone=+1 438 380-6811}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dilamphis Group Officials&amp;lt;br&amp;gt;&lt;br /&gt;
1800 Barton Street East, Hamilton ON Canada.&amp;lt;br&amp;gt;&lt;br /&gt;
2 King street west, Hamilton ON, Canada.&amp;lt;br&amp;gt;&lt;br /&gt;
[https://dilamphis.com dilamphis.com] Hello@dilamphis.com&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Services provided:&amp;lt;br&amp;gt;&lt;br /&gt;
Dolibarr SaaS web hosting&amp;lt;br&amp;gt;&lt;br /&gt;
On premise/Virtual installation/setup&amp;lt;br&amp;gt;&lt;br /&gt;
On premise/virtual support&amp;lt;br&amp;gt;&lt;br /&gt;
Specific development &amp;amp; Training&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement_-_Composants_optionnels&amp;diff=57325</id>
		<title>Outils de développement - Composants optionnels</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement_-_Composants_optionnels&amp;diff=57325"/>
		<updated>2023-08-04T15:24:43Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: /* Prérequis : */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDev}}&lt;br /&gt;
Cette page liste les composants et autres technologies supplémentaires que vous pourriez vouloir installer sur votre environnement de développement. Elles ne sont pas requises pour développer sur Dolibarr, ni pour réaliser des modules mais peuvent être utiles pour des travaux très particuliers.&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire des scripts en Perl==&lt;br /&gt;
&lt;br /&gt;
*Installation du plugin Eclipse pour Perl: EPIC&lt;br /&gt;
&lt;br /&gt;
Pour cela, utiliser la procédure &#039;&#039;&#039;Find And Install&#039;&#039;&#039; et ajouter l&#039;URL de mise à jour: http://e-p-i-c.sourceforge.net/updates&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire des scripts en Python==&lt;br /&gt;
&lt;br /&gt;
*Installation du plugin Eclipse pour PyThon: PyDev&lt;br /&gt;
&lt;br /&gt;
Pour cela, utiliser la procédure &#039;&#039;&#039;Find And Install&#039;&#039;&#039; et ajouter l&#039;URL de mise à jour: http://pydev.org/updates&lt;br /&gt;
&lt;br /&gt;
==Si vous êtes sous Windows==&lt;br /&gt;
&lt;br /&gt;
*Notepad++ (pour ceux qui ne supportent pas java ou utilisent un vieux coucou trop faible pour Eclipse).&lt;br /&gt;
&lt;br /&gt;
*WinMerge (pour la comparaison de fichiers ou répertoires)&lt;br /&gt;
&lt;br /&gt;
*CygWin (pour la commande patch si vous préferez les lignes de commandes)&lt;br /&gt;
&lt;br /&gt;
A noter que Netbeans-PHP fonctionne efficacement avec Dolibarr.&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire du debuggage pas à pas ou du tunning (XDebug)==&lt;br /&gt;
&lt;br /&gt;
*Pour ajouter des infos de tuning page dans la console javascript à partir de Dolibarr 3.8, ajouter la variable d&#039;environnement MAIN_SHOW_TUNING_INFO à 1 dans Apache. Pour cela, inclure la ligne suivante dans votre fichier apache.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
SetEnv MAIN_SHOW_TUNING_INFO 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Pour du tuning à la ligne de code près, installer XDebug:&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_windows.png|24px]] In Windows===&lt;br /&gt;
&lt;br /&gt;
*Télécharger le fichier dll &#039;&#039;&#039;php_debug_xxx.dll&#039;&#039;&#039; sur http://www.xdebug.org et stocker le dans le répertoire /ext de php. Ensuite activer le plugin.&lt;br /&gt;
&lt;br /&gt;
*Modifier le ficiher php.ini ou xdebug.ini pour ajouter le paramètres suivant:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 [xdebug]&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=c:/temp&lt;br /&gt;
 xdebug.profiler_append=0&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_ubuntu.png|24px]] In Ubuntu / Linux===&lt;br /&gt;
&lt;br /&gt;
*Installer le package &#039;&#039;&#039;php-xdebug&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install php5-xdebug&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Modifier xdebug.ini pour ajouter les paramètres suivants après les lignes de type zend_extension=xxx (ou similaire):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 ; With xdebug 2.1 and more&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=/tmp&lt;br /&gt;
 xdebug.profiler_append=0&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
 ; Add also this for xdebug 2.2 and more&lt;br /&gt;
 xdebug.show_mem_delta=1&lt;br /&gt;
 xdebug.trace_output_dir=/tmp&lt;br /&gt;
 xdebug.auto_trace=0&lt;br /&gt;
 xdebug.trace_enable_trigger=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Eclipsephp.jpg|24px]] Eclipse configuration===&lt;br /&gt;
&lt;br /&gt;
*Ouvrir Eclipse. Dans Window-&amp;gt;Preferences-&amp;gt;General-&amp;gt;Web Browser, sélectionner navigateur externe, et choisir le navigateur par défaut de votre système.&lt;br /&gt;
&lt;br /&gt;
*Aller dans la rubrique Window-&amp;gt;Preferences-&amp;gt;PHP-&amp;gt;Debug, et positionner les options PHP Debugger à XDebug. Remarquer que la case “Stop a la première ligne” sur cette page doit également être active. Vous pourrez la modifier plus tard.&lt;br /&gt;
&lt;br /&gt;
*Après avoir validé les changements, aller dans la vue PHP Debug prespective, puis aller dans le menu Debug Configurations… Ici, vérifier que le Server Debugger est positionné à XDebug, et que votre server PHP pointe sur http://localhost/ ou le chemin approprié au serveur. La zone de localisation des fichiers doit de plus pointer sur le fichier à débugger, relativement à votre workspace. Ce chemin doit être quelquechose comme /dolibarr/htdocs/index.php.&lt;br /&gt;
&lt;br /&gt;
*Vérifiez la section URL pour voir si elle pointe correctement – si non, vérifier que la case “Auto-Generate” est bien décochée, et entrer manuellement le bon chemin. Appliquer les changement et fermer la fenêtre de dialogue.&lt;br /&gt;
&lt;br /&gt;
*Vous devriez maintenant être prêt pour lancer du debug de Dolibarr. Cliquer sur Run-&amp;gt;Debug ou F11 pour activer le debug, Eclipse devrait basculer sur la vue Debug, et la page devrait commencer à se charger dans le navigateur externe. Si la case “Break at First Line” a bien été cochée précédemment, alors le programme aura stoppé à la première ligne. Vous pouvez alors faire du pas à pas sur les lignes de code successives en utilisant les boutons de la barre de Debug d&#039;Eclipse. Eventuellement, vous pouvez placer des point d&#039;arrêts à différents endroits du code pour y stopper l&#039;exécution du code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite pour analyser les fichiers de profiling générés par XDebug, il faut appeler l&#039;url avec XDEBUG_PROFILE=1 pour générer le fichier profiling puis installer KCacheGrind (Linux) ou WinCacheGrind (Windows) pour l&#039;analyser.&lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code (VSCode)===&lt;br /&gt;
Pour fonctionner sous VSCode, la configuration XDebug se fait par un fichier client, par exemple avec le port 9000 : &lt;br /&gt;
=====Configuration dans l&#039;IDE=====&lt;br /&gt;
Fichier de projet : .vscode/launch.json&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, visitez : [https://go.microsoft.com/fwlink/?linkid=830387 la documentation de l&#039;éditeur]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
// Utilisez IntelliSense pour en savoir plus sur les attributs possibles.&lt;br /&gt;
// Pointez pour afficher la description des attributs existants.&lt;br /&gt;
// Pour plus d&#039;informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387&lt;br /&gt;
&amp;quot;version&amp;quot;: &amp;quot;0.2.0&amp;quot;,&lt;br /&gt;
&amp;quot;configurations&amp;quot;: [&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;name&amp;quot;: &amp;quot;Écouter pour Xdebug&amp;quot;,&lt;br /&gt;
&amp;quot;type&amp;quot;: &amp;quot;php&amp;quot;,&lt;br /&gt;
&amp;quot;request&amp;quot;: &amp;quot;launch&amp;quot;,&lt;br /&gt;
&amp;quot;port&amp;quot;: 9000,&lt;br /&gt;
&amp;quot;pathMappings&amp;quot;: {&lt;br /&gt;
&amp;quot;/vagrant/dolibarr/&amp;quot;: &amp;quot;${workspaceRoot}&amp;quot;&lt;br /&gt;
},&lt;br /&gt;
&amp;quot;log&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Noter à la ligne &#039;&#039;&#039;13&#039;&#039;&#039; la clé est le chemin du serveur web qui correspond à la racine du projet (dans cet exemple, le dossier racine Dolibarr).&lt;br /&gt;
&lt;br /&gt;
=====Configuration dans le php.ini du serveur web=====&lt;br /&gt;
&lt;br /&gt;
En plus de ce qui est écrit plus haut, ajouter à la section xdebug de php.ini :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
xdebug.remote_autostart = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pour développer ou utiliser les contrôles Qualité (PHPUnit, PHPCodeSniffer, PHPCpd, PHPDepends)==&lt;br /&gt;
===Depuis Eclipse===&lt;br /&gt;
Le plugin PTI pour utiliser PHPUnit et PHPCodesniffer est maintenant abandonnée.&lt;br /&gt;
&lt;br /&gt;
*Pour utiliser PHPUnit, ceci est disponible en standard dans une installation de base d&#039;Eclipse.&lt;br /&gt;
&lt;br /&gt;
*Pour utiliser PHPCodesniffer, vous pouvez créer une entrée &amp;quot;External Tools&amp;quot; avec une configuration de ce type&lt;br /&gt;
&lt;br /&gt;
[[Image:Setup_phpcs.png]]&lt;br /&gt;
&lt;br /&gt;
===En ligne de commande manuelle===&lt;br /&gt;
====Installer PHPUnit====&lt;br /&gt;
&lt;br /&gt;
*Télécharger l&#039;archive de la version sur http://pear.phpunit.de/get/ et dézipper le contenu dans un répertoire inclus dans le paramètre include_path de votre fichier de configuration php.ini.&lt;br /&gt;
*Donner les permissions de s&#039;exécuter (chmod +x phpunit sur Linux).&lt;br /&gt;
*Le module xdebug est également requis si vous voulez faire du reporting de couverture de tests.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE :&#039;&#039;&#039; Les tests Selenium ne fonctionnent qu&#039;avec PHPUnit 4, installé avec &#039;&#039;composer install&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====Exécuter les tests PHPUnit====&lt;br /&gt;
&lt;br /&gt;
*Aller dans le répertoire &#039;&#039;&#039;/test&#039;&#039;&#039; des sources. Reportez vous au fichier &#039;&#039;&#039;README&#039;&#039;&#039; pour connaitre la procédure pour lancer un ou plusieurs tests PHPUnit.&lt;br /&gt;
&lt;br /&gt;
====Installer les autres outils====&lt;br /&gt;
&lt;br /&gt;
*Référez vous à la documentation des différents outils (PHPCodeSniffer, PHPCpd, PHPDepends) pour leur installation et utilisation en ligne de commande. Par exemple, pour installer ou mettre à jour PHPCodeSniffer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo pear upgrade PHP_CodeSniffer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Les librairies pear seront installées dans &#039;&#039;&#039;/usr/share/php/PHP&#039;&#039;&#039; mais pour les prendre en compte avec Eclipse PTI, il faut ajouter une entrée &amp;quot;PHP&amp;quot; sur &#039;&#039;&#039;/usr/share/php&#039;&#039;&#039; et configurer PHPCheckstyle pour utiliser cette entrée.&lt;br /&gt;
&lt;br /&gt;
==Pour développer ou utiliser les tests Selenium==&lt;br /&gt;
&lt;br /&gt;
===Depuis Google Chrome et la ligne de commande===&lt;br /&gt;
Suivre ces étapes pour agencer un environnement de test Selenium pour vos modules.&lt;br /&gt;
&lt;br /&gt;
====Prérequis====&lt;br /&gt;
Sur votre poste de développement / machine de test : &lt;br /&gt;
&lt;br /&gt;
*Vous avez téléchargé selenium-server-standalone.jar en version 2.53.1 (ou dernière version de Selenium 2)&lt;br /&gt;
**https://github.com/SeleniumHQ/selenium/releases/download/selenium-2.53.1/selenium-server-standalone-2.53.1.jar&lt;br /&gt;
*Vous avez téléchargé chromedriver pour la version 83 de Google Chrome WebDriver&lt;br /&gt;
**https://chromedriver.storage.googleapis.com/index.html?path=83.0.4103.14/&lt;br /&gt;
**Le fichier binaire &#039;&#039;chromedriver&#039;&#039; est extrait et est exécutable (chmod +x)&lt;br /&gt;
&lt;br /&gt;
====Agencement====&lt;br /&gt;
Commencer par lancer le serveur Selenium en spécifiant le chemin vers l&#039;exécutable &#039;&#039;chromedriver.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
p. ex :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~/Développement/selenium$ java -jar -Dwebdriver.chrome.driver=/home/[votre_usager]/chromedriver-linux64/chromedriver selenium-server-standalone-2.53.1.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:Capture d’écran de 2023-08-03 14-55-34.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, renseigner l&#039;adresse de votre instance à tester dans le fichier de test (variable $base_url). et modifiez les paramètres $dol_admin_user et $dol_admin_password de sorte que ça corresponde à un identifiant valide, et modifier la fonction authenticate() du fichier de test pour utiliser ces variables ($login-&amp;gt;value(self::$dol_admin_user); etc. ).&lt;br /&gt;
&lt;br /&gt;
Enfin, exécuter la commande phpunit, sur le fichier de test à exécuter. Il faut utiliser le fichier binaire fourni avec Dolibarr. Alors, le test sera exécuté dans Selenium avec Chrome WebDriver sur votre instance. &lt;br /&gt;
&lt;br /&gt;
L&#039;instance n&#039;a pas besoin d&#039;être sur votre poste de développement. &lt;br /&gt;
&lt;br /&gt;
P. ex. :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~/dolibarr-dev/htdocs/custom/monmodule/test$ ../../../includes/bin/phpunit ./phpunit/functionnal/MonModuleFunctionalTest.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ModuleBuilder de Dolibarr créé déjà pour nous les méthodes de base pour tester un nouveau module et ses pages de configuration.&lt;br /&gt;
&lt;br /&gt;
Enfin, vous voudrez vous assurer que le module Dolibarr Barre de débogue soit désactivé afin que l&#039;outil automatisé puisse cliquer sur les boutons en bas de page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bons tests !&lt;br /&gt;
&lt;br /&gt;
===Depuis Firefox===&lt;br /&gt;
====Installer le plugin pour Firefox Selenium IDE====&lt;br /&gt;
&lt;br /&gt;
*Télécharger le fichier du plugin Selenium IDE pour Firefox.&lt;br /&gt;
*L&#039;ajouter dans Outils - Modules complémentaires de Firefox.&lt;br /&gt;
&lt;br /&gt;
====Exécuter les tests Selenium====&lt;br /&gt;
&lt;br /&gt;
*Aller dans le menu Outils - Selinum IDE de firefox.&lt;br /&gt;
*Ouvrir le fichier de tests xml&lt;br /&gt;
*Executer le test.&lt;br /&gt;
&lt;br /&gt;
==Pour générer la documentation Doxygen==&lt;br /&gt;
&lt;br /&gt;
*Installer Doxygen disponible sur http://www.doxygen.org (ou par le package doxygen sous Ubuntu).&lt;br /&gt;
*Installer le plugin Eclipse en ajoutant l&#039;url source http://download.gna.org/eclox/update/ dans l&#039;outil de mise à jour Eclipse puis configurer Eclipse pour indiquer l&#039;emplacement de Doxygen (Window-Preferences-Doxygen).&lt;br /&gt;
&lt;br /&gt;
==Pour ajouter le support asciidoc à Eclipse==&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL http://download.eclipse.org/mylyn/snapshots/nightly/docs/ dans les Install repositories. Puis installer le package &#039;&#039;&#039;Mylyn Docs - Mylyn Wikitext Extras&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement_-_Composants_optionnels&amp;diff=57285</id>
		<title>Outils de développement - Composants optionnels</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement_-_Composants_optionnels&amp;diff=57285"/>
		<updated>2023-08-03T19:23:45Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: /* Agencement : */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDev}}&lt;br /&gt;
Cette page liste les composants et autres technologies supplémentaires que vous pourriez vouloir installer sur votre environnement de développement. Elles ne sont pas requises pour développer sur Dolibarr, ni pour réaliser des modules mais peuvent être utiles pour des travaux très particuliers.&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire des scripts en Perl==&lt;br /&gt;
&lt;br /&gt;
*Installation du plugin Eclipse pour Perl: EPIC&lt;br /&gt;
&lt;br /&gt;
Pour cela, utiliser la procédure &#039;&#039;&#039;Find And Install&#039;&#039;&#039; et ajouter l&#039;URL de mise à jour: http://e-p-i-c.sourceforge.net/updates&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire des scripts en Python==&lt;br /&gt;
&lt;br /&gt;
*Installation du plugin Eclipse pour PyThon: PyDev&lt;br /&gt;
&lt;br /&gt;
Pour cela, utiliser la procédure &#039;&#039;&#039;Find And Install&#039;&#039;&#039; et ajouter l&#039;URL de mise à jour: http://pydev.org/updates&lt;br /&gt;
&lt;br /&gt;
==Si vous êtes sous Windows==&lt;br /&gt;
&lt;br /&gt;
*Notepad++ (pour ceux qui ne supportent pas java ou utilisent un vieux coucou trop faible pour Eclipse).&lt;br /&gt;
&lt;br /&gt;
*WinMerge (pour la comparaison de fichiers ou répertoires)&lt;br /&gt;
&lt;br /&gt;
*CygWin (pour la commande patch si vous préferez les lignes de commandes)&lt;br /&gt;
&lt;br /&gt;
A noter que Netbeans-PHP fonctionne efficacement avec Dolibarr.&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire du debuggage pas à pas ou du tunning (XDebug)==&lt;br /&gt;
&lt;br /&gt;
*Pour ajouter des infos de tuning page dans la console javascript à partir de Dolibarr 3.8, ajouter la variable d&#039;environnement MAIN_SHOW_TUNING_INFO à 1 dans Apache. Pour cela, inclure la ligne suivante dans votre fichier apache.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
SetEnv MAIN_SHOW_TUNING_INFO 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Pour du tuning à la ligne de code près, installer XDebug:&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_windows.png|24px]] In Windows===&lt;br /&gt;
&lt;br /&gt;
*Télécharger le fichier dll &#039;&#039;&#039;php_debug_xxx.dll&#039;&#039;&#039; sur http://www.xdebug.org et stocker le dans le répertoire /ext de php. Ensuite activer le plugin.&lt;br /&gt;
&lt;br /&gt;
*Modifier le ficiher php.ini ou xdebug.ini pour ajouter le paramètres suivant:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 [xdebug]&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=c:/temp&lt;br /&gt;
 xdebug.profiler_append=0&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_ubuntu.png|24px]] In Ubuntu / Linux===&lt;br /&gt;
&lt;br /&gt;
*Installer le package &#039;&#039;&#039;php-xdebug&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install php5-xdebug&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Modifier xdebug.ini pour ajouter les paramètres suivants après les lignes de type zend_extension=xxx (ou similaire):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 ; With xdebug 2.1 and more&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=/tmp&lt;br /&gt;
 xdebug.profiler_append=0&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
 ; Add also this for xdebug 2.2 and more&lt;br /&gt;
 xdebug.show_mem_delta=1&lt;br /&gt;
 xdebug.trace_output_dir=/tmp&lt;br /&gt;
 xdebug.auto_trace=0&lt;br /&gt;
 xdebug.trace_enable_trigger=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Eclipsephp.jpg|24px]] Eclipse configuration===&lt;br /&gt;
&lt;br /&gt;
*Ouvrir Eclipse. Dans Window-&amp;gt;Preferences-&amp;gt;General-&amp;gt;Web Browser, sélectionner navigateur externe, et choisir le navigateur par défaut de votre système.&lt;br /&gt;
&lt;br /&gt;
*Aller dans la rubrique Window-&amp;gt;Preferences-&amp;gt;PHP-&amp;gt;Debug, et positionner les options PHP Debugger à XDebug. Remarquer que la case “Stop a la première ligne” sur cette page doit également être active. Vous pourrez la modifier plus tard.&lt;br /&gt;
&lt;br /&gt;
*Après avoir validé les changements, aller dans la vue PHP Debug prespective, puis aller dans le menu Debug Configurations… Ici, vérifier que le Server Debugger est positionné à XDebug, et que votre server PHP pointe sur http://localhost/ ou le chemin approprié au serveur. La zone de localisation des fichiers doit de plus pointer sur le fichier à débugger, relativement à votre workspace. Ce chemin doit être quelquechose comme /dolibarr/htdocs/index.php.&lt;br /&gt;
&lt;br /&gt;
*Vérifiez la section URL pour voir si elle pointe correctement – si non, vérifier que la case “Auto-Generate” est bien décochée, et entrer manuellement le bon chemin. Appliquer les changement et fermer la fenêtre de dialogue.&lt;br /&gt;
&lt;br /&gt;
*Vous devriez maintenant être prêt pour lancer du debug de Dolibarr. Cliquer sur Run-&amp;gt;Debug ou F11 pour activer le debug, Eclipse devrait basculer sur la vue Debug, et la page devrait commencer à se charger dans le navigateur externe. Si la case “Break at First Line” a bien été cochée précédemment, alors le programme aura stoppé à la première ligne. Vous pouvez alors faire du pas à pas sur les lignes de code successives en utilisant les boutons de la barre de Debug d&#039;Eclipse. Eventuellement, vous pouvez placer des point d&#039;arrêts à différents endroits du code pour y stopper l&#039;exécution du code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite pour analyser les fichiers de profiling générés par XDebug, il faut appeler l&#039;url avec XDEBUG_PROFILE=1 pour générer le fichier profiling puis installer KCacheGrind (Linux) ou WinCacheGrind (Windows) pour l&#039;analyser.&lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code (VSCode)===&lt;br /&gt;
Pour fonctionner sous VSCode, la configuration XDebug se fait par un fichier client, par exemple avec le port 9000 : &lt;br /&gt;
=====Configuration dans l&#039;IDE=====&lt;br /&gt;
Fichier de projet : .vscode/launch.json&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, visitez : [https://go.microsoft.com/fwlink/?linkid=830387 la documentation de l&#039;éditeur]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
// Utilisez IntelliSense pour en savoir plus sur les attributs possibles.&lt;br /&gt;
// Pointez pour afficher la description des attributs existants.&lt;br /&gt;
// Pour plus d&#039;informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387&lt;br /&gt;
&amp;quot;version&amp;quot;: &amp;quot;0.2.0&amp;quot;,&lt;br /&gt;
&amp;quot;configurations&amp;quot;: [&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;name&amp;quot;: &amp;quot;Écouter pour Xdebug&amp;quot;,&lt;br /&gt;
&amp;quot;type&amp;quot;: &amp;quot;php&amp;quot;,&lt;br /&gt;
&amp;quot;request&amp;quot;: &amp;quot;launch&amp;quot;,&lt;br /&gt;
&amp;quot;port&amp;quot;: 9000,&lt;br /&gt;
&amp;quot;pathMappings&amp;quot;: {&lt;br /&gt;
&amp;quot;/vagrant/dolibarr/&amp;quot;: &amp;quot;${workspaceRoot}&amp;quot;&lt;br /&gt;
},&lt;br /&gt;
&amp;quot;log&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Noter à la ligne &#039;&#039;&#039;13&#039;&#039;&#039; la clé est le chemin du serveur web qui correspond à la racine du projet (dans cet exemple, le dossier racine Dolibarr).&lt;br /&gt;
&lt;br /&gt;
=====Configuration dans le php.ini du serveur web=====&lt;br /&gt;
&lt;br /&gt;
En plus de ce qui est écrit plus haut, ajouter à la section xdebug de php.ini :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
xdebug.remote_autostart = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pour développer ou utiliser les contrôles Qualité (PHPUnit, PHPCodeSniffer, PHPCpd, PHPDepends)==&lt;br /&gt;
===Depuis Eclipse===&lt;br /&gt;
Le plugin PTI pour utiliser PHPUnit et PHPCodesniffer est maintenant abandonnée.&lt;br /&gt;
&lt;br /&gt;
*Pour utiliser PHPUnit, ceci est disponible en standard dans une installation de base d&#039;Eclipse.&lt;br /&gt;
&lt;br /&gt;
*Pour utiliser PHPCodesniffer, vous pouvez créer une entrée &amp;quot;External Tools&amp;quot; avec une configuration de ce type&lt;br /&gt;
&lt;br /&gt;
[[Image:Setup_phpcs.png]]&lt;br /&gt;
&lt;br /&gt;
===En ligne de commande manuelle===&lt;br /&gt;
====Installer PHPUnit====&lt;br /&gt;
&lt;br /&gt;
*Télécharger l&#039;archive de la version sur http://pear.phpunit.de/get/ et dézipper le contenu dans un répertoire inclus dans le paramètre include_path de votre fichier de configuration php.ini.&lt;br /&gt;
*Donner les permissions de s&#039;exécuter (chmod +x phpunit sur Linux).&lt;br /&gt;
*Le module xdebug est également requis si vous voulez faire du reporting de couverture de tests.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE :&#039;&#039;&#039; Les tests Selenium ne fonctionnent qu&#039;avec PHPUnit 4, installé avec &#039;&#039;composer install&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====Exécuter les tests PHPUnit====&lt;br /&gt;
&lt;br /&gt;
*Aller dans le répertoire &#039;&#039;&#039;/test&#039;&#039;&#039; des sources. Reportez vous au fichier &#039;&#039;&#039;README&#039;&#039;&#039; pour connaitre la procédure pour lancer un ou plusieurs tests PHPUnit.&lt;br /&gt;
&lt;br /&gt;
====Installer les autres outils====&lt;br /&gt;
&lt;br /&gt;
*Référez vous à la documentation des différents outils (PHPCodeSniffer, PHPCpd, PHPDepends) pour leur installation et utilisation en ligne de commande. Par exemple, pour installer ou mettre à jour PHPCodeSniffer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo pear upgrade PHP_CodeSniffer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Les librairies pear seront installées dans &#039;&#039;&#039;/usr/share/php/PHP&#039;&#039;&#039; mais pour les prendre en compte avec Eclipse PTI, il faut ajouter une entrée &amp;quot;PHP&amp;quot; sur &#039;&#039;&#039;/usr/share/php&#039;&#039;&#039; et configurer PHPCheckstyle pour utiliser cette entrée.&lt;br /&gt;
&lt;br /&gt;
==Pour développer ou utiliser les tests Selenium==&lt;br /&gt;
&lt;br /&gt;
===Depuis Google Chrome et la ligne de commande===&lt;br /&gt;
Suivre ces étapes pour agencer un environnement de test Selenium pour vos modules.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Prérequis :&#039;&#039;&#039;====&lt;br /&gt;
Sur votre poste de développement / machine de test : &lt;br /&gt;
&lt;br /&gt;
*Vous avez téléchargé selenium-server-standalone.jar en version 2.53.1 (ou dernière version de Selenium 2)&lt;br /&gt;
**https://github.com/SeleniumHQ/selenium/releases/download/selenium-2.53.1/selenium-server-standalone-2.53.1.jar&lt;br /&gt;
*Vous avez téléchargé chromedriver pour la version 83 de Google Chrome WebDriver&lt;br /&gt;
**https://chromedriver.storage.googleapis.com/index.html?path=83.0.4103.14/&lt;br /&gt;
**Le fichier binaire &#039;&#039;chromedriver&#039;&#039; est extrait et est exécutable (chmod +x)&lt;br /&gt;
&lt;br /&gt;
====Agencement :====&lt;br /&gt;
Commencer par lancer le serveur Selenium en spécifiant le chemin vers l&#039;exécutable &#039;&#039;chromedriver.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
p. ex :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~/Développement/selenium$ java -jar -Dwebdriver.chrome.driver=/home/[votre_usager]/chromedriver-linux64/chromedriver selenium-server-standalone-2.53.1.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:Capture d’écran de 2023-08-03 14-55-34.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, renseigner l&#039;adresse de votre instance à tester dans le fichier de test (variable $base_url). et modifiez les paramètres $dol_admin_user et $dol_admin_password de sorte que ça corresponde à un identifiant valide, et modifier la fonction authenticate() du fichier de test pour utiliser ces variables ($login-&amp;gt;value(self::$dol_admin_user); etc. ).&lt;br /&gt;
&lt;br /&gt;
Enfin, exécuter la commande phpunit, sur le fichier de test à exécuter. Il faut utiliser le fichier binaire fourni avec Dolibarr. Alors, le test sera exécuté dans Selenium avec Chrome WebDriver sur votre instance. &lt;br /&gt;
&lt;br /&gt;
L&#039;instance n&#039;a pas besoin d&#039;être sur votre poste de développement. &lt;br /&gt;
&lt;br /&gt;
P. ex. :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~/dolibarr-dev/htdocs/custom/monmodule/test$ ../../../includes/bin/phpunit ./phpunit/functionnal/MonModuleFunctionalTest.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ModuleBuilder de Dolibarr créé déjà pour nous les méthodes de base pour tester un nouveau module et ses pages de configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bons tests !&lt;br /&gt;
&lt;br /&gt;
===Depuis Firefox===&lt;br /&gt;
====Installer le plugin pour Firefox Selenium IDE====&lt;br /&gt;
&lt;br /&gt;
*Télécharger le fichier du plugin Selenium IDE pour Firefox.&lt;br /&gt;
*L&#039;ajouter dans Outils - Modules complémentaires de Firefox.&lt;br /&gt;
&lt;br /&gt;
====Exécuter les tests Selenium====&lt;br /&gt;
&lt;br /&gt;
*Aller dans le menu Outils - Selinum IDE de firefox.&lt;br /&gt;
*Ouvrir le fichier de tests xml&lt;br /&gt;
*Executer le test.&lt;br /&gt;
&lt;br /&gt;
==Pour générer la documentation Doxygen==&lt;br /&gt;
&lt;br /&gt;
*Installer Doxygen disponible sur http://www.doxygen.org (ou par le package doxygen sous Ubuntu).&lt;br /&gt;
*Installer le plugin Eclipse en ajoutant l&#039;url source http://download.gna.org/eclox/update/ dans l&#039;outil de mise à jour Eclipse puis configurer Eclipse pour indiquer l&#039;emplacement de Doxygen (Window-Preferences-Doxygen).&lt;br /&gt;
&lt;br /&gt;
==Pour ajouter le support asciidoc à Eclipse==&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL http://download.eclipse.org/mylyn/snapshots/nightly/docs/ dans les Install repositories. Puis installer le package &#039;&#039;&#039;Mylyn Docs - Mylyn Wikitext Extras&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement_-_Composants_optionnels&amp;diff=57284</id>
		<title>Outils de développement - Composants optionnels</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement_-_Composants_optionnels&amp;diff=57284"/>
		<updated>2023-08-03T19:22:22Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: /* Agencement : */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDev}}&lt;br /&gt;
Cette page liste les composants et autres technologies supplémentaires que vous pourriez vouloir installer sur votre environnement de développement. Elles ne sont pas requises pour développer sur Dolibarr, ni pour réaliser des modules mais peuvent être utiles pour des travaux très particuliers.&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire des scripts en Perl==&lt;br /&gt;
&lt;br /&gt;
*Installation du plugin Eclipse pour Perl: EPIC&lt;br /&gt;
&lt;br /&gt;
Pour cela, utiliser la procédure &#039;&#039;&#039;Find And Install&#039;&#039;&#039; et ajouter l&#039;URL de mise à jour: http://e-p-i-c.sourceforge.net/updates&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire des scripts en Python==&lt;br /&gt;
&lt;br /&gt;
*Installation du plugin Eclipse pour PyThon: PyDev&lt;br /&gt;
&lt;br /&gt;
Pour cela, utiliser la procédure &#039;&#039;&#039;Find And Install&#039;&#039;&#039; et ajouter l&#039;URL de mise à jour: http://pydev.org/updates&lt;br /&gt;
&lt;br /&gt;
==Si vous êtes sous Windows==&lt;br /&gt;
&lt;br /&gt;
*Notepad++ (pour ceux qui ne supportent pas java ou utilisent un vieux coucou trop faible pour Eclipse).&lt;br /&gt;
&lt;br /&gt;
*WinMerge (pour la comparaison de fichiers ou répertoires)&lt;br /&gt;
&lt;br /&gt;
*CygWin (pour la commande patch si vous préferez les lignes de commandes)&lt;br /&gt;
&lt;br /&gt;
A noter que Netbeans-PHP fonctionne efficacement avec Dolibarr.&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire du debuggage pas à pas ou du tunning (XDebug)==&lt;br /&gt;
&lt;br /&gt;
*Pour ajouter des infos de tuning page dans la console javascript à partir de Dolibarr 3.8, ajouter la variable d&#039;environnement MAIN_SHOW_TUNING_INFO à 1 dans Apache. Pour cela, inclure la ligne suivante dans votre fichier apache.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
SetEnv MAIN_SHOW_TUNING_INFO 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Pour du tuning à la ligne de code près, installer XDebug:&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_windows.png|24px]] In Windows===&lt;br /&gt;
&lt;br /&gt;
*Télécharger le fichier dll &#039;&#039;&#039;php_debug_xxx.dll&#039;&#039;&#039; sur http://www.xdebug.org et stocker le dans le répertoire /ext de php. Ensuite activer le plugin.&lt;br /&gt;
&lt;br /&gt;
*Modifier le ficiher php.ini ou xdebug.ini pour ajouter le paramètres suivant:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 [xdebug]&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=c:/temp&lt;br /&gt;
 xdebug.profiler_append=0&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_ubuntu.png|24px]] In Ubuntu / Linux===&lt;br /&gt;
&lt;br /&gt;
*Installer le package &#039;&#039;&#039;php-xdebug&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install php5-xdebug&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Modifier xdebug.ini pour ajouter les paramètres suivants après les lignes de type zend_extension=xxx (ou similaire):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 ; With xdebug 2.1 and more&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=/tmp&lt;br /&gt;
 xdebug.profiler_append=0&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
 ; Add also this for xdebug 2.2 and more&lt;br /&gt;
 xdebug.show_mem_delta=1&lt;br /&gt;
 xdebug.trace_output_dir=/tmp&lt;br /&gt;
 xdebug.auto_trace=0&lt;br /&gt;
 xdebug.trace_enable_trigger=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Eclipsephp.jpg|24px]] Eclipse configuration===&lt;br /&gt;
&lt;br /&gt;
*Ouvrir Eclipse. Dans Window-&amp;gt;Preferences-&amp;gt;General-&amp;gt;Web Browser, sélectionner navigateur externe, et choisir le navigateur par défaut de votre système.&lt;br /&gt;
&lt;br /&gt;
*Aller dans la rubrique Window-&amp;gt;Preferences-&amp;gt;PHP-&amp;gt;Debug, et positionner les options PHP Debugger à XDebug. Remarquer que la case “Stop a la première ligne” sur cette page doit également être active. Vous pourrez la modifier plus tard.&lt;br /&gt;
&lt;br /&gt;
*Après avoir validé les changements, aller dans la vue PHP Debug prespective, puis aller dans le menu Debug Configurations… Ici, vérifier que le Server Debugger est positionné à XDebug, et que votre server PHP pointe sur http://localhost/ ou le chemin approprié au serveur. La zone de localisation des fichiers doit de plus pointer sur le fichier à débugger, relativement à votre workspace. Ce chemin doit être quelquechose comme /dolibarr/htdocs/index.php.&lt;br /&gt;
&lt;br /&gt;
*Vérifiez la section URL pour voir si elle pointe correctement – si non, vérifier que la case “Auto-Generate” est bien décochée, et entrer manuellement le bon chemin. Appliquer les changement et fermer la fenêtre de dialogue.&lt;br /&gt;
&lt;br /&gt;
*Vous devriez maintenant être prêt pour lancer du debug de Dolibarr. Cliquer sur Run-&amp;gt;Debug ou F11 pour activer le debug, Eclipse devrait basculer sur la vue Debug, et la page devrait commencer à se charger dans le navigateur externe. Si la case “Break at First Line” a bien été cochée précédemment, alors le programme aura stoppé à la première ligne. Vous pouvez alors faire du pas à pas sur les lignes de code successives en utilisant les boutons de la barre de Debug d&#039;Eclipse. Eventuellement, vous pouvez placer des point d&#039;arrêts à différents endroits du code pour y stopper l&#039;exécution du code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite pour analyser les fichiers de profiling générés par XDebug, il faut appeler l&#039;url avec XDEBUG_PROFILE=1 pour générer le fichier profiling puis installer KCacheGrind (Linux) ou WinCacheGrind (Windows) pour l&#039;analyser.&lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code (VSCode)===&lt;br /&gt;
Pour fonctionner sous VSCode, la configuration XDebug se fait par un fichier client, par exemple avec le port 9000 : &lt;br /&gt;
=====Configuration dans l&#039;IDE=====&lt;br /&gt;
Fichier de projet : .vscode/launch.json&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, visitez : [https://go.microsoft.com/fwlink/?linkid=830387 la documentation de l&#039;éditeur]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
// Utilisez IntelliSense pour en savoir plus sur les attributs possibles.&lt;br /&gt;
// Pointez pour afficher la description des attributs existants.&lt;br /&gt;
// Pour plus d&#039;informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387&lt;br /&gt;
&amp;quot;version&amp;quot;: &amp;quot;0.2.0&amp;quot;,&lt;br /&gt;
&amp;quot;configurations&amp;quot;: [&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;name&amp;quot;: &amp;quot;Écouter pour Xdebug&amp;quot;,&lt;br /&gt;
&amp;quot;type&amp;quot;: &amp;quot;php&amp;quot;,&lt;br /&gt;
&amp;quot;request&amp;quot;: &amp;quot;launch&amp;quot;,&lt;br /&gt;
&amp;quot;port&amp;quot;: 9000,&lt;br /&gt;
&amp;quot;pathMappings&amp;quot;: {&lt;br /&gt;
&amp;quot;/vagrant/dolibarr/&amp;quot;: &amp;quot;${workspaceRoot}&amp;quot;&lt;br /&gt;
},&lt;br /&gt;
&amp;quot;log&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Noter à la ligne &#039;&#039;&#039;13&#039;&#039;&#039; la clé est le chemin du serveur web qui correspond à la racine du projet (dans cet exemple, le dossier racine Dolibarr).&lt;br /&gt;
&lt;br /&gt;
=====Configuration dans le php.ini du serveur web=====&lt;br /&gt;
&lt;br /&gt;
En plus de ce qui est écrit plus haut, ajouter à la section xdebug de php.ini :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
xdebug.remote_autostart = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pour développer ou utiliser les contrôles Qualité (PHPUnit, PHPCodeSniffer, PHPCpd, PHPDepends)==&lt;br /&gt;
===Depuis Eclipse===&lt;br /&gt;
Le plugin PTI pour utiliser PHPUnit et PHPCodesniffer est maintenant abandonnée.&lt;br /&gt;
&lt;br /&gt;
*Pour utiliser PHPUnit, ceci est disponible en standard dans une installation de base d&#039;Eclipse.&lt;br /&gt;
&lt;br /&gt;
*Pour utiliser PHPCodesniffer, vous pouvez créer une entrée &amp;quot;External Tools&amp;quot; avec une configuration de ce type&lt;br /&gt;
&lt;br /&gt;
[[Image:Setup_phpcs.png]]&lt;br /&gt;
&lt;br /&gt;
===En ligne de commande manuelle===&lt;br /&gt;
====Installer PHPUnit====&lt;br /&gt;
&lt;br /&gt;
*Télécharger l&#039;archive de la version sur http://pear.phpunit.de/get/ et dézipper le contenu dans un répertoire inclus dans le paramètre include_path de votre fichier de configuration php.ini.&lt;br /&gt;
*Donner les permissions de s&#039;exécuter (chmod +x phpunit sur Linux).&lt;br /&gt;
*Le module xdebug est également requis si vous voulez faire du reporting de couverture de tests.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE :&#039;&#039;&#039; Les tests Selenium ne fonctionnent qu&#039;avec PHPUnit 4, installé avec &#039;&#039;composer install&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====Exécuter les tests PHPUnit====&lt;br /&gt;
&lt;br /&gt;
*Aller dans le répertoire &#039;&#039;&#039;/test&#039;&#039;&#039; des sources. Reportez vous au fichier &#039;&#039;&#039;README&#039;&#039;&#039; pour connaitre la procédure pour lancer un ou plusieurs tests PHPUnit.&lt;br /&gt;
&lt;br /&gt;
====Installer les autres outils====&lt;br /&gt;
&lt;br /&gt;
*Référez vous à la documentation des différents outils (PHPCodeSniffer, PHPCpd, PHPDepends) pour leur installation et utilisation en ligne de commande. Par exemple, pour installer ou mettre à jour PHPCodeSniffer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo pear upgrade PHP_CodeSniffer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Les librairies pear seront installées dans &#039;&#039;&#039;/usr/share/php/PHP&#039;&#039;&#039; mais pour les prendre en compte avec Eclipse PTI, il faut ajouter une entrée &amp;quot;PHP&amp;quot; sur &#039;&#039;&#039;/usr/share/php&#039;&#039;&#039; et configurer PHPCheckstyle pour utiliser cette entrée.&lt;br /&gt;
&lt;br /&gt;
==Pour développer ou utiliser les tests Selenium==&lt;br /&gt;
&lt;br /&gt;
===Depuis Google Chrome et la ligne de commande===&lt;br /&gt;
Suivre ces étapes pour agencer un environnement de test Selenium pour vos modules.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Prérequis :&#039;&#039;&#039;====&lt;br /&gt;
Sur votre poste de développement / machine de test : &lt;br /&gt;
&lt;br /&gt;
*Vous avez téléchargé selenium-server-standalone.jar en version 2.53.1 (ou dernière version de Selenium 2)&lt;br /&gt;
**https://github.com/SeleniumHQ/selenium/releases/download/selenium-2.53.1/selenium-server-standalone-2.53.1.jar&lt;br /&gt;
*Vous avez téléchargé chromedriver pour la version 83 de Google Chrome WebDriver&lt;br /&gt;
**https://chromedriver.storage.googleapis.com/index.html?path=83.0.4103.14/&lt;br /&gt;
**Le fichier binaire &#039;&#039;chromedriver&#039;&#039; est extrait et est exécutable (chmod +x)&lt;br /&gt;
&lt;br /&gt;
====Agencement :====&lt;br /&gt;
Commencer par lancer le serveur Selenium en spécifiant le chemin vers l&#039;exécutable &#039;&#039;chromedriver.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
p. ex :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~/Développement/selenium$ java -jar -Dwebdriver.chrome.driver=/home/[votre_usager]/chromedriver-linux64/chromedriver selenium-server-standalone-2.53.1.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:Capture d’écran de 2023-08-03 14-55-34.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, renseigner l&#039;adresse de votre instance à tester dans le fichier de test (variable $base_url). et modifiez les paramètres $dol_admin_user et $dol_admin_password de sorte que ça corresponde à un identifiant valide, et modifier la fonction authenticate() du fichier de test pour utiliser ces variables ($login-&amp;gt;value(self::$dol_admin_user); etc. ).&lt;br /&gt;
&lt;br /&gt;
Enfin, exécuter la commande phpunit sur le fichier de test à exécuter, pour utiliser le fichier binaire fourni avec Dolibarr va exécuter le test dans Selenium avec Chrome WebDriver. &lt;br /&gt;
&lt;br /&gt;
P. ex. :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~/dolibarr-dev/htdocs/custom/monmodule/test$ ../../../includes/bin/phpunit ./phpunit/functionnal/MonModuleFunctionalTest.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ModuleBuilder de Dolibarr créé déjà pour nous les méthodes de base pour tester un nouveau module et ses pages de configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bons tests !&lt;br /&gt;
&lt;br /&gt;
===Depuis Firefox===&lt;br /&gt;
====Installer le plugin pour Firefox Selenium IDE====&lt;br /&gt;
&lt;br /&gt;
*Télécharger le fichier du plugin Selenium IDE pour Firefox.&lt;br /&gt;
*L&#039;ajouter dans Outils - Modules complémentaires de Firefox.&lt;br /&gt;
&lt;br /&gt;
====Exécuter les tests Selenium====&lt;br /&gt;
&lt;br /&gt;
*Aller dans le menu Outils - Selinum IDE de firefox.&lt;br /&gt;
*Ouvrir le fichier de tests xml&lt;br /&gt;
*Executer le test.&lt;br /&gt;
&lt;br /&gt;
==Pour générer la documentation Doxygen==&lt;br /&gt;
&lt;br /&gt;
*Installer Doxygen disponible sur http://www.doxygen.org (ou par le package doxygen sous Ubuntu).&lt;br /&gt;
*Installer le plugin Eclipse en ajoutant l&#039;url source http://download.gna.org/eclox/update/ dans l&#039;outil de mise à jour Eclipse puis configurer Eclipse pour indiquer l&#039;emplacement de Doxygen (Window-Preferences-Doxygen).&lt;br /&gt;
&lt;br /&gt;
==Pour ajouter le support asciidoc à Eclipse==&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL http://download.eclipse.org/mylyn/snapshots/nightly/docs/ dans les Install repositories. Puis installer le package &#039;&#039;&#039;Mylyn Docs - Mylyn Wikitext Extras&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement_-_Composants_optionnels&amp;diff=57283</id>
		<title>Outils de développement - Composants optionnels</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement_-_Composants_optionnels&amp;diff=57283"/>
		<updated>2023-08-03T19:15:18Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: /* Agencement : */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDev}}&lt;br /&gt;
Cette page liste les composants et autres technologies supplémentaires que vous pourriez vouloir installer sur votre environnement de développement. Elles ne sont pas requises pour développer sur Dolibarr, ni pour réaliser des modules mais peuvent être utiles pour des travaux très particuliers.&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire des scripts en Perl==&lt;br /&gt;
&lt;br /&gt;
*Installation du plugin Eclipse pour Perl: EPIC&lt;br /&gt;
&lt;br /&gt;
Pour cela, utiliser la procédure &#039;&#039;&#039;Find And Install&#039;&#039;&#039; et ajouter l&#039;URL de mise à jour: http://e-p-i-c.sourceforge.net/updates&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire des scripts en Python==&lt;br /&gt;
&lt;br /&gt;
*Installation du plugin Eclipse pour PyThon: PyDev&lt;br /&gt;
&lt;br /&gt;
Pour cela, utiliser la procédure &#039;&#039;&#039;Find And Install&#039;&#039;&#039; et ajouter l&#039;URL de mise à jour: http://pydev.org/updates&lt;br /&gt;
&lt;br /&gt;
==Si vous êtes sous Windows==&lt;br /&gt;
&lt;br /&gt;
*Notepad++ (pour ceux qui ne supportent pas java ou utilisent un vieux coucou trop faible pour Eclipse).&lt;br /&gt;
&lt;br /&gt;
*WinMerge (pour la comparaison de fichiers ou répertoires)&lt;br /&gt;
&lt;br /&gt;
*CygWin (pour la commande patch si vous préferez les lignes de commandes)&lt;br /&gt;
&lt;br /&gt;
A noter que Netbeans-PHP fonctionne efficacement avec Dolibarr.&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire du debuggage pas à pas ou du tunning (XDebug)==&lt;br /&gt;
&lt;br /&gt;
*Pour ajouter des infos de tuning page dans la console javascript à partir de Dolibarr 3.8, ajouter la variable d&#039;environnement MAIN_SHOW_TUNING_INFO à 1 dans Apache. Pour cela, inclure la ligne suivante dans votre fichier apache.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
SetEnv MAIN_SHOW_TUNING_INFO 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Pour du tuning à la ligne de code près, installer XDebug:&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_windows.png|24px]] In Windows===&lt;br /&gt;
&lt;br /&gt;
*Télécharger le fichier dll &#039;&#039;&#039;php_debug_xxx.dll&#039;&#039;&#039; sur http://www.xdebug.org et stocker le dans le répertoire /ext de php. Ensuite activer le plugin.&lt;br /&gt;
&lt;br /&gt;
*Modifier le ficiher php.ini ou xdebug.ini pour ajouter le paramètres suivant:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 [xdebug]&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=c:/temp&lt;br /&gt;
 xdebug.profiler_append=0&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_ubuntu.png|24px]] In Ubuntu / Linux===&lt;br /&gt;
&lt;br /&gt;
*Installer le package &#039;&#039;&#039;php-xdebug&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install php5-xdebug&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Modifier xdebug.ini pour ajouter les paramètres suivants après les lignes de type zend_extension=xxx (ou similaire):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 ; With xdebug 2.1 and more&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=/tmp&lt;br /&gt;
 xdebug.profiler_append=0&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
 ; Add also this for xdebug 2.2 and more&lt;br /&gt;
 xdebug.show_mem_delta=1&lt;br /&gt;
 xdebug.trace_output_dir=/tmp&lt;br /&gt;
 xdebug.auto_trace=0&lt;br /&gt;
 xdebug.trace_enable_trigger=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Eclipsephp.jpg|24px]] Eclipse configuration===&lt;br /&gt;
&lt;br /&gt;
*Ouvrir Eclipse. Dans Window-&amp;gt;Preferences-&amp;gt;General-&amp;gt;Web Browser, sélectionner navigateur externe, et choisir le navigateur par défaut de votre système.&lt;br /&gt;
&lt;br /&gt;
*Aller dans la rubrique Window-&amp;gt;Preferences-&amp;gt;PHP-&amp;gt;Debug, et positionner les options PHP Debugger à XDebug. Remarquer que la case “Stop a la première ligne” sur cette page doit également être active. Vous pourrez la modifier plus tard.&lt;br /&gt;
&lt;br /&gt;
*Après avoir validé les changements, aller dans la vue PHP Debug prespective, puis aller dans le menu Debug Configurations… Ici, vérifier que le Server Debugger est positionné à XDebug, et que votre server PHP pointe sur http://localhost/ ou le chemin approprié au serveur. La zone de localisation des fichiers doit de plus pointer sur le fichier à débugger, relativement à votre workspace. Ce chemin doit être quelquechose comme /dolibarr/htdocs/index.php.&lt;br /&gt;
&lt;br /&gt;
*Vérifiez la section URL pour voir si elle pointe correctement – si non, vérifier que la case “Auto-Generate” est bien décochée, et entrer manuellement le bon chemin. Appliquer les changement et fermer la fenêtre de dialogue.&lt;br /&gt;
&lt;br /&gt;
*Vous devriez maintenant être prêt pour lancer du debug de Dolibarr. Cliquer sur Run-&amp;gt;Debug ou F11 pour activer le debug, Eclipse devrait basculer sur la vue Debug, et la page devrait commencer à se charger dans le navigateur externe. Si la case “Break at First Line” a bien été cochée précédemment, alors le programme aura stoppé à la première ligne. Vous pouvez alors faire du pas à pas sur les lignes de code successives en utilisant les boutons de la barre de Debug d&#039;Eclipse. Eventuellement, vous pouvez placer des point d&#039;arrêts à différents endroits du code pour y stopper l&#039;exécution du code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite pour analyser les fichiers de profiling générés par XDebug, il faut appeler l&#039;url avec XDEBUG_PROFILE=1 pour générer le fichier profiling puis installer KCacheGrind (Linux) ou WinCacheGrind (Windows) pour l&#039;analyser.&lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code (VSCode)===&lt;br /&gt;
Pour fonctionner sous VSCode, la configuration XDebug se fait par un fichier client, par exemple avec le port 9000 : &lt;br /&gt;
=====Configuration dans l&#039;IDE=====&lt;br /&gt;
Fichier de projet : .vscode/launch.json&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, visitez : [https://go.microsoft.com/fwlink/?linkid=830387 la documentation de l&#039;éditeur]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
// Utilisez IntelliSense pour en savoir plus sur les attributs possibles.&lt;br /&gt;
// Pointez pour afficher la description des attributs existants.&lt;br /&gt;
// Pour plus d&#039;informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387&lt;br /&gt;
&amp;quot;version&amp;quot;: &amp;quot;0.2.0&amp;quot;,&lt;br /&gt;
&amp;quot;configurations&amp;quot;: [&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;name&amp;quot;: &amp;quot;Écouter pour Xdebug&amp;quot;,&lt;br /&gt;
&amp;quot;type&amp;quot;: &amp;quot;php&amp;quot;,&lt;br /&gt;
&amp;quot;request&amp;quot;: &amp;quot;launch&amp;quot;,&lt;br /&gt;
&amp;quot;port&amp;quot;: 9000,&lt;br /&gt;
&amp;quot;pathMappings&amp;quot;: {&lt;br /&gt;
&amp;quot;/vagrant/dolibarr/&amp;quot;: &amp;quot;${workspaceRoot}&amp;quot;&lt;br /&gt;
},&lt;br /&gt;
&amp;quot;log&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Noter à la ligne &#039;&#039;&#039;13&#039;&#039;&#039; la clé est le chemin du serveur web qui correspond à la racine du projet (dans cet exemple, le dossier racine Dolibarr).&lt;br /&gt;
&lt;br /&gt;
=====Configuration dans le php.ini du serveur web=====&lt;br /&gt;
&lt;br /&gt;
En plus de ce qui est écrit plus haut, ajouter à la section xdebug de php.ini :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
xdebug.remote_autostart = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pour développer ou utiliser les contrôles Qualité (PHPUnit, PHPCodeSniffer, PHPCpd, PHPDepends)==&lt;br /&gt;
===Depuis Eclipse===&lt;br /&gt;
Le plugin PTI pour utiliser PHPUnit et PHPCodesniffer est maintenant abandonnée.&lt;br /&gt;
&lt;br /&gt;
*Pour utiliser PHPUnit, ceci est disponible en standard dans une installation de base d&#039;Eclipse.&lt;br /&gt;
&lt;br /&gt;
*Pour utiliser PHPCodesniffer, vous pouvez créer une entrée &amp;quot;External Tools&amp;quot; avec une configuration de ce type&lt;br /&gt;
&lt;br /&gt;
[[Image:Setup_phpcs.png]]&lt;br /&gt;
&lt;br /&gt;
===En ligne de commande manuelle===&lt;br /&gt;
====Installer PHPUnit====&lt;br /&gt;
&lt;br /&gt;
*Télécharger l&#039;archive de la version sur http://pear.phpunit.de/get/ et dézipper le contenu dans un répertoire inclus dans le paramètre include_path de votre fichier de configuration php.ini.&lt;br /&gt;
*Donner les permissions de s&#039;exécuter (chmod +x phpunit sur Linux).&lt;br /&gt;
*Le module xdebug est également requis si vous voulez faire du reporting de couverture de tests.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE :&#039;&#039;&#039; Les tests Selenium ne fonctionnent qu&#039;avec PHPUnit 4, installé avec &#039;&#039;composer install&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====Exécuter les tests PHPUnit====&lt;br /&gt;
&lt;br /&gt;
*Aller dans le répertoire &#039;&#039;&#039;/test&#039;&#039;&#039; des sources. Reportez vous au fichier &#039;&#039;&#039;README&#039;&#039;&#039; pour connaitre la procédure pour lancer un ou plusieurs tests PHPUnit.&lt;br /&gt;
&lt;br /&gt;
====Installer les autres outils====&lt;br /&gt;
&lt;br /&gt;
*Référez vous à la documentation des différents outils (PHPCodeSniffer, PHPCpd, PHPDepends) pour leur installation et utilisation en ligne de commande. Par exemple, pour installer ou mettre à jour PHPCodeSniffer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo pear upgrade PHP_CodeSniffer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Les librairies pear seront installées dans &#039;&#039;&#039;/usr/share/php/PHP&#039;&#039;&#039; mais pour les prendre en compte avec Eclipse PTI, il faut ajouter une entrée &amp;quot;PHP&amp;quot; sur &#039;&#039;&#039;/usr/share/php&#039;&#039;&#039; et configurer PHPCheckstyle pour utiliser cette entrée.&lt;br /&gt;
&lt;br /&gt;
==Pour développer ou utiliser les tests Selenium==&lt;br /&gt;
&lt;br /&gt;
===Depuis Google Chrome et la ligne de commande===&lt;br /&gt;
Suivre ces étapes pour agencer un environnement de test Selenium pour vos modules.&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;&#039;Prérequis :&#039;&#039;&#039;====&lt;br /&gt;
Sur votre poste de développement / machine de test : &lt;br /&gt;
&lt;br /&gt;
*Vous avez téléchargé selenium-server-standalone.jar en version 2.53.1 (ou dernière version de Selenium 2)&lt;br /&gt;
**https://github.com/SeleniumHQ/selenium/releases/download/selenium-2.53.1/selenium-server-standalone-2.53.1.jar&lt;br /&gt;
*Vous avez téléchargé chromedriver pour la version 83 de Google Chrome WebDriver&lt;br /&gt;
**https://chromedriver.storage.googleapis.com/index.html?path=83.0.4103.14/&lt;br /&gt;
**Le fichier binaire &#039;&#039;chromedriver&#039;&#039; est extrait et est exécutable (chmod +x)&lt;br /&gt;
&lt;br /&gt;
====Agencement :====&lt;br /&gt;
Commencez par lancer le serveur Selenium en spécifiant le chemin vers l&#039;exécutable &#039;&#039;chromedriver.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
p. ex :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~/Développement/selenium$ java -jar -Dwebdriver.chrome.driver=/home/[votre_usager]/chromedriver-linux64/chromedriver selenium-server-standalone-2.53.1.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:Capture d’écran de 2023-08-03 14-55-34.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, renseignez l&#039;adresse de votre instance à tester dans le fichier de test (variable $base_url). et modifiez les paramètres $dol_admin_user et $dol_admin_password de sorte que ça corresponde à un identifiant valide, et modifier la fonction authenticate() du fichier de test pour utiliser ces variables ($login-&amp;gt;value(self::$dol_admin_user); etc. ).&lt;br /&gt;
&lt;br /&gt;
Enfin, exécuter la commande phpunit sur le fichier de test à exécuter, pour utiliser le fichier binaire fourni avec Dolibarr va exécuter le test dans Selenium avec Chrome WebDriver. &lt;br /&gt;
&lt;br /&gt;
P. ex. :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~/dolibarr-dev/htdocs/custom/monmodule/test$ ../../../includes/bin/phpunit ./phpunit/functionnal/MonModuleFunctionalTest.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ModuleBuilder de Dolibarr créé déjà pour nous les méthodes de base pour tester un nouveau module et ses pages de configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bons tests !&lt;br /&gt;
&lt;br /&gt;
===Depuis Firefox===&lt;br /&gt;
====Installer le plugin pour Firefox Selenium IDE====&lt;br /&gt;
&lt;br /&gt;
*Télécharger le fichier du plugin Selenium IDE pour Firefox.&lt;br /&gt;
*L&#039;ajouter dans Outils - Modules complémentaires de Firefox.&lt;br /&gt;
&lt;br /&gt;
====Exécuter les tests Selenium====&lt;br /&gt;
&lt;br /&gt;
*Aller dans le menu Outils - Selinum IDE de firefox.&lt;br /&gt;
*Ouvrir le fichier de tests xml&lt;br /&gt;
*Executer le test.&lt;br /&gt;
&lt;br /&gt;
==Pour générer la documentation Doxygen==&lt;br /&gt;
&lt;br /&gt;
*Installer Doxygen disponible sur http://www.doxygen.org (ou par le package doxygen sous Ubuntu).&lt;br /&gt;
*Installer le plugin Eclipse en ajoutant l&#039;url source http://download.gna.org/eclox/update/ dans l&#039;outil de mise à jour Eclipse puis configurer Eclipse pour indiquer l&#039;emplacement de Doxygen (Window-Preferences-Doxygen).&lt;br /&gt;
&lt;br /&gt;
==Pour ajouter le support asciidoc à Eclipse==&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL http://download.eclipse.org/mylyn/snapshots/nightly/docs/ dans les Install repositories. Puis installer le package &#039;&#039;&#039;Mylyn Docs - Mylyn Wikitext Extras&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement_-_Composants_optionnels&amp;diff=57282</id>
		<title>Outils de développement - Composants optionnels</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement_-_Composants_optionnels&amp;diff=57282"/>
		<updated>2023-08-03T19:14:24Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: /* Pour développer ou utiliser les tests Selenium */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDev}}&lt;br /&gt;
Cette page liste les composants et autres technologies supplémentaires que vous pourriez vouloir installer sur votre environnement de développement. Elles ne sont pas requises pour développer sur Dolibarr, ni pour réaliser des modules mais peuvent être utiles pour des travaux très particuliers.&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire des scripts en Perl==&lt;br /&gt;
&lt;br /&gt;
*Installation du plugin Eclipse pour Perl: EPIC&lt;br /&gt;
&lt;br /&gt;
Pour cela, utiliser la procédure &#039;&#039;&#039;Find And Install&#039;&#039;&#039; et ajouter l&#039;URL de mise à jour: http://e-p-i-c.sourceforge.net/updates&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire des scripts en Python==&lt;br /&gt;
&lt;br /&gt;
*Installation du plugin Eclipse pour PyThon: PyDev&lt;br /&gt;
&lt;br /&gt;
Pour cela, utiliser la procédure &#039;&#039;&#039;Find And Install&#039;&#039;&#039; et ajouter l&#039;URL de mise à jour: http://pydev.org/updates&lt;br /&gt;
&lt;br /&gt;
==Si vous êtes sous Windows==&lt;br /&gt;
&lt;br /&gt;
*Notepad++ (pour ceux qui ne supportent pas java ou utilisent un vieux coucou trop faible pour Eclipse).&lt;br /&gt;
&lt;br /&gt;
*WinMerge (pour la comparaison de fichiers ou répertoires)&lt;br /&gt;
&lt;br /&gt;
*CygWin (pour la commande patch si vous préferez les lignes de commandes)&lt;br /&gt;
&lt;br /&gt;
A noter que Netbeans-PHP fonctionne efficacement avec Dolibarr.&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire du debuggage pas à pas ou du tunning (XDebug)==&lt;br /&gt;
&lt;br /&gt;
*Pour ajouter des infos de tuning page dans la console javascript à partir de Dolibarr 3.8, ajouter la variable d&#039;environnement MAIN_SHOW_TUNING_INFO à 1 dans Apache. Pour cela, inclure la ligne suivante dans votre fichier apache.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
SetEnv MAIN_SHOW_TUNING_INFO 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Pour du tuning à la ligne de code près, installer XDebug:&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_windows.png|24px]] In Windows===&lt;br /&gt;
&lt;br /&gt;
*Télécharger le fichier dll &#039;&#039;&#039;php_debug_xxx.dll&#039;&#039;&#039; sur http://www.xdebug.org et stocker le dans le répertoire /ext de php. Ensuite activer le plugin.&lt;br /&gt;
&lt;br /&gt;
*Modifier le ficiher php.ini ou xdebug.ini pour ajouter le paramètres suivant:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 [xdebug]&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=c:/temp&lt;br /&gt;
 xdebug.profiler_append=0&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_ubuntu.png|24px]] In Ubuntu / Linux===&lt;br /&gt;
&lt;br /&gt;
*Installer le package &#039;&#039;&#039;php-xdebug&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install php5-xdebug&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Modifier xdebug.ini pour ajouter les paramètres suivants après les lignes de type zend_extension=xxx (ou similaire):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 ; With xdebug 2.1 and more&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=/tmp&lt;br /&gt;
 xdebug.profiler_append=0&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
 ; Add also this for xdebug 2.2 and more&lt;br /&gt;
 xdebug.show_mem_delta=1&lt;br /&gt;
 xdebug.trace_output_dir=/tmp&lt;br /&gt;
 xdebug.auto_trace=0&lt;br /&gt;
 xdebug.trace_enable_trigger=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Eclipsephp.jpg|24px]] Eclipse configuration===&lt;br /&gt;
&lt;br /&gt;
*Ouvrir Eclipse. Dans Window-&amp;gt;Preferences-&amp;gt;General-&amp;gt;Web Browser, sélectionner navigateur externe, et choisir le navigateur par défaut de votre système.&lt;br /&gt;
&lt;br /&gt;
*Aller dans la rubrique Window-&amp;gt;Preferences-&amp;gt;PHP-&amp;gt;Debug, et positionner les options PHP Debugger à XDebug. Remarquer que la case “Stop a la première ligne” sur cette page doit également être active. Vous pourrez la modifier plus tard.&lt;br /&gt;
&lt;br /&gt;
*Après avoir validé les changements, aller dans la vue PHP Debug prespective, puis aller dans le menu Debug Configurations… Ici, vérifier que le Server Debugger est positionné à XDebug, et que votre server PHP pointe sur http://localhost/ ou le chemin approprié au serveur. La zone de localisation des fichiers doit de plus pointer sur le fichier à débugger, relativement à votre workspace. Ce chemin doit être quelquechose comme /dolibarr/htdocs/index.php.&lt;br /&gt;
&lt;br /&gt;
*Vérifiez la section URL pour voir si elle pointe correctement – si non, vérifier que la case “Auto-Generate” est bien décochée, et entrer manuellement le bon chemin. Appliquer les changement et fermer la fenêtre de dialogue.&lt;br /&gt;
&lt;br /&gt;
*Vous devriez maintenant être prêt pour lancer du debug de Dolibarr. Cliquer sur Run-&amp;gt;Debug ou F11 pour activer le debug, Eclipse devrait basculer sur la vue Debug, et la page devrait commencer à se charger dans le navigateur externe. Si la case “Break at First Line” a bien été cochée précédemment, alors le programme aura stoppé à la première ligne. Vous pouvez alors faire du pas à pas sur les lignes de code successives en utilisant les boutons de la barre de Debug d&#039;Eclipse. Eventuellement, vous pouvez placer des point d&#039;arrêts à différents endroits du code pour y stopper l&#039;exécution du code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite pour analyser les fichiers de profiling générés par XDebug, il faut appeler l&#039;url avec XDEBUG_PROFILE=1 pour générer le fichier profiling puis installer KCacheGrind (Linux) ou WinCacheGrind (Windows) pour l&#039;analyser.&lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code (VSCode)===&lt;br /&gt;
Pour fonctionner sous VSCode, la configuration XDebug se fait par un fichier client, par exemple avec le port 9000 : &lt;br /&gt;
=====Configuration dans l&#039;IDE=====&lt;br /&gt;
Fichier de projet : .vscode/launch.json&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, visitez : [https://go.microsoft.com/fwlink/?linkid=830387 la documentation de l&#039;éditeur]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
// Utilisez IntelliSense pour en savoir plus sur les attributs possibles.&lt;br /&gt;
// Pointez pour afficher la description des attributs existants.&lt;br /&gt;
// Pour plus d&#039;informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387&lt;br /&gt;
&amp;quot;version&amp;quot;: &amp;quot;0.2.0&amp;quot;,&lt;br /&gt;
&amp;quot;configurations&amp;quot;: [&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;name&amp;quot;: &amp;quot;Écouter pour Xdebug&amp;quot;,&lt;br /&gt;
&amp;quot;type&amp;quot;: &amp;quot;php&amp;quot;,&lt;br /&gt;
&amp;quot;request&amp;quot;: &amp;quot;launch&amp;quot;,&lt;br /&gt;
&amp;quot;port&amp;quot;: 9000,&lt;br /&gt;
&amp;quot;pathMappings&amp;quot;: {&lt;br /&gt;
&amp;quot;/vagrant/dolibarr/&amp;quot;: &amp;quot;${workspaceRoot}&amp;quot;&lt;br /&gt;
},&lt;br /&gt;
&amp;quot;log&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Noter à la ligne &#039;&#039;&#039;13&#039;&#039;&#039; la clé est le chemin du serveur web qui correspond à la racine du projet (dans cet exemple, le dossier racine Dolibarr).&lt;br /&gt;
&lt;br /&gt;
=====Configuration dans le php.ini du serveur web=====&lt;br /&gt;
&lt;br /&gt;
En plus de ce qui est écrit plus haut, ajouter à la section xdebug de php.ini :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
xdebug.remote_autostart = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pour développer ou utiliser les contrôles Qualité (PHPUnit, PHPCodeSniffer, PHPCpd, PHPDepends)==&lt;br /&gt;
===Depuis Eclipse===&lt;br /&gt;
Le plugin PTI pour utiliser PHPUnit et PHPCodesniffer est maintenant abandonnée.&lt;br /&gt;
&lt;br /&gt;
*Pour utiliser PHPUnit, ceci est disponible en standard dans une installation de base d&#039;Eclipse.&lt;br /&gt;
&lt;br /&gt;
*Pour utiliser PHPCodesniffer, vous pouvez créer une entrée &amp;quot;External Tools&amp;quot; avec une configuration de ce type&lt;br /&gt;
&lt;br /&gt;
[[Image:Setup_phpcs.png]]&lt;br /&gt;
&lt;br /&gt;
===En ligne de commande manuelle===&lt;br /&gt;
====Installer PHPUnit====&lt;br /&gt;
&lt;br /&gt;
*Télécharger l&#039;archive de la version sur http://pear.phpunit.de/get/ et dézipper le contenu dans un répertoire inclus dans le paramètre include_path de votre fichier de configuration php.ini.&lt;br /&gt;
*Donner les permissions de s&#039;exécuter (chmod +x phpunit sur Linux).&lt;br /&gt;
*Le module xdebug est également requis si vous voulez faire du reporting de couverture de tests.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE :&#039;&#039;&#039; Les tests Selenium ne fonctionnent qu&#039;avec PHPUnit 4, installé avec &#039;&#039;composer install&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====Exécuter les tests PHPUnit====&lt;br /&gt;
&lt;br /&gt;
*Aller dans le répertoire &#039;&#039;&#039;/test&#039;&#039;&#039; des sources. Reportez vous au fichier &#039;&#039;&#039;README&#039;&#039;&#039; pour connaitre la procédure pour lancer un ou plusieurs tests PHPUnit.&lt;br /&gt;
&lt;br /&gt;
====Installer les autres outils====&lt;br /&gt;
&lt;br /&gt;
*Référez vous à la documentation des différents outils (PHPCodeSniffer, PHPCpd, PHPDepends) pour leur installation et utilisation en ligne de commande. Par exemple, pour installer ou mettre à jour PHPCodeSniffer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo pear upgrade PHP_CodeSniffer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Les librairies pear seront installées dans &#039;&#039;&#039;/usr/share/php/PHP&#039;&#039;&#039; mais pour les prendre en compte avec Eclipse PTI, il faut ajouter une entrée &amp;quot;PHP&amp;quot; sur &#039;&#039;&#039;/usr/share/php&#039;&#039;&#039; et configurer PHPCheckstyle pour utiliser cette entrée.&lt;br /&gt;
&lt;br /&gt;
==Pour développer ou utiliser les tests Selenium==&lt;br /&gt;
&lt;br /&gt;
=== Depuis Google Chrome et la ligne de commande ===&lt;br /&gt;
Suivre ces étapes pour agencer un environnement de test Selenium pour vos modules.&lt;br /&gt;
&lt;br /&gt;
==== &#039;&#039;&#039;Prérequis :&#039;&#039;&#039; ====&lt;br /&gt;
Sur votre poste de développement / machine de test : &lt;br /&gt;
&lt;br /&gt;
* Vous avez téléchargé selenium-server-standalone.jar en version 2.53.1 (ou dernière version de Selenium 2)&lt;br /&gt;
** https://github.com/SeleniumHQ/selenium/releases/download/selenium-2.53.1/selenium-server-standalone-2.53.1.jar&lt;br /&gt;
* Vous avez téléchargé chromedriver pour la version 83 de Google Chrome WebDriver&lt;br /&gt;
** https://chromedriver.storage.googleapis.com/index.html?path=83.0.4103.14/&lt;br /&gt;
** Le fichier binaire &#039;&#039;chromedriver&#039;&#039; est extrait et est exécutable (chmod +x)&lt;br /&gt;
&lt;br /&gt;
==== Agencement : ====&lt;br /&gt;
Commencez par lancer le serveur Selenium en spécifiant le chemin vers l&#039;exécutable &#039;&#039;chromedriver.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
p. ex :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~/Développement/selenium$ java -jar -Dwebdriver.chrome.driver=/home/[votre_usager]/chromedriver-linux64/chromedriver selenium-server-standalone-2.53.1.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[File:Capture d’écran de 2023-08-03 14-55-34.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, renseignez l&#039;adresse de votre instance à tester dans le fichier de test (variable $base_url). et modifiez les paramètres $dol_admin_user et $dol_admin_password de sorte que ça corresponde à un identifiant valide, et modifier la fonction authenticate() du fichier de test pour utiliser ces variables ($login-&amp;gt;value(self::$dol_admin_user); etc. ).&lt;br /&gt;
&lt;br /&gt;
Enfin, exécuter la commande phpunit sur fichier de test à exécuter, pour utiliser le fichier binaire fourni avec Dolibarr va exécuter le test dans Selenium avec Chrome WebDriver. &lt;br /&gt;
&lt;br /&gt;
P. ex. :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
~/dolibarr-dev/htdocs/custom/monmodule/test$ ../../../includes/bin/phpunit ./phpunit/functionnal/MonModuleFunctionalTest.php&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ModuleBuilder de Dolibarr créé déjà pour nous les méthodes de base pour tester un nouveau module et ses pages de configuration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bons tests !&lt;br /&gt;
&lt;br /&gt;
===Depuis Firefox===&lt;br /&gt;
====Installer le plugin pour Firefox Selenium IDE====&lt;br /&gt;
&lt;br /&gt;
*Télécharger le fichier du plugin Selenium IDE pour Firefox.&lt;br /&gt;
*L&#039;ajouter dans Outils - Modules complémentaires de Firefox.&lt;br /&gt;
&lt;br /&gt;
====Exécuter les tests Selenium====&lt;br /&gt;
&lt;br /&gt;
*Aller dans le menu Outils - Selinum IDE de firefox.&lt;br /&gt;
*Ouvrir le fichier de tests xml&lt;br /&gt;
*Executer le test.&lt;br /&gt;
&lt;br /&gt;
==Pour générer la documentation Doxygen==&lt;br /&gt;
&lt;br /&gt;
*Installer Doxygen disponible sur http://www.doxygen.org (ou par le package doxygen sous Ubuntu).&lt;br /&gt;
*Installer le plugin Eclipse en ajoutant l&#039;url source http://download.gna.org/eclox/update/ dans l&#039;outil de mise à jour Eclipse puis configurer Eclipse pour indiquer l&#039;emplacement de Doxygen (Window-Preferences-Doxygen).&lt;br /&gt;
&lt;br /&gt;
==Pour ajouter le support asciidoc à Eclipse==&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL http://download.eclipse.org/mylyn/snapshots/nightly/docs/ dans les Install repositories. Puis installer le package &#039;&#039;&#039;Mylyn Docs - Mylyn Wikitext Extras&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=File:Capture_d%E2%80%99%C3%A9cran_de_2023-08-03_15-12-54.png&amp;diff=57281</id>
		<title>File:Capture d’écran de 2023-08-03 15-12-54.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=File:Capture_d%E2%80%99%C3%A9cran_de_2023-08-03_15-12-54.png&amp;diff=57281"/>
		<updated>2023-08-03T19:13:26Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Test en exécution.&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=File:Capture_d%E2%80%99%C3%A9cran_de_2023-08-03_14-55-34.png&amp;diff=57280</id>
		<title>File:Capture d’écran de 2023-08-03 14-55-34.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=File:Capture_d%E2%80%99%C3%A9cran_de_2023-08-03_14-55-34.png&amp;diff=57280"/>
		<updated>2023-08-03T18:56:18Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Serveur Selenium démarré&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Collecteur_de_courrier_%C3%A9lectronique&amp;diff=57079</id>
		<title>Module Collecteur de courrier électronique</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Collecteur_de_courrier_%C3%A9lectronique&amp;diff=57079"/>
		<updated>2023-07-07T16:32:27Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Module_EMail_Collector --&amp;gt;&lt;br /&gt;
[[en:Module_EMail_Collector]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Collecteur de courrier électronique|&lt;br /&gt;
num=50320|&lt;br /&gt;
devdoc=[[Module Collecteur de courrier électronique (développeur)]]|&lt;br /&gt;
userdoc=Cette page}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ajoute un travail planifié et une page de configuration pour analyser régulièrement les boîtes aux lettres (à l&#039;aide du protocole IMAP) et enregistrer les courriers électroniques reçus dans votre application, au bon endroit et/ou créer automatiquement certains enregistrements (comme des opportunités).&lt;br /&gt;
&lt;br /&gt;
Voir Quoi de neuf dans Dolibarr v10 : https://youtu.be/GaLi7uTYEm8?t=48 + https://youtu.be/lcUBteiW7gA?t=2887&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour déplacer un mail qui a été chargé, il est nécessaire de que le nom du dossier ne comporte pas de caractère spécial.&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Laissez le planificateur de travaux s&#039;exécuter automatiquement et voyez vos données enregistrées dans Dolibarr.&lt;br /&gt;
&lt;br /&gt;
Pour éviter d&#039;attendre trop, vous pouvez forcer à exécuter manuellement le collecteur d&#039;e-mails depuis la fiche du collecteur d&#039;e-mails avec le bouton &amp;quot;Exécuter maintenant&amp;quot;. Lors du test, une bonne pratique consiste à définir le nombre maximum d&#039;e-mails collectés sur une valeur faible.&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_Collecteur_de_courrier_%C3%A9lectronique&amp;diff=57078</id>
		<title>Module Collecteur de courrier électronique</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_Collecteur_de_courrier_%C3%A9lectronique&amp;diff=57078"/>
		<updated>2023-07-07T16:31:31Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Do NOT edit this section&lt;br /&gt;
     Links below are automatically managed by PolyglotBot&lt;br /&gt;
     You can edit links on the English source page : Module_EMail_Collector --&amp;gt;&lt;br /&gt;
[[en:Module_EMail_Collector]]&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TemplateDocUtil}}&lt;br /&gt;
{{TemplateModFR}}&lt;br /&gt;
{{BasculeDevUser|&lt;br /&gt;
nom=Collecteur de courrier électronique|&lt;br /&gt;
num=50320|&lt;br /&gt;
devdoc=[[Module Collecteur de courrier électronique (développeur)]]|&lt;br /&gt;
userdoc=Cette page}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
Ajoute un travail planifié et une page de configuration pour analyser régulièrement les boîtes aux lettres (à l&#039;aide du protocole IMAP) et enregistrer les courriers électroniques reçus dans votre application, au bon endroit et/ou créer automatiquement certains enregistrements (comme des opportunités).&lt;br /&gt;
&lt;br /&gt;
Voir Quoi de neuf dans Dolibarr v10 : &amp;lt;nowiki&amp;gt;https://youtu.be/GaLi7uTYEm8?t=48&amp;lt;/nowiki&amp;gt; + &amp;lt;nowiki&amp;gt;https://youtu.be/lcUBteiW7gA?t=2887&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleFr}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
{{ActivationModuleFr}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour déplacer un mail qui a été chargé, il est nécessaire de que le nom du dossier ne comporte pas de caractère spécial.&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
&lt;br /&gt;
Laissez le planificateur de travaux s&#039;exécuter automatiquement et voyez vos données enregistrées dans Dolibarr.&lt;br /&gt;
&lt;br /&gt;
Pour éviter d&#039;attendre trop, vous pouvez forcer à exécuter manuellement le collecteur d&#039;e-mails depuis la fiche du collecteur d&#039;e-mails avec le bouton &amp;quot;Exécuter maintenant&amp;quot;. Lors du test, une bonne pratique consiste à définir le nombre maximum d&#039;e-mails collectés sur une valeur faible.&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_EMail_Collector&amp;diff=57077</id>
		<title>Module EMail Collector</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_EMail_Collector&amp;diff=57077"/>
		<updated>2023-07-07T16:30:19Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: /* Examples and explanation of some collectors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN origin interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- You can edit this section but do NOT remove these comments&lt;br /&gt;
     Links below will be automatically replicated on translated pages by PolyglotBot --&amp;gt;&lt;br /&gt;
[[fr:Module_Collecteur_de_courrier_électronique]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
{{TemplateModEN}}&lt;br /&gt;
{{BasculeDevUserEn|&lt;br /&gt;
name=EMailCollector|&lt;br /&gt;
num=50320|&lt;br /&gt;
devdoc=[[Module EMail Collector (developer)]]|&lt;br /&gt;
userdoc=This page}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
This module permits to collect emails from a mailbox using the IMAP protocol and record event or data in your Dolbarr using information found into email.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleEn}}&lt;br /&gt;
&lt;br /&gt;
=Setup=&lt;br /&gt;
{{ActivationModuleEn}}&lt;br /&gt;
&lt;br /&gt;
==Create an email collector==&lt;br /&gt;
&lt;br /&gt;
Create as many email collector you need.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Source directory&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*To collect received email, enter here &amp;quot;INBOX&amp;quot;&lt;br /&gt;
*To collect email sent, enter here &amp;quot;Sent&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Target directory&#039;&#039;&#039;&lt;br /&gt;
A good practice is to move the collected email into another folder to avoid to have them collected twice.&lt;br /&gt;
You must create the output target IMAP directory manually before running your email collector.&lt;br /&gt;
&lt;br /&gt;
For example, with Gmail, to create a new IMAP directory:&lt;br /&gt;
&lt;br /&gt;
*Sign in to your Gmail account.&lt;br /&gt;
*At the top right of the Gmail window, click Settings See all settings.&lt;br /&gt;
*Click Labels.&lt;br /&gt;
*Create Label and check the box &amp;quot;Show in IMAP&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Filters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Operations to do&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Examples and explanation of some collectors=&lt;br /&gt;
&lt;br /&gt;
What&#039;s new in Dolibarr v10 : https://youtu.be/GaLi7uTYEm8?t=48 + https://youtu.be/lcUBteiW7gA?t=2887&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
Let the job scheduler being executed automatically and see your data being recorded into Dolibarr.&lt;br /&gt;
&lt;br /&gt;
To avoid to wait the batch, you can force to execute the email collector manually from the Email collector record with the button &amp;quot;Run now&amp;quot;. When making test, a good practice is to set the maximum number of email collected to a low value.&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_EMail_Collector&amp;diff=57057</id>
		<title>Module EMail Collector</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_EMail_Collector&amp;diff=57057"/>
		<updated>2023-07-06T19:45:00Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: /* Examples and explanation of some collectors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- BEGIN origin interlang links --&amp;gt;&lt;br /&gt;
&amp;lt;!-- You can edit this section but do NOT remove these comments&lt;br /&gt;
     Links below will be automatically replicated on translated pages by PolyglotBot --&amp;gt;&lt;br /&gt;
[[fr:Module_Collecteur_de_courrier_électronique]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- END interlang links --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{TemplateDocUser}}&lt;br /&gt;
{{TemplateModEN}}&lt;br /&gt;
{{BasculeDevUserEn|&lt;br /&gt;
name=EMailCollector|&lt;br /&gt;
num=50320|&lt;br /&gt;
devdoc=[[Module EMail Collector (developer)]]|&lt;br /&gt;
userdoc=This page}}&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
This module permits to collect emails from a mailbox using the IMAP protocol and record event or data in your Dolbarr using information found into email.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{NoInstallModuleEn}}&lt;br /&gt;
&lt;br /&gt;
=Setup=&lt;br /&gt;
{{ActivationModuleEn}}&lt;br /&gt;
&lt;br /&gt;
==Create an email collector==&lt;br /&gt;
&lt;br /&gt;
Create as many email collector you need.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Source directory&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*To collect received email, enter here &amp;quot;INBOX&amp;quot;&lt;br /&gt;
*To collect email sent, enter here &amp;quot;Sent&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Target directory&#039;&#039;&#039;&lt;br /&gt;
A good practice is to move the collected email into another folder to avoid to have them collected twice.&lt;br /&gt;
You must create the output target IMAP directory manually before running your email collector.&lt;br /&gt;
&lt;br /&gt;
For example, with Gmail, to create a new IMAP directory:&lt;br /&gt;
&lt;br /&gt;
*Sign in to your Gmail account.&lt;br /&gt;
*At the top right of the Gmail window, click Settings See all settings.&lt;br /&gt;
*Click Labels.&lt;br /&gt;
*Create Label and check the box &amp;quot;Show in IMAP&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Filters&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Operations to do&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Examples and explanation of some collectors=&lt;br /&gt;
&lt;br /&gt;
Nouveautés de Dolibarr v10 : https://youtu.be/GaLi7uTYEm8?t=48 + https://youtu.be/lcUBteiW7gA?t=2887&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
Let the job scheduler being executed automatically and see your data being recorded into Dolibarr.&lt;br /&gt;
&lt;br /&gt;
To avoid to wait the batch, you can force to execute the email collector manually from the Email collector record with the button &amp;quot;Run now&amp;quot;. When making test, a good practice is to set the maximum number of email collected to a low value.&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement_-_Composants_optionnels&amp;diff=55271</id>
		<title>Outils de développement - Composants optionnels</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement_-_Composants_optionnels&amp;diff=55271"/>
		<updated>2022-12-09T22:47:30Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: /* En ligne de commande manuelle */ note sur les tests Selenium&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDev}}&lt;br /&gt;
Cette page liste les composants et autres technologies supplémentaires que vous pourriez vouloir installer sur votre environnement de développement. Elles ne sont pas requises pour développer sur Dolibarr, ni pour réaliser des modules mais peuvent être utiles pour des travaux très particuliers.&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire des scripts en Perl==&lt;br /&gt;
&lt;br /&gt;
*Installation du plugin Eclipse pour Perl: EPIC&lt;br /&gt;
&lt;br /&gt;
Pour cela, utiliser la procédure &#039;&#039;&#039;Find And Install&#039;&#039;&#039; et ajouter l&#039;URL de mise à jour: http://e-p-i-c.sourceforge.net/updates&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire des scripts en Python==&lt;br /&gt;
&lt;br /&gt;
*Installation du plugin Eclipse pour PyThon: PyDev&lt;br /&gt;
&lt;br /&gt;
Pour cela, utiliser la procédure &#039;&#039;&#039;Find And Install&#039;&#039;&#039; et ajouter l&#039;URL de mise à jour: http://pydev.org/updates&lt;br /&gt;
&lt;br /&gt;
==Si vous êtes sous Windows==&lt;br /&gt;
&lt;br /&gt;
*Notepad++ (pour ceux qui ne supportent pas java ou utilisent un vieux coucou trop faible pour Eclipse).&lt;br /&gt;
&lt;br /&gt;
*WinMerge (pour la comparaison de fichiers ou répertoires)&lt;br /&gt;
&lt;br /&gt;
*CygWin (pour la commande patch si vous préferez les lignes de commandes)&lt;br /&gt;
&lt;br /&gt;
A noter que Netbeans-PHP fonctionne efficacement avec Dolibarr.&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire du debuggage pas à pas ou du tunning (XDebug)==&lt;br /&gt;
&lt;br /&gt;
*Pour ajouter des infos de tuning page dans la console javascript à partir de Dolibarr 3.8, ajouter la variable d&#039;environnement MAIN_SHOW_TUNING_INFO à 1 dans Apache. Pour cela, inclure la ligne suivante dans votre fichier apache.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
SetEnv MAIN_SHOW_TUNING_INFO 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Pour du tuning à la ligne de code près, installer XDebug:&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_windows.png|24px]] In Windows===&lt;br /&gt;
&lt;br /&gt;
*Télécharger le fichier dll &#039;&#039;&#039;php_debug_xxx.dll&#039;&#039;&#039; sur http://www.xdebug.org et stocker le dans le répertoire /ext de php. Ensuite activer le plugin.&lt;br /&gt;
&lt;br /&gt;
*Modifier le ficiher php.ini ou xdebug.ini pour ajouter le paramètres suivant:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 [xdebug]&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=c:/temp&lt;br /&gt;
 xdebug.profiler_append=0&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_ubuntu.png|24px]] In Ubuntu / Linux===&lt;br /&gt;
&lt;br /&gt;
*Installer le package &#039;&#039;&#039;php-xdebug&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install php5-xdebug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Modifier xdebug.ini pour ajouter les paramètres suivants après les lignes de type zend_extension=xxx (ou similaire):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 ; With xdebug 2.1 and more&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=/tmp&lt;br /&gt;
 xdebug.profiler_append=0&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
 ; Add also this for xdebug 2.2 and more&lt;br /&gt;
 xdebug.show_mem_delta=1&lt;br /&gt;
 xdebug.trace_output_dir=/tmp&lt;br /&gt;
 xdebug.auto_trace=0&lt;br /&gt;
 xdebug.trace_enable_trigger=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Eclipsephp.jpg|24px]] Eclipse configuration===&lt;br /&gt;
&lt;br /&gt;
*Ouvrir Eclipse. Dans Window-&amp;gt;Preferences-&amp;gt;General-&amp;gt;Web Browser, sélectionner navigateur externe, et choisir le navigateur par défaut de votre système.&lt;br /&gt;
&lt;br /&gt;
*Aller dans la rubrique Window-&amp;gt;Preferences-&amp;gt;PHP-&amp;gt;Debug, et positionner les options PHP Debugger à XDebug. Remarquer que la case “Stop a la première ligne” sur cette page doit également être active. Vous pourrez la modifier plus tard.&lt;br /&gt;
&lt;br /&gt;
*Après avoir validé les changements, aller dans la vue PHP Debug prespective, puis aller dans le menu Debug Configurations… Ici, vérifier que le Server Debugger est positionné à XDebug, et que votre server PHP pointe sur http://localhost/ ou le chemin approprié au serveur. La zone de localisation des fichiers doit de plus pointer sur le fichier à débugger, relativement à votre workspace. Ce chemin doit être quelquechose comme /dolibarr/htdocs/index.php.&lt;br /&gt;
&lt;br /&gt;
*Vérifiez la section URL pour voir si elle pointe correctement – si non, vérifier que la case “Auto-Generate” est bien décochée, et entrer manuellement le bon chemin. Appliquer les changement et fermer la fenêtre de dialogue.&lt;br /&gt;
&lt;br /&gt;
*Vous devriez maintenant être prêt pour lancer du debug de Dolibarr. Cliquer sur Run-&amp;gt;Debug ou F11 pour activer le debug, Eclipse devrait basculer sur la vue Debug, et la page devrait commencer à se charger dans le navigateur externe. Si la case “Break at First Line” a bien été cochée précédemment, alors le programme aura stoppé à la première ligne. Vous pouvez alors faire du pas à pas sur les lignes de code successives en utilisant les boutons de la barre de Debug d&#039;Eclipse. Eventuellement, vous pouvez placer des point d&#039;arrêts à différents endroits du code pour y stopper l&#039;exécution du code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite pour analyser les fichiers de profiling générés par XDebug, il faut appeler l&#039;url avec XDEBUG_PROFILE=1 pour générer le fichier profiling puis installer KCacheGrind (Linux) ou WinCacheGrind (Windows) pour l&#039;analyser.&lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code (VSCode)===&lt;br /&gt;
Pour fonctionner sous VSCode, la configuration XDebug se fait par un fichier client, par exemple avec le port 9000 : &lt;br /&gt;
=====Configuration dans l&#039;IDE=====&lt;br /&gt;
Fichier de projet : .vscode/launch.json&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, visitez : [https://go.microsoft.com/fwlink/?linkid=830387 la documentation de l&#039;éditeur]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
// Utilisez IntelliSense pour en savoir plus sur les attributs possibles.&lt;br /&gt;
// Pointez pour afficher la description des attributs existants.&lt;br /&gt;
// Pour plus d&#039;informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387&lt;br /&gt;
&amp;quot;version&amp;quot;: &amp;quot;0.2.0&amp;quot;,&lt;br /&gt;
&amp;quot;configurations&amp;quot;: [&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;name&amp;quot;: &amp;quot;Écouter pour Xdebug&amp;quot;,&lt;br /&gt;
&amp;quot;type&amp;quot;: &amp;quot;php&amp;quot;,&lt;br /&gt;
&amp;quot;request&amp;quot;: &amp;quot;launch&amp;quot;,&lt;br /&gt;
&amp;quot;port&amp;quot;: 9000,&lt;br /&gt;
&amp;quot;pathMappings&amp;quot;: {&lt;br /&gt;
&amp;quot;/vagrant/dolibarr/&amp;quot;: &amp;quot;${workspaceRoot}&amp;quot;&lt;br /&gt;
},&lt;br /&gt;
&amp;quot;log&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Noter à la ligne &#039;&#039;&#039;13&#039;&#039;&#039; la clé est le chemin du serveur web qui correspond à la racine du projet (dans cet exemple, le dossier racine Dolibarr).&lt;br /&gt;
&lt;br /&gt;
=====Configuration dans le php.ini du serveur web=====&lt;br /&gt;
&lt;br /&gt;
En plus de ce qui est écrit plus haut, ajouter à la section xdebug de php.ini :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
xdebug.remote_autostart = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pour développer ou utiliser les contrôles Qualité (PHPUnit, PHPCodeSniffer, PHPCpd, PHPDepends)==&lt;br /&gt;
===Depuis Eclipse===&lt;br /&gt;
Le plugin PTI pour utiliser PHPUnit et PHPCodesniffer est maintenant abandonnée.&lt;br /&gt;
&lt;br /&gt;
*Pour utiliser PHPUnit, ceci est disponible en standard dans une installation de base d&#039;Eclipse.&lt;br /&gt;
&lt;br /&gt;
*Pour utiliser PHPCodesniffer, vous pouvez créer une entrée &amp;quot;External Tools&amp;quot; avec une configuration de ce type&lt;br /&gt;
&lt;br /&gt;
[[Image:Setup_phpcs.png]]&lt;br /&gt;
&lt;br /&gt;
===En ligne de commande manuelle===&lt;br /&gt;
====Installer PHPUnit ====&lt;br /&gt;
&lt;br /&gt;
*Télécharger l&#039;archive de la version sur http://pear.phpunit.de/get/ et dézipper le contenu dans un répertoire inclus dans le paramètre include_path de votre fichier de configuration php.ini.&lt;br /&gt;
*Donner les permissions de s&#039;exécuter (chmod +x phpunit sur Linux).&lt;br /&gt;
*Le module xdebug est également requis si vous voulez faire du reporting de couverture de tests.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE :&#039;&#039;&#039; Les tests Selenium ne fonctionnent qu&#039;avec PHPUnit 4, installé avec &#039;&#039;composer install&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====Exécuter les tests PHPUnit====&lt;br /&gt;
&lt;br /&gt;
*Aller dans le répertoire &#039;&#039;&#039;/test&#039;&#039;&#039; des sources. Reportez vous au fichier &#039;&#039;&#039;README&#039;&#039;&#039; pour connaitre la procédure pour lancer un ou plusieurs tests PHPUnit.&lt;br /&gt;
&lt;br /&gt;
====Installer les autres outils====&lt;br /&gt;
&lt;br /&gt;
*Référez vous à la documentation des différents outils (PHPCodeSniffer, PHPCpd, PHPDepends) pour leur installation et utilisation en ligne de commande. Par exemple, pour installer ou mettre à jour PHPCodeSniffer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo pear upgrade PHP_CodeSniffer&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Les librairies pear seront installées dans &#039;&#039;&#039;/usr/share/php/PHP&#039;&#039;&#039; mais pour les prendre en compte avec Eclipse PTI, il faut ajouter une entrée &amp;quot;PHP&amp;quot; sur &#039;&#039;&#039;/usr/share/php&#039;&#039;&#039; et configurer PHPCheckstyle pour utiliser cette entrée.&lt;br /&gt;
&lt;br /&gt;
==Pour développer ou utiliser les tests Selenium==&lt;br /&gt;
===Depuis Firefox===&lt;br /&gt;
====Installer le plugin pour Firefox Selenium IDE====&lt;br /&gt;
&lt;br /&gt;
*Télécharger le fichier du plugin Selenium IDE pour Firefox.&lt;br /&gt;
*L&#039;ajouter dans Outils - Modules complémentaires de Firefox.&lt;br /&gt;
&lt;br /&gt;
====Exécuter les tests Selenium====&lt;br /&gt;
&lt;br /&gt;
*Aller dans le menu Outils - Selinum IDE de firefox.&lt;br /&gt;
*Ouvrir le fichier de tests xml&lt;br /&gt;
*Executer le test.&lt;br /&gt;
&lt;br /&gt;
==Pour générer la documentation Doxygen==&lt;br /&gt;
&lt;br /&gt;
*Installer Doxygen disponible sur http://www.doxygen.org (ou par le package doxygen sous Ubuntu).&lt;br /&gt;
*Installer le plugin Eclipse en ajoutant l&#039;url source http://download.gna.org/eclox/update/ dans l&#039;outil de mise à jour Eclipse puis configurer Eclipse pour indiquer l&#039;emplacement de Doxygen (Window-Preferences-Doxygen).&lt;br /&gt;
&lt;br /&gt;
==Pour ajouter le support asciidoc à Eclipse==&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL http://download.eclipse.org/mylyn/snapshots/nightly/docs/ dans les Install repositories. Puis installer le package &#039;&#039;&#039;Mylyn Docs - Mylyn Wikitext Extras&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement&amp;diff=55270</id>
		<title>Outils de développement</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement&amp;diff=55270"/>
		<updated>2022-12-09T21:51:24Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: retrait du titre redondant&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevFr}}&lt;br /&gt;
&lt;br /&gt;
Tout environnement de développement peut être utilisé.&lt;br /&gt;
Toutefois voici une liste d&#039;outils fortement recommandés pour leur complétude, leur qualité et la productivité du développement qu&#039;ils apportent. Ils sont utilisés par la plupart des développeurs principaux de Dolibarr. Notons que toutes ces solutions sont gratuites et OpenSource.&lt;br /&gt;
&lt;br /&gt;
=[[File:Eclipsephp.jpg]] Pour tout développeur=&lt;br /&gt;
&lt;br /&gt;
Voici le socle de travail recommandé, toutefois tout outil respectant les standards Web, PHP, Mysql peuvent faire l&#039;affaire.&lt;br /&gt;
&lt;br /&gt;
==Un serveur AMP==&lt;br /&gt;
&lt;br /&gt;
*Apache, MariaDB et PHP&lt;br /&gt;
&lt;br /&gt;
Sur Linux: Ces 3 produits sont disponibles dans toutes distributions.&lt;br /&gt;
&lt;br /&gt;
Sur Windows: Installez [http://www.wampserver.com/WampServer] (base MariaDB, Apache et PHP tout clé en main). Ce serveur WAMP offre le trio MariaDB + Apache + PHP, avec possibilité de basculer de version pour n&#039;importe lequel de ces composants d&#039;un simple clic).&lt;br /&gt;
&lt;br /&gt;
==Chrome ou Firefox et plugins==&lt;br /&gt;
&lt;br /&gt;
*Chrome&lt;br /&gt;
&lt;br /&gt;
A télécharger depuis le site http://www.chrome.com&lt;br /&gt;
&lt;br /&gt;
*Firefox avec les plugins: &lt;br /&gt;
**Firebug + Firecookie + FirePHP,&lt;br /&gt;
**HTML Validator,&lt;br /&gt;
**User agent switcher pour simuler des accès depuis un smartphone&lt;br /&gt;
**Selenium IDE&lt;br /&gt;
**Cert Viewer Plus si vous comptez faire des tests en HTTPS,&lt;br /&gt;
**QuickProxy si vous voulez basculer rapidement votre navigateur vers des utilitaires Proxy (WebScarab)...&lt;br /&gt;
&lt;br /&gt;
A télécharger depuis le site http://www.firefox.com&lt;br /&gt;
&lt;br /&gt;
==Un outil d&#039;accès aux bases de données==&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
*SquirrelSQL pour l&#039;administration de base - A télécharger depuis le site http://squirrel-sql.sf.net&lt;br /&gt;
*DBeaver - https://dbeaver.io/&lt;br /&gt;
&lt;br /&gt;
==IDE (Eclipse, VSCode) et plugins==&lt;br /&gt;
&lt;br /&gt;
===Eclipse===&lt;br /&gt;
&lt;br /&gt;
====Installation d&#039;Eclipse====&lt;br /&gt;
Nous recommandons la version suivante d&#039;Eclipse:&lt;br /&gt;
&lt;br /&gt;
{{DownloadEclipse}}&lt;br /&gt;
&lt;br /&gt;
Sinon toute version disponible sur le site [http://www.eclipse.org Eclipse] fait l&#039;affaire.&lt;br /&gt;
&lt;br /&gt;
Une fois Eclipse installé, il est recommandé de modifier/vérifier les paramètres suivants:&lt;br /&gt;
{{EclipseStandardSetup}}&lt;br /&gt;
&lt;br /&gt;
====Installation du plugin Eclipse pour PHP: PDT.====&lt;br /&gt;
Avec certaines installations d&#039;Eclipse, PDT peut etre installé depuis Help -&amp;gt; Install new software et choisir PDT.&lt;br /&gt;
Si PDT n&#039;est pas présent, si vous avez installé la version Eclipse ci-dessus, il suffit d&#039;utiliser la procédure Help -&amp;gt; Install new software -&amp;gt; Add -&amp;gt; pour installer le package complémentaire:&lt;br /&gt;
&lt;br /&gt;
{{DownloadEclipsePDT}}&lt;br /&gt;
&lt;br /&gt;
Une fois PDT installé, il faut aussi le configurer dans Eclipse comme défini dans le chapitre [[Outils_de_développement_-_Composants_optionnels#Depuis_Eclipse]].&lt;br /&gt;
&lt;br /&gt;
====Configurer Eclipse pour récupérer les sources====&lt;br /&gt;
Une fois qu&#039;Eclipse est installé, vous pouvez vous connecter au repository GIT pour y récupérer les dernières versions de développement.&lt;br /&gt;
&lt;br /&gt;
Pour cela, voir la page [[FAQ Récupérer, mettre à jours les sources GIT du projet]].&lt;br /&gt;
&lt;br /&gt;
===VSCode===&lt;br /&gt;
&lt;br /&gt;
===={{DownloadVSCode}}====&lt;br /&gt;
&lt;br /&gt;
==Git Hooks==&lt;br /&gt;
&lt;br /&gt;
===Installer le hook git Pre-commit===&lt;br /&gt;
L&#039;utilisation de ce hook git est essentiel pour vérifier la syntaxe des fichiers qui sont commit et pouvoir annuler celui-ci si la syntaxe est mauvaise. Si phpcs et phpcbf sont installés, la syntaxe peut être modifiée automatiquement. Voici comment faire:&lt;br /&gt;
&lt;br /&gt;
Allez dans &#039;&#039;&#039;/dev/setup/git/hooks&#039;&#039;&#039; de votre dépôt local, copiez le fichier &#039;&#039;&#039;pre-commit&#039;&#039;&#039; dans le dossier &#039;&#039;&#039;.git/hooks&#039;&#039;&#039; se trouvant a la racine de votre dépôt git local et rendez-le exécutable.&lt;br /&gt;
&lt;br /&gt;
Ensuite, il est nécessaire d&#039;éditer le fichier &#039;&#039;&#039;pre-commit&#039;&#039;&#039; présent dans &#039;&#039;&#039;.git/hooks&#039;&#039;&#039; pour modifier la variable DIRPHPCS pour ajouter le chemin des outils phpcs et phpcbf (le laisser vide si les outils sont disponibles dans la variable PATH).&lt;br /&gt;
&lt;br /&gt;
Ce type de hook est utilisé lorsqu&#039;on utilise l&#039;invité de commande mais aussi lorsque qu&#039;un commit est créé avec un IDE commun (exemple Eclipse et Virtual Studio Code). Une fois installé, le hook démarrera lors de votre prochain commit pour reformater votre code, pour que votre code corresponde toujours aux règles de syntaxe de codage. Si tout le monde active ce hook, tout le monde utilisera la même règle de syntaxe de codage, il est donc fortement recommandé de l&#039;activer si vous le pouvez.&lt;br /&gt;
&lt;br /&gt;
=[[File:Computer.png]] Optionnel=&lt;br /&gt;
Vous pouvez aussi installer des composants optionnels pour avoir le support de technologies suplémentaires.&lt;br /&gt;
Voir la page [[Outils de développement - Composants optionnels]].&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement_-_Composants_optionnels&amp;diff=55269</id>
		<title>Outils de développement - Composants optionnels</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement_-_Composants_optionnels&amp;diff=55269"/>
		<updated>2022-12-09T20:33:46Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: Configuration XDebug pour VSCode&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDev}}&lt;br /&gt;
Cette page liste les composants et autres technologies supplémentaires que vous pourriez vouloir installer sur votre environnement de développement. Elles ne sont pas requises pour développer sur Dolibarr, ni pour réaliser des modules mais peuvent être utiles pour des travaux très particuliers.&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire des scripts en Perl==&lt;br /&gt;
&lt;br /&gt;
*Installation du plugin Eclipse pour Perl: EPIC&lt;br /&gt;
&lt;br /&gt;
Pour cela, utiliser la procédure &#039;&#039;&#039;Find And Install&#039;&#039;&#039; et ajouter l&#039;URL de mise à jour: http://e-p-i-c.sourceforge.net/updates&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire des scripts en Python==&lt;br /&gt;
&lt;br /&gt;
*Installation du plugin Eclipse pour PyThon: PyDev&lt;br /&gt;
&lt;br /&gt;
Pour cela, utiliser la procédure &#039;&#039;&#039;Find And Install&#039;&#039;&#039; et ajouter l&#039;URL de mise à jour: http://pydev.org/updates&lt;br /&gt;
&lt;br /&gt;
==Si vous êtes sous Windows==&lt;br /&gt;
&lt;br /&gt;
*Notepad++ (pour ceux qui ne supportent pas java ou utilisent un vieux coucou trop faible pour Eclipse).&lt;br /&gt;
&lt;br /&gt;
*WinMerge (pour la comparaison de fichiers ou répertoires)&lt;br /&gt;
&lt;br /&gt;
*CygWin (pour la commande patch si vous préferez les lignes de commandes)&lt;br /&gt;
&lt;br /&gt;
A noter que Netbeans-PHP fonctionne efficacement avec Dolibarr.&lt;br /&gt;
&lt;br /&gt;
==Si vous désirez faire du debuggage pas à pas ou du tunning (XDebug)==&lt;br /&gt;
&lt;br /&gt;
*Pour ajouter des infos de tuning page dans la console javascript à partir de Dolibarr 3.8, ajouter la variable d&#039;environnement MAIN_SHOW_TUNING_INFO à 1 dans Apache. Pour cela, inclure la ligne suivante dans votre fichier apache.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
SetEnv MAIN_SHOW_TUNING_INFO 1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Pour du tuning à la ligne de code près, installer XDebug:&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_windows.png|24px]] In Windows===&lt;br /&gt;
&lt;br /&gt;
*Télécharger le fichier dll &#039;&#039;&#039;php_debug_xxx.dll&#039;&#039;&#039; sur http://www.xdebug.org et stocker le dans le répertoire /ext de php. Ensuite activer le plugin.&lt;br /&gt;
&lt;br /&gt;
*Modifier le ficiher php.ini ou xdebug.ini pour ajouter le paramètres suivant:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 [xdebug]&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=c:/temp&lt;br /&gt;
 xdebug.profiler_append=0&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Logo_ubuntu.png|24px]] In Ubuntu / Linux===&lt;br /&gt;
&lt;br /&gt;
*Installer le package &#039;&#039;&#039;php-xdebug&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install php5-xdebug&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Modifier xdebug.ini pour ajouter les paramètres suivants après les lignes de type zend_extension=xxx (ou similaire):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
 ; With xdebug 2.1 and more&lt;br /&gt;
 xdebug.remote_enable=on&lt;br /&gt;
 xdebug.remote_handle=dbgp&lt;br /&gt;
 xdebug.remote_host=localhost&lt;br /&gt;
 xdebug.remote_port=9000&lt;br /&gt;
 xdebug.show_local_vars=off&lt;br /&gt;
 xdebug.profiler_output_dir=/tmp&lt;br /&gt;
 xdebug.profiler_append=0&lt;br /&gt;
 xdebug.profiler_enable=0&lt;br /&gt;
 xdebug.profiler_enable_trigger=1&lt;br /&gt;
 ; Add also this for xdebug 2.2 and more&lt;br /&gt;
 xdebug.show_mem_delta=1&lt;br /&gt;
 xdebug.trace_output_dir=/tmp&lt;br /&gt;
 xdebug.auto_trace=0&lt;br /&gt;
 xdebug.trace_enable_trigger=1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===[[File:Eclipsephp.jpg|24px]] Eclipse configuration===&lt;br /&gt;
&lt;br /&gt;
*Ouvrir Eclipse. Dans Window-&amp;gt;Preferences-&amp;gt;General-&amp;gt;Web Browser, sélectionner navigateur externe, et choisir le navigateur par défaut de votre système.&lt;br /&gt;
&lt;br /&gt;
*Aller dans la rubrique Window-&amp;gt;Preferences-&amp;gt;PHP-&amp;gt;Debug, et positionner les options PHP Debugger à XDebug. Remarquer que la case “Stop a la première ligne” sur cette page doit également être active. Vous pourrez la modifier plus tard.&lt;br /&gt;
&lt;br /&gt;
*Après avoir validé les changements, aller dans la vue PHP Debug prespective, puis aller dans le menu Debug Configurations… Ici, vérifier que le Server Debugger est positionné à XDebug, et que votre server PHP pointe sur http://localhost/ ou le chemin approprié au serveur. La zone de localisation des fichiers doit de plus pointer sur le fichier à débugger, relativement à votre workspace. Ce chemin doit être quelquechose comme /dolibarr/htdocs/index.php.&lt;br /&gt;
&lt;br /&gt;
*Vérifiez la section URL pour voir si elle pointe correctement – si non, vérifier que la case “Auto-Generate” est bien décochée, et entrer manuellement le bon chemin. Appliquer les changement et fermer la fenêtre de dialogue.&lt;br /&gt;
&lt;br /&gt;
*Vous devriez maintenant être prêt pour lancer du debug de Dolibarr. Cliquer sur Run-&amp;gt;Debug ou F11 pour activer le debug, Eclipse devrait basculer sur la vue Debug, et la page devrait commencer à se charger dans le navigateur externe. Si la case “Break at First Line” a bien été cochée précédemment, alors le programme aura stoppé à la première ligne. Vous pouvez alors faire du pas à pas sur les lignes de code successives en utilisant les boutons de la barre de Debug d&#039;Eclipse. Eventuellement, vous pouvez placer des point d&#039;arrêts à différents endroits du code pour y stopper l&#039;exécution du code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite pour analyser les fichiers de profiling générés par XDebug, il faut appeler l&#039;url avec XDEBUG_PROFILE=1 pour générer le fichier profiling puis installer KCacheGrind (Linux) ou WinCacheGrind (Windows) pour l&#039;analyser.&lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code (VSCode)===&lt;br /&gt;
Pour fonctionner sous VSCode, la configuration XDebug se fait par un fichier client, par exemple avec le port 9000 : &lt;br /&gt;
=====Configuration dans l&#039;IDE=====&lt;br /&gt;
Fichier de projet : .vscode/launch.json&lt;br /&gt;
&lt;br /&gt;
Pour plus d&#039;informations, visitez : [https://go.microsoft.com/fwlink/?linkid=830387 la documentation de l&#039;éditeur]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
// Utilisez IntelliSense pour en savoir plus sur les attributs possibles.&lt;br /&gt;
// Pointez pour afficher la description des attributs existants.&lt;br /&gt;
// Pour plus d&#039;informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387&lt;br /&gt;
&amp;quot;version&amp;quot;: &amp;quot;0.2.0&amp;quot;,&lt;br /&gt;
&amp;quot;configurations&amp;quot;: [&lt;br /&gt;
{&lt;br /&gt;
&amp;quot;name&amp;quot;: &amp;quot;Écouter pour Xdebug&amp;quot;,&lt;br /&gt;
&amp;quot;type&amp;quot;: &amp;quot;php&amp;quot;,&lt;br /&gt;
&amp;quot;request&amp;quot;: &amp;quot;launch&amp;quot;,&lt;br /&gt;
&amp;quot;port&amp;quot;: 9000,&lt;br /&gt;
&amp;quot;pathMappings&amp;quot;: {&lt;br /&gt;
&amp;quot;/vagrant/dolibarr/&amp;quot;: &amp;quot;${workspaceRoot}&amp;quot;&lt;br /&gt;
},&lt;br /&gt;
&amp;quot;log&amp;quot;: true&lt;br /&gt;
}&lt;br /&gt;
]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Noter à la ligne &#039;&#039;&#039;13&#039;&#039;&#039; la clé est le chemin du serveur web qui correspond à la racine du projet (dans cet exemple, le dossier racine Dolibarr).&lt;br /&gt;
&lt;br /&gt;
=====Configuration dans le php.ini du serveur web=====&lt;br /&gt;
&lt;br /&gt;
En plus de ce qui est écrit plus haut, ajouter à la section xdebug de php.ini :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
xdebug.remote_autostart = true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Pour développer ou utiliser les contrôles Qualité (PHPUnit, PHPCodeSniffer, PHPCpd, PHPDepends)==&lt;br /&gt;
===Depuis Eclipse===&lt;br /&gt;
Le plugin PTI pour utiliser PHPUnit et PHPCodesniffer est maintenant abandonnée.&lt;br /&gt;
&lt;br /&gt;
*Pour utiliser PHPUnit, ceci est disponible en standard dans une installation de base d&#039;Eclipse.&lt;br /&gt;
&lt;br /&gt;
*Pour utiliser PHPCodesniffer, vous pouvez créer une entrée &amp;quot;External Tools&amp;quot; avec une configuration de ce type&lt;br /&gt;
&lt;br /&gt;
[[Image:Setup_phpcs.png]]&lt;br /&gt;
&lt;br /&gt;
===En ligne de commande manuelle===&lt;br /&gt;
====Installer PHPUnit====&lt;br /&gt;
&lt;br /&gt;
*Télécharger l&#039;archive de la version sur http://pear.phpunit.de/get/ et dézipper le contenu dans un répertoire inclus dans le paramètre include_path de votre fichier de configuration php.ini.&lt;br /&gt;
*Donner les permissions de s&#039;exécuter (chmod +x phpunit sur Linux).&lt;br /&gt;
*Le module xdebug est également requis si vous voulez faire du reporting de couverture de tests.&lt;br /&gt;
&lt;br /&gt;
====Exécuter les tests PHPUnit====&lt;br /&gt;
&lt;br /&gt;
*Aller dans le répertoire &#039;&#039;&#039;/test&#039;&#039;&#039; des sources. Reportez vous au fichier &#039;&#039;&#039;README&#039;&#039;&#039; pour connaitre la procédure pour lancer un ou plusieurs tests PHPUnit.&lt;br /&gt;
&lt;br /&gt;
====Installer les autres outils====&lt;br /&gt;
&lt;br /&gt;
*Référez vous à la documentation des différents outils (PHPCodeSniffer, PHPCpd, PHPDepends) pour leur installation et utilisation en ligne de commande. Par exemple, pour installer ou mettre à jour PHPCodeSniffer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo pear upgrade PHP_CodeSniffer&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Les librairies pear seront installées dans &#039;&#039;&#039;/usr/share/php/PHP&#039;&#039;&#039; mais pour les prendre en compte avec Eclipse PTI, il faut ajouter une entrée &amp;quot;PHP&amp;quot; sur &#039;&#039;&#039;/usr/share/php&#039;&#039;&#039; et configurer PHPCheckstyle pour utiliser cette entrée.&lt;br /&gt;
&lt;br /&gt;
==Pour développer ou utiliser les tests Selenium==&lt;br /&gt;
===Depuis Firefox===&lt;br /&gt;
====Installer le plugin pour Firefox Selenium IDE====&lt;br /&gt;
&lt;br /&gt;
*Télécharger le fichier du plugin Selenium IDE pour Firefox.&lt;br /&gt;
*L&#039;ajouter dans Outils - Modules complémentaires de Firefox.&lt;br /&gt;
&lt;br /&gt;
====Exécuter les tests Selenium====&lt;br /&gt;
&lt;br /&gt;
*Aller dans le menu Outils - Selinum IDE de firefox.&lt;br /&gt;
*Ouvrir le fichier de tests xml&lt;br /&gt;
*Executer le test.&lt;br /&gt;
&lt;br /&gt;
==Pour générer la documentation Doxygen==&lt;br /&gt;
&lt;br /&gt;
*Installer Doxygen disponible sur http://www.doxygen.org (ou par le package doxygen sous Ubuntu).&lt;br /&gt;
*Installer le plugin Eclipse en ajoutant l&#039;url source http://download.gna.org/eclox/update/ dans l&#039;outil de mise à jour Eclipse puis configurer Eclipse pour indiquer l&#039;emplacement de Doxygen (Window-Preferences-Doxygen).&lt;br /&gt;
&lt;br /&gt;
==Pour ajouter le support asciidoc à Eclipse==&lt;br /&gt;
&lt;br /&gt;
Ajouter l&#039;URL http://download.eclipse.org/mylyn/snapshots/nightly/docs/ dans les Install repositories. Puis installer le package &#039;&#039;&#039;Mylyn Docs - Mylyn Wikitext Extras&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement&amp;diff=55268</id>
		<title>Outils de développement</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Outils_de_d%C3%A9veloppement&amp;diff=55268"/>
		<updated>2022-12-09T20:23:46Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: Installation de VSCode&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TemplateDocDevFr}}&lt;br /&gt;
&lt;br /&gt;
Tout environnement de développement peut être utilisé.&lt;br /&gt;
Toutefois voici une liste d&#039;outils fortement recommandés pour leur complétude, leur qualité et la productivité du développement qu&#039;ils apportent. Ils sont utilisés par la plupart des développeurs principaux de Dolibarr. Notons que toutes ces solutions sont gratuites et OpenSource.&lt;br /&gt;
&lt;br /&gt;
=[[File:Eclipsephp.jpg]] Pour tout développeur=&lt;br /&gt;
&lt;br /&gt;
Voici le socle de travail recommandé, toutefois tout outil respectant les standards Web, PHP, Mysql peuvent faire l&#039;affaire.&lt;br /&gt;
&lt;br /&gt;
==Un serveur AMP==&lt;br /&gt;
&lt;br /&gt;
*Apache, MariaDB et PHP&lt;br /&gt;
&lt;br /&gt;
Sur Linux: Ces 3 produits sont disponibles dans toutes distributions.&lt;br /&gt;
&lt;br /&gt;
Sur Windows: Installez [http://www.wampserver.com/WampServer] (base MariaDB, Apache et PHP tout clé en main). Ce serveur WAMP offre le trio MariaDB + Apache + PHP, avec possibilité de basculer de version pour n&#039;importe lequel de ces composants d&#039;un simple clic).&lt;br /&gt;
&lt;br /&gt;
==Chrome ou Firefox et plugins==&lt;br /&gt;
&lt;br /&gt;
*Chrome&lt;br /&gt;
&lt;br /&gt;
A télécharger depuis le site http://www.chrome.com&lt;br /&gt;
&lt;br /&gt;
*Firefox avec les plugins: &lt;br /&gt;
**Firebug + Firecookie + FirePHP,&lt;br /&gt;
**HTML Validator,&lt;br /&gt;
**User agent switcher pour simuler des accès depuis un smartphone&lt;br /&gt;
**Selenium IDE&lt;br /&gt;
**Cert Viewer Plus si vous comptez faire des tests en HTTPS,&lt;br /&gt;
**QuickProxy si vous voulez basculer rapidement votre navigateur vers des utilitaires Proxy (WebScarab)...&lt;br /&gt;
&lt;br /&gt;
A télécharger depuis le site http://www.firefox.com&lt;br /&gt;
&lt;br /&gt;
==Un outil d&#039;accès aux bases de données==&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
*SquirrelSQL pour l&#039;administration de base - A télécharger depuis le site http://squirrel-sql.sf.net&lt;br /&gt;
*DBeaver - https://dbeaver.io/&lt;br /&gt;
&lt;br /&gt;
==IDE (Eclipse, VSCode) et plugins==&lt;br /&gt;
&lt;br /&gt;
===Eclipse===&lt;br /&gt;
&lt;br /&gt;
====Installation d&#039;Eclipse====&lt;br /&gt;
Nous recommandons la version suivante d&#039;Eclipse:&lt;br /&gt;
&lt;br /&gt;
{{DownloadEclipse}}&lt;br /&gt;
&lt;br /&gt;
Sinon toute version disponible sur le site [http://www.eclipse.org Eclipse] fait l&#039;affaire.&lt;br /&gt;
&lt;br /&gt;
Une fois Eclipse installé, il est recommandé de modifier/vérifier les paramètres suivants:&lt;br /&gt;
{{EclipseStandardSetup}}&lt;br /&gt;
&lt;br /&gt;
====Installation du plugin Eclipse pour PHP: PDT.====&lt;br /&gt;
Avec certaines installations d&#039;Eclipse, PDT peut etre installé depuis Help -&amp;gt; Install new software et choisir PDT.&lt;br /&gt;
Si PDT n&#039;est pas présent, si vous avez installé la version Eclipse ci-dessus, il suffit d&#039;utiliser la procédure Help -&amp;gt; Install new software -&amp;gt; Add -&amp;gt; pour installer le package complémentaire:&lt;br /&gt;
&lt;br /&gt;
{{DownloadEclipsePDT}}&lt;br /&gt;
&lt;br /&gt;
Une fois PDT installé, il faut aussi le configurer dans Eclipse comme défini dans le chapitre [[Outils_de_développement_-_Composants_optionnels#Depuis_Eclipse]].&lt;br /&gt;
&lt;br /&gt;
====Configurer Eclipse pour récupérer les sources====&lt;br /&gt;
Une fois qu&#039;Eclipse est installé, vous pouvez vous connecter au repository GIT pour y récupérer les dernières versions de développement.&lt;br /&gt;
&lt;br /&gt;
Pour cela, voir la page [[FAQ Récupérer, mettre à jours les sources GIT du projet]].&lt;br /&gt;
&lt;br /&gt;
===VSCode===&lt;br /&gt;
&lt;br /&gt;
==== Installation de VSCode ====&lt;br /&gt;
&lt;br /&gt;
==== {{DownloadVSCode}} ====&lt;br /&gt;
&lt;br /&gt;
==Git Hooks==&lt;br /&gt;
&lt;br /&gt;
===Installer le hook git Pre-commit===&lt;br /&gt;
L&#039;utilisation de ce hook git est essentiel pour vérifier la syntaxe des fichiers qui sont commit et pouvoir annuler celui-ci si la syntaxe est mauvaise. Si phpcs et phpcbf sont installés, la syntaxe peut être modifiée automatiquement. Voici comment faire:&lt;br /&gt;
&lt;br /&gt;
Allez dans &#039;&#039;&#039;/dev/setup/git/hooks&#039;&#039;&#039; de votre dépôt local, copiez le fichier &#039;&#039;&#039;pre-commit&#039;&#039;&#039; dans le dossier &#039;&#039;&#039;.git/hooks&#039;&#039;&#039; se trouvant a la racine de votre dépôt git local et rendez-le exécutable.&lt;br /&gt;
&lt;br /&gt;
Ensuite, il est nécessaire d&#039;éditer le fichier &#039;&#039;&#039;pre-commit&#039;&#039;&#039; présent dans &#039;&#039;&#039;.git/hooks&#039;&#039;&#039; pour modifier la variable DIRPHPCS pour ajouter le chemin des outils phpcs et phpcbf (le laisser vide si les outils sont disponibles dans la variable PATH).&lt;br /&gt;
&lt;br /&gt;
Ce type de hook est utilisé lorsqu&#039;on utilise l&#039;invité de commande mais aussi lorsque qu&#039;un commit est créé avec un IDE commun (exemple Eclipse et Virtual Studio Code). Une fois installé, le hook démarrera lors de votre prochain commit pour reformater votre code, pour que votre code corresponde toujours aux règles de syntaxe de codage. Si tout le monde active ce hook, tout le monde utilisera la même règle de syntaxe de codage, il est donc fortement recommandé de l&#039;activer si vous le pouvez.&lt;br /&gt;
&lt;br /&gt;
=[[File:Computer.png]] Optionnel=&lt;br /&gt;
Vous pouvez aussi installer des composants optionnels pour avoir le support de technologies suplémentaires.&lt;br /&gt;
Voir la page [[Outils de développement - Composants optionnels]].&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Template:DownloadVSCode&amp;diff=55267</id>
		<title>Template:DownloadVSCode</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Template:DownloadVSCode&amp;diff=55267"/>
		<updated>2022-12-09T19:38:42Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: Ajout des instructions de téléchargement de VSCode&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Voir [https://code.visualstudio.com/docs/setup/setup-overview les instructions d&#039;installation de l&#039;éditeur].&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Dolibarr_suppliers_Canada&amp;diff=55264</id>
		<title>Dolibarr suppliers Canada</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Dolibarr_suppliers_Canada&amp;diff=55264"/>
		<updated>2022-12-08T16:46:41Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: Correction de texte de description VdeG&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Dolibar_partners_list}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TemplateCompany||country=Canada|desc=de Grandpré Technologies est une entreprise de consultation informatique québécoise enregistrée en 2003.&lt;br /&gt;
&lt;br /&gt;
Son expertise est orientée autour des logiciels libres, des techniques de l&#039;informatique, du génie logiciel et de la conception interactive.&lt;br /&gt;
&lt;br /&gt;
Elle analyse, conçoit, développe, implémente et soutien des solutions informatiques pour ses clients. &lt;br /&gt;
&lt;br /&gt;
Notamment, la société assiste les organisations dans leur transformation numérique et leurs différentes innovations.|email=public@de-grandpre.quebec|name=de Grandpré Technologies|profid=NEQ : 2261373437|service_dev=yes|service_emailsupport=yes|service_formation=yes|service_local=yes|service_onlinesupport=yes|town=Montréal|zip=H1T 3A7|web=https://de-grandpre.quebec/|phone=+1 438 380-6811}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dilamphis Group Officials&amp;lt;br&amp;gt;&lt;br /&gt;
1800 Barton Street East, Hamilton ON Canada.&amp;lt;br&amp;gt;&lt;br /&gt;
2 King street west, Hamilton ON, Canada.&amp;lt;br&amp;gt;&lt;br /&gt;
[https://dilamphis.com dilamphis.com] Hello@dilamphis.com&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Services provided:&amp;lt;br&amp;gt;&lt;br /&gt;
Dolibarr SaaS web hosting&amp;lt;br&amp;gt;&lt;br /&gt;
On premise/Virtual installation/setup&amp;lt;br&amp;gt;&lt;br /&gt;
On premise/virtual support&amp;lt;br&amp;gt;&lt;br /&gt;
Specific development &amp;amp; Training&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Dolibarr_suppliers_Canada&amp;diff=55263</id>
		<title>Dolibarr suppliers Canada</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Dolibarr_suppliers_Canada&amp;diff=55263"/>
		<updated>2022-12-08T16:42:53Z</updated>

		<summary type="html">&lt;p&gt;Vdegrandpre: Ajout du fournisseur québécois « de Grandpré Technologies » (Vincent de Grandpré).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Dolibar_partners_list}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{TemplateCompany||country=Canada|desc=de Grandpré Technologies est une entreprise de consultation informatique québécoise enregistrée depuis 2003.&lt;br /&gt;
&lt;br /&gt;
Son expertise est orientée autour des logiciels libres, des techniques de l&#039;informatique, du génie logiciel et de la conception interactive.&lt;br /&gt;
&lt;br /&gt;
Elle analyse, conçoit, développe, implémente et soutien des solutions informatiques pour ses clients. &lt;br /&gt;
&lt;br /&gt;
Notamment, la société assiste les organisations dans leur transformation numérique et leurs différentes innovations.|email=public@de-grandpre.quebec|name=de Grandpré Technologies|profid=NEQ : 2261373437|service_dev=yes|service_emailsupport=yes|service_formation=yes|service_local=yes|service_onlinesupport=yes|town=Montréal|zip=H1T 3A7|web=https://de-grandpre.quebec/|phone=+1 438 380-6811}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dilamphis Group Officials&amp;lt;br&amp;gt;&lt;br /&gt;
1800 Barton Street East, Hamilton ON Canada.&amp;lt;br&amp;gt;&lt;br /&gt;
2 King street west, Hamilton ON, Canada.&amp;lt;br&amp;gt;&lt;br /&gt;
[https://dilamphis.com dilamphis.com] Hello@dilamphis.com&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Services provided:&amp;lt;br&amp;gt;&lt;br /&gt;
Dolibarr SaaS web hosting&amp;lt;br&amp;gt;&lt;br /&gt;
On premise/Virtual installation/setup&amp;lt;br&amp;gt;&lt;br /&gt;
On premise/virtual support&amp;lt;br&amp;gt;&lt;br /&gt;
Specific development &amp;amp; Training&lt;/div&gt;</summary>
		<author><name>Vdegrandpre</name></author>
	</entry>
</feed>