<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://wiki.ovidentia.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jeraiz</id>
		<title>OviWiki - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.ovidentia.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jeraiz"/>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php/Sp%C3%A9cial:Contributions/Jeraiz"/>
		<updated>2026-04-19T07:40:27Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Accueil&amp;diff=4791</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Accueil&amp;diff=4791"/>
				<updated>2010-11-15T09:30:58Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Documentation des librairies partagées */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contribuer au Wiki de développement Ovidentia==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=0 cellspacing=5 width=&amp;quot;100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;padding-right:.9em;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bienvenue sur le Wiki dédié au développement d'OVIDENTIA&lt;br /&gt;
&lt;br /&gt;
Pour télécharger des documentations utilisateur et administrateur pour OVIDENTIA, vous pouvez utiliser le site communautaire [http://www.ovidentia.org/ Ovidentia.org]. Ce wiki, quant à lui contient une introduction au développement des modules ainsi que diverses documentations sur les nouvelles interfaces de programmation disponibles dans les versions actuelles et futures d'OVIDENTIA.&lt;br /&gt;
&lt;br /&gt;
Avant de contribuer, vous pouvez vous familiariser avec les [[Règles d'usage du wiki|règles d'usage du wiki]] et [[Aide à l'écriture MediaWiki|l'aide à l'écriture Mediawiki]].&lt;br /&gt;
&lt;br /&gt;
Le développement d'OVIDENTIA est initié et géré par [[Image:Cantico.svg||32px|logo cantico]] [http://www.cantico.fr Cantico]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-white&amp;quot;&amp;gt;&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[:Catégorie:Développement de modules|Développer un module Ovidentia]]&lt;br /&gt;
|description = Pour ajouter des nouvelles fonctionalités sur le portail, Ovidentia offre un ensemble d'interfaces de programmation.&lt;br /&gt;
* [[Addon tutorial|Tutorial module]]&lt;br /&gt;
* [[:Catégorie:Développement de skins|Introduction au développement de skins]]&lt;br /&gt;
* [http://www.ovidentia.org/?tg=articles&amp;amp;topics=56 Autres types de contributions]&lt;br /&gt;
|icon        = icon-addon-dev.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Feuille de route]] (Roadmap)&lt;br /&gt;
|description = Voir aussi les [[:Catégorie:Technologies à l'étude|technologies à l'étude]]&lt;br /&gt;
|icon        = Roadmap.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Développement ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=0 cellspacing=5 width=&amp;quot;100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;padding-right:.9em;&amp;quot;|&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-orange&amp;quot;&amp;gt;&lt;br /&gt;
=== Documentation des API du noyau ===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
''Contenu de l'[[:Catégorie:API Ovidentia|API Ovidentia]]. Ces API peuvent être utilisées dans le cadre du [[:Catégorie:Développement de modules|développement de modules]].''&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API noyau/module]]&lt;br /&gt;
|description = Fonctions toujours incluses dans Ovidentia&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des dates]]&lt;br /&gt;
|description = Fonctions pour l'affichage des dates et l'objet BAB_DateTime pour effectuer des traitements complexes. Voir aussi : [[API des agendas]]&lt;br /&gt;
|icon        = DateTime.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des utilisateurs et des annuaires]]&lt;br /&gt;
|description = Permet d'effectuer des traitements sur les utilisateurs et les fiches d'annuaires. Voir aussi : [[API de sélection d'utilisateurs]]&lt;br /&gt;
|icon        = User-info.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des groupes]]&lt;br /&gt;
|description = Accès aux groupes d'utilisateurs d'Ovidentia&lt;br /&gt;
|icon        = Kuser.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API de gestion d'un module]]&lt;br /&gt;
|description = Voir aussi : [[API Addon - OVML]] et [[Implémentation de containers OVML dans un module]]&lt;br /&gt;
|icon        = Applications-development.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API Articles]]&lt;br /&gt;
|description = Accès aux catégories de thèmes d'articles, aux thèmes d'articles et aux articles. Voir aussi [[API editeur]] pour utiliser l'éditeur WYSIWYG&lt;br /&gt;
|icon        = Document-properties.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API d'envoi de mails]]&lt;br /&gt;
|description = Classe d'envoi des email basée sur la configuration du portail.&lt;br /&gt;
|icon        = Evolution-mail.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[:Catégorie:Recherche|Exploitation de la recherche]]&lt;br /&gt;
|description = Recherche dans Ovidentia, Utilisation du thésaurus, Configuration du moteur d'indexation swish-e. Voir aussi : [[Paramètres de la recherche]], [[API de la recherche]], [[API des tags]], [[Indexation]]&lt;br /&gt;
|icon        = Search.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des ACL (Access Control List)]]&lt;br /&gt;
|description = API des droits d'accès, pour tester ou créer des droits&lt;br /&gt;
|icon        = Keys.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Base de registre]] &lt;br /&gt;
|description = Cette API permet aux module et au noyau de mémoriser des paramètres de configuration&lt;br /&gt;
|icon        = Drive-harddisk.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Path et url]]&lt;br /&gt;
|description = Les API bab_Path et bab_url pour gérer les chemins et les adresses&lt;br /&gt;
|icon        = Applications-utilities.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API du gestionnaire de fichiers]]&lt;br /&gt;
|description = Document à compléter&lt;br /&gt;
|icon        = Fs-directory.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-green&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Documentation des librairies partagées ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des fonctionnalités]] et [[API du gestionnaire d'événement]]&lt;br /&gt;
|description = APIs pour créer des bibliothèques de code partagé et faciliter la communication entre les modules.&lt;br /&gt;
&lt;br /&gt;
Voir aussi : [[:Catégorie:Documentation des librairies|Documentation des librairies]] ([[Widgets]], [[Object-Relational_Mapping|Orm]]...)&lt;br /&gt;
|icon        = Applications-accessories.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-grey&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Documentation interne ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Moteur de templates]]&lt;br /&gt;
|description = Explication du fonctionnement de la fonction ''bab_printTemplate()''&lt;br /&gt;
|icon        = Screen.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Authentification par identifiant NT]]&lt;br /&gt;
|description = Fonctionnement de l'authentification par NTML&lt;br /&gt;
|icon        = Keys.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = Outils de développements&lt;br /&gt;
|description = [[Clients CVS]], [[Eclipse]]&lt;br /&gt;
|icon        = Applications-accessories.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = Structures des tables de données d'Ovidentia&lt;br /&gt;
|description = [[Structures des tables de données d'Ovidentia]]&lt;br /&gt;
|icon        = db_status.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Propositions d'améliorations ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = Propositions des utilisateurs&lt;br /&gt;
|description = Articles qui décrivent les propositions d'améliorations soumises par les utilisateurs&lt;br /&gt;
* [[Articles]]&lt;br /&gt;
* [[Gestionnaire de fichiers]]&lt;br /&gt;
* [[Propositions pour Ovidentia 7]]&lt;br /&gt;
* [[Utilisateurs]]&lt;br /&gt;
* [[Internationalisation]] : Améliorations de la gestion de l'internationalisation dans Ovidentia&lt;br /&gt;
|icon        = Dialog-information.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Refactorisation du noyau]]&lt;br /&gt;
|description = Remplacer des parties du codes existantes afin d'améliorer Ovidentia&lt;br /&gt;
* [[Gestion des skins]]&lt;br /&gt;
* [[Délégations]] : Refonte de la gestion des délégations dans Ovidentia&lt;br /&gt;
|icon        = Code-clear.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Sitemap|Sitemap : plan du site]]&lt;br /&gt;
|description = Documentations et spécifications du futur plan du site dans Ovidentia, voir aussi : [[Gestion des nœuds du plan du site]]&lt;br /&gt;
|icon        = Applications-utilities.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-violet&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Règles de développement ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Règles de codage]]&lt;br /&gt;
|description = Règles établies pour le développement du noyau d'Ovidentia&lt;br /&gt;
* [[Accessibilité]]&lt;br /&gt;
* [[Sécurité]]&lt;br /&gt;
* [[PHPDoc|Commenter son code]]&lt;br /&gt;
* [[Développement d'une nouvelle fonctionnalité]]&lt;br /&gt;
|icon        = Applications-development.png&lt;br /&gt;
}}&lt;br /&gt;
 {{MenuItem&lt;br /&gt;
|title       = [[Utilisation de Mantis]]&lt;br /&gt;
|description = Gestion des bugs&lt;br /&gt;
|icon        = Bug-buddy.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Utilisation de CVS]]&lt;br /&gt;
|description = Gestion des versions dans CVS et [[Développement d'un programme de mise à jour]]&lt;br /&gt;
|icon        = Fs-directory.png&lt;br /&gt;
}}&lt;br /&gt;
  {{MenuItem&lt;br /&gt;
|title       = [[Code de caractère]]&lt;br /&gt;
|description = Gestion des encodages dans ovidentia et conversion de latin1 à utf8&lt;br /&gt;
|icon        = Configure.png&lt;br /&gt;
}}&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Utilisation du wiki ==&lt;br /&gt;
&lt;br /&gt;
Consultez le [http://meta.wikimedia.org/wiki/Aide:Contenu Guide de l'utilisateur] pour plus d'information sur l'utilisation d'un wiki.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Accueil&amp;diff=4790</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Accueil&amp;diff=4790"/>
				<updated>2010-11-15T09:30:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Documentation des librairies partagées */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contribuer au Wiki de développement Ovidentia==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=0 cellspacing=5 width=&amp;quot;100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;padding-right:.9em;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bienvenue sur le Wiki dédié au développement d'OVIDENTIA&lt;br /&gt;
&lt;br /&gt;
Pour télécharger des documentations utilisateur et administrateur pour OVIDENTIA, vous pouvez utiliser le site communautaire [http://www.ovidentia.org/ Ovidentia.org]. Ce wiki, quant à lui contient une introduction au développement des modules ainsi que diverses documentations sur les nouvelles interfaces de programmation disponibles dans les versions actuelles et futures d'OVIDENTIA.&lt;br /&gt;
&lt;br /&gt;
Avant de contribuer, vous pouvez vous familiariser avec les [[Règles d'usage du wiki|règles d'usage du wiki]] et [[Aide à l'écriture MediaWiki|l'aide à l'écriture Mediawiki]].&lt;br /&gt;
&lt;br /&gt;
Le développement d'OVIDENTIA est initié et géré par [[Image:Cantico.svg||32px|logo cantico]] [http://www.cantico.fr Cantico]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-white&amp;quot;&amp;gt;&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[:Catégorie:Développement de modules|Développer un module Ovidentia]]&lt;br /&gt;
|description = Pour ajouter des nouvelles fonctionalités sur le portail, Ovidentia offre un ensemble d'interfaces de programmation.&lt;br /&gt;
* [[Addon tutorial|Tutorial module]]&lt;br /&gt;
* [[:Catégorie:Développement de skins|Introduction au développement de skins]]&lt;br /&gt;
* [http://www.ovidentia.org/?tg=articles&amp;amp;topics=56 Autres types de contributions]&lt;br /&gt;
|icon        = icon-addon-dev.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Feuille de route]] (Roadmap)&lt;br /&gt;
|description = Voir aussi les [[:Catégorie:Technologies à l'étude|technologies à l'étude]]&lt;br /&gt;
|icon        = Roadmap.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Développement ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=0 cellspacing=5 width=&amp;quot;100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;padding-right:.9em;&amp;quot;|&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-orange&amp;quot;&amp;gt;&lt;br /&gt;
=== Documentation des API du noyau ===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
''Contenu de l'[[:Catégorie:API Ovidentia|API Ovidentia]]. Ces API peuvent être utilisées dans le cadre du [[:Catégorie:Développement de modules|développement de modules]].''&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API noyau/module]]&lt;br /&gt;
|description = Fonctions toujours incluses dans Ovidentia&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des dates]]&lt;br /&gt;
|description = Fonctions pour l'affichage des dates et l'objet BAB_DateTime pour effectuer des traitements complexes. Voir aussi : [[API des agendas]]&lt;br /&gt;
|icon        = DateTime.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des utilisateurs et des annuaires]]&lt;br /&gt;
|description = Permet d'effectuer des traitements sur les utilisateurs et les fiches d'annuaires. Voir aussi : [[API de sélection d'utilisateurs]]&lt;br /&gt;
|icon        = User-info.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des groupes]]&lt;br /&gt;
|description = Accès aux groupes d'utilisateurs d'Ovidentia&lt;br /&gt;
|icon        = Kuser.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API de gestion d'un module]]&lt;br /&gt;
|description = Voir aussi : [[API Addon - OVML]] et [[Implémentation de containers OVML dans un module]]&lt;br /&gt;
|icon        = Applications-development.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API Articles]]&lt;br /&gt;
|description = Accès aux catégories de thèmes d'articles, aux thèmes d'articles et aux articles. Voir aussi [[API editeur]] pour utiliser l'éditeur WYSIWYG&lt;br /&gt;
|icon        = Document-properties.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API d'envoi de mails]]&lt;br /&gt;
|description = Classe d'envoi des email basée sur la configuration du portail.&lt;br /&gt;
|icon        = Evolution-mail.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[:Catégorie:Recherche|Exploitation de la recherche]]&lt;br /&gt;
|description = Recherche dans Ovidentia, Utilisation du thésaurus, Configuration du moteur d'indexation swish-e. Voir aussi : [[Paramètres de la recherche]], [[API de la recherche]], [[API des tags]], [[Indexation]]&lt;br /&gt;
|icon        = Search.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des ACL (Access Control List)]]&lt;br /&gt;
|description = API des droits d'accès, pour tester ou créer des droits&lt;br /&gt;
|icon        = Keys.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Base de registre]] &lt;br /&gt;
|description = Cette API permet aux module et au noyau de mémoriser des paramètres de configuration&lt;br /&gt;
|icon        = Drive-harddisk.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Path et url]]&lt;br /&gt;
|description = Les API bab_Path et bab_url pour gérer les chemins et les adresses&lt;br /&gt;
|icon        = Applications-utilities.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API du gestionnaire de fichiers]]&lt;br /&gt;
|description = Document à compléter&lt;br /&gt;
|icon        = Fs-directory.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-green&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Documentation des librairies partagées ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des fonctionnalités]] et [[API du gestionnaire d'événement]]&lt;br /&gt;
|description = APIs pour créer des bibliothèques de code partagé et faciliter la communication entre les modules.&lt;br /&gt;
&lt;br /&gt;
Voir aussi : [[:Catégorie:Documentation des librairies|Documentation des librairies]] ([[Widgets]],[[Object-Relational_Mapping|Orm]]...)&lt;br /&gt;
|icon        = Applications-accessories.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-grey&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Documentation interne ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Moteur de templates]]&lt;br /&gt;
|description = Explication du fonctionnement de la fonction ''bab_printTemplate()''&lt;br /&gt;
|icon        = Screen.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Authentification par identifiant NT]]&lt;br /&gt;
|description = Fonctionnement de l'authentification par NTML&lt;br /&gt;
|icon        = Keys.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = Outils de développements&lt;br /&gt;
|description = [[Clients CVS]], [[Eclipse]]&lt;br /&gt;
|icon        = Applications-accessories.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = Structures des tables de données d'Ovidentia&lt;br /&gt;
|description = [[Structures des tables de données d'Ovidentia]]&lt;br /&gt;
|icon        = db_status.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Propositions d'améliorations ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = Propositions des utilisateurs&lt;br /&gt;
|description = Articles qui décrivent les propositions d'améliorations soumises par les utilisateurs&lt;br /&gt;
* [[Articles]]&lt;br /&gt;
* [[Gestionnaire de fichiers]]&lt;br /&gt;
* [[Propositions pour Ovidentia 7]]&lt;br /&gt;
* [[Utilisateurs]]&lt;br /&gt;
* [[Internationalisation]] : Améliorations de la gestion de l'internationalisation dans Ovidentia&lt;br /&gt;
|icon        = Dialog-information.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Refactorisation du noyau]]&lt;br /&gt;
|description = Remplacer des parties du codes existantes afin d'améliorer Ovidentia&lt;br /&gt;
* [[Gestion des skins]]&lt;br /&gt;
* [[Délégations]] : Refonte de la gestion des délégations dans Ovidentia&lt;br /&gt;
|icon        = Code-clear.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Sitemap|Sitemap : plan du site]]&lt;br /&gt;
|description = Documentations et spécifications du futur plan du site dans Ovidentia, voir aussi : [[Gestion des nœuds du plan du site]]&lt;br /&gt;
|icon        = Applications-utilities.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-violet&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Règles de développement ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Règles de codage]]&lt;br /&gt;
|description = Règles établies pour le développement du noyau d'Ovidentia&lt;br /&gt;
* [[Accessibilité]]&lt;br /&gt;
* [[Sécurité]]&lt;br /&gt;
* [[PHPDoc|Commenter son code]]&lt;br /&gt;
* [[Développement d'une nouvelle fonctionnalité]]&lt;br /&gt;
|icon        = Applications-development.png&lt;br /&gt;
}}&lt;br /&gt;
 {{MenuItem&lt;br /&gt;
|title       = [[Utilisation de Mantis]]&lt;br /&gt;
|description = Gestion des bugs&lt;br /&gt;
|icon        = Bug-buddy.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Utilisation de CVS]]&lt;br /&gt;
|description = Gestion des versions dans CVS et [[Développement d'un programme de mise à jour]]&lt;br /&gt;
|icon        = Fs-directory.png&lt;br /&gt;
}}&lt;br /&gt;
  {{MenuItem&lt;br /&gt;
|title       = [[Code de caractère]]&lt;br /&gt;
|description = Gestion des encodages dans ovidentia et conversion de latin1 à utf8&lt;br /&gt;
|icon        = Configure.png&lt;br /&gt;
}}&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Utilisation du wiki ==&lt;br /&gt;
&lt;br /&gt;
Consultez le [http://meta.wikimedia.org/wiki/Aide:Contenu Guide de l'utilisateur] pour plus d'information sur l'utilisation d'un wiki.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Accueil&amp;diff=4789</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Accueil&amp;diff=4789"/>
				<updated>2010-11-15T09:30:02Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Documentation des librairies partagées */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contribuer au Wiki de développement Ovidentia==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=0 cellspacing=5 width=&amp;quot;100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;padding-right:.9em;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bienvenue sur le Wiki dédié au développement d'OVIDENTIA&lt;br /&gt;
&lt;br /&gt;
Pour télécharger des documentations utilisateur et administrateur pour OVIDENTIA, vous pouvez utiliser le site communautaire [http://www.ovidentia.org/ Ovidentia.org]. Ce wiki, quant à lui contient une introduction au développement des modules ainsi que diverses documentations sur les nouvelles interfaces de programmation disponibles dans les versions actuelles et futures d'OVIDENTIA.&lt;br /&gt;
&lt;br /&gt;
Avant de contribuer, vous pouvez vous familiariser avec les [[Règles d'usage du wiki|règles d'usage du wiki]] et [[Aide à l'écriture MediaWiki|l'aide à l'écriture Mediawiki]].&lt;br /&gt;
&lt;br /&gt;
Le développement d'OVIDENTIA est initié et géré par [[Image:Cantico.svg||32px|logo cantico]] [http://www.cantico.fr Cantico]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-white&amp;quot;&amp;gt;&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[:Catégorie:Développement de modules|Développer un module Ovidentia]]&lt;br /&gt;
|description = Pour ajouter des nouvelles fonctionalités sur le portail, Ovidentia offre un ensemble d'interfaces de programmation.&lt;br /&gt;
* [[Addon tutorial|Tutorial module]]&lt;br /&gt;
* [[:Catégorie:Développement de skins|Introduction au développement de skins]]&lt;br /&gt;
* [http://www.ovidentia.org/?tg=articles&amp;amp;topics=56 Autres types de contributions]&lt;br /&gt;
|icon        = icon-addon-dev.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Feuille de route]] (Roadmap)&lt;br /&gt;
|description = Voir aussi les [[:Catégorie:Technologies à l'étude|technologies à l'étude]]&lt;br /&gt;
|icon        = Roadmap.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Développement ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=0 cellspacing=5 width=&amp;quot;100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;padding-right:.9em;&amp;quot;|&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-orange&amp;quot;&amp;gt;&lt;br /&gt;
=== Documentation des API du noyau ===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
''Contenu de l'[[:Catégorie:API Ovidentia|API Ovidentia]]. Ces API peuvent être utilisées dans le cadre du [[:Catégorie:Développement de modules|développement de modules]].''&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API noyau/module]]&lt;br /&gt;
|description = Fonctions toujours incluses dans Ovidentia&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des dates]]&lt;br /&gt;
|description = Fonctions pour l'affichage des dates et l'objet BAB_DateTime pour effectuer des traitements complexes. Voir aussi : [[API des agendas]]&lt;br /&gt;
|icon        = DateTime.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des utilisateurs et des annuaires]]&lt;br /&gt;
|description = Permet d'effectuer des traitements sur les utilisateurs et les fiches d'annuaires. Voir aussi : [[API de sélection d'utilisateurs]]&lt;br /&gt;
|icon        = User-info.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des groupes]]&lt;br /&gt;
|description = Accès aux groupes d'utilisateurs d'Ovidentia&lt;br /&gt;
|icon        = Kuser.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API de gestion d'un module]]&lt;br /&gt;
|description = Voir aussi : [[API Addon - OVML]] et [[Implémentation de containers OVML dans un module]]&lt;br /&gt;
|icon        = Applications-development.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API Articles]]&lt;br /&gt;
|description = Accès aux catégories de thèmes d'articles, aux thèmes d'articles et aux articles. Voir aussi [[API editeur]] pour utiliser l'éditeur WYSIWYG&lt;br /&gt;
|icon        = Document-properties.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API d'envoi de mails]]&lt;br /&gt;
|description = Classe d'envoi des email basée sur la configuration du portail.&lt;br /&gt;
|icon        = Evolution-mail.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[:Catégorie:Recherche|Exploitation de la recherche]]&lt;br /&gt;
|description = Recherche dans Ovidentia, Utilisation du thésaurus, Configuration du moteur d'indexation swish-e. Voir aussi : [[Paramètres de la recherche]], [[API de la recherche]], [[API des tags]], [[Indexation]]&lt;br /&gt;
|icon        = Search.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des ACL (Access Control List)]]&lt;br /&gt;
|description = API des droits d'accès, pour tester ou créer des droits&lt;br /&gt;
|icon        = Keys.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Base de registre]] &lt;br /&gt;
|description = Cette API permet aux module et au noyau de mémoriser des paramètres de configuration&lt;br /&gt;
|icon        = Drive-harddisk.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Path et url]]&lt;br /&gt;
|description = Les API bab_Path et bab_url pour gérer les chemins et les adresses&lt;br /&gt;
|icon        = Applications-utilities.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API du gestionnaire de fichiers]]&lt;br /&gt;
|description = Document à compléter&lt;br /&gt;
|icon        = Fs-directory.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-green&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Documentation des librairies partagées ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des fonctionnalités]] et [[API du gestionnaire d'événement]]&lt;br /&gt;
|description = APIs pour créer des bibliothèques de code partagé et faciliter la communication entre les modules.&lt;br /&gt;
&lt;br /&gt;
Voir aussi : [[:Catégorie:Documentation des librairies|Documentation des librairies]] ([[Widgets]]...)&lt;br /&gt;
|icon        = Applications-accessories.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-grey&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Documentation interne ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Moteur de templates]]&lt;br /&gt;
|description = Explication du fonctionnement de la fonction ''bab_printTemplate()''&lt;br /&gt;
|icon        = Screen.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Authentification par identifiant NT]]&lt;br /&gt;
|description = Fonctionnement de l'authentification par NTML&lt;br /&gt;
|icon        = Keys.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = Outils de développements&lt;br /&gt;
|description = [[Clients CVS]], [[Eclipse]]&lt;br /&gt;
|icon        = Applications-accessories.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = Structures des tables de données d'Ovidentia&lt;br /&gt;
|description = [[Structures des tables de données d'Ovidentia]]&lt;br /&gt;
|icon        = db_status.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Propositions d'améliorations ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = Propositions des utilisateurs&lt;br /&gt;
|description = Articles qui décrivent les propositions d'améliorations soumises par les utilisateurs&lt;br /&gt;
* [[Articles]]&lt;br /&gt;
* [[Gestionnaire de fichiers]]&lt;br /&gt;
* [[Propositions pour Ovidentia 7]]&lt;br /&gt;
* [[Utilisateurs]]&lt;br /&gt;
* [[Internationalisation]] : Améliorations de la gestion de l'internationalisation dans Ovidentia&lt;br /&gt;
|icon        = Dialog-information.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Refactorisation du noyau]]&lt;br /&gt;
|description = Remplacer des parties du codes existantes afin d'améliorer Ovidentia&lt;br /&gt;
* [[Gestion des skins]]&lt;br /&gt;
* [[Délégations]] : Refonte de la gestion des délégations dans Ovidentia&lt;br /&gt;
|icon        = Code-clear.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Sitemap|Sitemap : plan du site]]&lt;br /&gt;
|description = Documentations et spécifications du futur plan du site dans Ovidentia, voir aussi : [[Gestion des nœuds du plan du site]]&lt;br /&gt;
|icon        = Applications-utilities.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-violet&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Règles de développement ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Règles de codage]]&lt;br /&gt;
|description = Règles établies pour le développement du noyau d'Ovidentia&lt;br /&gt;
* [[Accessibilité]]&lt;br /&gt;
* [[Sécurité]]&lt;br /&gt;
* [[PHPDoc|Commenter son code]]&lt;br /&gt;
* [[Développement d'une nouvelle fonctionnalité]]&lt;br /&gt;
|icon        = Applications-development.png&lt;br /&gt;
}}&lt;br /&gt;
 {{MenuItem&lt;br /&gt;
|title       = [[Utilisation de Mantis]]&lt;br /&gt;
|description = Gestion des bugs&lt;br /&gt;
|icon        = Bug-buddy.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Utilisation de CVS]]&lt;br /&gt;
|description = Gestion des versions dans CVS et [[Développement d'un programme de mise à jour]]&lt;br /&gt;
|icon        = Fs-directory.png&lt;br /&gt;
}}&lt;br /&gt;
  {{MenuItem&lt;br /&gt;
|title       = [[Code de caractère]]&lt;br /&gt;
|description = Gestion des encodages dans ovidentia et conversion de latin1 à utf8&lt;br /&gt;
|icon        = Configure.png&lt;br /&gt;
}}&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Utilisation du wiki ==&lt;br /&gt;
&lt;br /&gt;
Consultez le [http://meta.wikimedia.org/wiki/Aide:Contenu Guide de l'utilisateur] pour plus d'information sur l'utilisation d'un wiki.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Accueil&amp;diff=4788</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Accueil&amp;diff=4788"/>
				<updated>2010-11-15T09:29:44Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Documentation des librairies partagées */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contribuer au Wiki de développement Ovidentia==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=0 cellspacing=5 width=&amp;quot;100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;padding-right:.9em;&amp;quot;|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bienvenue sur le Wiki dédié au développement d'OVIDENTIA&lt;br /&gt;
&lt;br /&gt;
Pour télécharger des documentations utilisateur et administrateur pour OVIDENTIA, vous pouvez utiliser le site communautaire [http://www.ovidentia.org/ Ovidentia.org]. Ce wiki, quant à lui contient une introduction au développement des modules ainsi que diverses documentations sur les nouvelles interfaces de programmation disponibles dans les versions actuelles et futures d'OVIDENTIA.&lt;br /&gt;
&lt;br /&gt;
Avant de contribuer, vous pouvez vous familiariser avec les [[Règles d'usage du wiki|règles d'usage du wiki]] et [[Aide à l'écriture MediaWiki|l'aide à l'écriture Mediawiki]].&lt;br /&gt;
&lt;br /&gt;
Le développement d'OVIDENTIA est initié et géré par [[Image:Cantico.svg||32px|logo cantico]] [http://www.cantico.fr Cantico]&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-white&amp;quot;&amp;gt;&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[:Catégorie:Développement de modules|Développer un module Ovidentia]]&lt;br /&gt;
|description = Pour ajouter des nouvelles fonctionalités sur le portail, Ovidentia offre un ensemble d'interfaces de programmation.&lt;br /&gt;
* [[Addon tutorial|Tutorial module]]&lt;br /&gt;
* [[:Catégorie:Développement de skins|Introduction au développement de skins]]&lt;br /&gt;
* [http://www.ovidentia.org/?tg=articles&amp;amp;topics=56 Autres types de contributions]&lt;br /&gt;
|icon        = icon-addon-dev.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Feuille de route]] (Roadmap)&lt;br /&gt;
|description = Voir aussi les [[:Catégorie:Technologies à l'étude|technologies à l'étude]]&lt;br /&gt;
|icon        = Roadmap.jpg&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Développement ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=0 cellspacing=5 width=&amp;quot;100%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|width=&amp;quot;50%&amp;quot; style=&amp;quot;padding-right:.9em;&amp;quot;|&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-orange&amp;quot;&amp;gt;&lt;br /&gt;
=== Documentation des API du noyau ===&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
''Contenu de l'[[:Catégorie:API Ovidentia|API Ovidentia]]. Ces API peuvent être utilisées dans le cadre du [[:Catégorie:Développement de modules|développement de modules]].''&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API noyau/module]]&lt;br /&gt;
|description = Fonctions toujours incluses dans Ovidentia&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des dates]]&lt;br /&gt;
|description = Fonctions pour l'affichage des dates et l'objet BAB_DateTime pour effectuer des traitements complexes. Voir aussi : [[API des agendas]]&lt;br /&gt;
|icon        = DateTime.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des utilisateurs et des annuaires]]&lt;br /&gt;
|description = Permet d'effectuer des traitements sur les utilisateurs et les fiches d'annuaires. Voir aussi : [[API de sélection d'utilisateurs]]&lt;br /&gt;
|icon        = User-info.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des groupes]]&lt;br /&gt;
|description = Accès aux groupes d'utilisateurs d'Ovidentia&lt;br /&gt;
|icon        = Kuser.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API de gestion d'un module]]&lt;br /&gt;
|description = Voir aussi : [[API Addon - OVML]] et [[Implémentation de containers OVML dans un module]]&lt;br /&gt;
|icon        = Applications-development.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API Articles]]&lt;br /&gt;
|description = Accès aux catégories de thèmes d'articles, aux thèmes d'articles et aux articles. Voir aussi [[API editeur]] pour utiliser l'éditeur WYSIWYG&lt;br /&gt;
|icon        = Document-properties.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API d'envoi de mails]]&lt;br /&gt;
|description = Classe d'envoi des email basée sur la configuration du portail.&lt;br /&gt;
|icon        = Evolution-mail.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[:Catégorie:Recherche|Exploitation de la recherche]]&lt;br /&gt;
|description = Recherche dans Ovidentia, Utilisation du thésaurus, Configuration du moteur d'indexation swish-e. Voir aussi : [[Paramètres de la recherche]], [[API de la recherche]], [[API des tags]], [[Indexation]]&lt;br /&gt;
|icon        = Search.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des ACL (Access Control List)]]&lt;br /&gt;
|description = API des droits d'accès, pour tester ou créer des droits&lt;br /&gt;
|icon        = Keys.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Base de registre]] &lt;br /&gt;
|description = Cette API permet aux module et au noyau de mémoriser des paramètres de configuration&lt;br /&gt;
|icon        = Drive-harddisk.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Path et url]]&lt;br /&gt;
|description = Les API bab_Path et bab_url pour gérer les chemins et les adresses&lt;br /&gt;
|icon        = Applications-utilities.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API du gestionnaire de fichiers]]&lt;br /&gt;
|description = Document à compléter&lt;br /&gt;
|icon        = Fs-directory.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-green&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Documentation des librairies partagées ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[API des fonctionnalités]] et [[API du gestionnaire d'événement]]&lt;br /&gt;
|description = APIs pour créer des bibliothèques de code partagé et faciliter la communication entre les modules.&lt;br /&gt;
&lt;br /&gt;
Voir aussi : [[:Catégorie:Documentation des librairies|Documentation des librairies]] [[Widgets]]&lt;br /&gt;
|icon        = Applications-accessories.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-grey&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Documentation interne ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Moteur de templates]]&lt;br /&gt;
|description = Explication du fonctionnement de la fonction ''bab_printTemplate()''&lt;br /&gt;
|icon        = Screen.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Authentification par identifiant NT]]&lt;br /&gt;
|description = Fonctionnement de l'authentification par NTML&lt;br /&gt;
|icon        = Keys.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = Outils de développements&lt;br /&gt;
|description = [[Clients CVS]], [[Eclipse]]&lt;br /&gt;
|icon        = Applications-accessories.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = Structures des tables de données d'Ovidentia&lt;br /&gt;
|description = [[Structures des tables de données d'Ovidentia]]&lt;br /&gt;
|icon        = db_status.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Propositions d'améliorations ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = Propositions des utilisateurs&lt;br /&gt;
|description = Articles qui décrivent les propositions d'améliorations soumises par les utilisateurs&lt;br /&gt;
* [[Articles]]&lt;br /&gt;
* [[Gestionnaire de fichiers]]&lt;br /&gt;
* [[Propositions pour Ovidentia 7]]&lt;br /&gt;
* [[Utilisateurs]]&lt;br /&gt;
* [[Internationalisation]] : Améliorations de la gestion de l'internationalisation dans Ovidentia&lt;br /&gt;
|icon        = Dialog-information.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Refactorisation du noyau]]&lt;br /&gt;
|description = Remplacer des parties du codes existantes afin d'améliorer Ovidentia&lt;br /&gt;
* [[Gestion des skins]]&lt;br /&gt;
* [[Délégations]] : Refonte de la gestion des délégations dans Ovidentia&lt;br /&gt;
|icon        = Code-clear.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Sitemap|Sitemap : plan du site]]&lt;br /&gt;
|description = Documentations et spécifications du futur plan du site dans Ovidentia, voir aussi : [[Gestion des nœuds du plan du site]]&lt;br /&gt;
|icon        = Applications-utilities.png&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;bg-bloc bg-violet&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Règles de développement ===&lt;br /&gt;
&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Règles de codage]]&lt;br /&gt;
|description = Règles établies pour le développement du noyau d'Ovidentia&lt;br /&gt;
* [[Accessibilité]]&lt;br /&gt;
* [[Sécurité]]&lt;br /&gt;
* [[PHPDoc|Commenter son code]]&lt;br /&gt;
* [[Développement d'une nouvelle fonctionnalité]]&lt;br /&gt;
|icon        = Applications-development.png&lt;br /&gt;
}}&lt;br /&gt;
 {{MenuItem&lt;br /&gt;
|title       = [[Utilisation de Mantis]]&lt;br /&gt;
|description = Gestion des bugs&lt;br /&gt;
|icon        = Bug-buddy.png&lt;br /&gt;
}}&lt;br /&gt;
{{MenuItem&lt;br /&gt;
|title       = [[Utilisation de CVS]]&lt;br /&gt;
|description = Gestion des versions dans CVS et [[Développement d'un programme de mise à jour]]&lt;br /&gt;
|icon        = Fs-directory.png&lt;br /&gt;
}}&lt;br /&gt;
  {{MenuItem&lt;br /&gt;
|title       = [[Code de caractère]]&lt;br /&gt;
|description = Gestion des encodages dans ovidentia et conversion de latin1 à utf8&lt;br /&gt;
|icon        = Configure.png&lt;br /&gt;
}}&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Utilisation du wiki ==&lt;br /&gt;
&lt;br /&gt;
Consultez le [http://meta.wikimedia.org/wiki/Aide:Contenu Guide de l'utilisateur] pour plus d'information sur l'utilisation d'un wiki.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4787</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4787"/>
				<updated>2010-11-15T09:28:22Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Mettre en place les Widget_Action dans un module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante d'association '''Champ de table'''-'''Champ de colonne CSV''', il est nécessaire d'indiquer les champs de table.&lt;br /&gt;
La méthode addImportField() de la classe Widget_CsvImportForm permet d'indiquer ces champs. Elle prend en paramètres le nom du champ, son libellé et un booléen permettant d'indiquer si le champ est obligatoire au moment de l'étape d'association des champs. En effet, tant que l'utilisateur n'aura pas associé les champs obligatoires à des colonnes du fichier CSV, l'étape suivante ne s'exécutera pas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV|center]]&lt;br /&gt;
&lt;br /&gt;
L'étape suivante (formulaire d'association des champs) est prise en charge automatiquement par le Widget. Ainsi, l'URL en cours sera automatiquement rappelée pour afficher le formulaire d'association suivant.&lt;br /&gt;
&lt;br /&gt;
Le développeur doit donc prévoir que la page affichant le formulaire de départ affichera aussi la deuxième étape.&lt;br /&gt;
&lt;br /&gt;
Aperçu de l'étape d'association :&lt;br /&gt;
[[Image:csvimport_form2.png|Formulaire d'association des champs|center]]&lt;br /&gt;
&lt;br /&gt;
Dès lors que l'étape d'association des champs est validée, l'objet Widget_CsvImportForm fournit un itérateur via la méthode getIterator(). Pour vérifier que l'étape d'association est terminée, utilisez le code suivant, la méthode getIterator() retourne un objet Widget_CsvIterator ou NULL :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if ($iterator = $import-&amp;gt;getIterator()) {&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'itérateur va passer en revue chaque ligne du fichier source CSV. &lt;br /&gt;
&lt;br /&gt;
Exemple de code PHP permettant de passer en revue chaque ligne du fichier CSV. L'itérateur retourne des objets Widget_CsvRow pour chaque ligne du fichier CSV :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($iterator as $position =&amp;gt; $row) { /* $row : object Widget_CsvRow */&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'objet '''Widget_CsvRow''' :&lt;br /&gt;
* la méthode line() permet de connaître le numéro de ligne dans le fichier CSV&lt;br /&gt;
* la méthode checkMandatory() retourne un booléen. Permet de vérifier si la ligne contient des valeurs pour les champs indiqués comme obligatoires à la configuration de l'import&lt;br /&gt;
* les propriétés de l'objet ont pour noms les champs de configuration (définis via addImportField()). Les valeurs des propriétés correspondent aux valeurs trouvées dans le fichier CSV.&lt;br /&gt;
&lt;br /&gt;
Exemple de code pour remonter tous les Nom et Prénom du fichier CSV :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($iterator as $position =&amp;gt; $row) { /* $row : object Widget_CsvRow */&lt;br /&gt;
   if (isset($row-&amp;gt;firstname) &amp;amp;&amp;amp; isset($row-&amp;gt;lastname)) {&lt;br /&gt;
      echo $row-&amp;gt;firstname.' '.$row-&amp;gt;name;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mettre en place les Widget_Action dans un module ====&lt;br /&gt;
&lt;br /&gt;
La librairie partagée Widgets d'Ovidentia propose un objet Widget_Action.&lt;br /&gt;
&lt;br /&gt;
On appelle Action la définition d'un événement, d'une opération ou d'une destination. Elle est dissociée de la méthode (URL GET, URL POST, cookies...).&lt;br /&gt;
    &lt;br /&gt;
===== Méthodes principales de l'objet Widget_Action =====&lt;br /&gt;
&lt;br /&gt;
* fromRequest()&lt;br /&gt;
: Charge l'objet Widget_Action avec les paramètres de la requête en cours (POST ou GET)&lt;br /&gt;
* fromUrl($url)&lt;br /&gt;
: Charge l'objet Widget_Action avec l'url passée en paramètre&lt;br /&gt;
* setMethod($controller, $method, $parameters)&lt;br /&gt;
: Définit la fonction PHP associée à l'action&lt;br /&gt;
* url()&lt;br /&gt;
: Retourne l'action sous la forme d'une URL GET (?tg=addon/...)&lt;br /&gt;
    &lt;br /&gt;
===== Actions et formulaires =====&lt;br /&gt;
&lt;br /&gt;
La librairie partagée Widgets définit une action par l'objet Widget_Action.&lt;br /&gt;
&lt;br /&gt;
La librairie partagée Widgets définit un formulaire par l'objet Widget_Form.&lt;br /&gt;
        &lt;br /&gt;
Il est possible sur les boutons de soumissions de formulaires (objets Widget_SubmitButton) de leurs associer automatiquement des actions :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$action = $W-&amp;gt;action()-&amp;gt;fromRequest();&lt;br /&gt;
$button = $W-&amp;gt;SubmitButton()&lt;br /&gt;
                    -&amp;gt;setLabel('Create')&lt;br /&gt;
                    -&amp;gt;setAction($action);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4786</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4786"/>
				<updated>2010-11-15T09:26:59Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Mettre en place les Widget_Action dans un module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante d'association '''Champ de table'''-'''Champ de colonne CSV''', il est nécessaire d'indiquer les champs de table.&lt;br /&gt;
La méthode addImportField() de la classe Widget_CsvImportForm permet d'indiquer ces champs. Elle prend en paramètres le nom du champ, son libellé et un booléen permettant d'indiquer si le champ est obligatoire au moment de l'étape d'association des champs. En effet, tant que l'utilisateur n'aura pas associé les champs obligatoires à des colonnes du fichier CSV, l'étape suivante ne s'exécutera pas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV|center]]&lt;br /&gt;
&lt;br /&gt;
L'étape suivante (formulaire d'association des champs) est prise en charge automatiquement par le Widget. Ainsi, l'URL en cours sera automatiquement rappelée pour afficher le formulaire d'association suivant.&lt;br /&gt;
&lt;br /&gt;
Le développeur doit donc prévoir que la page affichant le formulaire de départ affichera aussi la deuxième étape.&lt;br /&gt;
&lt;br /&gt;
Aperçu de l'étape d'association :&lt;br /&gt;
[[Image:csvimport_form2.png|Formulaire d'association des champs|center]]&lt;br /&gt;
&lt;br /&gt;
Dès lors que l'étape d'association des champs est validée, l'objet Widget_CsvImportForm fournit un itérateur via la méthode getIterator(). Pour vérifier que l'étape d'association est terminée, utilisez le code suivant, la méthode getIterator() retourne un objet Widget_CsvIterator ou NULL :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if ($iterator = $import-&amp;gt;getIterator()) {&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'itérateur va passer en revue chaque ligne du fichier source CSV. &lt;br /&gt;
&lt;br /&gt;
Exemple de code PHP permettant de passer en revue chaque ligne du fichier CSV. L'itérateur retourne des objets Widget_CsvRow pour chaque ligne du fichier CSV :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($iterator as $position =&amp;gt; $row) { /* $row : object Widget_CsvRow */&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'objet '''Widget_CsvRow''' :&lt;br /&gt;
* la méthode line() permet de connaître le numéro de ligne dans le fichier CSV&lt;br /&gt;
* la méthode checkMandatory() retourne un booléen. Permet de vérifier si la ligne contient des valeurs pour les champs indiqués comme obligatoires à la configuration de l'import&lt;br /&gt;
* les propriétés de l'objet ont pour noms les champs de configuration (définis via addImportField()). Les valeurs des propriétés correspondent aux valeurs trouvées dans le fichier CSV.&lt;br /&gt;
&lt;br /&gt;
Exemple de code pour remonter tous les Nom et Prénom du fichier CSV :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($iterator as $position =&amp;gt; $row) { /* $row : object Widget_CsvRow */&lt;br /&gt;
   if (isset($row-&amp;gt;firstname) &amp;amp;&amp;amp; isset($row-&amp;gt;lastname)) {&lt;br /&gt;
      echo $row-&amp;gt;firstname.' '.$row-&amp;gt;name;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mettre en place les Widget_Action dans un module =&lt;br /&gt;
&lt;br /&gt;
La librairie partagée Widgets d'Ovidentia propose un objet Widget_Action.&lt;br /&gt;
&lt;br /&gt;
On appelle Action la définition d'un événement, d'une opération ou d'une destination. Elle est dissociée de la méthode (URL GET, URL POST, cookies...).&lt;br /&gt;
    &lt;br /&gt;
== Méthodes principales de l'objet Widget_Action ==&lt;br /&gt;
&lt;br /&gt;
* fromRequest()&lt;br /&gt;
: Charge l'objet Widget_Action avec les paramètres de la requête en cours (POST ou GET)&lt;br /&gt;
* fromUrl($url)&lt;br /&gt;
: Charge l'objet Widget_Action avec l'url passée en paramètre&lt;br /&gt;
* setMethod($controller, $method, $parameters)&lt;br /&gt;
: Définit la fonction PHP associée à l'action&lt;br /&gt;
* url()&lt;br /&gt;
: Retourne l'action sous la forme d'une URL GET (?tg=addon/...)&lt;br /&gt;
    &lt;br /&gt;
== Actions et formulaires ==&lt;br /&gt;
&lt;br /&gt;
La librairie partagée Widgets définit une action par l'objet Widget_Action.&lt;br /&gt;
&lt;br /&gt;
La librairie partagée Widgets définit un formulaire par l'objet Widget_Form.&lt;br /&gt;
        &lt;br /&gt;
Il est possible sur les boutons de soumissions de formulaires (objets Widget_SubmitButton) de leurs associer automatiquement des actions :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$action = $W-&amp;gt;action()-&amp;gt;fromRequest();&lt;br /&gt;
$button = $W-&amp;gt;SubmitButton()&lt;br /&gt;
                    -&amp;gt;setLabel('Create')&lt;br /&gt;
                    -&amp;gt;setAction($action);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4785</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4785"/>
				<updated>2010-11-15T09:26:05Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Contrôleur et Widget_Action */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante d'association '''Champ de table'''-'''Champ de colonne CSV''', il est nécessaire d'indiquer les champs de table.&lt;br /&gt;
La méthode addImportField() de la classe Widget_CsvImportForm permet d'indiquer ces champs. Elle prend en paramètres le nom du champ, son libellé et un booléen permettant d'indiquer si le champ est obligatoire au moment de l'étape d'association des champs. En effet, tant que l'utilisateur n'aura pas associé les champs obligatoires à des colonnes du fichier CSV, l'étape suivante ne s'exécutera pas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV|center]]&lt;br /&gt;
&lt;br /&gt;
L'étape suivante (formulaire d'association des champs) est prise en charge automatiquement par le Widget. Ainsi, l'URL en cours sera automatiquement rappelée pour afficher le formulaire d'association suivant.&lt;br /&gt;
&lt;br /&gt;
Le développeur doit donc prévoir que la page affichant le formulaire de départ affichera aussi la deuxième étape.&lt;br /&gt;
&lt;br /&gt;
Aperçu de l'étape d'association :&lt;br /&gt;
[[Image:csvimport_form2.png|Formulaire d'association des champs|center]]&lt;br /&gt;
&lt;br /&gt;
Dès lors que l'étape d'association des champs est validée, l'objet Widget_CsvImportForm fournit un itérateur via la méthode getIterator(). Pour vérifier que l'étape d'association est terminée, utilisez le code suivant, la méthode getIterator() retourne un objet Widget_CsvIterator ou NULL :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if ($iterator = $import-&amp;gt;getIterator()) {&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'itérateur va passer en revue chaque ligne du fichier source CSV. &lt;br /&gt;
&lt;br /&gt;
Exemple de code PHP permettant de passer en revue chaque ligne du fichier CSV. L'itérateur retourne des objets Widget_CsvRow pour chaque ligne du fichier CSV :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($iterator as $position =&amp;gt; $row) { /* $row : object Widget_CsvRow */&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'objet '''Widget_CsvRow''' :&lt;br /&gt;
* la méthode line() permet de connaître le numéro de ligne dans le fichier CSV&lt;br /&gt;
* la méthode checkMandatory() retourne un booléen. Permet de vérifier si la ligne contient des valeurs pour les champs indiqués comme obligatoires à la configuration de l'import&lt;br /&gt;
* les propriétés de l'objet ont pour noms les champs de configuration (définis via addImportField()). Les valeurs des propriétés correspondent aux valeurs trouvées dans le fichier CSV.&lt;br /&gt;
&lt;br /&gt;
Exemple de code pour remonter tous les Nom et Prénom du fichier CSV :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($iterator as $position =&amp;gt; $row) { /* $row : object Widget_CsvRow */&lt;br /&gt;
   if (isset($row-&amp;gt;firstname) &amp;amp;&amp;amp; isset($row-&amp;gt;lastname)) {&lt;br /&gt;
      echo $row-&amp;gt;firstname.' '.$row-&amp;gt;name;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Mettre en place les Widget_Action dans un module =&lt;br /&gt;
&lt;br /&gt;
La librairie partagée Widgets est nécessaire.&lt;br /&gt;
    &lt;br /&gt;
== Méthodes principales de l'objet Widget_Action ==&lt;br /&gt;
&lt;br /&gt;
* fromRequest()&lt;br /&gt;
: Charge l'objet Widget_Action avec les paramètres de la requête en cours (POST ou GET)&lt;br /&gt;
* fromUrl($url)&lt;br /&gt;
: Charge l'objet Widget_Action avec l'url passée en paramètre&lt;br /&gt;
* setMethod($controller, $method, $parameters)&lt;br /&gt;
: Définit la fonction PHP associée à l'action&lt;br /&gt;
* url()&lt;br /&gt;
: Retourne l'action sous la forme d'une URL GET (?tg=addon/...)&lt;br /&gt;
    &lt;br /&gt;
== Actions et formulaires ==&lt;br /&gt;
&lt;br /&gt;
La librairie partagée Widgets définit une action par l'objet Widget_Action.&lt;br /&gt;
&lt;br /&gt;
La librairie partagée Widgets définit un formulaire par l'objet Widget_Form.&lt;br /&gt;
        &lt;br /&gt;
Il est possible sur les boutons de soumissions de formulaires (objets Widget_SubmitButton) de leurs associer automatiquement des actions :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$action = $W-&amp;gt;action()-&amp;gt;fromRequest();&lt;br /&gt;
$button = $W-&amp;gt;SubmitButton()&lt;br /&gt;
                    -&amp;gt;setLabel('Create')&lt;br /&gt;
                    -&amp;gt;setAction($action);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4784</id>
		<title>Structures des tables de données d'Ovidentia</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4784"/>
				<updated>2010-11-09T13:32:36Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Table bab_files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cet article est en cours de rédaction. Son contenu n'est pas exhaustif.&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_calendar ===&lt;br /&gt;
contient les agendas (les noms des agendas ne se trouvent pas dans cette table). La table est liée aux tables bab_cal_public, bab_cal_resources ou bab_cal_events (il n'y a pas de tables pour les agendas personnels)&lt;br /&gt;
* id : identifiant d'un agenda&lt;br /&gt;
* owner : correspond pour un agenda de ressources à l'identifiant de l'enregistrement dans la table bab_cal_resources&lt;br /&gt;
* type : type de l'agenda.&lt;br /&gt;
Agenda  : 1&lt;br /&gt;
Agenda  : 2&lt;br /&gt;
Agenda de ressources : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_categories  ===&lt;br /&gt;
contient les catégories d'événements&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* name : nom de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* bgcolor : couleur héxa de la catégorie (ex : CC0000)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events ===&lt;br /&gt;
contient les événements des agendas (tous types d'agendas confondus). Cette table ne permet pas de savoir dans quels agendas sont publiés les événements car un événement peut faire partie de plusieurs agendas : voir table bab_cal_events_owners.&lt;br /&gt;
* id : identifiant de l'événement&lt;br /&gt;
* title : titre de l'événement&lt;br /&gt;
* description : description de l'événement&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* location : lieu de l'événement&lt;br /&gt;
* start_date : date et heure de début de l'événement&lt;br /&gt;
* end_date : date et heure de fin de l'événement&lt;br /&gt;
* id_cat : identifiant de la catégorie d'événement&lt;br /&gt;
* id_creator : identifiant de l'auteur de l'événement&lt;br /&gt;
* hash : rempli uniquement lorsque l'événement est répétitif (ex : R_4697c6374e306b988eff36a868ff6f2c)&lt;br /&gt;
* color : couleur de l'événement (ex : FF0033)&lt;br /&gt;
* bprivate : indique si l'événement est privé. Valeur possible : Y ou N&lt;br /&gt;
* block : indique si l'événement est verrouillé. Valeur possible : Y ou N&lt;br /&gt;
* bfree : indique si l'événement est libre. Valeur possible : Y ou N&lt;br /&gt;
* date_modification : date de dernière modification de l'événement&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* uuid : identifiant unique de l'événement (utilisé pour des outils de synchronisation externe)&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
&lt;br /&gt;
Pour un événement répétitif, Ovidentia génère autant d'enregistrements dans la table bab_cal_events qu'il existe de répétitions. Il est possible de savoir si un événement est répétitif si le champ hash est renseigné. Tous les événements qui auront le même hash font donc partie du même événement de base.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'on créé un événement dans plusieurs agendas personnels (liaison bab_cal_events_owners), Ovidentia l'affiche comme des invités.&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_notes ===&lt;br /&gt;
contient les notes privées associées aux événements d'agendas par les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur&lt;br /&gt;
* note : contenu de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_owners ===&lt;br /&gt;
lie les événements d'agendas (bab_cal_events) avec les agendas (bab_calendars)&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_cal : identifiant de l'agenda&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_reminders ===&lt;br /&gt;
contient les rappels d'événements pour les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur qui veut le rappel&lt;br /&gt;
* day : nombre de jours avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* hour : nombre d'heures avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* minute : nombre de minutes avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* bemail : vaut Y si les rappels doivent être envoyés par e-mails (voir options dans config.php), sinon N&lt;br /&gt;
* processed : vaut Y si l'utilisateur a demandé à cacher le rappel de sa fenêtre, sinon N par défaut&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_public ===&lt;br /&gt;
contient les agendas collectifs&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : description de l'agenda&lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_resources ===&lt;br /&gt;
contient les agendas de ressources&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : &lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
* availability_lock : vaut 1 si on veut empêcher la création d'événements en surbooking, sinon 0.&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_user_options ===&lt;br /&gt;
contient les options privés des utilisateurs sur l'ensemble des agendas&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles ===&lt;br /&gt;
contient les articles&lt;br /&gt;
* id : identifiant de l'article&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se situe l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de l'article&lt;br /&gt;
* date : date de création de l'article&lt;br /&gt;
* date_publication : date de publication de l'article&lt;br /&gt;
* date_archiving : date d'archivage de l'article&lt;br /&gt;
* date_modification : date de dernière modification de l'article&lt;br /&gt;
* title : titre de l'article&lt;br /&gt;
* head : introduction de l'article (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps de l'article&lt;br /&gt;
* body_format : format du texte de la description : html...&lt;br /&gt;
* archive : indique si l'article est une archive. Valeurs possibles : N ou Y&lt;br /&gt;
* lang : langue de l'article (fr, en...)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'article dans le thème par rapport aux autres articles du thème&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles_images ===&lt;br /&gt;
contient les images associées aux articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts ===&lt;br /&gt;
contient les brouillons d'articles (Rappel : avant d'être soumis ou approuvés, les textes sont des brouillons. Les brouillons se transforment en articles dès qu'ils sont soumis et approuvés)&lt;br /&gt;
* id : identifiant du brouillon&lt;br /&gt;
* id_author : identifiant de l'auteur du brouillon&lt;br /&gt;
* date_creation : date de création du brouillon&lt;br /&gt;
* date_modification : date de dernière modification du brouillon&lt;br /&gt;
* date_submission : date de soumission du brouillon&lt;br /&gt;
* date_publication : date de publication du brouillon&lt;br /&gt;
* date_archiving : date d'archivage du brouillon&lt;br /&gt;
* title : titre du brouillon&lt;br /&gt;
* head : introduction du brouillon (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps du brouillon&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* lang : langue du brouillon (fr, en...)&lt;br /&gt;
* trash : indique si le brouillon est dans la corbeille ou pas. Valeurs possibles : N ou Y&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se trouve le brouillon (peut être vide)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* hpage_private : vaut Y si l'article est proposé pour les pages d'accueil privées&lt;br /&gt;
* hpage_public : vaut Y si l'article est proposé pour les pages d'accueil publiques&lt;br /&gt;
* notify_members : vaut Y l'option 'notifier les lecteurs' est cochée&lt;br /&gt;
* idfai : identifiant de l'instance en cours du schéma d'approbation&lt;br /&gt;
* result : statut d'approbation (type entier). Valeurs possibles : 0, 1, 2, 3&lt;br /&gt;
0 : statut par défaut si pas d'approbation en cours&lt;br /&gt;
1 : l'article brouillon est en attente d'approbation&lt;br /&gt;
2 : l'article brouillon est approuvé (Remarque : ce statut n'est jamais utilisé car un article brouillon approuvé se transforme en article)&lt;br /&gt;
3 : l'article brouillon a été refusé&lt;br /&gt;
* id_article : identifiant de l'article si le brouillon est une modification d'un article existant&lt;br /&gt;
* id_anonymous : identifiant de l'auteur si l'auteur n'est pas authentifié. C'est l'identifiant d'un enregistrement dans la table BAB_USERS_LOG_TBL.&lt;br /&gt;
* approbation : vaut 0, 1 ou 2&lt;br /&gt;
* update_datemodif : vaut Y si&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_files ===&lt;br /&gt;
contient les fichiers joints aux brouillons d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* name : nom du fichier (Ex : gaston.jpg)&lt;br /&gt;
* description : description du fichier&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier par rapport aux autres fichiers joints de l'article brouillon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_images ===&lt;br /&gt;
contient les images associées aux brouillons d'articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_notes ===&lt;br /&gt;
contient les commentaires des approbateurs qui ont refusés les articles brouillons (Pour le publicateur, les commentaires sont affichées en prévisualisation de l'article, depuis la liste des brouillons (lien Publication/onglet Mes Articles si l'article est en cours d'approbation))&lt;br /&gt;
* id : identifiant de la note&lt;br /&gt;
* id_draft : identifiant de l'article brouillon associé&lt;br /&gt;
* content : contenu texte de la note&lt;br /&gt;
* id_author : identifiant de l'auteur de la note&lt;br /&gt;
* date_note : date de création de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles brouillons&lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_files ===&lt;br /&gt;
contient les fichiers joints des articles&lt;br /&gt;
* id : identifiant du fichier joint à l'article&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* name : &lt;br /&gt;
* description : description du fichier joint&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier joint avec les autres fichiers joints d'un même article&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_log ===&lt;br /&gt;
contient l'historique des modifications d'articles&lt;br /&gt;
* id : identifiant de la modification&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de la modification&lt;br /&gt;
* date_log : date et heure de la modification&lt;br /&gt;
* action_log : statut de la modification. Valeurs possibles : lock, unlock, commit, refused, accepted.&lt;br /&gt;
Lorsqu'on saisit la raison de la modification avant de modifier un article, le statut est lock.&lt;br /&gt;
Lorsqu'on soumet un article, le statut est commit. Si l'article ne passe pas par approbation, il y a immédiatement un autre enregistrement avec le statut accepted. commit et accepted sont aussi utilisés lorsqu'on modifie un brouillon puis qu'on soumet.&lt;br /&gt;
Lorsqu'on modifie un article et qu'on l'enregistre (on ne le soumet pas), seul un enregistrement est créé : celui avec le statut lock et la raison de la modification.&lt;br /&gt;
Il n'y a pas d'enregistrements si on créé un article et qu'il ne doit pas être approuvé.&lt;br /&gt;
Lorsqu'on supprime un brouillon, le statut est unlock.&lt;br /&gt;
* art_log : description de la modification. Contient le texte saisit comme raison de la modification &lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles&lt;br /&gt;
* id_art : identifiant de l'article&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_comments ===&lt;br /&gt;
contient les commentaires des articles&lt;br /&gt;
* id : identifiant du commentaire&lt;br /&gt;
* id_parent : identifiant du commentaire parent&lt;br /&gt;
* id_article : identifiant de l'article associé au commentaire&lt;br /&gt;
* id_topic : identifiant du thème d'articles dans lequel est créé l'article&lt;br /&gt;
* id_author : auteur du commentaire&lt;br /&gt;
* id_last_editor : identifiant du dernier auteur modificateur&lt;br /&gt;
* date : date de création du commentaire&lt;br /&gt;
* last_update : date de la dernière modification du commentaire&lt;br /&gt;
* subject : titre du commentaire&lt;br /&gt;
* message : contenu texte du commentaire&lt;br /&gt;
* confirmed : Y si le commentaire est approuvé, N sinon&lt;br /&gt;
* name : nom de l'auteur du commentaire&lt;br /&gt;
* email : email de l'auteur du commentaire&lt;br /&gt;
* idfai : identifiant de l'instance du schéma d'approbation utilisé pour ce commentaire&lt;br /&gt;
* lang : langue du commentaire (fr, en...)&lt;br /&gt;
* article_rating : note attribuée à l'article. Valeurs possibles : 0, 1, 2, 3, 4, 5&lt;br /&gt;
0 : l'article n'est pas noté&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topcat_order ===&lt;br /&gt;
contient les numéros pour les tris d'affichage des catégories et des thèmes. Attention, sous une catégorie parente, il est possible d'ordonner les sous-catégories avec les sous-thèmes (il y a donc des mélanges d'où la colonne type).&lt;br /&gt;
Rappel : une catégorie est un conteneur de sous-catégories ou de thèmes.&lt;br /&gt;
* id : identifiant de l'ordre&lt;br /&gt;
* id_topcat : identifiant de la catégorie ou du thème que l'on veut ordonner&lt;br /&gt;
* type : 1 si l'ordre est définit pour une catégorie d'articles. 2 si l'ordre est défini pour un thème d'articles.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'objet par rapport aux autres objets de la catégorie parente (id_parent) &lt;br /&gt;
* id_parent : identifiant de la catégorie d'articles parente d'idtopcat. C'est la catégorie dans laquelle on veut ordonner notre objet. Vaut 0 si l'objet qu'on veut trier est une catégorie de premier niveau (pas de catégorie parente).&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics ===&lt;br /&gt;
contient les thèmes d'articles&lt;br /&gt;
* id : identifiant du thème&lt;br /&gt;
* category : nom du thème&lt;br /&gt;
* description : description du thème&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* id_cat : identifiant de la catégorie dans laquelle se trouve le thème&lt;br /&gt;
* idsaart : identifiant du schéma d'approbation à la création d'articles&lt;br /&gt;
* idsacom : identifiant du schéma d'approbation des commentaires&lt;br /&gt;
* idsa_update : identifiant du schéma d'approbation à la modification des articles&lt;br /&gt;
* notify : Y si les auteurs peuvent notifier les lecteurs par email, N sinon&lt;br /&gt;
* lang : langue du thème (fr, en...)&lt;br /&gt;
* article_tmpl : nom du modèle d'articles&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
* restrict_access : Y si les auteurs peuvent restreindre l'accès aux articles, N sinon&lt;br /&gt;
* allow_hpages : Y si on permet aux auteurs de proposer leurs articles pour les pages d'accueil, N sinon&lt;br /&gt;
* allow_pubdates : Y si on permet aux auteurs de spécifier des dates de publication, N sinon&lt;br /&gt;
* allow_attachments : Y si on permet aux auteurs de joindre des fichiers avec leurs articles, N sinon&lt;br /&gt;
* allow_update : entier indiquant si les auteurs peuvent modifier leurs articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les auteurs ne peuvent pas modifier leurs articles&lt;br /&gt;
1 : les auteurs peuvent modifier leurs articles, mais avec approbation&lt;br /&gt;
2 : les auteurs peuvent modifier leurs articles et sans approbation&lt;br /&gt;
* max_articles : nombre maximum d'articles sur la page des archives&lt;br /&gt;
* allow_manupdate : entier indiquant si les gestionnaires peuvent modifier les articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les gestionnaires ne peuvent pas modifier les articles&lt;br /&gt;
1 : les gestionnaires peuvent modifier les articles, mais avec approbation&lt;br /&gt;
2 : les gestionnaires peuvent modifier les articles et sans approbation&lt;br /&gt;
* auto_approbation : Y si on approuve automatiquement le contributeur dans le cas où il fait partie de la première étape du schéma d'approbation, N sinon&lt;br /&gt;
* busetags : Y si on utilise les mots-clés du thésaurus, N sinon&lt;br /&gt;
* allow_addImg : Y si on permet aux auteurs d'associer une image à un article&lt;br /&gt;
* allow_article_rating : Y si on permet aux auteurs des commentaires de noter les articles, N sinon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicscom_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant faire des commentaires sur le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsman_groups ===&lt;br /&gt;
Table de droits d'accès : groupes gestionnaires du thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsmod_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant modifier des articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicssub_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant soumettre de nouveaux articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsview_groups ===&lt;br /&gt;
Table de droist d'accès : groupes pouvant voir les articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group :&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories ===&lt;br /&gt;
contient les catégories d'articles (conteneurs des thèmes d'articles)&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* title : titre de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* enabled : vaut Y si la section de la catégorie est activée, N sinon&lt;br /&gt;
* template : nom du patron de section&lt;br /&gt;
* id_dgowner : identifiant de la délégation où se trouve la catégorie, 0 si dans tout le site&lt;br /&gt;
* optional : utilisation inconnue !!!&lt;br /&gt;
* id_parent : identifiant de la catégorie parente&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories_images ===&lt;br /&gt;
contient les images associées aux catégories d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idCategory : identifiant de la catégorie d'articles&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_images ===&lt;br /&gt;
contient les images associées aux thèmes d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idTopic : identifiant du thème&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
== Utilisateurs ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_users ===&lt;br /&gt;
contient les comptes utilisateurs (attention : les enregistrements sont liés avec les tables d'annuaires comme bab_dbdir_entries)&lt;br /&gt;
* id : identifiant de l'utilisateur&lt;br /&gt;
* nickname : identifiant de connexion&lt;br /&gt;
* firstname : prénom&lt;br /&gt;
* lastname : nom&lt;br /&gt;
* hashname : concaténation du prénom, du deuxième prénom et du nom, sans les tirets ni les espaces puis crypté en MD5 (utilisé pour tester lors de la création d'un utilisateur si un utilisateur de même coordonnées existe déjà)&lt;br /&gt;
* email : adresse de messagerie&lt;br /&gt;
* date : date de la création du compte utilisateur&lt;br /&gt;
* password : mot de passe de connexion (crypté en MD5)&lt;br /&gt;
* changepwd : &lt;br /&gt;
* remote_addr : &lt;br /&gt;
* confirm_hash : clef de confirmation utilisée dans le lien de l'email de confirmation de la création du compte&lt;br /&gt;
* is_confirmed : 1 si le compte utilisateur a été confirmé par l'administrateur, 0 sinon&lt;br /&gt;
* disabled : 1 si le compte est désactivé (authentification impossible), 0 sinon&lt;br /&gt;
* validity_start : date de début de la validité du compte utilisateur (authentification temporaire), 0000-00-00 sinon&lt;br /&gt;
* validity_end : date de fin de la validité du compte utilisateur (authentification temporaire), 0000-00-00 sinon&lt;br /&gt;
* lang : langue à utiliser pour l'interface Ovidentia (fr, en...) ou valeur vide&lt;br /&gt;
* skin : nom du skin à utiliser pour l'interface Ovidentia ou valeur vide&lt;br /&gt;
* style : nom du fichier css du skin à utiliser pour l'interface Ovidentia ou valeur vide&lt;br /&gt;
* lastlog : date de l'authentification de la précédente session (utilisé par exemple pour déterminer ce qui a été publié sur le portail depuis votre dernière connexion)&lt;br /&gt;
* datelog : date de l'authentification de la session en cours&lt;br /&gt;
* langfilter : filtre de langue à utiliser pour l'interface Ovidentia (fr, en...) ou valeur vide&lt;br /&gt;
* date_longformat : format des dates longues (option de l'utilisateur pour l'affichage des dates dans Ovidentia)&lt;br /&gt;
* date_shortformat : format des dates courtes (option de l'utilisateur pour l'affichage des dates dans Ovidentia)&lt;br /&gt;
* time_format : format des horaires (option de l'utilisateur pour l'affichage des horaires dans Ovidentia)&lt;br /&gt;
* cookie_validity : date de fin de validité pour la clef d'authentification par cookie&lt;br /&gt;
* cookie_id : clef de l'authentification par cookie en cours d'utilisation&lt;br /&gt;
* id_sitemap_profile : identifiant du profil du plan du site (lié avec la table bab_sitemap_profiles) associé à l'utilisateur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gestionnaire de fichiers ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_files ===&lt;br /&gt;
contient les informations sur les fichiers du gestionnaire de fichiers. &lt;br /&gt;
* id : identifiant d'un agenda&lt;br /&gt;
* state : statut (n'est pas le statut d'approbation).&lt;br /&gt;
Fichier supprimé et en corbeille : D&lt;br /&gt;
&lt;br /&gt;
Fichier coupé : X&lt;br /&gt;
&lt;br /&gt;
Pas de statut : valeur vide&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4779</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4779"/>
				<updated>2010-10-07T11:41:44Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Comprendre les Widgets un par un */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante d'association '''Champ de table'''-'''Champ de colonne CSV''', il est nécessaire d'indiquer les champs de table.&lt;br /&gt;
La méthode addImportField() de la classe Widget_CsvImportForm permet d'indiquer ces champs. Elle prend en paramètres le nom du champ, son libellé et un booléen permettant d'indiquer si le champ est obligatoire au moment de l'étape d'association des champs. En effet, tant que l'utilisateur n'aura pas associé les champs obligatoires à des colonnes du fichier CSV, l'étape suivante ne s'exécutera pas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV|center]]&lt;br /&gt;
&lt;br /&gt;
L'étape suivante (formulaire d'association des champs) est prise en charge automatiquement par le Widget. Ainsi, l'URL en cours sera automatiquement rappelée pour afficher le formulaire d'association suivant.&lt;br /&gt;
&lt;br /&gt;
Le développeur doit donc prévoir que la page affichant le formulaire de départ affichera aussi la deuxième étape.&lt;br /&gt;
&lt;br /&gt;
Aperçu de l'étape d'association :&lt;br /&gt;
[[Image:csvimport_form2.png|Formulaire d'association des champs|center]]&lt;br /&gt;
&lt;br /&gt;
Dès lors que l'étape d'association des champs est validée, l'objet Widget_CsvImportForm fournit un itérateur via la méthode getIterator(). Pour vérifier que l'étape d'association est terminée, utilisez le code suivant, la méthode getIterator() retourne un objet Widget_CsvIterator ou NULL :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if ($iterator = $import-&amp;gt;getIterator()) {&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'itérateur va passer en revue chaque ligne du fichier source CSV. &lt;br /&gt;
&lt;br /&gt;
Exemple de code PHP permettant de passer en revue chaque ligne du fichier CSV. L'itérateur retourne des objets Widget_CsvRow pour chaque ligne du fichier CSV :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($iterator as $position =&amp;gt; $row) { /* $row : object Widget_CsvRow */&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'objet '''Widget_CsvRow''' :&lt;br /&gt;
* la méthode line() permet de connaître le numéro de ligne dans le fichier CSV&lt;br /&gt;
* la méthode checkMandatory() retourne un booléen. Permet de vérifier si la ligne contient des valeurs pour les champs indiqués comme obligatoires à la configuration de l'import&lt;br /&gt;
* les propriétés de l'objet ont pour noms les champs de configuration (définis via addImportField()). Les valeurs des propriétés correspondent aux valeurs trouvées dans le fichier CSV.&lt;br /&gt;
&lt;br /&gt;
Exemple de code pour remonter tous les Nom et Prénom du fichier CSV :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($iterator as $position =&amp;gt; $row) { /* $row : object Widget_CsvRow */&lt;br /&gt;
   if (isset($row-&amp;gt;firstname) &amp;amp;&amp;amp; isset($row-&amp;gt;lastname)) {&lt;br /&gt;
      echo $row-&amp;gt;firstname.' '.$row-&amp;gt;name;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Contrôleur et Widget_Action====&lt;br /&gt;
=====Introduction=====&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4772</id>
		<title>Structures des tables de données d'Ovidentia</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4772"/>
				<updated>2010-09-22T10:34:14Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cet article est en cours de rédaction. Son contenu n'est pas exhaustif.&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_calendar ===&lt;br /&gt;
contient les agendas (les noms des agendas ne se trouvent pas dans cette table). La table est liée aux tables bab_cal_public, bab_cal_resources ou bab_cal_events (il n'y a pas de tables pour les agendas personnels)&lt;br /&gt;
* id : identifiant d'un agenda&lt;br /&gt;
* owner : correspond pour un agenda de ressources à l'identifiant de l'enregistrement dans la table bab_cal_resources&lt;br /&gt;
* type : type de l'agenda.&lt;br /&gt;
Agenda  : 1&lt;br /&gt;
Agenda  : 2&lt;br /&gt;
Agenda de ressources : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_categories  ===&lt;br /&gt;
contient les catégories d'événements&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* name : nom de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* bgcolor : couleur héxa de la catégorie (ex : CC0000)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events ===&lt;br /&gt;
contient les événements des agendas (tous types d'agendas confondus). Cette table ne permet pas de savoir dans quels agendas sont publiés les événements car un événement peut faire partie de plusieurs agendas : voir table bab_cal_events_owners.&lt;br /&gt;
* id : identifiant de l'événement&lt;br /&gt;
* title : titre de l'événement&lt;br /&gt;
* description : description de l'événement&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* location : lieu de l'événement&lt;br /&gt;
* start_date : date et heure de début de l'événement&lt;br /&gt;
* end_date : date et heure de fin de l'événement&lt;br /&gt;
* id_cat : identifiant de la catégorie d'événement&lt;br /&gt;
* id_creator : identifiant de l'auteur de l'événement&lt;br /&gt;
* hash : rempli uniquement lorsque l'événement est répétitif (ex : R_4697c6374e306b988eff36a868ff6f2c)&lt;br /&gt;
* color : couleur de l'événement (ex : FF0033)&lt;br /&gt;
* bprivate : indique si l'événement est privé. Valeur possible : Y ou N&lt;br /&gt;
* block : indique si l'événement est verrouillé. Valeur possible : Y ou N&lt;br /&gt;
* bfree : indique si l'événement est libre. Valeur possible : Y ou N&lt;br /&gt;
* date_modification : date de dernière modification de l'événement&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* uuid : identifiant unique de l'événement (utilisé pour des outils de synchronisation externe)&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
&lt;br /&gt;
Pour un événement répétitif, Ovidentia génère autant d'enregistrements dans la table bab_cal_events qu'il existe de répétitions. Il est possible de savoir si un événement est répétitif si le champ hash est renseigné. Tous les événements qui auront le même hash font donc partie du même événement de base.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'on créé un événement dans plusieurs agendas personnels (liaison bab_cal_events_owners), Ovidentia l'affiche comme des invités.&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_notes ===&lt;br /&gt;
contient les notes privées associées aux événements d'agendas par les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur&lt;br /&gt;
* note : contenu de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_owners ===&lt;br /&gt;
lie les événements d'agendas (bab_cal_events) avec les agendas (bab_calendars)&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_cal : identifiant de l'agenda&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_reminders ===&lt;br /&gt;
contient les rappels d'événements pour les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur qui veut le rappel&lt;br /&gt;
* day : nombre de jours avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* hour : nombre d'heures avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* minute : nombre de minutes avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* bemail : vaut Y si les rappels doivent être envoyés par e-mails (voir options dans config.php), sinon N&lt;br /&gt;
* processed : vaut Y si l'utilisateur a demandé à cacher le rappel de sa fenêtre, sinon N par défaut&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_public ===&lt;br /&gt;
contient les agendas collectifs&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : description de l'agenda&lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_resources ===&lt;br /&gt;
contient les agendas de ressources&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : &lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
* availability_lock : vaut 1 si on veut empêcher la création d'événements en surbooking, sinon 0.&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_user_options ===&lt;br /&gt;
contient les options privés des utilisateurs sur l'ensemble des agendas&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles ===&lt;br /&gt;
contient les articles&lt;br /&gt;
* id : identifiant de l'article&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se situe l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de l'article&lt;br /&gt;
* date : date de création de l'article&lt;br /&gt;
* date_publication : date de publication de l'article&lt;br /&gt;
* date_archiving : date d'archivage de l'article&lt;br /&gt;
* date_modification : date de dernière modification de l'article&lt;br /&gt;
* title : titre de l'article&lt;br /&gt;
* head : introduction de l'article (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps de l'article&lt;br /&gt;
* body_format : format du texte de la description : html...&lt;br /&gt;
* archive : indique si l'article est une archive. Valeurs possibles : N ou Y&lt;br /&gt;
* lang : langue de l'article (fr, en...)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'article dans le thème par rapport aux autres articles du thème&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles_images ===&lt;br /&gt;
contient les images associées aux articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts ===&lt;br /&gt;
contient les brouillons d'articles (Rappel : avant d'être soumis ou approuvés, les textes sont des brouillons. Les brouillons se transforment en articles dès qu'ils sont soumis et approuvés)&lt;br /&gt;
* id : identifiant du brouillon&lt;br /&gt;
* id_author : identifiant de l'auteur du brouillon&lt;br /&gt;
* date_creation : date de création du brouillon&lt;br /&gt;
* date_modification : date de dernière modification du brouillon&lt;br /&gt;
* date_submission : date de soumission du brouillon&lt;br /&gt;
* date_publication : date de publication du brouillon&lt;br /&gt;
* date_archiving : date d'archivage du brouillon&lt;br /&gt;
* title : titre du brouillon&lt;br /&gt;
* head : introduction du brouillon (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps du brouillon&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* lang : langue du brouillon (fr, en...)&lt;br /&gt;
* trash : indique si le brouillon est dans la corbeille ou pas. Valeurs possibles : N ou Y&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se trouve le brouillon (peut être vide)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* hpage_private : vaut Y si l'article est proposé pour les pages d'accueil privées&lt;br /&gt;
* hpage_public : vaut Y si l'article est proposé pour les pages d'accueil publiques&lt;br /&gt;
* notify_members : vaut Y l'option 'notifier les lecteurs' est cochée&lt;br /&gt;
* idfai : identifiant de l'instance en cours du schéma d'approbation&lt;br /&gt;
* result : statut d'approbation (type entier). Valeurs possibles : 0, 1, 2, 3&lt;br /&gt;
0 : statut par défaut si pas d'approbation en cours&lt;br /&gt;
1 : l'article brouillon est en attente d'approbation&lt;br /&gt;
2 : l'article brouillon est approuvé (Remarque : ce statut n'est jamais utilisé car un article brouillon approuvé se transforme en article)&lt;br /&gt;
3 : l'article brouillon a été refusé&lt;br /&gt;
* id_article : identifiant de l'article si le brouillon est une modification d'un article existant&lt;br /&gt;
* id_anonymous : identifiant de l'auteur si l'auteur n'est pas authentifié. C'est l'identifiant d'un enregistrement dans la table BAB_USERS_LOG_TBL.&lt;br /&gt;
* approbation : vaut 0, 1 ou 2&lt;br /&gt;
* update_datemodif : vaut Y si&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_files ===&lt;br /&gt;
contient les fichiers joints aux brouillons d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* name : nom du fichier (Ex : gaston.jpg)&lt;br /&gt;
* description : description du fichier&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier par rapport aux autres fichiers joints de l'article brouillon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_images ===&lt;br /&gt;
contient les images associées aux brouillons d'articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_notes ===&lt;br /&gt;
contient les commentaires des approbateurs qui ont refusés les articles brouillons (Pour le publicateur, les commentaires sont affichées en prévisualisation de l'article, depuis la liste des brouillons (lien Publication/onglet Mes Articles si l'article est en cours d'approbation))&lt;br /&gt;
* id : identifiant de la note&lt;br /&gt;
* id_draft : identifiant de l'article brouillon associé&lt;br /&gt;
* content : contenu texte de la note&lt;br /&gt;
* id_author : identifiant de l'auteur de la note&lt;br /&gt;
* date_note : date de création de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles brouillons&lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_files ===&lt;br /&gt;
contient les fichiers joints des articles&lt;br /&gt;
* id : identifiant du fichier joint à l'article&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* name : &lt;br /&gt;
* description : description du fichier joint&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier joint avec les autres fichiers joints d'un même article&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_log ===&lt;br /&gt;
contient l'historique des modifications d'articles&lt;br /&gt;
* id : identifiant de la modification&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de la modification&lt;br /&gt;
* date_log : date et heure de la modification&lt;br /&gt;
* action_log : statut de la modification. Valeurs possibles : lock, unlock, commit, refused, accepted.&lt;br /&gt;
Lorsqu'on saisit la raison de la modification avant de modifier un article, le statut est lock.&lt;br /&gt;
Lorsqu'on soumet un article, le statut est commit. Si l'article ne passe pas par approbation, il y a immédiatement un autre enregistrement avec le statut accepted. commit et accepted sont aussi utilisés lorsqu'on modifie un brouillon puis qu'on soumet.&lt;br /&gt;
Lorsqu'on modifie un article et qu'on l'enregistre (on ne le soumet pas), seul un enregistrement est créé : celui avec le statut lock et la raison de la modification.&lt;br /&gt;
Il n'y a pas d'enregistrements si on créé un article et qu'il ne doit pas être approuvé.&lt;br /&gt;
Lorsqu'on supprime un brouillon, le statut est unlock.&lt;br /&gt;
* art_log : description de la modification. Contient le texte saisit comme raison de la modification &lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles&lt;br /&gt;
* id_art : identifiant de l'article&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_comments ===&lt;br /&gt;
contient les commentaires des articles&lt;br /&gt;
* id : identifiant du commentaire&lt;br /&gt;
* id_parent : identifiant du commentaire parent&lt;br /&gt;
* id_article : identifiant de l'article associé au commentaire&lt;br /&gt;
* id_topic : identifiant du thème d'articles dans lequel est créé l'article&lt;br /&gt;
* id_author : auteur du commentaire&lt;br /&gt;
* id_last_editor : identifiant du dernier auteur modificateur&lt;br /&gt;
* date : date de création du commentaire&lt;br /&gt;
* last_update : date de la dernière modification du commentaire&lt;br /&gt;
* subject : titre du commentaire&lt;br /&gt;
* message : contenu texte du commentaire&lt;br /&gt;
* confirmed : Y si le commentaire est approuvé, N sinon&lt;br /&gt;
* name : nom de l'auteur du commentaire&lt;br /&gt;
* email : email de l'auteur du commentaire&lt;br /&gt;
* idfai : identifiant de l'instance du schéma d'approbation utilisé pour ce commentaire&lt;br /&gt;
* lang : langue du commentaire (fr, en...)&lt;br /&gt;
* article_rating : note attribuée à l'article. Valeurs possibles : 0, 1, 2, 3, 4, 5&lt;br /&gt;
0 : l'article n'est pas noté&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topcat_order ===&lt;br /&gt;
contient les numéros pour les tris d'affichage des catégories et des thèmes. Attention, sous une catégorie parente, il est possible d'ordonner les sous-catégories avec les sous-thèmes (il y a donc des mélanges d'où la colonne type).&lt;br /&gt;
Rappel : une catégorie est un conteneur de sous-catégories ou de thèmes.&lt;br /&gt;
* id : identifiant de l'ordre&lt;br /&gt;
* id_topcat : identifiant de la catégorie ou du thème que l'on veut ordonner&lt;br /&gt;
* type : 1 si l'ordre est définit pour une catégorie d'articles. 2 si l'ordre est défini pour un thème d'articles.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'objet par rapport aux autres objets de la catégorie parente (id_parent) &lt;br /&gt;
* id_parent : identifiant de la catégorie d'articles parente d'idtopcat. C'est la catégorie dans laquelle on veut ordonner notre objet. Vaut 0 si l'objet qu'on veut trier est une catégorie de premier niveau (pas de catégorie parente).&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics ===&lt;br /&gt;
contient les thèmes d'articles&lt;br /&gt;
* id : identifiant du thème&lt;br /&gt;
* category : nom du thème&lt;br /&gt;
* description : description du thème&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* id_cat : identifiant de la catégorie dans laquelle se trouve le thème&lt;br /&gt;
* idsaart : identifiant du schéma d'approbation à la création d'articles&lt;br /&gt;
* idsacom : identifiant du schéma d'approbation des commentaires&lt;br /&gt;
* idsa_update : identifiant du schéma d'approbation à la modification des articles&lt;br /&gt;
* notify : Y si les auteurs peuvent notifier les lecteurs par email, N sinon&lt;br /&gt;
* lang : langue du thème (fr, en...)&lt;br /&gt;
* article_tmpl : nom du modèle d'articles&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
* restrict_access : Y si les auteurs peuvent restreindre l'accès aux articles, N sinon&lt;br /&gt;
* allow_hpages : Y si on permet aux auteurs de proposer leurs articles pour les pages d'accueil, N sinon&lt;br /&gt;
* allow_pubdates : Y si on permet aux auteurs de spécifier des dates de publication, N sinon&lt;br /&gt;
* allow_attachments : Y si on permet aux auteurs de joindre des fichiers avec leurs articles, N sinon&lt;br /&gt;
* allow_update : entier indiquant si les auteurs peuvent modifier leurs articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les auteurs ne peuvent pas modifier leurs articles&lt;br /&gt;
1 : les auteurs peuvent modifier leurs articles, mais avec approbation&lt;br /&gt;
2 : les auteurs peuvent modifier leurs articles et sans approbation&lt;br /&gt;
* max_articles : nombre maximum d'articles sur la page des archives&lt;br /&gt;
* allow_manupdate : entier indiquant si les gestionnaires peuvent modifier les articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les gestionnaires ne peuvent pas modifier les articles&lt;br /&gt;
1 : les gestionnaires peuvent modifier les articles, mais avec approbation&lt;br /&gt;
2 : les gestionnaires peuvent modifier les articles et sans approbation&lt;br /&gt;
* auto_approbation : Y si on approuve automatiquement le contributeur dans le cas où il fait partie de la première étape du schéma d'approbation, N sinon&lt;br /&gt;
* busetags : Y si on utilise les mots-clés du thésaurus, N sinon&lt;br /&gt;
* allow_addImg : Y si on permet aux auteurs d'associer une image à un article&lt;br /&gt;
* allow_article_rating : Y si on permet aux auteurs des commentaires de noter les articles, N sinon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicscom_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant faire des commentaires sur le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsman_groups ===&lt;br /&gt;
Table de droits d'accès : groupes gestionnaires du thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsmod_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant modifier des articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicssub_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant soumettre de nouveaux articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsview_groups ===&lt;br /&gt;
Table de droist d'accès : groupes pouvant voir les articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group :&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories ===&lt;br /&gt;
contient les catégories d'articles (conteneurs des thèmes d'articles)&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* title : titre de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* enabled : vaut Y si la section de la catégorie est activée, N sinon&lt;br /&gt;
* template : nom du patron de section&lt;br /&gt;
* id_dgowner : identifiant de la délégation où se trouve la catégorie, 0 si dans tout le site&lt;br /&gt;
* optional : utilisation inconnue !!!&lt;br /&gt;
* id_parent : identifiant de la catégorie parente&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories_images ===&lt;br /&gt;
contient les images associées aux catégories d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idCategory : identifiant de la catégorie d'articles&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_images ===&lt;br /&gt;
contient les images associées aux thèmes d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idTopic : identifiant du thème&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
== Utilisateurs ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_users ===&lt;br /&gt;
contient les comptes utilisateurs (attention : les enregistrements sont liés avec les tables d'annuaires comme bab_dbdir_entries)&lt;br /&gt;
* id : identifiant de l'utilisateur&lt;br /&gt;
* nickname : identifiant de connexion&lt;br /&gt;
* firstname : prénom&lt;br /&gt;
* lastname : nom&lt;br /&gt;
* hashname : concaténation du prénom, du deuxième prénom et du nom, sans les tirets ni les espaces puis crypté en MD5 (utilisé pour tester lors de la création d'un utilisateur si un utilisateur de même coordonnées existe déjà)&lt;br /&gt;
* email : adresse de messagerie&lt;br /&gt;
* date : date de la création du compte utilisateur&lt;br /&gt;
* password : mot de passe de connexion (crypté en MD5)&lt;br /&gt;
* changepwd : &lt;br /&gt;
* remote_addr : &lt;br /&gt;
* confirm_hash : clef de confirmation utilisée dans le lien de l'email de confirmation de la création du compte&lt;br /&gt;
* is_confirmed : 1 si le compte utilisateur a été confirmé par l'administrateur, 0 sinon&lt;br /&gt;
* disabled : 1 si le compte est désactivé (authentification impossible), 0 sinon&lt;br /&gt;
* validity_start : date de début de la validité du compte utilisateur (authentification temporaire), 0000-00-00 sinon&lt;br /&gt;
* validity_end : date de fin de la validité du compte utilisateur (authentification temporaire), 0000-00-00 sinon&lt;br /&gt;
* lang : langue à utiliser pour l'interface Ovidentia (fr, en...) ou valeur vide&lt;br /&gt;
* skin : nom du skin à utiliser pour l'interface Ovidentia ou valeur vide&lt;br /&gt;
* style : nom du fichier css du skin à utiliser pour l'interface Ovidentia ou valeur vide&lt;br /&gt;
* lastlog : date de l'authentification de la précédente session (utilisé par exemple pour déterminer ce qui a été publié sur le portail depuis votre dernière connexion)&lt;br /&gt;
* datelog : date de l'authentification de la session en cours&lt;br /&gt;
* langfilter : filtre de langue à utiliser pour l'interface Ovidentia (fr, en...) ou valeur vide&lt;br /&gt;
* date_longformat : format des dates longues (option de l'utilisateur pour l'affichage des dates dans Ovidentia)&lt;br /&gt;
* date_shortformat : format des dates courtes (option de l'utilisateur pour l'affichage des dates dans Ovidentia)&lt;br /&gt;
* time_format : format des horaires (option de l'utilisateur pour l'affichage des horaires dans Ovidentia)&lt;br /&gt;
* cookie_validity : date de fin de validité pour la clef d'authentification par cookie&lt;br /&gt;
* cookie_id : clef de l'authentification par cookie en cours d'utilisation&lt;br /&gt;
* id_sitemap_profile : identifiant du profil du plan du site (lié avec la table bab_sitemap_profiles) associé à l'utilisateur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gestionnaire de fichiers ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_files ===&lt;br /&gt;
contient les informations sur les fichiers du gestionnaire de fichiers. &lt;br /&gt;
* id : identifiant d'un agenda&lt;br /&gt;
* state : statut (n'est pas le statut d'approbation).&lt;br /&gt;
Fichier supprimé et en corbeille : D&lt;br /&gt;
Fichier coupé : X&lt;br /&gt;
Pas de statut : valeur vide&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4752</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4752"/>
				<updated>2010-07-30T14:17:11Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Implémentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante d'association '''Champ de table'''-'''Champ de colonne CSV''', il est nécessaire d'indiquer les champs de table.&lt;br /&gt;
La méthode addImportField() de la classe Widget_CsvImportForm permet d'indiquer ces champs. Elle prend en paramètres le nom du champ, son libellé et un booléen permettant d'indiquer si le champ est obligatoire au moment de l'étape d'association des champs. En effet, tant que l'utilisateur n'aura pas associé les champs obligatoires à des colonnes du fichier CSV, l'étape suivante ne s'exécutera pas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV|center]]&lt;br /&gt;
&lt;br /&gt;
L'étape suivante (formulaire d'association des champs) est prise en charge automatiquement par le Widget. Ainsi, l'URL en cours sera automatiquement rappelée pour afficher le formulaire d'association suivant.&lt;br /&gt;
&lt;br /&gt;
Le développeur doit donc prévoir que la page affichant le formulaire de départ affichera aussi la deuxième étape.&lt;br /&gt;
&lt;br /&gt;
Aperçu de l'étape d'association :&lt;br /&gt;
[[Image:csvimport_form2.png|Formulaire d'association des champs|center]]&lt;br /&gt;
&lt;br /&gt;
Dès lors que l'étape d'association des champs est validée, l'objet Widget_CsvImportForm fournit un itérateur via la méthode getIterator(). Pour vérifier que l'étape d'association est terminée, utilisez le code suivant, la méthode getIterator() retourne un objet Widget_CsvIterator ou NULL :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if ($iterator = $import-&amp;gt;getIterator()) {&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'itérateur va passer en revue chaque ligne du fichier source CSV. &lt;br /&gt;
&lt;br /&gt;
Exemple de code PHP permettant de passer en revue chaque ligne du fichier CSV. L'itérateur retourne des objets Widget_CsvRow pour chaque ligne du fichier CSV :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($iterator as $position =&amp;gt; $row) { /* $row : object Widget_CsvRow */&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'objet '''Widget_CsvRow''' :&lt;br /&gt;
* la méthode line() permet de connaître le numéro de ligne dans le fichier CSV&lt;br /&gt;
* la méthode checkMandatory() retourne un booléen. Permet de vérifier si la ligne contient des valeurs pour les champs indiqués comme obligatoires à la configuration de l'import&lt;br /&gt;
* les propriétés de l'objet ont pour noms les champs de configuration (définis via addImportField()). Les valeurs des propriétés correspondent aux valeurs trouvées dans le fichier CSV.&lt;br /&gt;
&lt;br /&gt;
Exemple de code pour remonter tous les Nom et Prénom du fichier CSV :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($iterator as $position =&amp;gt; $row) { /* $row : object Widget_CsvRow */&lt;br /&gt;
   if (isset($row-&amp;gt;firstname) &amp;amp;&amp;amp; isset($row-&amp;gt;lastname)) {&lt;br /&gt;
      echo $row-&amp;gt;firstname.' '.$row-&amp;gt;name;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4751</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4751"/>
				<updated>2010-07-30T14:08:45Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Implémentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante d'association '''Champ de table'''-'''Champ de colonne CSV''', il est nécessaire d'indiquer les champs de table.&lt;br /&gt;
La méthode addImportField() de la classe Widget_CsvImportForm permet d'indiquer ces champs. Elle prend en paramètres le nom du champ, son libellé et un booléen permettant d'indiquer si le champ est obligatoire au moment de l'étape d'association des champs. En effet, tant que l'utilisateur n'aura pas associé les champs obligatoires à des colonnes du fichier CSV, l'étape suivante ne s'exécutera pas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV|center]]&lt;br /&gt;
&lt;br /&gt;
L'étape suivante (formulaire d'association des champs) est prise en charge automatiquement par le Widget. Ainsi, l'URL en cours sera automatiquement rappelée pour afficher le formulaire d'association suivant.&lt;br /&gt;
&lt;br /&gt;
Le développeur doit donc prévoir que la page affichant le formulaire de départ affichera aussi la deuxième étape.&lt;br /&gt;
&lt;br /&gt;
Aperçu de l'étape d'association :&lt;br /&gt;
[[Image:csvimport_form2.png|Formulaire d'association des champs|center]]&lt;br /&gt;
&lt;br /&gt;
Dès lors que l'étape d'association des champs est validée, l'objet Widget_CsvImportForm fournit un itérateur via la méthode getIterator(). Pour vérifier que l'étape d'association est terminée, utilisez le code suivant, la méthode getIterator() retourne un objet Widget_CsvIterator ou NULL :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if ($iterator = $import-&amp;gt;getIterator()) {&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'itérateur va passer en revue chaque ligne du fichier source CSV. &lt;br /&gt;
&lt;br /&gt;
Exemple de code PHP permettant de passer en revue chaque ligne du fichier CSV. L'itérateur retourne des objets Widget_CsvRow pour chaque ligne du fichier CSV :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($iterator as $position =&amp;gt; $row) { /* $row : object Widget_CsvRow */&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'objet '''Widget_CsvRow''' :&lt;br /&gt;
* la méthode line() permet de connaître le numéro de ligne dans le fichier CSV&lt;br /&gt;
* la méthode checkMandatory() retourne un booléen. Permet de vérifier si la ligne contient des valeurs pour les champs indiqués comme obligatoires à la configuration de l'import&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4750</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4750"/>
				<updated>2010-07-30T13:44:26Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Implémentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante d'association '''Champ de table'''-'''Champ de colonne CSV''', il est nécessaire d'indiquer les champs de table.&lt;br /&gt;
La méthode addImportField() de la classe Widget_CsvImportForm permet d'indiquer ces champs. Elle prend en paramètres le nom du champ, son libellé et un booléen permettant d'indiquer si le champ est obligatoire au moment de l'étape d'association des champs. En effet, tant que l'utilisateur n'aura pas associé les champs obligatoires à des colonnes du fichier CSV, l'étape suivante ne s'exécutera pas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV|center]]&lt;br /&gt;
&lt;br /&gt;
L'étape suivante (formulaire d'association des champs) est prise en charge automatiquement par le Widget. Ainsi, l'URL en cours sera automatiquement rappelée pour afficher le formulaire d'association suivant.&lt;br /&gt;
&lt;br /&gt;
Le développeur doit donc prévoir que la page affichant le formulaire de départ affichera aussi la deuxième étape.&lt;br /&gt;
&lt;br /&gt;
Aperçu de l'étape d'association :&lt;br /&gt;
[[Image:csvimport_form2.png|Formulaire d'association des champs|center]]&lt;br /&gt;
&lt;br /&gt;
Dès lors que l'étape d'association des champs est validée, l'objet Widget_CsvImportForm fournit un itérateur via la méthode getIterator(). Pour vérifier que l'étape d'association est terminée, utilisez le code suivant, la méthode getIterator() retourne un objet Widget_CsvIterator ou NULL :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if ($iterator = $import-&amp;gt;getIterator()) {&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'itérateur va passer en revue chaque ligne du fichier source CSV. &lt;br /&gt;
&lt;br /&gt;
Exemple de code PHP permettant de passer en revue chaque ligne du fichier CSV. $row est un objet Widget_CsvRow :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($iterator as $position =&amp;gt; $row) {&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4749</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4749"/>
				<updated>2010-07-30T13:36:36Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Implémentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante d'association '''Champ de table'''-'''Champ de colonne CSV''', il est nécessaire d'indiquer les champs de table.&lt;br /&gt;
La méthode addImportField() de la classe Widget_CsvImportForm permet d'indiquer ces champs. Elle prend en paramètres le nom du champ, son libellé et un booléen permettant d'indiquer si le champ est obligatoire au moment de l'étape d'association des champs. En effet, tant que l'utilisateur n'aura pas associé les champs obligatoires à des colonnes du fichier CSV, l'étape suivante ne s'exécutera pas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV|center]]&lt;br /&gt;
&lt;br /&gt;
L'étape suivante (formulaire d'association des champs) est prise en charge automatiquement par le Widget. Ainsi, l'URL en cours sera automatiquement rappelée pour afficher le formulaire d'association suivant.&lt;br /&gt;
&lt;br /&gt;
Le développeur doit donc prévoir que la page affichant le formulaire de départ affichera aussi la deuxième étape.&lt;br /&gt;
&lt;br /&gt;
Aperçu de l'étape d'association :&lt;br /&gt;
[[Image:csvimport_form2.png|Formulaire d'association des champs|center]]&lt;br /&gt;
&lt;br /&gt;
Dès lors que l'étape d'association des champs est validée, l'objet Widget_CsvImportForm fournit un itérateur via la méthode getIterator(). Pour vérifier que l'étape d'association est terminée, utilisez le code suivant, la méthode getIterator() retourne un objet Widget_CsvIterator ou NULL :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if ($iterator = $import-&amp;gt;getIterator()) {&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'itérateur va passer en revue chaque ligne du fichier source CSV. &lt;br /&gt;
&lt;br /&gt;
Exemple de code PHP permettant de passer en revue chaque ligne .&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($iterator as $position =&amp;gt; $row) {&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4748</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4748"/>
				<updated>2010-07-30T10:48:05Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Implémentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante d'association '''Champ de table'''-'''Champ de colonne CSV''', il est nécessaire d'indiquer les champs de table.&lt;br /&gt;
La méthode addImportField() de la classe Widget_CsvImportForm permet d'indiquer ces champs. Elle prend en paramètres le nom du champ, son libellé et un booléen permettant d'indiquer si le champ est obligatoire au moment de l'étape d'association des champs. En effet, tant que l'utilisateur n'aura pas associé les champs obligatoires à des colonnes du fichier CSV, l'étape suivante ne s'exécutera pas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV|center]]&lt;br /&gt;
&lt;br /&gt;
L'étape suivante (formulaire d'association des champs) est prise en charge automatiquement par le Widget. Ainsi, l'URL en cours sera automatiquement rappelée pour afficher le formulaire d'association suivant.&lt;br /&gt;
&lt;br /&gt;
Le développeur doit donc prévoir que la page affichant le formulaire de départ affichera aussi la deuxième étape.&lt;br /&gt;
&lt;br /&gt;
Aperçu de l'étape d'association :&lt;br /&gt;
[[Image:csvimport_form2.png|Formulaire d'association des champs|center]]&lt;br /&gt;
&lt;br /&gt;
Dès lors que l'étape d'association des champs est validée, l'objet Widget_CsvImportForm fournit un itérateur via la méthode getIterator(). Pour vérifier que l'étape d'association est terminée, utilisez le code suivant, la méthode getIterator() retourne un objet Widget_CsvIterator ou NULL :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if ($iterator = $import-&amp;gt;getIterator()) {&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4747</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4747"/>
				<updated>2010-07-30T10:35:43Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Widget_CsvImportForm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante d'association '''Champ de table'''-'''Champ de colonne CSV''', il est nécessaire d'indiquer les champs de table.&lt;br /&gt;
La méthode addImportField() de la classe Widget_CsvImportForm permet d'indiquer ces champs. Elle prend en paramètres le nom du champ, son libellé et un booléen permettant d'indiquer si le champ est obligatoire au moment de l'étape d'association des champs. En effet, tant que l'utilisateur n'aura pas associé les champs obligatoires à des colonnes du fichier CSV, l'étape suivante ne s'exécutera pas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV|center]]&lt;br /&gt;
&lt;br /&gt;
L'étape suivante (formulaire d'association des champs) est prise en charge automatiquement par le Widget. Ainsi, l'URL en cours sera automatiquement rappelée pour afficher le formulaire d'association suivant.&lt;br /&gt;
&lt;br /&gt;
Le développeur doit donc prévoir que la page affichant le formulaire de départ affichera aussi la deuxième étape.&lt;br /&gt;
&lt;br /&gt;
Aperçu de l'étape d'association :&lt;br /&gt;
[[Image:csvimport_form2.png|Formulaire d'association des champs|center]]&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Fichier:Csvimport_form2.png&amp;diff=4746</id>
		<title>Fichier:Csvimport form2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Fichier:Csvimport_form2.png&amp;diff=4746"/>
				<updated>2010-07-30T10:33:58Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4745</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4745"/>
				<updated>2010-07-30T10:33:39Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Implémentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante d'association '''Champ de table'''-'''Champ de colonne CSV''', il est nécessaire d'indiquer les champs de table.&lt;br /&gt;
La méthode addImportField() de la classe Widget_CsvImportForm permet d'indiquer ces champs. Elle prend en paramètres le nom du champ, son libellé et un booléen permettant d'indiquer si le champ est obligatoire. Comme obligatoire on entend .&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV|center]]&lt;br /&gt;
&lt;br /&gt;
L'étape suivante (formulaire d'association des champs) est prise en charge automatiquement par le Widget. Ainsi, l'URL en cours sera automatiquement rappelée pour afficher le formulaire d'association suivant.&lt;br /&gt;
&lt;br /&gt;
Le développeur doit donc prévoir que la page affichant le formulaire de départ affichera aussi la deuxième étape.&lt;br /&gt;
&lt;br /&gt;
Aperçu de l'étape d'association :&lt;br /&gt;
[[Image:csvimport_form2.png|Formulaire d'association des champs|center]]&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4744</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4744"/>
				<updated>2010-07-30T08:42:43Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Widget_CsvImportForm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante d'association '''Champ de table'''-'''Champ de colonne CSV''', il est nécessaire d'indiquer les champs de table.&lt;br /&gt;
La méthode addImportField() de la classe Widget_CsvImportForm permet d'indiquer ces champs. Elle prend en paramètres le nom du champ, son libellé et un booléen permettant d'indiquer si le champ est obligatoire.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV|center]]&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4743</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4743"/>
				<updated>2010-07-30T08:39:42Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Widget_CsvImportForm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante d'association '''Champ de table'''-'''Champ de colonne CSV''', il est nécessaire d'indiquer les champs de table.&lt;br /&gt;
La méthode addImportField() de la classe Widget_CsvImportForm permet d'indiquer ces champs :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV|center]]&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4742</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4742"/>
				<updated>2010-07-30T08:30:29Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Implémentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante d'association '''Champ de table'''-'''Champ de colonne CSV''', il est nécessaire d'indiquer les champs .&lt;br /&gt;
La méthode addImportField() permet d'indiquer les champs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV|center]]&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4741</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4741"/>
				<updated>2010-07-30T08:28:45Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Widget_CsvImportForm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante&lt;br /&gt;
La méthode addImportField() permet d'indiquer les champs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV|center]]&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Fichier:Csvimport_form.png&amp;diff=4740</id>
		<title>Fichier:Csvimport form.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Fichier:Csvimport_form.png&amp;diff=4740"/>
				<updated>2010-07-30T08:28:25Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4739</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4739"/>
				<updated>2010-07-30T08:28:14Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Widget_CsvImportForm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante&lt;br /&gt;
La méthode addImportField() permet d'indiquer les champs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire aura cette apparence :&lt;br /&gt;
&lt;br /&gt;
[[Image:csvimport_form.png|Formulaire d'import CSV]]&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4738</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4738"/>
				<updated>2010-07-30T08:26:57Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Widget_CsvImportForm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
Un fichier CSV contient des enregistrements (un enregistrement par ligne) dont les données (nom, prénom, téléphone...) sont séparées par des virgules. Pour être compatible avec les formats CSV de Microsoft, le widget gère la séparation des données par des points-virgules.&lt;br /&gt;
&lt;br /&gt;
L'import s'effectue en plusieurs étapes :&lt;br /&gt;
* Affichage du formulaire de dépôt du fichier CSV&lt;br /&gt;
* Affichage du formulaire d'association '''Champ de table'''-'''Colonne du fichier CSV'''&lt;br /&gt;
* Import des données&lt;br /&gt;
* Affichage des résultats et erreurs si elles existent&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
Tout d'abord il est nécessaire d'afficher le formulaire de dépôt du fichier CSV en créant un objet Widget_CsvImportForm.&lt;br /&gt;
&lt;br /&gt;
Pour préparer l'étape suivante&lt;br /&gt;
La méthode addImportField() permet d'indiquer les champs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
$importForm = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;Page();&lt;br /&gt;
$page-&amp;gt;addItem($importForm);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le formulaire&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4737</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4737"/>
				<updated>2010-07-30T08:13:41Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Widget_CsvImportForm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_Functionality::get('Widgets');&lt;br /&gt;
$import = $W-&amp;gt;CsvImportForm()&lt;br /&gt;
	-&amp;gt;addImportField('lastname', 'Nom', true)&lt;br /&gt;
	-&amp;gt;addImportField('firstname', 'Prénom', true)&lt;br /&gt;
	-&amp;gt;addImportField('email', 'E-mail')&lt;br /&gt;
	-&amp;gt;addImportField('phone', 'Téléphone')&lt;br /&gt;
	;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4736</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4736"/>
				<updated>2010-07-30T08:10:03Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Comprendre les Widgets un par un */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
===Comprendre les Widgets un par un===&lt;br /&gt;
&lt;br /&gt;
====Widget_CsvImportForm====&lt;br /&gt;
=====Introduction=====&lt;br /&gt;
Ce widget permet de gérer automatiquement un import de données à partir d'une source CSV.&lt;br /&gt;
&lt;br /&gt;
=====Implémentation=====&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4735</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4735"/>
				<updated>2010-07-30T08:06:07Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Diagramme d'héritage des classes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de toutes les options suivantes&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;br /&gt;
&lt;br /&gt;
=== Comprendre les Widgets un par un ===&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Feuille_de_route&amp;diff=4712</id>
		<title>Feuille de route</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Feuille_de_route&amp;diff=4712"/>
				<updated>2010-04-28T14:35:53Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Version 7.3.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Version 7.2.0 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;prettytable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|| '''Description''' &lt;br /&gt;
| width=&amp;quot;70&amp;quot;| '''État'''&lt;br /&gt;
|-&lt;br /&gt;
|| La page &amp;quot;Nouveautés&amp;quot; dans le noyau devient un module d'Ovidentia installé par défaut dans la distribution mais supprimable  || Fait&lt;br /&gt;
|-&lt;br /&gt;
|| Un bouton de configuration dans la liste des modules de l'administrateur peut être ajouté sur chaque module a partir du fichier [[Variables du fichier addonini|addonini.php]] || Fait&lt;br /&gt;
|-  &lt;br /&gt;
|| Les gestionnaires d'un thème d'articles peuvent maintenant modifier un commentaire d'article  || Fait&lt;br /&gt;
|-  &lt;br /&gt;
|| Utilisation du captcha lors de la rédaction d'un commentaire par un anonyme  || Fait&lt;br /&gt;
|-  &lt;br /&gt;
|| Lors de la rédaction d'un article, les utilisateurs peuvent noter l'article. Cette notation ( de 1 à 5 ) est restituée lors de la visualisation de l'article par OVML  || Fait&lt;br /&gt;
|-  &lt;br /&gt;
|| Possibilité de supprimer plusieurs utilisateurs en même temps   || Fait&lt;br /&gt;
|-  &lt;br /&gt;
|| Possibilité de copier ou de déplacer les membres d'un groupe vers un autre groupe   || Fait&lt;br /&gt;
|-  &lt;br /&gt;
|| Dans les forums, possibilité d'afficher un autre de champ de l'annuaire au lieu du nom du contributeur  || Fait&lt;br /&gt;
|-  &lt;br /&gt;
|| Nouvelle gestion de l'installation des modules et du noyau, ajout de la possibilité d'ajout des messages pour suivre la progression de l'installation || Fait&lt;br /&gt;
|-&lt;br /&gt;
|| Amélioration de l'API de l'éditeur WYSIWYG, tout les emplacement de contenu modifiable du noyau sont désormais capable de supporter des formats autre que le HTML || Fait&lt;br /&gt;
|-&lt;br /&gt;
|| Les utilisateurs peuvent configurer comment ils seront notifiés quand de nouvelles contributions arrivent sur les forums ( Pas de notification, notification uniquement quand un nouveau sujet est initié ) || Fait&lt;br /&gt;
|-&lt;br /&gt;
|| Supprimer des utilisateurs créés depuis une date donné, dans le menu administration &amp;gt; utilisateurs &amp;gt; utilitaires. ceci permet de revenir en arrière sur un import d'utilisateurs || Fait&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Version 7.3.0 ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;prettytable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|| '''Description''' &lt;br /&gt;
| width=&amp;quot;70&amp;quot; | '''État'''&lt;br /&gt;
|-&lt;br /&gt;
|| Modification du plan du site dans le noyau pour que les différentes pages du site puisse fournir leurs mots clefs pour le référencement en même temps que le point d'accès dans le sitemap  || A l'étude&lt;br /&gt;
|-&lt;br /&gt;
|| Modification du comportement des droits d'accès dans les agendas, toujours permettre la modification des évènements de son agenda sauf quand un événement est verrouillé  || Fait&lt;br /&gt;
|-&lt;br /&gt;
|| Notification de l'auteur d'un événement en plus des participants en cas de modification de l'évènement  || Fait&lt;br /&gt;
|-&lt;br /&gt;
|| Calcul partiel du plan du site en base pour améliorer les performances et supporter des arborescences plus importantes  || Fait&lt;br /&gt;
|-&lt;br /&gt;
|| Ajout de la possibilité d'insérer plusieurs articles ( $ARTICLE ) d'un même thème à l'aide de l'éditeur WYSIWYG || Fait&lt;br /&gt;
|-&lt;br /&gt;
|| Ajout de la possibilité de paramétrer l'ordre des résultats pour la recherche dans les annuaires, le paramétrage peut se faire par annuaire et pour tous les annuaires confondus (recherche globale) || Fait&lt;br /&gt;
|-&lt;br /&gt;
|| Maintenant il est possible de choisir les colonnes à afficher dans le gestionnaire de fichiers. Cette configuration se fait par l'administrateur général et est valable pour tous les répertoires || Fait&lt;br /&gt;
|-&lt;br /&gt;
|| On peut maintenant choisir la couleur d'affichage des jours fériés dans l'agenda || Fait&lt;br /&gt;
|-&lt;br /&gt;
|| Dans les menu Administrateur-&amp;gt;Sites, scinder les options de l'agenda des options relatifs aux congés et aux jours fériés || Fait&lt;br /&gt;
|-&lt;br /&gt;
|| Dans la vue mensuelle de l'agenda, il sera possible de n'afficher que les jours du mois courant. Cette configuration est faite par l'administrateur et peut être surchargée par l'utilisateur dans ses options de l'agenda  || Fait&lt;br /&gt;
|-&lt;br /&gt;
|| une gestion des événements  à été ajouté sur la publication des fichiers dans le gestionnaires de fichiers, la notification par mail des destinataires est faite par une fonction externe enregistrée sur ces événements. Un module peut s'enregistrer et remplacer la gestion normale des notifications  || Fait&lt;br /&gt;
|-&lt;br /&gt;
|| ajout d'un choix d'envoi d'un e-mail de notification à l'utilisateur auquel on vient de modifier son mot de passe || Fait&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Version future ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;prettytable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|| '''Description''' &lt;br /&gt;
| width=&amp;quot;70&amp;quot;| '''État'''&lt;br /&gt;
|-&lt;br /&gt;
|| Création d'un (ou de) module(s) de saisie de notes et remplacement de la fonctionnalité Notes du noyau  || A l'étude&lt;br /&gt;
|-&lt;br /&gt;
|| Passer l'éditeur wysiwyg &amp;quot;htmlarea&amp;quot; dans un module  || A l'étude&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Anciennes versions ==&lt;br /&gt;
&lt;br /&gt;
Voir l'historique des changements pour les anciennes versions : [[Feuille de route (archives)]]&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=API_des_utilisateurs_et_des_annuaires&amp;diff=4708</id>
		<title>API des utilisateurs et des annuaires</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=API_des_utilisateurs_et_des_annuaires&amp;diff=4708"/>
				<updated>2010-03-29T15:27:40Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* bab_updateUserPasswordById() */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Développement de modules]]&lt;br /&gt;
[[Catégorie:API Ovidentia]]&lt;br /&gt;
&lt;br /&gt;
== Les comptes utilisateurs ==&lt;br /&gt;
&lt;br /&gt;
===bab_isUserAdministrator()===&lt;br /&gt;
Retourne '''true''' si l'utilisateur est administrateur. Sinon '''false'''&lt;br /&gt;
:'''function bab_isUserAdministrator()'''&lt;br /&gt;
===bab_isUserGroupManager()===&lt;br /&gt;
Retourne '''true''' si l'utilisateur est gestionnaire du groupe d'id $grpid. Sinon '''false'''&lt;br /&gt;
:'''function bab_isUserGroupManager($grpid=&amp;quot;&amp;quot;)'''&lt;br /&gt;
* '''$grpid''' :&lt;br /&gt;
*: ID du groupe pour lequel on souhaite savoir si l'utilisateur est gestionnaire. Si vide la fonction retiourne '''true''' si l'utilisateur est gestionnaire d'au moins un groupe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_getUserName()===&lt;br /&gt;
Retourne le nom complet de l'utilisateur d'ID $id.Sinon une chaîne vide.&lt;br /&gt;
:'''function bab_getUserName($id)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserEmail()===&lt;br /&gt;
Retourne l'adresse email de l'utilisateur d'ID $id.Sinon une chaîne vide.&lt;br /&gt;
:'''function bab_getUserEmail($id)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserNickname()===&lt;br /&gt;
Retourne l'identifiant de l'utilisateur d'ID $id.Sinon une chaîne vide.&lt;br /&gt;
:'''function bab_getUserNickname($id)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserIdByEmail()===&lt;br /&gt;
Retourne l'ID de l'utilisateur à partir de son adresse email. Retourne 0 si aucun utilisateur&lt;br /&gt;
:'''function bab_getUserIdByEmail($email)'''&lt;br /&gt;
* '''$email''' :&lt;br /&gt;
*: Adresse email de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserIdByNickname()===&lt;br /&gt;
Retourne l'ID de l'utilisateur à partir de son identifiant. Retourne 0 si aucun utilisateur&lt;br /&gt;
:'''function bab_getUserIdByNickname($nickname)'''&lt;br /&gt;
* '''$nickname''' :&lt;br /&gt;
*: Identifiant de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserId()===&lt;br /&gt;
Retourn l'ID de l'utilisateur à partir de son nom. Sinon 0.&lt;br /&gt;
:'''function bab_getUserId( $name )'''&lt;br /&gt;
* '''$name''' :&lt;br /&gt;
*: Nom de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserGroups()===&lt;br /&gt;
Retourne un tableau contenant les ID et les noms des groupes auxquels l'utilisateur appartient.&lt;br /&gt;
:'''function bab_getUserGroups($id = &amp;quot;&amp;quot;)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur. Si vide le système utilise celui de l'utilisateur courant&lt;br /&gt;
&lt;br /&gt;
===bab_composeUserName()===&lt;br /&gt;
Retourne une chaîne contenant le nom complet de l'utilisateur selon les préférences du site ( nom/prénom ou prénom/nom )&lt;br /&gt;
:'''function bab_composeUserName( $F, $L)'''&lt;br /&gt;
* '''$F''' :&lt;br /&gt;
*: Prénom de l'utilisateur&lt;br /&gt;
* '''$L''' :&lt;br /&gt;
*: Nom de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_userIsloggedin()===&lt;br /&gt;
Retourne '''true''' si l'utilisateur courant est authentifié. Sinon elle retourne '''false'''&lt;br /&gt;
:'''function bab_userIsloggedin()'''&lt;br /&gt;
&lt;br /&gt;
===bab_registerUser()===&lt;br /&gt;
Permet d'inscrire un utilisateur dans le portail.&lt;br /&gt;
Retourne l'ID de l'utilisateur inscrit. Sinon '''false'''.&lt;br /&gt;
:'''function bab_registerUser($firstname, $lastname, $middlename, $email, $nickname, $password1, $password2, $confirmed, &amp;amp;$error, $bgroup = true)'''&lt;br /&gt;
* '''$firstname''' :&lt;br /&gt;
*: Prénom de l'utilisateur à inscrire&lt;br /&gt;
* '''$lastname''' :&lt;br /&gt;
*: Nom de l'utilisateur à inscrire&lt;br /&gt;
* '''$middlename''' :&lt;br /&gt;
*: Deuxième prénom de l'utilisateur à inscrire&lt;br /&gt;
* '''$email''' :&lt;br /&gt;
*: Adresse email de l'utilisateur à inscrire&lt;br /&gt;
* '''$nickname''' :&lt;br /&gt;
*: Identifiant de l'utilisateur à inscrire&lt;br /&gt;
* '''$password1''' :&lt;br /&gt;
*: Mot de passe de l'utilisateur à inscrire&lt;br /&gt;
* '''$password2''' :&lt;br /&gt;
*: De nouveau le même mot de passe de l'utilisateur à inscrire&lt;br /&gt;
* '''$confirmed''' :&lt;br /&gt;
*: '''true''' si l'inscription de l'utilisateur sera confirmée. Sinon '''false'''&lt;br /&gt;
* '''$error''' :&lt;br /&gt;
*: Variable passée par référence. Si l'inscription échoue, elle sera initialisée avec le message d'erreur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_getUserInfos()===&lt;br /&gt;
&lt;br /&gt;
Obtenir les informations d'un utilisateur, la fonction retourne un tableau contenant la fiche annuaire de l'utilisateur et les champs spécifiques obligatoires. Les information obtenues peuvent être utilisées en entrée avec la fonction bab_updateUserById()&lt;br /&gt;
&lt;br /&gt;
les champs retournés par la fonction qui sont toujours présents sont :&lt;br /&gt;
&lt;br /&gt;
*disabled : booléen 1 ou 0&lt;br /&gt;
*password_md5 : mot de passe du compte Ovidentia&lt;br /&gt;
*changepwd : booléen 1 ou 0&lt;br /&gt;
*is_confirmed : booléen 1 ou 0&lt;br /&gt;
*cn : surnom&lt;br /&gt;
*sn : nom&lt;br /&gt;
*mn : deuxième prénom&lt;br /&gt;
*givenname : prénom&lt;br /&gt;
*jpegphoto&lt;br /&gt;
*email&lt;br /&gt;
*btel&lt;br /&gt;
*mobile : numéro de téléphone mobile&lt;br /&gt;
*htel&lt;br /&gt;
*bfax&lt;br /&gt;
*title&lt;br /&gt;
*departmentnumber&lt;br /&gt;
*organisationname&lt;br /&gt;
*bstreetaddress,&lt;br /&gt;
*bcity&lt;br /&gt;
*bpostalcode&lt;br /&gt;
*bstate&lt;br /&gt;
*bcountry&lt;br /&gt;
*hstreetaddress&lt;br /&gt;
*hcity&lt;br /&gt;
*hpostalcode&lt;br /&gt;
*hstate&lt;br /&gt;
*hcountry&lt;br /&gt;
*user1&lt;br /&gt;
*user2&lt;br /&gt;
*user3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarque : il peut y avoir des champ d'annuaire optionnels. Des champs comme jpegphoto (photo de l'utilisateur) peuvent être désactivés par l'administrateur du site. Dans ce cas le tableau retourné ne contiendra pas l'entrée jpegphoto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getUserInfos($id_user)'''&lt;br /&gt;
&lt;br /&gt;
===bab_canCurrentUserUpdateUser()===&lt;br /&gt;
&lt;br /&gt;
Vérifie si l'utilisateur courant a les droits d'accès pour modifier le compte d'un utilisateur spécifié par son id. Retourne true ou false. True si l'utilisateur a les droits.&lt;br /&gt;
&lt;br /&gt;
:'''function bab_canCurrentUserUpdateUser($userId)'''&lt;br /&gt;
&lt;br /&gt;
* '''$userId''' :&lt;br /&gt;
*: ID de l'utilisateur à modifier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_updateUserPasswordById()===&lt;br /&gt;
&lt;br /&gt;
Modification du mot de passe de connexion d'un utilisateur. Retourne true ou false. True si l'utilisateur a été modifié.&lt;br /&gt;
&lt;br /&gt;
:'''function bab_updateUserPasswordById($userId, $newPassword, $newPassword2, $ignoreAccessRights=false, $ignoreSixCharactersMinimum=false, &amp;amp;$error)'''&lt;br /&gt;
&lt;br /&gt;
* '''$userId''' :&lt;br /&gt;
*: ID de l'utilisateur à modifier&lt;br /&gt;
* '''$newPassword''' :&lt;br /&gt;
*: nouveau mot de passe de connexion&lt;br /&gt;
* '''$newPassword2''' :&lt;br /&gt;
*: copie du nouveau mot de passe de connexion (utilisé lorsqu'on demande 2 fois le mot de passe dans un formulaire pour valider la saisie)&lt;br /&gt;
* '''$ignoreAccessRights''' :&lt;br /&gt;
*: booléen. Si true, on ignore les droits d'accès de l'utilisateur courant quant à sa possibilité de modifier le compte utilisateur&lt;br /&gt;
* '''$ignoreSixCharactersMinimum''' :&lt;br /&gt;
*: booléen. Si true, on ignore la restriction sur le minimum de 6 caractères&lt;br /&gt;
*: En cas d'erreurs, retourne le message Ovidentia traduit&lt;br /&gt;
&lt;br /&gt;
===bab_updateUserNicknameById()===&lt;br /&gt;
&lt;br /&gt;
Modification de l'identifiant de connexion d'un utilisateur. Retourne true ou false. True si l'utilisateur a été modifié.&lt;br /&gt;
&lt;br /&gt;
:'''function bab_updateUserNicknameById($userId, $newNickname, $ignoreAccessRights=false, &amp;amp;$error)'''&lt;br /&gt;
&lt;br /&gt;
* '''$userId''' :&lt;br /&gt;
*: ID de l'utilisateur à modifier&lt;br /&gt;
* '''$newNickname''' :&lt;br /&gt;
*: nouvel identifiant de connexion&lt;br /&gt;
* '''$ignoreAccessRights''' :&lt;br /&gt;
*: booléen. Si true, on ignore les droits d'accès de l'utilisateur courant quant à sa possibilité de modifier le compte utilisateur&lt;br /&gt;
* '''$error''' :&lt;br /&gt;
*: En cas d'erreurs, retourne le message Ovidentia traduit&lt;br /&gt;
&lt;br /&gt;
===bab_updateUserById()===&lt;br /&gt;
&lt;br /&gt;
Modification d'un utilisateur&lt;br /&gt;
&lt;br /&gt;
:'''function bab_updateUserById($id, $info, &amp;amp;$error)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur à modifier&lt;br /&gt;
* '''$info''' :&lt;br /&gt;
*: $info est une variable tableau contenant les nouvelles valeurs à enregistrées, le format du tableau correspond au format retourné par la fonction  bab_getUserInfos()&lt;br /&gt;
* '''&amp;amp;$error''' :&lt;br /&gt;
*: En cas d'erreur, cette variable sera renseignée avec un message d'erreur&lt;br /&gt;
&lt;br /&gt;
===bab_updateUserByNickname()===&lt;br /&gt;
&lt;br /&gt;
Modifier les informations d'un utilisateur a partir de l'identifiant&lt;br /&gt;
&lt;br /&gt;
:'''function bab_updateUserByNickname($nickname, $info, &amp;amp;$error)'''&lt;br /&gt;
&lt;br /&gt;
* '''$nickname''' :&lt;br /&gt;
*: Identifiant de l'utilisateur à modifier&lt;br /&gt;
* '''$info''' :&lt;br /&gt;
*: $info est une variable tableau contenant les nouvelles valeurs à enregistrées, le format du tableau correspond au format retourné par la fonction  bab_getUserInfos()&lt;br /&gt;
* '''&amp;amp;$error''' :&lt;br /&gt;
*: En cas d'erreur, cette variable sera renseignée avec un message d'erreur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Les fiches d'annuaires ==&lt;br /&gt;
&lt;br /&gt;
===bab_getDirEntry()===&lt;br /&gt;
&lt;br /&gt;
Retourne une fiche d'annuaire ou une liste de fiches d'annuaires.&lt;br /&gt;
&lt;br /&gt;
retourne false si il y a une erreur dans les paramètres&lt;br /&gt;
&lt;br /&gt;
retourne un tableau vide si l'utilisateur n'a pas accès aux informations&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getDirEntry($id = false, $type = BAB_DIR_ENTRY_ID_USER, $id_directory = NULL )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: Ce paramètre est optionnel, les valeurs possibles sont :&lt;br /&gt;
*:&lt;br /&gt;
*: false : si le type est BAB_DIR_ENTRY_ID_USER, l'id de l'utilisateur connecté sera utilisé.&lt;br /&gt;
*: un nombre entier : utilisable pour tout les types&lt;br /&gt;
*: un tableau de nombre entiers : une liste d'id peut être utilisée pour les types BAB_DIR_ENTRY_ID_USER et BAB_DIR_ENTRY_ID dans ce cas la fonction retournera plusieurs fiches d'annuaire dans un tableau.&lt;br /&gt;
&lt;br /&gt;
* '''type''' :&lt;br /&gt;
*: Ce paramètre est optionnel, il correspond au type d'information fourni dans le premier paramètre de la fonction, les valeurs possibles sont&lt;br /&gt;
*: &lt;br /&gt;
*: BAB_DIR_ENTRY_ID_USER : $id est un id d'utilisateur&lt;br /&gt;
*: BAB_DIR_ENTRY_ID : $id est un id de fiche d'annuaire&lt;br /&gt;
*: BAB_DIR_ENTRY_ID_DIRECTORY : $id est un id d'annuaire, dans ce cas seul la liste des champs de l'annuaire est retournée&lt;br /&gt;
*: BAB_DIR_ENTRY_ID_GROUP : $id est un id de groupe d'utilisateur, dans ce cas seul la liste des champs de l'annuaire de groupe est retournée&lt;br /&gt;
*:&lt;br /&gt;
*: La valeur par défaut est BAB_DIR_ENTRY_ID_USER&lt;br /&gt;
&lt;br /&gt;
* '''$id_directory''' :&lt;br /&gt;
*: Ce paramètre est optionnel, peut être spécifié si le type est BAB_DIR_ENTRY_ID&lt;br /&gt;
&lt;br /&gt;
===bab_getUserDirectories()===&lt;br /&gt;
&lt;br /&gt;
Retourne une liste d'annuaires visibles par l'utilisateur&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getUserDirectories()'''&lt;br /&gt;
&lt;br /&gt;
===bab_getUserDirEntryLink()===&lt;br /&gt;
&lt;br /&gt;
Cette fonction permet d'obtenir un lien vers une fiche d'annuaire, pour un utilisateur ou un ID de fiche d'annuaire.&lt;br /&gt;
&lt;br /&gt;
retourne false si la fiche n'est pas accessible&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getUserDirEntryLink($id = false, $type = BAB_DIR_ENTRY_ID_USER, $id_directory = false)'''&lt;br /&gt;
&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: Ce paramètre est optionnel, les valeurs possibles sont :&lt;br /&gt;
*:&lt;br /&gt;
*: false : si le type est BAB_DIR_ENTRY_ID_USER, l'id de l'utilisateur connecté sera utilisé.&lt;br /&gt;
*: un nombre entier : utilisable pour tout les types&lt;br /&gt;
&lt;br /&gt;
* '''type''' :&lt;br /&gt;
*: Ce paramètre est optionnel, il correspond au type d'information fourni dans le premier paramètre de la fonction, les valeurs possibles sont&lt;br /&gt;
*: &lt;br /&gt;
*: BAB_DIR_ENTRY_ID_USER : $id est un id d'utilisateur&lt;br /&gt;
*: BAB_DIR_ENTRY_ID : $id est un id de fiche d'annuaire&lt;br /&gt;
*:&lt;br /&gt;
*: La valeur par défaut est BAB_DIR_ENTRY_ID_USER&lt;br /&gt;
&lt;br /&gt;
* '''$id_directory''' :&lt;br /&gt;
*: Ce paramètre est optionnel, peut être spécifié si le type est BAB_DIR_ENTRY_ID&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=API_des_utilisateurs_et_des_annuaires&amp;diff=4707</id>
		<title>API des utilisateurs et des annuaires</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=API_des_utilisateurs_et_des_annuaires&amp;diff=4707"/>
				<updated>2010-03-29T15:06:36Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* bab_updateUserNicknameById() */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Développement de modules]]&lt;br /&gt;
[[Catégorie:API Ovidentia]]&lt;br /&gt;
&lt;br /&gt;
== Les comptes utilisateurs ==&lt;br /&gt;
&lt;br /&gt;
===bab_isUserAdministrator()===&lt;br /&gt;
Retourne '''true''' si l'utilisateur est administrateur. Sinon '''false'''&lt;br /&gt;
:'''function bab_isUserAdministrator()'''&lt;br /&gt;
===bab_isUserGroupManager()===&lt;br /&gt;
Retourne '''true''' si l'utilisateur est gestionnaire du groupe d'id $grpid. Sinon '''false'''&lt;br /&gt;
:'''function bab_isUserGroupManager($grpid=&amp;quot;&amp;quot;)'''&lt;br /&gt;
* '''$grpid''' :&lt;br /&gt;
*: ID du groupe pour lequel on souhaite savoir si l'utilisateur est gestionnaire. Si vide la fonction retiourne '''true''' si l'utilisateur est gestionnaire d'au moins un groupe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_getUserName()===&lt;br /&gt;
Retourne le nom complet de l'utilisateur d'ID $id.Sinon une chaîne vide.&lt;br /&gt;
:'''function bab_getUserName($id)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserEmail()===&lt;br /&gt;
Retourne l'adresse email de l'utilisateur d'ID $id.Sinon une chaîne vide.&lt;br /&gt;
:'''function bab_getUserEmail($id)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserNickname()===&lt;br /&gt;
Retourne l'identifiant de l'utilisateur d'ID $id.Sinon une chaîne vide.&lt;br /&gt;
:'''function bab_getUserNickname($id)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserIdByEmail()===&lt;br /&gt;
Retourne l'ID de l'utilisateur à partir de son adresse email. Retourne 0 si aucun utilisateur&lt;br /&gt;
:'''function bab_getUserIdByEmail($email)'''&lt;br /&gt;
* '''$email''' :&lt;br /&gt;
*: Adresse email de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserIdByNickname()===&lt;br /&gt;
Retourne l'ID de l'utilisateur à partir de son identifiant. Retourne 0 si aucun utilisateur&lt;br /&gt;
:'''function bab_getUserIdByNickname($nickname)'''&lt;br /&gt;
* '''$nickname''' :&lt;br /&gt;
*: Identifiant de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserId()===&lt;br /&gt;
Retourn l'ID de l'utilisateur à partir de son nom. Sinon 0.&lt;br /&gt;
:'''function bab_getUserId( $name )'''&lt;br /&gt;
* '''$name''' :&lt;br /&gt;
*: Nom de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserGroups()===&lt;br /&gt;
Retourne un tableau contenant les ID et les noms des groupes auxquels l'utilisateur appartient.&lt;br /&gt;
:'''function bab_getUserGroups($id = &amp;quot;&amp;quot;)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur. Si vide le système utilise celui de l'utilisateur courant&lt;br /&gt;
&lt;br /&gt;
===bab_composeUserName()===&lt;br /&gt;
Retourne une chaîne contenant le nom complet de l'utilisateur selon les préférences du site ( nom/prénom ou prénom/nom )&lt;br /&gt;
:'''function bab_composeUserName( $F, $L)'''&lt;br /&gt;
* '''$F''' :&lt;br /&gt;
*: Prénom de l'utilisateur&lt;br /&gt;
* '''$L''' :&lt;br /&gt;
*: Nom de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_userIsloggedin()===&lt;br /&gt;
Retourne '''true''' si l'utilisateur courant est authentifié. Sinon elle retourne '''false'''&lt;br /&gt;
:'''function bab_userIsloggedin()'''&lt;br /&gt;
&lt;br /&gt;
===bab_registerUser()===&lt;br /&gt;
Permet d'inscrire un utilisateur dans le portail.&lt;br /&gt;
Retourne l'ID de l'utilisateur inscrit. Sinon '''false'''.&lt;br /&gt;
:'''function bab_registerUser($firstname, $lastname, $middlename, $email, $nickname, $password1, $password2, $confirmed, &amp;amp;$error, $bgroup = true)'''&lt;br /&gt;
* '''$firstname''' :&lt;br /&gt;
*: Prénom de l'utilisateur à inscrire&lt;br /&gt;
* '''$lastname''' :&lt;br /&gt;
*: Nom de l'utilisateur à inscrire&lt;br /&gt;
* '''$middlename''' :&lt;br /&gt;
*: Deuxième prénom de l'utilisateur à inscrire&lt;br /&gt;
* '''$email''' :&lt;br /&gt;
*: Adresse email de l'utilisateur à inscrire&lt;br /&gt;
* '''$nickname''' :&lt;br /&gt;
*: Identifiant de l'utilisateur à inscrire&lt;br /&gt;
* '''$password1''' :&lt;br /&gt;
*: Mot de passe de l'utilisateur à inscrire&lt;br /&gt;
* '''$password2''' :&lt;br /&gt;
*: De nouveau le même mot de passe de l'utilisateur à inscrire&lt;br /&gt;
* '''$confirmed''' :&lt;br /&gt;
*: '''true''' si l'inscription de l'utilisateur sera confirmée. Sinon '''false'''&lt;br /&gt;
* '''$error''' :&lt;br /&gt;
*: Variable passée par référence. Si l'inscription échoue, elle sera initialisée avec le message d'erreur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_getUserInfos()===&lt;br /&gt;
&lt;br /&gt;
Obtenir les informations d'un utilisateur, la fonction retourne un tableau contenant la fiche annuaire de l'utilisateur et les champs spécifiques obligatoires. Les information obtenues peuvent être utilisées en entrée avec la fonction bab_updateUserById()&lt;br /&gt;
&lt;br /&gt;
les champs retournés par la fonction qui sont toujours présents sont :&lt;br /&gt;
&lt;br /&gt;
*disabled : booléen 1 ou 0&lt;br /&gt;
*password_md5 : mot de passe du compte Ovidentia&lt;br /&gt;
*changepwd : booléen 1 ou 0&lt;br /&gt;
*is_confirmed : booléen 1 ou 0&lt;br /&gt;
*cn : surnom&lt;br /&gt;
*sn : nom&lt;br /&gt;
*mn : deuxième prénom&lt;br /&gt;
*givenname : prénom&lt;br /&gt;
*jpegphoto&lt;br /&gt;
*email&lt;br /&gt;
*btel&lt;br /&gt;
*mobile : numéro de téléphone mobile&lt;br /&gt;
*htel&lt;br /&gt;
*bfax&lt;br /&gt;
*title&lt;br /&gt;
*departmentnumber&lt;br /&gt;
*organisationname&lt;br /&gt;
*bstreetaddress,&lt;br /&gt;
*bcity&lt;br /&gt;
*bpostalcode&lt;br /&gt;
*bstate&lt;br /&gt;
*bcountry&lt;br /&gt;
*hstreetaddress&lt;br /&gt;
*hcity&lt;br /&gt;
*hpostalcode&lt;br /&gt;
*hstate&lt;br /&gt;
*hcountry&lt;br /&gt;
*user1&lt;br /&gt;
*user2&lt;br /&gt;
*user3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarque : il peut y avoir des champ d'annuaire optionnels. Des champs comme jpegphoto (photo de l'utilisateur) peuvent être désactivés par l'administrateur du site. Dans ce cas le tableau retourné ne contiendra pas l'entrée jpegphoto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getUserInfos($id_user)'''&lt;br /&gt;
&lt;br /&gt;
===bab_canCurrentUserUpdateUser()===&lt;br /&gt;
&lt;br /&gt;
Vérifie si l'utilisateur courant a les droits d'accès pour modifier le compte d'un utilisateur spécifié par son id. Retourne true ou false. True si l'utilisateur a les droits.&lt;br /&gt;
&lt;br /&gt;
:'''function bab_canCurrentUserUpdateUser($userId)'''&lt;br /&gt;
&lt;br /&gt;
* '''$userId''' :&lt;br /&gt;
*: ID de l'utilisateur à modifier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_updateUserPasswordById()===&lt;br /&gt;
&lt;br /&gt;
Modification du mot de passe de connexion d'un utilisateur. Retourne true ou false. True si l'utilisateur a été modifié.&lt;br /&gt;
&lt;br /&gt;
:'''function bab_updateUserPasswordById($userId, $newPassword, $newPassword2, $ignoreAccessRights=false, &amp;amp;$error)'''&lt;br /&gt;
&lt;br /&gt;
* '''$userId''' :&lt;br /&gt;
*: ID de l'utilisateur à modifier&lt;br /&gt;
* '''$newPassword''' :&lt;br /&gt;
*: nouveau mot de passe de connexion&lt;br /&gt;
* '''$newPassword2''' :&lt;br /&gt;
*: copie du nouveau mot de passe de connexion (utilisé lorsqu'on demande 2 fois le mot de passe dans un formulaire pour valider la saisie)&lt;br /&gt;
* '''$ignoreAccessRights''' :&lt;br /&gt;
*: booléen. Si true, on ignore les droits d'accès de l'utilisateur courant quant à sa possibilité de modifier le compte utilisateur&lt;br /&gt;
* '''$error''' :&lt;br /&gt;
*: En cas d'erreurs, retourne le message Ovidentia traduit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_updateUserNicknameById()===&lt;br /&gt;
&lt;br /&gt;
Modification de l'identifiant de connexion d'un utilisateur. Retourne true ou false. True si l'utilisateur a été modifié.&lt;br /&gt;
&lt;br /&gt;
:'''function bab_updateUserNicknameById($userId, $newNickname, $ignoreAccessRights=false, &amp;amp;$error)'''&lt;br /&gt;
&lt;br /&gt;
* '''$userId''' :&lt;br /&gt;
*: ID de l'utilisateur à modifier&lt;br /&gt;
* '''$newNickname''' :&lt;br /&gt;
*: nouvel identifiant de connexion&lt;br /&gt;
* '''$ignoreAccessRights''' :&lt;br /&gt;
*: booléen. Si true, on ignore les droits d'accès de l'utilisateur courant quant à sa possibilité de modifier le compte utilisateur&lt;br /&gt;
* '''$error''' :&lt;br /&gt;
*: En cas d'erreurs, retourne le message Ovidentia traduit&lt;br /&gt;
&lt;br /&gt;
===bab_updateUserById()===&lt;br /&gt;
&lt;br /&gt;
Modification d'un utilisateur&lt;br /&gt;
&lt;br /&gt;
:'''function bab_updateUserById($id, $info, &amp;amp;$error)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur à modifier&lt;br /&gt;
* '''$info''' :&lt;br /&gt;
*: $info est une variable tableau contenant les nouvelles valeurs à enregistrées, le format du tableau correspond au format retourné par la fonction  bab_getUserInfos()&lt;br /&gt;
* '''&amp;amp;$error''' :&lt;br /&gt;
*: En cas d'erreur, cette variable sera renseignée avec un message d'erreur&lt;br /&gt;
&lt;br /&gt;
===bab_updateUserByNickname()===&lt;br /&gt;
&lt;br /&gt;
Modifier les informations d'un utilisateur a partir de l'identifiant&lt;br /&gt;
&lt;br /&gt;
:'''function bab_updateUserByNickname($nickname, $info, &amp;amp;$error)'''&lt;br /&gt;
&lt;br /&gt;
* '''$nickname''' :&lt;br /&gt;
*: Identifiant de l'utilisateur à modifier&lt;br /&gt;
* '''$info''' :&lt;br /&gt;
*: $info est une variable tableau contenant les nouvelles valeurs à enregistrées, le format du tableau correspond au format retourné par la fonction  bab_getUserInfos()&lt;br /&gt;
* '''&amp;amp;$error''' :&lt;br /&gt;
*: En cas d'erreur, cette variable sera renseignée avec un message d'erreur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Les fiches d'annuaires ==&lt;br /&gt;
&lt;br /&gt;
===bab_getDirEntry()===&lt;br /&gt;
&lt;br /&gt;
Retourne une fiche d'annuaire ou une liste de fiches d'annuaires.&lt;br /&gt;
&lt;br /&gt;
retourne false si il y a une erreur dans les paramètres&lt;br /&gt;
&lt;br /&gt;
retourne un tableau vide si l'utilisateur n'a pas accès aux informations&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getDirEntry($id = false, $type = BAB_DIR_ENTRY_ID_USER, $id_directory = NULL )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: Ce paramètre est optionnel, les valeurs possibles sont :&lt;br /&gt;
*:&lt;br /&gt;
*: false : si le type est BAB_DIR_ENTRY_ID_USER, l'id de l'utilisateur connecté sera utilisé.&lt;br /&gt;
*: un nombre entier : utilisable pour tout les types&lt;br /&gt;
*: un tableau de nombre entiers : une liste d'id peut être utilisée pour les types BAB_DIR_ENTRY_ID_USER et BAB_DIR_ENTRY_ID dans ce cas la fonction retournera plusieurs fiches d'annuaire dans un tableau.&lt;br /&gt;
&lt;br /&gt;
* '''type''' :&lt;br /&gt;
*: Ce paramètre est optionnel, il correspond au type d'information fourni dans le premier paramètre de la fonction, les valeurs possibles sont&lt;br /&gt;
*: &lt;br /&gt;
*: BAB_DIR_ENTRY_ID_USER : $id est un id d'utilisateur&lt;br /&gt;
*: BAB_DIR_ENTRY_ID : $id est un id de fiche d'annuaire&lt;br /&gt;
*: BAB_DIR_ENTRY_ID_DIRECTORY : $id est un id d'annuaire, dans ce cas seul la liste des champs de l'annuaire est retournée&lt;br /&gt;
*: BAB_DIR_ENTRY_ID_GROUP : $id est un id de groupe d'utilisateur, dans ce cas seul la liste des champs de l'annuaire de groupe est retournée&lt;br /&gt;
*:&lt;br /&gt;
*: La valeur par défaut est BAB_DIR_ENTRY_ID_USER&lt;br /&gt;
&lt;br /&gt;
* '''$id_directory''' :&lt;br /&gt;
*: Ce paramètre est optionnel, peut être spécifié si le type est BAB_DIR_ENTRY_ID&lt;br /&gt;
&lt;br /&gt;
===bab_getUserDirectories()===&lt;br /&gt;
&lt;br /&gt;
Retourne une liste d'annuaires visibles par l'utilisateur&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getUserDirectories()'''&lt;br /&gt;
&lt;br /&gt;
===bab_getUserDirEntryLink()===&lt;br /&gt;
&lt;br /&gt;
Cette fonction permet d'obtenir un lien vers une fiche d'annuaire, pour un utilisateur ou un ID de fiche d'annuaire.&lt;br /&gt;
&lt;br /&gt;
retourne false si la fiche n'est pas accessible&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getUserDirEntryLink($id = false, $type = BAB_DIR_ENTRY_ID_USER, $id_directory = false)'''&lt;br /&gt;
&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: Ce paramètre est optionnel, les valeurs possibles sont :&lt;br /&gt;
*:&lt;br /&gt;
*: false : si le type est BAB_DIR_ENTRY_ID_USER, l'id de l'utilisateur connecté sera utilisé.&lt;br /&gt;
*: un nombre entier : utilisable pour tout les types&lt;br /&gt;
&lt;br /&gt;
* '''type''' :&lt;br /&gt;
*: Ce paramètre est optionnel, il correspond au type d'information fourni dans le premier paramètre de la fonction, les valeurs possibles sont&lt;br /&gt;
*: &lt;br /&gt;
*: BAB_DIR_ENTRY_ID_USER : $id est un id d'utilisateur&lt;br /&gt;
*: BAB_DIR_ENTRY_ID : $id est un id de fiche d'annuaire&lt;br /&gt;
*:&lt;br /&gt;
*: La valeur par défaut est BAB_DIR_ENTRY_ID_USER&lt;br /&gt;
&lt;br /&gt;
* '''$id_directory''' :&lt;br /&gt;
*: Ce paramètre est optionnel, peut être spécifié si le type est BAB_DIR_ENTRY_ID&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=API_des_utilisateurs_et_des_annuaires&amp;diff=4706</id>
		<title>API des utilisateurs et des annuaires</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=API_des_utilisateurs_et_des_annuaires&amp;diff=4706"/>
				<updated>2010-03-29T13:48:55Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* bab_updateUserById() */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Développement de modules]]&lt;br /&gt;
[[Catégorie:API Ovidentia]]&lt;br /&gt;
&lt;br /&gt;
== Les comptes utilisateurs ==&lt;br /&gt;
&lt;br /&gt;
===bab_isUserAdministrator()===&lt;br /&gt;
Retourne '''true''' si l'utilisateur est administrateur. Sinon '''false'''&lt;br /&gt;
:'''function bab_isUserAdministrator()'''&lt;br /&gt;
===bab_isUserGroupManager()===&lt;br /&gt;
Retourne '''true''' si l'utilisateur est gestionnaire du groupe d'id $grpid. Sinon '''false'''&lt;br /&gt;
:'''function bab_isUserGroupManager($grpid=&amp;quot;&amp;quot;)'''&lt;br /&gt;
* '''$grpid''' :&lt;br /&gt;
*: ID du groupe pour lequel on souhaite savoir si l'utilisateur est gestionnaire. Si vide la fonction retiourne '''true''' si l'utilisateur est gestionnaire d'au moins un groupe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_getUserName()===&lt;br /&gt;
Retourne le nom complet de l'utilisateur d'ID $id.Sinon une chaîne vide.&lt;br /&gt;
:'''function bab_getUserName($id)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserEmail()===&lt;br /&gt;
Retourne l'adresse email de l'utilisateur d'ID $id.Sinon une chaîne vide.&lt;br /&gt;
:'''function bab_getUserEmail($id)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserNickname()===&lt;br /&gt;
Retourne l'identifiant de l'utilisateur d'ID $id.Sinon une chaîne vide.&lt;br /&gt;
:'''function bab_getUserNickname($id)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserIdByEmail()===&lt;br /&gt;
Retourne l'ID de l'utilisateur à partir de son adresse email. Retourne 0 si aucun utilisateur&lt;br /&gt;
:'''function bab_getUserIdByEmail($email)'''&lt;br /&gt;
* '''$email''' :&lt;br /&gt;
*: Adresse email de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserIdByNickname()===&lt;br /&gt;
Retourne l'ID de l'utilisateur à partir de son identifiant. Retourne 0 si aucun utilisateur&lt;br /&gt;
:'''function bab_getUserIdByNickname($nickname)'''&lt;br /&gt;
* '''$nickname''' :&lt;br /&gt;
*: Identifiant de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserId()===&lt;br /&gt;
Retourn l'ID de l'utilisateur à partir de son nom. Sinon 0.&lt;br /&gt;
:'''function bab_getUserId( $name )'''&lt;br /&gt;
* '''$name''' :&lt;br /&gt;
*: Nom de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserGroups()===&lt;br /&gt;
Retourne un tableau contenant les ID et les noms des groupes auxquels l'utilisateur appartient.&lt;br /&gt;
:'''function bab_getUserGroups($id = &amp;quot;&amp;quot;)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur. Si vide le système utilise celui de l'utilisateur courant&lt;br /&gt;
&lt;br /&gt;
===bab_composeUserName()===&lt;br /&gt;
Retourne une chaîne contenant le nom complet de l'utilisateur selon les préférences du site ( nom/prénom ou prénom/nom )&lt;br /&gt;
:'''function bab_composeUserName( $F, $L)'''&lt;br /&gt;
* '''$F''' :&lt;br /&gt;
*: Prénom de l'utilisateur&lt;br /&gt;
* '''$L''' :&lt;br /&gt;
*: Nom de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_userIsloggedin()===&lt;br /&gt;
Retourne '''true''' si l'utilisateur courant est authentifié. Sinon elle retourne '''false'''&lt;br /&gt;
:'''function bab_userIsloggedin()'''&lt;br /&gt;
&lt;br /&gt;
===bab_registerUser()===&lt;br /&gt;
Permet d'inscrire un utilisateur dans le portail.&lt;br /&gt;
Retourne l'ID de l'utilisateur inscrit. Sinon '''false'''.&lt;br /&gt;
:'''function bab_registerUser($firstname, $lastname, $middlename, $email, $nickname, $password1, $password2, $confirmed, &amp;amp;$error, $bgroup = true)'''&lt;br /&gt;
* '''$firstname''' :&lt;br /&gt;
*: Prénom de l'utilisateur à inscrire&lt;br /&gt;
* '''$lastname''' :&lt;br /&gt;
*: Nom de l'utilisateur à inscrire&lt;br /&gt;
* '''$middlename''' :&lt;br /&gt;
*: Deuxième prénom de l'utilisateur à inscrire&lt;br /&gt;
* '''$email''' :&lt;br /&gt;
*: Adresse email de l'utilisateur à inscrire&lt;br /&gt;
* '''$nickname''' :&lt;br /&gt;
*: Identifiant de l'utilisateur à inscrire&lt;br /&gt;
* '''$password1''' :&lt;br /&gt;
*: Mot de passe de l'utilisateur à inscrire&lt;br /&gt;
* '''$password2''' :&lt;br /&gt;
*: De nouveau le même mot de passe de l'utilisateur à inscrire&lt;br /&gt;
* '''$confirmed''' :&lt;br /&gt;
*: '''true''' si l'inscription de l'utilisateur sera confirmée. Sinon '''false'''&lt;br /&gt;
* '''$error''' :&lt;br /&gt;
*: Variable passée par référence. Si l'inscription échoue, elle sera initialisée avec le message d'erreur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_getUserInfos()===&lt;br /&gt;
&lt;br /&gt;
Obtenir les informations d'un utilisateur, la fonction retourne un tableau contenant la fiche annuaire de l'utilisateur et les champs spécifiques obligatoires. Les information obtenues peuvent être utilisées en entrée avec la fonction bab_updateUserById()&lt;br /&gt;
&lt;br /&gt;
les champs retournés par la fonction qui sont toujours présents sont :&lt;br /&gt;
&lt;br /&gt;
*disabled : booléen 1 ou 0&lt;br /&gt;
*password_md5 : mot de passe du compte Ovidentia&lt;br /&gt;
*changepwd : booléen 1 ou 0&lt;br /&gt;
*is_confirmed : booléen 1 ou 0&lt;br /&gt;
*cn : surnom&lt;br /&gt;
*sn : nom&lt;br /&gt;
*mn : deuxième prénom&lt;br /&gt;
*givenname : prénom&lt;br /&gt;
*jpegphoto&lt;br /&gt;
*email&lt;br /&gt;
*btel&lt;br /&gt;
*mobile : numéro de téléphone mobile&lt;br /&gt;
*htel&lt;br /&gt;
*bfax&lt;br /&gt;
*title&lt;br /&gt;
*departmentnumber&lt;br /&gt;
*organisationname&lt;br /&gt;
*bstreetaddress,&lt;br /&gt;
*bcity&lt;br /&gt;
*bpostalcode&lt;br /&gt;
*bstate&lt;br /&gt;
*bcountry&lt;br /&gt;
*hstreetaddress&lt;br /&gt;
*hcity&lt;br /&gt;
*hpostalcode&lt;br /&gt;
*hstate&lt;br /&gt;
*hcountry&lt;br /&gt;
*user1&lt;br /&gt;
*user2&lt;br /&gt;
*user3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarque : il peut y avoir des champ d'annuaire optionnels. Des champs comme jpegphoto (photo de l'utilisateur) peuvent être désactivés par l'administrateur du site. Dans ce cas le tableau retourné ne contiendra pas l'entrée jpegphoto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getUserInfos($id_user)'''&lt;br /&gt;
&lt;br /&gt;
===bab_canCurrentUserUpdateUser()===&lt;br /&gt;
&lt;br /&gt;
Vérifie si l'utilisateur courant a les droits d'accès pour modifier le compte d'un utilisateur spécifié par son id. Retourne true ou false. True si l'utilisateur a les droits.&lt;br /&gt;
&lt;br /&gt;
:'''function bab_canCurrentUserUpdateUser($userId)'''&lt;br /&gt;
&lt;br /&gt;
* '''$userId''' :&lt;br /&gt;
*: ID de l'utilisateur à modifier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_updateUserNicknameById()===&lt;br /&gt;
&lt;br /&gt;
Modification de l'identifiant de connexion d'un utilisateur. Retourne true ou false. True si l'utilisateur a été modifié.&lt;br /&gt;
&lt;br /&gt;
:'''function bab_updateUserNicknameById($userId, $newNickname, $ignoreAccessRights=false, &amp;amp;$error)'''&lt;br /&gt;
&lt;br /&gt;
* '''$userId''' :&lt;br /&gt;
*: ID de l'utilisateur à modifier&lt;br /&gt;
* '''$newNickname''' :&lt;br /&gt;
*: nouvel identifiant de connexion&lt;br /&gt;
* '''$ignoreAccessRights''' :&lt;br /&gt;
*: booléen. Si true, on ignore les droits d'accès de l'utilisateur courant quant à sa possibilité de modifier le compte utilisateur&lt;br /&gt;
* '''$error''' :&lt;br /&gt;
*: En cas d'erreurs, retourne le message Ovidentia traduit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_updateUserById()===&lt;br /&gt;
&lt;br /&gt;
Modification d'un utilisateur&lt;br /&gt;
&lt;br /&gt;
:'''function bab_updateUserById($id, $info, &amp;amp;$error)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur à modifier&lt;br /&gt;
* '''$info''' :&lt;br /&gt;
*: $info est une variable tableau contenant les nouvelles valeurs à enregistrées, le format du tableau correspond au format retourné par la fonction  bab_getUserInfos()&lt;br /&gt;
* '''&amp;amp;$error''' :&lt;br /&gt;
*: En cas d'erreur, cette variable sera renseignée avec un message d'erreur&lt;br /&gt;
&lt;br /&gt;
===bab_updateUserByNickname()===&lt;br /&gt;
&lt;br /&gt;
Modifier les informations d'un utilisateur a partir de l'identifiant&lt;br /&gt;
&lt;br /&gt;
:'''function bab_updateUserByNickname($nickname, $info, &amp;amp;$error)'''&lt;br /&gt;
&lt;br /&gt;
* '''$nickname''' :&lt;br /&gt;
*: Identifiant de l'utilisateur à modifier&lt;br /&gt;
* '''$info''' :&lt;br /&gt;
*: $info est une variable tableau contenant les nouvelles valeurs à enregistrées, le format du tableau correspond au format retourné par la fonction  bab_getUserInfos()&lt;br /&gt;
* '''&amp;amp;$error''' :&lt;br /&gt;
*: En cas d'erreur, cette variable sera renseignée avec un message d'erreur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Les fiches d'annuaires ==&lt;br /&gt;
&lt;br /&gt;
===bab_getDirEntry()===&lt;br /&gt;
&lt;br /&gt;
Retourne une fiche d'annuaire ou une liste de fiches d'annuaires.&lt;br /&gt;
&lt;br /&gt;
retourne false si il y a une erreur dans les paramètres&lt;br /&gt;
&lt;br /&gt;
retourne un tableau vide si l'utilisateur n'a pas accès aux informations&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getDirEntry($id = false, $type = BAB_DIR_ENTRY_ID_USER, $id_directory = NULL )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: Ce paramètre est optionnel, les valeurs possibles sont :&lt;br /&gt;
*:&lt;br /&gt;
*: false : si le type est BAB_DIR_ENTRY_ID_USER, l'id de l'utilisateur connecté sera utilisé.&lt;br /&gt;
*: un nombre entier : utilisable pour tout les types&lt;br /&gt;
*: un tableau de nombre entiers : une liste d'id peut être utilisée pour les types BAB_DIR_ENTRY_ID_USER et BAB_DIR_ENTRY_ID dans ce cas la fonction retournera plusieurs fiches d'annuaire dans un tableau.&lt;br /&gt;
&lt;br /&gt;
* '''type''' :&lt;br /&gt;
*: Ce paramètre est optionnel, il correspond au type d'information fourni dans le premier paramètre de la fonction, les valeurs possibles sont&lt;br /&gt;
*: &lt;br /&gt;
*: BAB_DIR_ENTRY_ID_USER : $id est un id d'utilisateur&lt;br /&gt;
*: BAB_DIR_ENTRY_ID : $id est un id de fiche d'annuaire&lt;br /&gt;
*: BAB_DIR_ENTRY_ID_DIRECTORY : $id est un id d'annuaire, dans ce cas seul la liste des champs de l'annuaire est retournée&lt;br /&gt;
*: BAB_DIR_ENTRY_ID_GROUP : $id est un id de groupe d'utilisateur, dans ce cas seul la liste des champs de l'annuaire de groupe est retournée&lt;br /&gt;
*:&lt;br /&gt;
*: La valeur par défaut est BAB_DIR_ENTRY_ID_USER&lt;br /&gt;
&lt;br /&gt;
* '''$id_directory''' :&lt;br /&gt;
*: Ce paramètre est optionnel, peut être spécifié si le type est BAB_DIR_ENTRY_ID&lt;br /&gt;
&lt;br /&gt;
===bab_getUserDirectories()===&lt;br /&gt;
&lt;br /&gt;
Retourne une liste d'annuaires visibles par l'utilisateur&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getUserDirectories()'''&lt;br /&gt;
&lt;br /&gt;
===bab_getUserDirEntryLink()===&lt;br /&gt;
&lt;br /&gt;
Cette fonction permet d'obtenir un lien vers une fiche d'annuaire, pour un utilisateur ou un ID de fiche d'annuaire.&lt;br /&gt;
&lt;br /&gt;
retourne false si la fiche n'est pas accessible&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getUserDirEntryLink($id = false, $type = BAB_DIR_ENTRY_ID_USER, $id_directory = false)'''&lt;br /&gt;
&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: Ce paramètre est optionnel, les valeurs possibles sont :&lt;br /&gt;
*:&lt;br /&gt;
*: false : si le type est BAB_DIR_ENTRY_ID_USER, l'id de l'utilisateur connecté sera utilisé.&lt;br /&gt;
*: un nombre entier : utilisable pour tout les types&lt;br /&gt;
&lt;br /&gt;
* '''type''' :&lt;br /&gt;
*: Ce paramètre est optionnel, il correspond au type d'information fourni dans le premier paramètre de la fonction, les valeurs possibles sont&lt;br /&gt;
*: &lt;br /&gt;
*: BAB_DIR_ENTRY_ID_USER : $id est un id d'utilisateur&lt;br /&gt;
*: BAB_DIR_ENTRY_ID : $id est un id de fiche d'annuaire&lt;br /&gt;
*:&lt;br /&gt;
*: La valeur par défaut est BAB_DIR_ENTRY_ID_USER&lt;br /&gt;
&lt;br /&gt;
* '''$id_directory''' :&lt;br /&gt;
*: Ce paramètre est optionnel, peut être spécifié si le type est BAB_DIR_ENTRY_ID&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=API_des_utilisateurs_et_des_annuaires&amp;diff=4705</id>
		<title>API des utilisateurs et des annuaires</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=API_des_utilisateurs_et_des_annuaires&amp;diff=4705"/>
				<updated>2010-03-29T12:45:16Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* bab_getUserInfos() */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Développement de modules]]&lt;br /&gt;
[[Catégorie:API Ovidentia]]&lt;br /&gt;
&lt;br /&gt;
== Les comptes utilisateurs ==&lt;br /&gt;
&lt;br /&gt;
===bab_isUserAdministrator()===&lt;br /&gt;
Retourne '''true''' si l'utilisateur est administrateur. Sinon '''false'''&lt;br /&gt;
:'''function bab_isUserAdministrator()'''&lt;br /&gt;
===bab_isUserGroupManager()===&lt;br /&gt;
Retourne '''true''' si l'utilisateur est gestionnaire du groupe d'id $grpid. Sinon '''false'''&lt;br /&gt;
:'''function bab_isUserGroupManager($grpid=&amp;quot;&amp;quot;)'''&lt;br /&gt;
* '''$grpid''' :&lt;br /&gt;
*: ID du groupe pour lequel on souhaite savoir si l'utilisateur est gestionnaire. Si vide la fonction retiourne '''true''' si l'utilisateur est gestionnaire d'au moins un groupe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_getUserName()===&lt;br /&gt;
Retourne le nom complet de l'utilisateur d'ID $id.Sinon une chaîne vide.&lt;br /&gt;
:'''function bab_getUserName($id)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserEmail()===&lt;br /&gt;
Retourne l'adresse email de l'utilisateur d'ID $id.Sinon une chaîne vide.&lt;br /&gt;
:'''function bab_getUserEmail($id)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserNickname()===&lt;br /&gt;
Retourne l'identifiant de l'utilisateur d'ID $id.Sinon une chaîne vide.&lt;br /&gt;
:'''function bab_getUserNickname($id)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserIdByEmail()===&lt;br /&gt;
Retourne l'ID de l'utilisateur à partir de son adresse email. Retourne 0 si aucun utilisateur&lt;br /&gt;
:'''function bab_getUserIdByEmail($email)'''&lt;br /&gt;
* '''$email''' :&lt;br /&gt;
*: Adresse email de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserIdByNickname()===&lt;br /&gt;
Retourne l'ID de l'utilisateur à partir de son identifiant. Retourne 0 si aucun utilisateur&lt;br /&gt;
:'''function bab_getUserIdByNickname($nickname)'''&lt;br /&gt;
* '''$nickname''' :&lt;br /&gt;
*: Identifiant de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserId()===&lt;br /&gt;
Retourn l'ID de l'utilisateur à partir de son nom. Sinon 0.&lt;br /&gt;
:'''function bab_getUserId( $name )'''&lt;br /&gt;
* '''$name''' :&lt;br /&gt;
*: Nom de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_getUserGroups()===&lt;br /&gt;
Retourne un tableau contenant les ID et les noms des groupes auxquels l'utilisateur appartient.&lt;br /&gt;
:'''function bab_getUserGroups($id = &amp;quot;&amp;quot;)'''&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur. Si vide le système utilise celui de l'utilisateur courant&lt;br /&gt;
&lt;br /&gt;
===bab_composeUserName()===&lt;br /&gt;
Retourne une chaîne contenant le nom complet de l'utilisateur selon les préférences du site ( nom/prénom ou prénom/nom )&lt;br /&gt;
:'''function bab_composeUserName( $F, $L)'''&lt;br /&gt;
* '''$F''' :&lt;br /&gt;
*: Prénom de l'utilisateur&lt;br /&gt;
* '''$L''' :&lt;br /&gt;
*: Nom de l'utilisateur&lt;br /&gt;
&lt;br /&gt;
===bab_userIsloggedin()===&lt;br /&gt;
Retourne '''true''' si l'utilisateur courant est authentifié. Sinon elle retourne '''false'''&lt;br /&gt;
:'''function bab_userIsloggedin()'''&lt;br /&gt;
&lt;br /&gt;
===bab_registerUser()===&lt;br /&gt;
Permet d'inscrire un utilisateur dans le portail.&lt;br /&gt;
Retourne l'ID de l'utilisateur inscrit. Sinon '''false'''.&lt;br /&gt;
:'''function bab_registerUser($firstname, $lastname, $middlename, $email, $nickname, $password1, $password2, $confirmed, &amp;amp;$error, $bgroup = true)'''&lt;br /&gt;
* '''$firstname''' :&lt;br /&gt;
*: Prénom de l'utilisateur à inscrire&lt;br /&gt;
* '''$lastname''' :&lt;br /&gt;
*: Nom de l'utilisateur à inscrire&lt;br /&gt;
* '''$middlename''' :&lt;br /&gt;
*: Deuxième prénom de l'utilisateur à inscrire&lt;br /&gt;
* '''$email''' :&lt;br /&gt;
*: Adresse email de l'utilisateur à inscrire&lt;br /&gt;
* '''$nickname''' :&lt;br /&gt;
*: Identifiant de l'utilisateur à inscrire&lt;br /&gt;
* '''$password1''' :&lt;br /&gt;
*: Mot de passe de l'utilisateur à inscrire&lt;br /&gt;
* '''$password2''' :&lt;br /&gt;
*: De nouveau le même mot de passe de l'utilisateur à inscrire&lt;br /&gt;
* '''$confirmed''' :&lt;br /&gt;
*: '''true''' si l'inscription de l'utilisateur sera confirmée. Sinon '''false'''&lt;br /&gt;
* '''$error''' :&lt;br /&gt;
*: Variable passée par référence. Si l'inscription échoue, elle sera initialisée avec le message d'erreur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_getUserInfos()===&lt;br /&gt;
&lt;br /&gt;
Obtenir les informations d'un utilisateur, la fonction retourne un tableau contenant la fiche annuaire de l'utilisateur et les champs spécifiques obligatoires. Les information obtenues peuvent être utilisées en entrée avec la fonction bab_updateUserById()&lt;br /&gt;
&lt;br /&gt;
les champs retournés par la fonction qui sont toujours présents sont :&lt;br /&gt;
&lt;br /&gt;
*disabled : booléen 1 ou 0&lt;br /&gt;
*password_md5 : mot de passe du compte Ovidentia&lt;br /&gt;
*changepwd : booléen 1 ou 0&lt;br /&gt;
*is_confirmed : booléen 1 ou 0&lt;br /&gt;
*cn : surnom&lt;br /&gt;
*sn : nom&lt;br /&gt;
*mn : deuxième prénom&lt;br /&gt;
*givenname : prénom&lt;br /&gt;
*jpegphoto&lt;br /&gt;
*email&lt;br /&gt;
*btel&lt;br /&gt;
*mobile : numéro de téléphone mobile&lt;br /&gt;
*htel&lt;br /&gt;
*bfax&lt;br /&gt;
*title&lt;br /&gt;
*departmentnumber&lt;br /&gt;
*organisationname&lt;br /&gt;
*bstreetaddress,&lt;br /&gt;
*bcity&lt;br /&gt;
*bpostalcode&lt;br /&gt;
*bstate&lt;br /&gt;
*bcountry&lt;br /&gt;
*hstreetaddress&lt;br /&gt;
*hcity&lt;br /&gt;
*hpostalcode&lt;br /&gt;
*hstate&lt;br /&gt;
*hcountry&lt;br /&gt;
*user1&lt;br /&gt;
*user2&lt;br /&gt;
*user3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarque : il peut y avoir des champ d'annuaire optionnels. Des champs comme jpegphoto (photo de l'utilisateur) peuvent être désactivés par l'administrateur du site. Dans ce cas le tableau retourné ne contiendra pas l'entrée jpegphoto.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getUserInfos($id_user)'''&lt;br /&gt;
&lt;br /&gt;
===bab_updateUserById()===&lt;br /&gt;
&lt;br /&gt;
Modification d'un utilisateur&lt;br /&gt;
&lt;br /&gt;
:'''function bab_updateUserById($id, $info, &amp;amp;$error)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: ID de l'utilisateur à modifier&lt;br /&gt;
* '''$info''' :&lt;br /&gt;
*: $info est une variable tableau contenant les nouvelles valeurs à enregistrées, le format du tableau correspond au format retourné par la fonction  bab_getUserInfos()&lt;br /&gt;
* '''&amp;amp;$error''' :&lt;br /&gt;
*: En cas d'erreur, cette variable sera renseignée avec un message d'erreur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_updateUserByNickname()===&lt;br /&gt;
&lt;br /&gt;
Modifier les informations d'un utilisateur a partir de l'identifiant&lt;br /&gt;
&lt;br /&gt;
:'''function bab_updateUserByNickname($nickname, $info, &amp;amp;$error)'''&lt;br /&gt;
&lt;br /&gt;
* '''$nickname''' :&lt;br /&gt;
*: Identifiant de l'utilisateur à modifier&lt;br /&gt;
* '''$info''' :&lt;br /&gt;
*: $info est une variable tableau contenant les nouvelles valeurs à enregistrées, le format du tableau correspond au format retourné par la fonction  bab_getUserInfos()&lt;br /&gt;
* '''&amp;amp;$error''' :&lt;br /&gt;
*: En cas d'erreur, cette variable sera renseignée avec un message d'erreur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Les fiches d'annuaires ==&lt;br /&gt;
&lt;br /&gt;
===bab_getDirEntry()===&lt;br /&gt;
&lt;br /&gt;
Retourne une fiche d'annuaire ou une liste de fiches d'annuaires.&lt;br /&gt;
&lt;br /&gt;
retourne false si il y a une erreur dans les paramètres&lt;br /&gt;
&lt;br /&gt;
retourne un tableau vide si l'utilisateur n'a pas accès aux informations&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getDirEntry($id = false, $type = BAB_DIR_ENTRY_ID_USER, $id_directory = NULL )'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: Ce paramètre est optionnel, les valeurs possibles sont :&lt;br /&gt;
*:&lt;br /&gt;
*: false : si le type est BAB_DIR_ENTRY_ID_USER, l'id de l'utilisateur connecté sera utilisé.&lt;br /&gt;
*: un nombre entier : utilisable pour tout les types&lt;br /&gt;
*: un tableau de nombre entiers : une liste d'id peut être utilisée pour les types BAB_DIR_ENTRY_ID_USER et BAB_DIR_ENTRY_ID dans ce cas la fonction retournera plusieurs fiches d'annuaire dans un tableau.&lt;br /&gt;
&lt;br /&gt;
* '''type''' :&lt;br /&gt;
*: Ce paramètre est optionnel, il correspond au type d'information fourni dans le premier paramètre de la fonction, les valeurs possibles sont&lt;br /&gt;
*: &lt;br /&gt;
*: BAB_DIR_ENTRY_ID_USER : $id est un id d'utilisateur&lt;br /&gt;
*: BAB_DIR_ENTRY_ID : $id est un id de fiche d'annuaire&lt;br /&gt;
*: BAB_DIR_ENTRY_ID_DIRECTORY : $id est un id d'annuaire, dans ce cas seul la liste des champs de l'annuaire est retournée&lt;br /&gt;
*: BAB_DIR_ENTRY_ID_GROUP : $id est un id de groupe d'utilisateur, dans ce cas seul la liste des champs de l'annuaire de groupe est retournée&lt;br /&gt;
*:&lt;br /&gt;
*: La valeur par défaut est BAB_DIR_ENTRY_ID_USER&lt;br /&gt;
&lt;br /&gt;
* '''$id_directory''' :&lt;br /&gt;
*: Ce paramètre est optionnel, peut être spécifié si le type est BAB_DIR_ENTRY_ID&lt;br /&gt;
&lt;br /&gt;
===bab_getUserDirectories()===&lt;br /&gt;
&lt;br /&gt;
Retourne une liste d'annuaires visibles par l'utilisateur&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getUserDirectories()'''&lt;br /&gt;
&lt;br /&gt;
===bab_getUserDirEntryLink()===&lt;br /&gt;
&lt;br /&gt;
Cette fonction permet d'obtenir un lien vers une fiche d'annuaire, pour un utilisateur ou un ID de fiche d'annuaire.&lt;br /&gt;
&lt;br /&gt;
retourne false si la fiche n'est pas accessible&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getUserDirEntryLink($id = false, $type = BAB_DIR_ENTRY_ID_USER, $id_directory = false)'''&lt;br /&gt;
&lt;br /&gt;
* '''$id''' :&lt;br /&gt;
*: Ce paramètre est optionnel, les valeurs possibles sont :&lt;br /&gt;
*:&lt;br /&gt;
*: false : si le type est BAB_DIR_ENTRY_ID_USER, l'id de l'utilisateur connecté sera utilisé.&lt;br /&gt;
*: un nombre entier : utilisable pour tout les types&lt;br /&gt;
&lt;br /&gt;
* '''type''' :&lt;br /&gt;
*: Ce paramètre est optionnel, il correspond au type d'information fourni dans le premier paramètre de la fonction, les valeurs possibles sont&lt;br /&gt;
*: &lt;br /&gt;
*: BAB_DIR_ENTRY_ID_USER : $id est un id d'utilisateur&lt;br /&gt;
*: BAB_DIR_ENTRY_ID : $id est un id de fiche d'annuaire&lt;br /&gt;
*:&lt;br /&gt;
*: La valeur par défaut est BAB_DIR_ENTRY_ID_USER&lt;br /&gt;
&lt;br /&gt;
* '''$id_directory''' :&lt;br /&gt;
*: Ce paramètre est optionnel, peut être spécifié si le type est BAB_DIR_ENTRY_ID&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4702</id>
		<title>Structures des tables de données d'Ovidentia</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4702"/>
				<updated>2010-03-04T09:56:34Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Table bab_cal_events */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cet article est en cours de rédaction. Son contenu n'est pas exhaustif.&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_calendar ===&lt;br /&gt;
contient les agendas (les noms des agendas ne se trouvent pas dans cette table). La table est liée aux tables bab_cal_public, bab_cal_resources ou bab_cal_events (il n'y a pas de tables pour les agendas personnels)&lt;br /&gt;
* id : identifiant d'un agenda&lt;br /&gt;
* owner : correspond pour un agenda de ressources à l'identifiant de l'enregistrement dans la table bab_cal_resources&lt;br /&gt;
* type : type de l'agenda.&lt;br /&gt;
Agenda  : 1&lt;br /&gt;
Agenda  : 2&lt;br /&gt;
Agenda de ressources : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_categories  ===&lt;br /&gt;
contient les catégories d'événements&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* name : nom de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* bgcolor : couleur héxa de la catégorie (ex : CC0000)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events ===&lt;br /&gt;
contient les événements des agendas (tous types d'agendas confondus). Cette table ne permet pas de savoir dans quels agendas sont publiés les événements car un événement peut faire partie de plusieurs agendas : voir table bab_cal_events_owners.&lt;br /&gt;
* id : identifiant de l'événement&lt;br /&gt;
* title : titre de l'événement&lt;br /&gt;
* description : description de l'événement&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* location : lieu de l'événement&lt;br /&gt;
* start_date : date et heure de début de l'événement&lt;br /&gt;
* end_date : date et heure de fin de l'événement&lt;br /&gt;
* id_cat : identifiant de la catégorie d'événement&lt;br /&gt;
* id_creator : identifiant de l'auteur de l'événement&lt;br /&gt;
* hash : rempli uniquement lorsque l'événement est répétitif (ex : R_4697c6374e306b988eff36a868ff6f2c)&lt;br /&gt;
* color : couleur de l'événement (ex : FF0033)&lt;br /&gt;
* bprivate : indique si l'événement est privé. Valeur possible : Y ou N&lt;br /&gt;
* block : indique si l'événement est verrouillé. Valeur possible : Y ou N&lt;br /&gt;
* bfree : indique si l'événement est libre. Valeur possible : Y ou N&lt;br /&gt;
* date_modification : date de dernière modification de l'événement&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* uuid : identifiant unique de l'événement (utilisé pour des outils de synchronisation externe)&lt;br /&gt;
&lt;br /&gt;
Remarques :&lt;br /&gt;
&lt;br /&gt;
Pour un événement répétitif, Ovidentia génère autant d'enregistrements dans la table bab_cal_events qu'il existe de répétitions. Il est possible de savoir si un événement est répétitif si le champ hash est renseigné. Tous les événements qui auront le même hash font donc partie du même événement de base.&lt;br /&gt;
&lt;br /&gt;
Lorsqu'on créé un événement dans plusieurs agendas personnels (liaison bab_cal_events_owners), Ovidentia l'affiche comme des invités.&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_notes ===&lt;br /&gt;
contient les notes privées associées aux événements d'agendas par les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur&lt;br /&gt;
* note : contenu de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_owners ===&lt;br /&gt;
lie les événements d'agendas (bab_cal_events) avec les agendas (bab_calendars)&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_cal : identifiant de l'agenda&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_reminders ===&lt;br /&gt;
contient les rappels d'événements pour les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur qui veut le rappel&lt;br /&gt;
* day : nombre de jours avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* hour : nombre d'heures avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* minute : nombre de minutes avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* bemail : vaut Y si les rappels doivent être envoyés par e-mails (voir options dans config.php), sinon N&lt;br /&gt;
* processed : vaut Y si l'utilisateur a demandé à cacher le rappel de sa fenêtre, sinon N par défaut&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_public ===&lt;br /&gt;
contient les agendas collectifs&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : description de l'agenda&lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_resources ===&lt;br /&gt;
contient les agendas de ressources&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : &lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
* availability_lock : vaut 1 si on veut empêcher la création d'événements en surbooking, sinon 0.&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_user_options ===&lt;br /&gt;
contient les options privés des utilisateurs sur l'ensemble des agendas&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles ===&lt;br /&gt;
contient les articles&lt;br /&gt;
* id : identifiant de l'article&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se situe l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de l'article&lt;br /&gt;
* date : date de création de l'article&lt;br /&gt;
* date_publication : date de publication de l'article&lt;br /&gt;
* date_archiving : date d'archivage de l'article&lt;br /&gt;
* date_modification : date de dernière modification de l'article&lt;br /&gt;
* title : titre de l'article&lt;br /&gt;
* head : introduction de l'article (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps de l'article&lt;br /&gt;
* body_format : format du texte de la description : html...&lt;br /&gt;
* archive : indique si l'article est une archive. Valeurs possibles : N ou Y&lt;br /&gt;
* lang : langue de l'article (fr, en...)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'article dans le thème par rapport aux autres articles du thème&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles_images ===&lt;br /&gt;
contient les images associées aux articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts ===&lt;br /&gt;
contient les brouillons d'articles (Rappel : avant d'être soumis ou approuvés, les textes sont des brouillons. Les brouillons se transforment en articles dès qu'ils sont soumis et approuvés)&lt;br /&gt;
* id : identifiant du brouillon&lt;br /&gt;
* id_author : identifiant de l'auteur du brouillon&lt;br /&gt;
* date_creation : date de création du brouillon&lt;br /&gt;
* date_modification : date de dernière modification du brouillon&lt;br /&gt;
* date_submission : date de soumission du brouillon&lt;br /&gt;
* date_publication : date de publication du brouillon&lt;br /&gt;
* date_archiving : date d'archivage du brouillon&lt;br /&gt;
* title : titre du brouillon&lt;br /&gt;
* head : introduction du brouillon (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps du brouillon&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* lang : langue du brouillon (fr, en...)&lt;br /&gt;
* trash : indique si le brouillon est dans la corbeille ou pas. Valeurs possibles : N ou Y&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se trouve le brouillon (peut être vide)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* hpage_private : vaut Y si l'article est proposé pour les pages d'accueil privées&lt;br /&gt;
* hpage_public : vaut Y si l'article est proposé pour les pages d'accueil publiques&lt;br /&gt;
* notify_members : vaut Y l'option 'notifier les lecteurs' est cochée&lt;br /&gt;
* idfai : identifiant de l'instance en cours du schéma d'approbation&lt;br /&gt;
* result : statut d'approbation (type entier). Valeurs possibles : 0, 1, 2, 3&lt;br /&gt;
0 : statut par défaut si pas d'approbation en cours&lt;br /&gt;
1 : l'article brouillon est en attente d'approbation&lt;br /&gt;
2 : l'article brouillon est approuvé (Remarque : ce statut n'est jamais utilisé car un article brouillon approuvé se transforme en article)&lt;br /&gt;
3 : l'article brouillon a été refusé&lt;br /&gt;
* id_article : identifiant de l'article si le brouillon est une modification d'un article existant&lt;br /&gt;
* id_anonymous : identifiant de l'auteur si l'auteur n'est pas authentifié. C'est l'identifiant d'un enregistrement dans la table BAB_USERS_LOG_TBL.&lt;br /&gt;
* approbation : vaut 0, 1 ou 2&lt;br /&gt;
* update_datemodif : vaut Y si&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_files ===&lt;br /&gt;
contient les fichiers joints aux brouillons d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* name : nom du fichier (Ex : gaston.jpg)&lt;br /&gt;
* description : description du fichier&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier par rapport aux autres fichiers joints de l'article brouillon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_images ===&lt;br /&gt;
contient les images associées aux brouillons d'articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_notes ===&lt;br /&gt;
contient les commentaires des approbateurs qui ont refusés les articles brouillons (Pour le publicateur, les commentaires sont affichées en prévisualisation de l'article, depuis la liste des brouillons (lien Publication/onglet Mes Articles si l'article est en cours d'approbation))&lt;br /&gt;
* id : identifiant de la note&lt;br /&gt;
* id_draft : identifiant de l'article brouillon associé&lt;br /&gt;
* content : contenu texte de la note&lt;br /&gt;
* id_author : identifiant de l'auteur de la note&lt;br /&gt;
* date_note : date de création de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles brouillons&lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_files ===&lt;br /&gt;
contient les fichiers joints des articles&lt;br /&gt;
* id : identifiant du fichier joint à l'article&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* name : &lt;br /&gt;
* description : description du fichier joint&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier joint avec les autres fichiers joints d'un même article&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_log ===&lt;br /&gt;
contient l'historique des modifications d'articles&lt;br /&gt;
* id : identifiant de la modification&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de la modification&lt;br /&gt;
* date_log : date et heure de la modification&lt;br /&gt;
* action_log : statut de la modification. Valeurs possibles : lock, unlock, commit, refused, accepted.&lt;br /&gt;
Lorsqu'on saisit la raison de la modification avant de modifier un article, le statut est lock.&lt;br /&gt;
Lorsqu'on soumet un article, le statut est commit. Si l'article ne passe pas par approbation, il y a immédiatement un autre enregistrement avec le statut accepted. commit et accepted sont aussi utilisés lorsqu'on modifie un brouillon puis qu'on soumet.&lt;br /&gt;
Lorsqu'on modifie un article et qu'on l'enregistre (on ne le soumet pas), seul un enregistrement est créé : celui avec le statut lock et la raison de la modification.&lt;br /&gt;
Il n'y a pas d'enregistrements si on créé un article et qu'il ne doit pas être approuvé.&lt;br /&gt;
Lorsqu'on supprime un brouillon, le statut est unlock.&lt;br /&gt;
* art_log : description de la modification. Contient le texte saisit comme raison de la modification &lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles&lt;br /&gt;
* id_art : identifiant de l'article&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_comments ===&lt;br /&gt;
contient les commentaires des articles&lt;br /&gt;
* id : identifiant du commentaire&lt;br /&gt;
* id_parent : identifiant du commentaire parent&lt;br /&gt;
* id_article : identifiant de l'article associé au commentaire&lt;br /&gt;
* id_topic : identifiant du thème d'articles dans lequel est créé l'article&lt;br /&gt;
* id_author : auteur du commentaire&lt;br /&gt;
* id_last_editor : identifiant du dernier auteur modificateur&lt;br /&gt;
* date : date de création du commentaire&lt;br /&gt;
* last_update : date de la dernière modification du commentaire&lt;br /&gt;
* subject : titre du commentaire&lt;br /&gt;
* message : contenu texte du commentaire&lt;br /&gt;
* confirmed : Y si le commentaire est approuvé, N sinon&lt;br /&gt;
* name : nom de l'auteur du commentaire&lt;br /&gt;
* email : email de l'auteur du commentaire&lt;br /&gt;
* idfai : identifiant de l'instance du schéma d'approbation utilisé pour ce commentaire&lt;br /&gt;
* lang : langue du commentaire (fr, en...)&lt;br /&gt;
* article_rating : note attribuée à l'article. Valeurs possibles : 0, 1, 2, 3, 4, 5&lt;br /&gt;
0 : l'article n'est pas noté&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topcat_order ===&lt;br /&gt;
contient les numéros pour les tris d'affichage des catégories et des thèmes. Attention, sous une catégorie parente, il est possible d'ordonner les sous-catégories avec les sous-thèmes (il y a donc des mélanges d'où la colonne type).&lt;br /&gt;
Rappel : une catégorie est un conteneur de sous-catégories ou de thèmes.&lt;br /&gt;
* id : identifiant de l'ordre&lt;br /&gt;
* id_topcat : identifiant de la catégorie ou du thème que l'on veut ordonner&lt;br /&gt;
* type : 1 si l'ordre est définit pour une catégorie d'articles. 2 si l'ordre est défini pour un thème d'articles.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'objet par rapport aux autres objets de la catégorie parente (id_parent) &lt;br /&gt;
* id_parent : identifiant de la catégorie d'articles parente d'idtopcat. C'est la catégorie dans laquelle on veut ordonner notre objet. Vaut 0 si l'objet qu'on veut trier est une catégorie de premier niveau (pas de catégorie parente).&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics ===&lt;br /&gt;
contient les thèmes d'articles&lt;br /&gt;
* id : identifiant du thème&lt;br /&gt;
* category : nom du thème&lt;br /&gt;
* description : description du thème&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* id_cat : identifiant de la catégorie dans laquelle se trouve le thème&lt;br /&gt;
* idsaart : identifiant du schéma d'approbation à la création d'articles&lt;br /&gt;
* idsacom : identifiant du schéma d'approbation des commentaires&lt;br /&gt;
* idsa_update : identifiant du schéma d'approbation à la modification des articles&lt;br /&gt;
* notify : Y si les auteurs peuvent notifier les lecteurs par email, N sinon&lt;br /&gt;
* lang : langue du thème (fr, en...)&lt;br /&gt;
* article_tmpl : nom du modèle d'articles&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
* restrict_access : Y si les auteurs peuvent restreindre l'accès aux articles, N sinon&lt;br /&gt;
* allow_hpages : Y si on permet aux auteurs de proposer leurs articles pour les pages d'accueil, N sinon&lt;br /&gt;
* allow_pubdates : Y si on permet aux auteurs de spécifier des dates de publication, N sinon&lt;br /&gt;
* allow_attachments : Y si on permet aux auteurs de joindre des fichiers avec leurs articles, N sinon&lt;br /&gt;
* allow_update : entier indiquant si les auteurs peuvent modifier leurs articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les auteurs ne peuvent pas modifier leurs articles&lt;br /&gt;
1 : les auteurs peuvent modifier leurs articles, mais avec approbation&lt;br /&gt;
2 : les auteurs peuvent modifier leurs articles et sans approbation&lt;br /&gt;
* max_articles : nombre maximum d'articles sur la page des archives&lt;br /&gt;
* allow_manupdate : entier indiquant si les gestionnaires peuvent modifier les articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les gestionnaires ne peuvent pas modifier les articles&lt;br /&gt;
1 : les gestionnaires peuvent modifier les articles, mais avec approbation&lt;br /&gt;
2 : les gestionnaires peuvent modifier les articles et sans approbation&lt;br /&gt;
* auto_approbation : Y si on approuve automatiquement le contributeur dans le cas où il fait partie de la première étape du schéma d'approbation, N sinon&lt;br /&gt;
* busetags : Y si on utilise les mots-clés du thésaurus, N sinon&lt;br /&gt;
* allow_addImg : Y si on permet aux auteurs d'associer une image à un article&lt;br /&gt;
* allow_article_rating : Y si on permet aux auteurs des commentaires de noter les articles, N sinon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicscom_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant faire des commentaires sur le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsman_groups ===&lt;br /&gt;
Table de droits d'accès : groupes gestionnaires du thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsmod_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant modifier des articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicssub_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant soumettre de nouveaux articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsview_groups ===&lt;br /&gt;
Table de droist d'accès : groupes pouvant voir les articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group :&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories ===&lt;br /&gt;
contient les catégories d'articles (conteneurs des thèmes d'articles)&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* title : titre de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* enabled : vaut Y si la section de la catégorie est activée, N sinon&lt;br /&gt;
* template : nom du patron de section&lt;br /&gt;
* id_dgowner : identifiant de la délégation où se trouve la catégorie, 0 si dans tout le site&lt;br /&gt;
* optional : utilisation inconnue !!!&lt;br /&gt;
* id_parent : identifiant de la catégorie parente&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories_images ===&lt;br /&gt;
contient les images associées aux catégories d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idCategory : identifiant de la catégorie d'articles&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_images ===&lt;br /&gt;
contient les images associées aux thèmes d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idTopic : identifiant du thème&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
== Utilisateurs ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_users ===&lt;br /&gt;
contient les comptes utilisateurs (attention : les enregistrements sont liés avec les tables d'annuaires comme bab_dbdir_entries)&lt;br /&gt;
* id : identifiant de l'utilisateur&lt;br /&gt;
* nickname : identifiant de connexion&lt;br /&gt;
* firstname : prénom&lt;br /&gt;
* lastname : nom&lt;br /&gt;
* hashname : concaténation du prénom, du deuxième prénom et du nom, sans les tirets ni les espaces puis crypté en MD5 (utilisé pour tester lors de la création d'un utilisateur si un utilisateur de même coordonnées existe déjà)&lt;br /&gt;
* email : adresse de messagerie&lt;br /&gt;
* date : date de la création du compte utilisateur&lt;br /&gt;
* password : mot de passe de connexion (crypté en MD5)&lt;br /&gt;
* changepwd : &lt;br /&gt;
* remote_addr : &lt;br /&gt;
* confirm_hash : clef de confirmation utilisée dans le lien de l'email de confirmation de la création du compte&lt;br /&gt;
* is_confirmed : 1 si le compte utilisateur a été confirmé par l'administrateur, 0 sinon&lt;br /&gt;
* disabled : 1 si le compte est désactivé (authentification impossible), 0 sinon&lt;br /&gt;
* validity_start : date de début de la validité du compte utilisateur (authentification temporaire), 0000-00-00 sinon&lt;br /&gt;
* validity_end : date de fin de la validité du compte utilisateur (authentification temporaire), 0000-00-00 sinon&lt;br /&gt;
* lang : langue à utiliser pour l'interface Ovidentia (fr, en...) ou valeur vide&lt;br /&gt;
* skin : nom du skin à utiliser pour l'interface Ovidentia ou valeur vide&lt;br /&gt;
* style : nom du fichier css du skin à utiliser pour l'interface Ovidentia ou valeur vide&lt;br /&gt;
* lastlog : date de l'authentification de la précédente session (utilisé par exemple pour déterminer ce qui a été publié sur le portail depuis votre dernière connexion)&lt;br /&gt;
* datelog : date de l'authentification de la session en cours&lt;br /&gt;
* langfilter : filtre de langue à utiliser pour l'interface Ovidentia (fr, en...) ou valeur vide&lt;br /&gt;
* date_longformat : format des dates longues (option de l'utilisateur pour l'affichage des dates dans Ovidentia)&lt;br /&gt;
* date_shortformat : format des dates courtes (option de l'utilisateur pour l'affichage des dates dans Ovidentia)&lt;br /&gt;
* time_format : format des horaires (option de l'utilisateur pour l'affichage des horaires dans Ovidentia)&lt;br /&gt;
* cookie_validity : date de fin de validité pour la clef d'authentification par cookie&lt;br /&gt;
* cookie_id : clef de l'authentification par cookie en cours d'utilisation&lt;br /&gt;
* id_sitemap_profile : identifiant du profil du plan du site (lié avec la table bab_sitemap_profiles) associé à l'utilisateur&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Param%C3%A8tres_de_la_recherche&amp;diff=4700</id>
		<title>Paramètres de la recherche</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Param%C3%A8tres_de_la_recherche&amp;diff=4700"/>
				<updated>2010-02-24T13:29:36Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Paramètres généraux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Développement de modules]]&lt;br /&gt;
[[Catégorie:API Ovidentia]]&lt;br /&gt;
[[Catégorie:Recherche]]&lt;br /&gt;
{{Warning|Cette normalisation des paramètres de la recherche est disponible à partir de Ovidentia 7.1.0}}&lt;br /&gt;
&lt;br /&gt;
== But ==&lt;br /&gt;
Normaliser les paramètres passés au moteur de recherche d'OVIDENTIA afin de permettre aux utilisateurs ou aux addons de créer leur propre url de recherche. &lt;br /&gt;
La recherche doit permettre de prendre en compte les GET et les POST&lt;br /&gt;
&lt;br /&gt;
== Paramètres généraux ==&lt;br /&gt;
URL : index.php?tg=search&amp;amp;...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;prettytable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|| '''Paramètre'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
|| idx  || Si idx vaut 'find', la recherche est effectuée. Sinon seul le formulaire de recherche est affiché.&lt;br /&gt;
|-&lt;br /&gt;
|| what  || Mot à rechercher&lt;br /&gt;
|-&lt;br /&gt;
|| what2 || Deuxième mot à rechercher&lt;br /&gt;
|-&lt;br /&gt;
|| option || Prend une des valeurs suivantes vide, OR, AND ou NOT&lt;br /&gt;
|-&lt;br /&gt;
|| item || Vide pour recherche dans tous les objets&lt;br /&gt;
* ''publication'' pour rechercher dans les articles&lt;br /&gt;
* ''forums'' pour rechercher dans forums&lt;br /&gt;
* ''faqs'' pour rechercher dans les faqs&lt;br /&gt;
* ''notes'' pour rechercher dans les notes&lt;br /&gt;
* ''files'' pour rechercher dans les fichiers&lt;br /&gt;
* ''contacts'' pour rechercher dans contacts&lt;br /&gt;
* ''directories'' pour rechercher dans les annuaires&lt;br /&gt;
* ''calendars'' pour rechercher dans les agendas&lt;br /&gt;
* ''addon/addonname'' or « addon/addonid »  pour rechercher dans  un un addon spécifique&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Paramètres Articles ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;prettytable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|| '''Paramètre'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
|| topic || vide ou id du thème où rechercher&lt;br /&gt;
|-&lt;br /&gt;
|| category || vide où la catégorie où chercher&lt;br /&gt;
|-&lt;br /&gt;
|| authorid || ID de l'auteur sinon vide&lt;br /&gt;
|-&lt;br /&gt;
|| before || Date de fin au format 'YYYY-MM-DD'&lt;br /&gt;
|-&lt;br /&gt;
|| after || Date de début au format 'YYYY-MM-DD'&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Paramètres Forums ==&lt;br /&gt;
Pas de paramètres supplémentaires&lt;br /&gt;
&lt;br /&gt;
== Paramètres Faqs ==&lt;br /&gt;
Pas de paramètres supplémentaires&lt;br /&gt;
&lt;br /&gt;
== Paramètres Notes ==&lt;br /&gt;
Pas de paramètres supplémentaires&lt;br /&gt;
&lt;br /&gt;
== Paramètres Fichiers ==&lt;br /&gt;
&lt;br /&gt;
Pas de paramètres supplémentaires&lt;br /&gt;
&lt;br /&gt;
== Paramètres Contacts ==&lt;br /&gt;
Pas de paramètres supplémentaires&lt;br /&gt;
&lt;br /&gt;
== Paramètres Annuaires ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;prettytable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|| '''Paramètre''' || '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
|| directoryid  || ID de l'annuaire ou vide pour  tous les annuaires&lt;br /&gt;
|-&lt;br /&gt;
|| f[0]  || Nom du champ à chercher ( sn, givenname, email, etc … )&lt;br /&gt;
|-&lt;br /&gt;
|| v[0] || Valeur du champ à chercher ( sn, givenname, email, etc … )&lt;br /&gt;
|-&lt;br /&gt;
|| f[1] || Nom du champ à chercher ( sn, givenname, email, etc … )&lt;br /&gt;
|-&lt;br /&gt;
|| v[1] || Valeur du champ à chercher( sn, givenname, email, etc … ) &lt;br /&gt;
|-&lt;br /&gt;
|| f[2] || Nom du champ à chercher ( sn, givenname, email, etc … ) &lt;br /&gt;
|-&lt;br /&gt;
|| v[2] || Valeur du champ à chercher ( sn, givenname, email, etc … )&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Il est possible d'ajouter d'autres champs de recherche ou de ne pas tous les spécifier en augmentant ou en diminuant la clef des deux tableaux '''f''' et '''v'''&lt;br /&gt;
&lt;br /&gt;
== Paramètres Agendas ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;prettytable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|| '''Paramètre'''&lt;br /&gt;
| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
|| calendarid  || ID de l'agenda ou vide pour  tous les agendas&lt;br /&gt;
|-&lt;br /&gt;
|| before || Date de fin au format 'YYYY-MM-DD'&lt;br /&gt;
|-&lt;br /&gt;
|| after || Date de début au format 'YYYY-MM-DD'&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4688</id>
		<title>Structures des tables de données d'Ovidentia</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4688"/>
				<updated>2010-01-07T14:03:59Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Table bab_users */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cet article est en cours de rédaction. Son contenu n'est pas exhaustif.&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_calendar ===&lt;br /&gt;
contient les agendas (les noms des agendas ne se trouvent pas dans cette table). La table est liée aux tables bab_cal_public, bab_cal_resources ou bab_cal_events (il n'y a pas de tables pour les agendas personnels)&lt;br /&gt;
* id : identifiant d'un agenda&lt;br /&gt;
* owner : correspond pour un agenda de ressources à l'identifiant de l'enregistrement dans la table bab_cal_resources&lt;br /&gt;
* type : type de l'agenda.&lt;br /&gt;
Agenda  : 1&lt;br /&gt;
Agenda  : 2&lt;br /&gt;
Agenda de ressources : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_categories  ===&lt;br /&gt;
contient les catégories d'événements&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* name : nom de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* bgcolor : couleur héxa de la catégorie (ex : CC0000)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events ===&lt;br /&gt;
contient les événements des agendas (tous types d'agendas confondus). Cette table ne permet pas de savoir dans quels agendas sont publiés les événements car un événement peut faire partie de pluieurs agendas : voir table bab_cal_events_owners.&lt;br /&gt;
* id : identifiant de l'événement&lt;br /&gt;
* title : titre de l'événement&lt;br /&gt;
* description : description de l'événement&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* location : lieu de l'événement&lt;br /&gt;
* start_date : date et heure de début de l'événement&lt;br /&gt;
* end_date : date et heure de fin de l'événement&lt;br /&gt;
* id_cat : identifiant de la catégorie d'événement&lt;br /&gt;
* id_creator : identifiant de l'auteur de l'événement&lt;br /&gt;
* hash : rempli uniquement lorsque l'événement est répétitif (ex : R_4697c6374e306b988eff36a868ff6f2c)&lt;br /&gt;
* color : couleur de l'événement (ex : FF0033)&lt;br /&gt;
* bprivate : indique si l'événement est privé. Valeur possible : Y ou N&lt;br /&gt;
* block : indique si l'événement est verrouillé. Valeur possible : Y ou N&lt;br /&gt;
* bfree : indique si l'événement est libre. Valeur possible : Y ou N&lt;br /&gt;
* date_modification : date de dernière modification de l'événement&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* uuid : identifiant unique de l'événement (utilisé pour des outils de synchronisation externe)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_notes ===&lt;br /&gt;
contient les notes privées associées aux événements d'agendas par les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur&lt;br /&gt;
* note : contenu de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_owners ===&lt;br /&gt;
lie les événements d'agendas (bab_cal_events) avec les agendas (bab_calendars)&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_cal : identifiant de l'agenda&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_reminders ===&lt;br /&gt;
contient les rappels d'événements pour les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur qui veut le rappel&lt;br /&gt;
* day : nombre de jours avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* hour : nombre d'heures avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* minute : nombre de minutes avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* bemail : vaut Y si les rappels doivent être envoyés par e-mails (voir options dans config.php), sinon N&lt;br /&gt;
* processed : vaut Y si l'utilisateur a demandé à cacher le rappel de sa fenêtre, sinon N par défaut&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_public ===&lt;br /&gt;
contient les agendas collectifs&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : description de l'agenda&lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_resources ===&lt;br /&gt;
contient les agendas de ressources&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : &lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
* availability_lock : vaut 1 si on veut empêcher la création d'événements en surbooking, sinon 0.&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_user_options ===&lt;br /&gt;
contient les options privés des utilisateurs sur l'ensemble des agendas&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles ===&lt;br /&gt;
contient les articles&lt;br /&gt;
* id : identifiant de l'article&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se situe l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de l'article&lt;br /&gt;
* date : date de création de l'article&lt;br /&gt;
* date_publication : date de publication de l'article&lt;br /&gt;
* date_archiving : date d'archivage de l'article&lt;br /&gt;
* date_modification : date de dernière modification de l'article&lt;br /&gt;
* title : titre de l'article&lt;br /&gt;
* head : introduction de l'article (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps de l'article&lt;br /&gt;
* body_format : format du texte de la description : html...&lt;br /&gt;
* archive : indique si l'article est une archive. Valeurs possibles : N ou Y&lt;br /&gt;
* lang : langue de l'article (fr, en...)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'article dans le thème par rapport aux autres articles du thème&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles_images ===&lt;br /&gt;
contient les images associées aux articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts ===&lt;br /&gt;
contient les brouillons d'articles (Rappel : avant d'être soumis ou approuvés, les textes sont des brouillons. Les brouillons se transforment en articles dès qu'ils sont soumis et approuvés)&lt;br /&gt;
* id : identifiant du brouillon&lt;br /&gt;
* id_author : identifiant de l'auteur du brouillon&lt;br /&gt;
* date_creation : date de création du brouillon&lt;br /&gt;
* date_modification : date de dernière modification du brouillon&lt;br /&gt;
* date_submission : date de soumission du brouillon&lt;br /&gt;
* date_publication : date de publication du brouillon&lt;br /&gt;
* date_archiving : date d'archivage du brouillon&lt;br /&gt;
* title : titre du brouillon&lt;br /&gt;
* head : introduction du brouillon (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps du brouillon&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* lang : langue du brouillon (fr, en...)&lt;br /&gt;
* trash : indique si le brouillon est dans la corbeille ou pas. Valeurs possibles : N ou Y&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se trouve le brouillon (peut être vide)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* hpage_private : vaut Y si l'article est proposé pour les pages d'accueil privées&lt;br /&gt;
* hpage_public : vaut Y si l'article est proposé pour les pages d'accueil publiques&lt;br /&gt;
* notify_members : vaut Y l'option 'notifier les lecteurs' est cochée&lt;br /&gt;
* idfai : identifiant de l'instance en cours du schéma d'approbation&lt;br /&gt;
* result : statut d'approbation (type entier). Valeurs possibles : 0, 1, 2, 3&lt;br /&gt;
0 : statut par défaut si pas d'approbation en cours&lt;br /&gt;
1 : l'article brouillon est en attente d'approbation&lt;br /&gt;
2 : l'article brouillon est approuvé (Remarque : ce statut n'est jamais utilisé car un article brouillon approuvé se transforme en article)&lt;br /&gt;
3 : l'article brouillon a été refusé&lt;br /&gt;
* id_article : identifiant de l'article si le brouillon est une modification d'un article existant&lt;br /&gt;
* id_anonymous : identifiant de l'auteur si l'auteur n'est pas authentifié. C'est l'identifiant d'un enregistrement dans la table BAB_USERS_LOG_TBL.&lt;br /&gt;
* approbation : vaut 0, 1 ou 2&lt;br /&gt;
* update_datemodif : vaut Y si&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_files ===&lt;br /&gt;
contient les fichiers joints aux brouillons d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* name : nom du fichier (Ex : gaston.jpg)&lt;br /&gt;
* description : description du fichier&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier par rapport aux autres fichiers joints de l'article brouillon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_images ===&lt;br /&gt;
contient les images associées aux brouillons d'articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_notes ===&lt;br /&gt;
contient les commentaires des approbateurs qui ont refusés les articles brouillons (Pour le publicateur, les commentaires sont affichées en prévisualisation de l'article, depuis la liste des brouillons (lien Publication/onglet Mes Articles si l'article est en cours d'approbation))&lt;br /&gt;
* id : identifiant de la note&lt;br /&gt;
* id_draft : identifiant de l'article brouillon associé&lt;br /&gt;
* content : contenu texte de la note&lt;br /&gt;
* id_author : identifiant de l'auteur de la note&lt;br /&gt;
* date_note : date de création de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles brouillons&lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_files ===&lt;br /&gt;
contient les fichiers joints des articles&lt;br /&gt;
* id : identifiant du fichier joint à l'article&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* name : &lt;br /&gt;
* description : description du fichier joint&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier joint avec les autres fichiers joints d'un même article&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_log ===&lt;br /&gt;
contient l'historique des modifications d'articles&lt;br /&gt;
* id : identifiant de la modification&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de la modification&lt;br /&gt;
* date_log : date et heure de la modification&lt;br /&gt;
* action_log : statut de la modification. Valeurs possibles : lock, unlock, commit, refused, accepted.&lt;br /&gt;
Lorsqu'on saisit la raison de la modification avant de modifier un article, le statut est lock.&lt;br /&gt;
Lorsqu'on soumet un article, le statut est commit. Si l'article ne passe pas par approbation, il y a immédiatement un autre enregistrement avec le statut accepted. commit et accepted sont aussi utilisés lorsqu'on modifie un brouillon puis qu'on soumet.&lt;br /&gt;
Lorsqu'on modifie un article et qu'on l'enregistre (on ne le soumet pas), seul un enregistrement est créé : celui avec le statut lock et la raison de la modification.&lt;br /&gt;
Il n'y a pas d'enregistrements si on créé un article et qu'il ne doit pas être approuvé.&lt;br /&gt;
Lorsqu'on supprime un brouillon, le statut est unlock.&lt;br /&gt;
* art_log : description de la modification. Contient le texte saisit comme raison de la modification &lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles&lt;br /&gt;
* id_art : identifiant de l'article&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_comments ===&lt;br /&gt;
contient les commentaires des articles&lt;br /&gt;
* id : identifiant du commentaire&lt;br /&gt;
* id_parent : identifiant du commentaire parent&lt;br /&gt;
* id_article : identifiant de l'article associé au commentaire&lt;br /&gt;
* id_topic : identifiant du thème d'articles dans lequel est créé l'article&lt;br /&gt;
* id_author : auteur du commentaire&lt;br /&gt;
* id_last_editor : identifiant du dernier auteur modificateur&lt;br /&gt;
* date : date de création du commentaire&lt;br /&gt;
* last_update : date de la dernière modification du commentaire&lt;br /&gt;
* subject : titre du commentaire&lt;br /&gt;
* message : contenu texte du commentaire&lt;br /&gt;
* confirmed : Y si le commentaire est approuvé, N sinon&lt;br /&gt;
* name : nom de l'auteur du commentaire&lt;br /&gt;
* email : email de l'auteur du commentaire&lt;br /&gt;
* idfai : identifiant de l'instance du schéma d'approbation utilisé pour ce commentaire&lt;br /&gt;
* lang : langue du commentaire (fr, en...)&lt;br /&gt;
* article_rating : note attribuée à l'article. Valeurs possibles : 0, 1, 2, 3, 4, 5&lt;br /&gt;
0 : l'article n'est pas noté&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topcat_order ===&lt;br /&gt;
contient les numéros pour les tris d'affichage des catégories et des thèmes. Attention, sous une catégorie parente, il est possible d'ordonner les sous-catégories avec les sous-thèmes (il y a donc des mélanges d'où la colonne type).&lt;br /&gt;
Rappel : une catégorie est un conteneur de sous-catégories ou de thèmes.&lt;br /&gt;
* id : identifiant de l'ordre&lt;br /&gt;
* id_topcat : identifiant de la catégorie ou du thème que l'on veut ordonner&lt;br /&gt;
* type : 1 si l'ordre est définit pour une catégorie d'articles. 2 si l'ordre est défini pour un thème d'articles.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'objet par rapport aux autres objets de la catégorie parente (id_parent) &lt;br /&gt;
* id_parent : identifiant de la catégorie d'articles parente d'idtopcat. C'est la catégorie dans laquelle on veut ordonner notre objet. Vaut 0 si l'objet qu'on veut trier est une catégorie de premier niveau (pas de catégorie parente).&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics ===&lt;br /&gt;
contient les thèmes d'articles&lt;br /&gt;
* id : identifiant du thème&lt;br /&gt;
* category : nom du thème&lt;br /&gt;
* description : description du thème&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* id_cat : identifiant de la catégorie dans laquelle se trouve le thème&lt;br /&gt;
* idsaart : identifiant du schéma d'approbation à la création d'articles&lt;br /&gt;
* idsacom : identifiant du schéma d'approbation des commentaires&lt;br /&gt;
* idsa_update : identifiant du schéma d'approbation à la modification des articles&lt;br /&gt;
* notify : Y si les auteurs peuvent notifier les lecteurs par email, N sinon&lt;br /&gt;
* lang : langue du thème (fr, en...)&lt;br /&gt;
* article_tmpl : nom du modèle d'articles&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
* restrict_access : Y si les auteurs peuvent restreindre l'accès aux articles, N sinon&lt;br /&gt;
* allow_hpages : Y si on permet aux auteurs de proposer leurs articles pour les pages d'accueil, N sinon&lt;br /&gt;
* allow_pubdates : Y si on permet aux auteurs de spécifier des dates de publication, N sinon&lt;br /&gt;
* allow_attachments : Y si on permet aux auteurs de joindre des fichiers avec leurs articles, N sinon&lt;br /&gt;
* allow_update : entier indiquant si les auteurs peuvent modifier leurs articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les auteurs ne peuvent pas modifier leurs articles&lt;br /&gt;
1 : les auteurs peuvent modifier leurs articles, mais avec approbation&lt;br /&gt;
2 : les auteurs peuvent modifier leurs articles et sans approbation&lt;br /&gt;
* max_articles : nombre maximum d'articles sur la page des archives&lt;br /&gt;
* allow_manupdate : entier indiquant si les gestionnaires peuvent modifier les articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les gestionnaires ne peuvent pas modifier les articles&lt;br /&gt;
1 : les gestionnaires peuvent modifier les articles, mais avec approbation&lt;br /&gt;
2 : les gestionnaires peuvent modifier les articles et sans approbation&lt;br /&gt;
* auto_approbation : Y si on approuve automatiquement le contributeur dans le cas où il fait partie de la première étape du schéma d'approbation, N sinon&lt;br /&gt;
* busetags : Y si on utilise les mots-clés du thésaurus, N sinon&lt;br /&gt;
* allow_addImg : Y si on permet aux auteurs d'associer une image à un article&lt;br /&gt;
* allow_article_rating : Y si on permet aux auteurs des commentaires de noter les articles, N sinon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicscom_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant faire des commentaires sur le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsman_groups ===&lt;br /&gt;
Table de droits d'accès : groupes gestionnaires du thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsmod_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant modifier des articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicssub_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant soumettre de nouveaux articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsview_groups ===&lt;br /&gt;
Table de droist d'accès : groupes pouvant voir les articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group :&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories ===&lt;br /&gt;
contient les catégories d'articles (conteneurs des thèmes d'articles)&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* title : titre de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* enabled : vaut Y si la section de la catégorie est activée, N sinon&lt;br /&gt;
* template : nom du patron de section&lt;br /&gt;
* id_dgowner : identifiant de la délégation où se trouve la catégorie, 0 si dans tout le site&lt;br /&gt;
* optional : utilisation inconnue !!!&lt;br /&gt;
* id_parent : identifiant de la catégorie parente&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories_images ===&lt;br /&gt;
contient les images associées aux catégories d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idCategory : identifiant de la catégorie d'articles&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_images ===&lt;br /&gt;
contient les images associées aux thèmes d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idTopic : identifiant du thème&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
== Utilisateurs ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_users ===&lt;br /&gt;
contient les comptes utilisateurs (attention : les enregistrements sont liés avec les tables d'annuaires comme bab_dbdir_entries)&lt;br /&gt;
* id : identifiant de l'utilisateur&lt;br /&gt;
* nickname : identifiant de connexion&lt;br /&gt;
* firstname : prénom&lt;br /&gt;
* lastname : nom&lt;br /&gt;
* hashname : concaténation du prénom, du deuxième prénom et du nom, sans les tirets ni les espaces puis crypté en MD5 (utilisé pour tester lors de la création d'un utilisateur si un utilisateur de même coordonnées existe déjà)&lt;br /&gt;
* email : adresse de messagerie&lt;br /&gt;
* date : date de la création du compte utilisateur&lt;br /&gt;
* password : mot de passe de connexion (crypté en MD5)&lt;br /&gt;
* changepwd : &lt;br /&gt;
* remote_addr : &lt;br /&gt;
* confirm_hash : clef de confirmation utilisée dans le lien de l'email de confirmation de la création du compte&lt;br /&gt;
* is_confirmed : 1 si le compte utilisateur a été confirmé par l'administrateur, 0 sinon&lt;br /&gt;
* disabled : 1 si le compte est désactivé (authentification impossible), 0 sinon&lt;br /&gt;
* validity_start : date de début de la validité du compte utilisateur (authentification temporaire), 0000-00-00 sinon&lt;br /&gt;
* validity_end : date de fin de la validité du compte utilisateur (authentification temporaire), 0000-00-00 sinon&lt;br /&gt;
* lang : langue à utiliser pour l'interface Ovidentia (fr, en...) ou valeur vide&lt;br /&gt;
* skin : nom du skin à utiliser pour l'interface Ovidentia ou valeur vide&lt;br /&gt;
* style : nom du fichier css du skin à utiliser pour l'interface Ovidentia ou valeur vide&lt;br /&gt;
* lastlog : date de l'authentification de la précédente session (utilisé par exemple pour déterminer ce qui a été publié sur le portail depuis votre dernière connexion)&lt;br /&gt;
* datelog : date de l'authentification de la session en cours&lt;br /&gt;
* langfilter : filtre de langue à utiliser pour l'interface Ovidentia (fr, en...) ou valeur vide&lt;br /&gt;
* date_longformat : format des dates longues (option de l'utilisateur pour l'affichage des dates dans Ovidentia)&lt;br /&gt;
* date_shortformat : format des dates courtes (option de l'utilisateur pour l'affichage des dates dans Ovidentia)&lt;br /&gt;
* time_format : format des horaires (option de l'utilisateur pour l'affichage des horaires dans Ovidentia)&lt;br /&gt;
* cookie_validity : date de fin de validité pour la clef d'authentification par cookie&lt;br /&gt;
* cookie_id : clef de l'authentification par cookie en cours d'utilisation&lt;br /&gt;
* id_sitemap_profile : identifiant du profil du plan du site (lié avec la table bab_sitemap_profiles) associé à l'utilisateur&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4686</id>
		<title>Structures des tables de données d'Ovidentia</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4686"/>
				<updated>2010-01-07T13:29:54Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Table bab_users */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cet article est en cours de rédaction. Son contenu n'est pas exhaustif.&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_calendar ===&lt;br /&gt;
contient les agendas (les noms des agendas ne se trouvent pas dans cette table). La table est liée aux tables bab_cal_public, bab_cal_resources ou bab_cal_events (il n'y a pas de tables pour les agendas personnels)&lt;br /&gt;
* id : identifiant d'un agenda&lt;br /&gt;
* owner : correspond pour un agenda de ressources à l'identifiant de l'enregistrement dans la table bab_cal_resources&lt;br /&gt;
* type : type de l'agenda.&lt;br /&gt;
Agenda  : 1&lt;br /&gt;
Agenda  : 2&lt;br /&gt;
Agenda de ressources : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_categories  ===&lt;br /&gt;
contient les catégories d'événements&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* name : nom de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* bgcolor : couleur héxa de la catégorie (ex : CC0000)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events ===&lt;br /&gt;
contient les événements des agendas (tous types d'agendas confondus). Cette table ne permet pas de savoir dans quels agendas sont publiés les événements car un événement peut faire partie de pluieurs agendas : voir table bab_cal_events_owners.&lt;br /&gt;
* id : identifiant de l'événement&lt;br /&gt;
* title : titre de l'événement&lt;br /&gt;
* description : description de l'événement&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* location : lieu de l'événement&lt;br /&gt;
* start_date : date et heure de début de l'événement&lt;br /&gt;
* end_date : date et heure de fin de l'événement&lt;br /&gt;
* id_cat : identifiant de la catégorie d'événement&lt;br /&gt;
* id_creator : identifiant de l'auteur de l'événement&lt;br /&gt;
* hash : rempli uniquement lorsque l'événement est répétitif (ex : R_4697c6374e306b988eff36a868ff6f2c)&lt;br /&gt;
* color : couleur de l'événement (ex : FF0033)&lt;br /&gt;
* bprivate : indique si l'événement est privé. Valeur possible : Y ou N&lt;br /&gt;
* block : indique si l'événement est verrouillé. Valeur possible : Y ou N&lt;br /&gt;
* bfree : indique si l'événement est libre. Valeur possible : Y ou N&lt;br /&gt;
* date_modification : date de dernière modification de l'événement&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* uuid : identifiant unique de l'événement (utilisé pour des outils de synchronisation externe)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_notes ===&lt;br /&gt;
contient les notes privées associées aux événements d'agendas par les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur&lt;br /&gt;
* note : contenu de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_owners ===&lt;br /&gt;
lie les événements d'agendas (bab_cal_events) avec les agendas (bab_calendars)&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_cal : identifiant de l'agenda&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_reminders ===&lt;br /&gt;
contient les rappels d'événements pour les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur qui veut le rappel&lt;br /&gt;
* day : nombre de jours avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* hour : nombre d'heures avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* minute : nombre de minutes avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* bemail : vaut Y si les rappels doivent être envoyés par e-mails (voir options dans config.php), sinon N&lt;br /&gt;
* processed : vaut Y si l'utilisateur a demandé à cacher le rappel de sa fenêtre, sinon N par défaut&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_public ===&lt;br /&gt;
contient les agendas collectifs&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : description de l'agenda&lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_resources ===&lt;br /&gt;
contient les agendas de ressources&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : &lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
* availability_lock : vaut 1 si on veut empêcher la création d'événements en surbooking, sinon 0.&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_user_options ===&lt;br /&gt;
contient les options privés des utilisateurs sur l'ensemble des agendas&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles ===&lt;br /&gt;
contient les articles&lt;br /&gt;
* id : identifiant de l'article&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se situe l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de l'article&lt;br /&gt;
* date : date de création de l'article&lt;br /&gt;
* date_publication : date de publication de l'article&lt;br /&gt;
* date_archiving : date d'archivage de l'article&lt;br /&gt;
* date_modification : date de dernière modification de l'article&lt;br /&gt;
* title : titre de l'article&lt;br /&gt;
* head : introduction de l'article (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps de l'article&lt;br /&gt;
* body_format : format du texte de la description : html...&lt;br /&gt;
* archive : indique si l'article est une archive. Valeurs possibles : N ou Y&lt;br /&gt;
* lang : langue de l'article (fr, en...)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'article dans le thème par rapport aux autres articles du thème&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles_images ===&lt;br /&gt;
contient les images associées aux articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts ===&lt;br /&gt;
contient les brouillons d'articles (Rappel : avant d'être soumis ou approuvés, les textes sont des brouillons. Les brouillons se transforment en articles dès qu'ils sont soumis et approuvés)&lt;br /&gt;
* id : identifiant du brouillon&lt;br /&gt;
* id_author : identifiant de l'auteur du brouillon&lt;br /&gt;
* date_creation : date de création du brouillon&lt;br /&gt;
* date_modification : date de dernière modification du brouillon&lt;br /&gt;
* date_submission : date de soumission du brouillon&lt;br /&gt;
* date_publication : date de publication du brouillon&lt;br /&gt;
* date_archiving : date d'archivage du brouillon&lt;br /&gt;
* title : titre du brouillon&lt;br /&gt;
* head : introduction du brouillon (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps du brouillon&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* lang : langue du brouillon (fr, en...)&lt;br /&gt;
* trash : indique si le brouillon est dans la corbeille ou pas. Valeurs possibles : N ou Y&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se trouve le brouillon (peut être vide)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* hpage_private : vaut Y si l'article est proposé pour les pages d'accueil privées&lt;br /&gt;
* hpage_public : vaut Y si l'article est proposé pour les pages d'accueil publiques&lt;br /&gt;
* notify_members : vaut Y l'option 'notifier les lecteurs' est cochée&lt;br /&gt;
* idfai : identifiant de l'instance en cours du schéma d'approbation&lt;br /&gt;
* result : statut d'approbation (type entier). Valeurs possibles : 0, 1, 2, 3&lt;br /&gt;
0 : statut par défaut si pas d'approbation en cours&lt;br /&gt;
1 : l'article brouillon est en attente d'approbation&lt;br /&gt;
2 : l'article brouillon est approuvé (Remarque : ce statut n'est jamais utilisé car un article brouillon approuvé se transforme en article)&lt;br /&gt;
3 : l'article brouillon a été refusé&lt;br /&gt;
* id_article : identifiant de l'article si le brouillon est une modification d'un article existant&lt;br /&gt;
* id_anonymous : identifiant de l'auteur si l'auteur n'est pas authentifié. C'est l'identifiant d'un enregistrement dans la table BAB_USERS_LOG_TBL.&lt;br /&gt;
* approbation : vaut 0, 1 ou 2&lt;br /&gt;
* update_datemodif : vaut Y si&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_files ===&lt;br /&gt;
contient les fichiers joints aux brouillons d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* name : nom du fichier (Ex : gaston.jpg)&lt;br /&gt;
* description : description du fichier&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier par rapport aux autres fichiers joints de l'article brouillon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_images ===&lt;br /&gt;
contient les images associées aux brouillons d'articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_notes ===&lt;br /&gt;
contient les commentaires des approbateurs qui ont refusés les articles brouillons (Pour le publicateur, les commentaires sont affichées en prévisualisation de l'article, depuis la liste des brouillons (lien Publication/onglet Mes Articles si l'article est en cours d'approbation))&lt;br /&gt;
* id : identifiant de la note&lt;br /&gt;
* id_draft : identifiant de l'article brouillon associé&lt;br /&gt;
* content : contenu texte de la note&lt;br /&gt;
* id_author : identifiant de l'auteur de la note&lt;br /&gt;
* date_note : date de création de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles brouillons&lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_files ===&lt;br /&gt;
contient les fichiers joints des articles&lt;br /&gt;
* id : identifiant du fichier joint à l'article&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* name : &lt;br /&gt;
* description : description du fichier joint&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier joint avec les autres fichiers joints d'un même article&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_log ===&lt;br /&gt;
contient l'historique des modifications d'articles&lt;br /&gt;
* id : identifiant de la modification&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de la modification&lt;br /&gt;
* date_log : date et heure de la modification&lt;br /&gt;
* action_log : statut de la modification. Valeurs possibles : lock, unlock, commit, refused, accepted.&lt;br /&gt;
Lorsqu'on saisit la raison de la modification avant de modifier un article, le statut est lock.&lt;br /&gt;
Lorsqu'on soumet un article, le statut est commit. Si l'article ne passe pas par approbation, il y a immédiatement un autre enregistrement avec le statut accepted. commit et accepted sont aussi utilisés lorsqu'on modifie un brouillon puis qu'on soumet.&lt;br /&gt;
Lorsqu'on modifie un article et qu'on l'enregistre (on ne le soumet pas), seul un enregistrement est créé : celui avec le statut lock et la raison de la modification.&lt;br /&gt;
Il n'y a pas d'enregistrements si on créé un article et qu'il ne doit pas être approuvé.&lt;br /&gt;
Lorsqu'on supprime un brouillon, le statut est unlock.&lt;br /&gt;
* art_log : description de la modification. Contient le texte saisit comme raison de la modification &lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles&lt;br /&gt;
* id_art : identifiant de l'article&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_comments ===&lt;br /&gt;
contient les commentaires des articles&lt;br /&gt;
* id : identifiant du commentaire&lt;br /&gt;
* id_parent : identifiant du commentaire parent&lt;br /&gt;
* id_article : identifiant de l'article associé au commentaire&lt;br /&gt;
* id_topic : identifiant du thème d'articles dans lequel est créé l'article&lt;br /&gt;
* id_author : auteur du commentaire&lt;br /&gt;
* id_last_editor : identifiant du dernier auteur modificateur&lt;br /&gt;
* date : date de création du commentaire&lt;br /&gt;
* last_update : date de la dernière modification du commentaire&lt;br /&gt;
* subject : titre du commentaire&lt;br /&gt;
* message : contenu texte du commentaire&lt;br /&gt;
* confirmed : Y si le commentaire est approuvé, N sinon&lt;br /&gt;
* name : nom de l'auteur du commentaire&lt;br /&gt;
* email : email de l'auteur du commentaire&lt;br /&gt;
* idfai : identifiant de l'instance du schéma d'approbation utilisé pour ce commentaire&lt;br /&gt;
* lang : langue du commentaire (fr, en...)&lt;br /&gt;
* article_rating : note attribuée à l'article. Valeurs possibles : 0, 1, 2, 3, 4, 5&lt;br /&gt;
0 : l'article n'est pas noté&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topcat_order ===&lt;br /&gt;
contient les numéros pour les tris d'affichage des catégories et des thèmes. Attention, sous une catégorie parente, il est possible d'ordonner les sous-catégories avec les sous-thèmes (il y a donc des mélanges d'où la colonne type).&lt;br /&gt;
Rappel : une catégorie est un conteneur de sous-catégories ou de thèmes.&lt;br /&gt;
* id : identifiant de l'ordre&lt;br /&gt;
* id_topcat : identifiant de la catégorie ou du thème que l'on veut ordonner&lt;br /&gt;
* type : 1 si l'ordre est définit pour une catégorie d'articles. 2 si l'ordre est défini pour un thème d'articles.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'objet par rapport aux autres objets de la catégorie parente (id_parent) &lt;br /&gt;
* id_parent : identifiant de la catégorie d'articles parente d'idtopcat. C'est la catégorie dans laquelle on veut ordonner notre objet. Vaut 0 si l'objet qu'on veut trier est une catégorie de premier niveau (pas de catégorie parente).&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics ===&lt;br /&gt;
contient les thèmes d'articles&lt;br /&gt;
* id : identifiant du thème&lt;br /&gt;
* category : nom du thème&lt;br /&gt;
* description : description du thème&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* id_cat : identifiant de la catégorie dans laquelle se trouve le thème&lt;br /&gt;
* idsaart : identifiant du schéma d'approbation à la création d'articles&lt;br /&gt;
* idsacom : identifiant du schéma d'approbation des commentaires&lt;br /&gt;
* idsa_update : identifiant du schéma d'approbation à la modification des articles&lt;br /&gt;
* notify : Y si les auteurs peuvent notifier les lecteurs par email, N sinon&lt;br /&gt;
* lang : langue du thème (fr, en...)&lt;br /&gt;
* article_tmpl : nom du modèle d'articles&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
* restrict_access : Y si les auteurs peuvent restreindre l'accès aux articles, N sinon&lt;br /&gt;
* allow_hpages : Y si on permet aux auteurs de proposer leurs articles pour les pages d'accueil, N sinon&lt;br /&gt;
* allow_pubdates : Y si on permet aux auteurs de spécifier des dates de publication, N sinon&lt;br /&gt;
* allow_attachments : Y si on permet aux auteurs de joindre des fichiers avec leurs articles, N sinon&lt;br /&gt;
* allow_update : entier indiquant si les auteurs peuvent modifier leurs articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les auteurs ne peuvent pas modifier leurs articles&lt;br /&gt;
1 : les auteurs peuvent modifier leurs articles, mais avec approbation&lt;br /&gt;
2 : les auteurs peuvent modifier leurs articles et sans approbation&lt;br /&gt;
* max_articles : nombre maximum d'articles sur la page des archives&lt;br /&gt;
* allow_manupdate : entier indiquant si les gestionnaires peuvent modifier les articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les gestionnaires ne peuvent pas modifier les articles&lt;br /&gt;
1 : les gestionnaires peuvent modifier les articles, mais avec approbation&lt;br /&gt;
2 : les gestionnaires peuvent modifier les articles et sans approbation&lt;br /&gt;
* auto_approbation : Y si on approuve automatiquement le contributeur dans le cas où il fait partie de la première étape du schéma d'approbation, N sinon&lt;br /&gt;
* busetags : Y si on utilise les mots-clés du thésaurus, N sinon&lt;br /&gt;
* allow_addImg : Y si on permet aux auteurs d'associer une image à un article&lt;br /&gt;
* allow_article_rating : Y si on permet aux auteurs des commentaires de noter les articles, N sinon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicscom_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant faire des commentaires sur le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsman_groups ===&lt;br /&gt;
Table de droits d'accès : groupes gestionnaires du thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsmod_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant modifier des articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicssub_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant soumettre de nouveaux articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsview_groups ===&lt;br /&gt;
Table de droist d'accès : groupes pouvant voir les articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group :&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories ===&lt;br /&gt;
contient les catégories d'articles (conteneurs des thèmes d'articles)&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* title : titre de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* enabled : vaut Y si la section de la catégorie est activée, N sinon&lt;br /&gt;
* template : nom du patron de section&lt;br /&gt;
* id_dgowner : identifiant de la délégation où se trouve la catégorie, 0 si dans tout le site&lt;br /&gt;
* optional : utilisation inconnue !!!&lt;br /&gt;
* id_parent : identifiant de la catégorie parente&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories_images ===&lt;br /&gt;
contient les images associées aux catégories d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idCategory : identifiant de la catégorie d'articles&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_images ===&lt;br /&gt;
contient les images associées aux thèmes d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idTopic : identifiant du thème&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
== Utilisateurs ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_users ===&lt;br /&gt;
contient les comptes utilisateurs (attention : les enregistrements sont liés avec les tables d'annuaires comme bab_dbdir_entries)&lt;br /&gt;
* id : identifiant de l'utilisateur&lt;br /&gt;
* nickname : identifiant de connexion&lt;br /&gt;
* firstname : prénom&lt;br /&gt;
* lastname : nom&lt;br /&gt;
* hashname : &lt;br /&gt;
* email : adresse de messagerie&lt;br /&gt;
* date : &lt;br /&gt;
* password : mot de passe de connexion (crypté en MD5)&lt;br /&gt;
* changepwd : &lt;br /&gt;
* remote_addr : &lt;br /&gt;
* confirm_hash : &lt;br /&gt;
* is_confirmed : 1 si le compte utilisateur a été confirmé par l'administrateur, 0 sinon&lt;br /&gt;
* disabled : 1 si le compte est désactivé (authentification impossible), 0 sinon&lt;br /&gt;
* validity_start : date de début de la validité du compte utilisateur (authentification temporaire), 0000-00-00 sinon&lt;br /&gt;
* validity_end : date de fin de la validité du compte utilisateur (authentification temporaire), 0000-00-00 sinon&lt;br /&gt;
* lang : langue à utiliser pour l'interface Ovidentia (fr, en...) ou valeur vide&lt;br /&gt;
* skin : nom du skin à utiliser pour l'interface Ovidentia ou valeur vide&lt;br /&gt;
* style : nom du fichier css du skin à utiliser pour l'interface Ovidentia ou valeur vide&lt;br /&gt;
* lastlog : &lt;br /&gt;
* datelog : &lt;br /&gt;
* langfilter : filtre de langue à utiliser pour l'interface Ovidentia (fr, en...) ou valeur vide&lt;br /&gt;
* date_longformat : format des dates longues (option de l'utilisateur pour l'affichage des dates dans Ovidentia)&lt;br /&gt;
* date_shortformat : format des dates courtes (option de l'utilisateur pour l'affichage des dates dans Ovidentia)&lt;br /&gt;
* time_format : format des horaires (option de l'utilisateur pour l'affichage des horaires dans Ovidentia)&lt;br /&gt;
* cookie_validity : &lt;br /&gt;
* cookie_id : &lt;br /&gt;
* id_sitemap_profile : identifiant du profil du plan du site (lié avec la table bab_sitemap_profiles) associé à l'utilisateur&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4685</id>
		<title>Structures des tables de données d'Ovidentia</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4685"/>
				<updated>2010-01-07T13:11:34Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cet article est en cours de rédaction. Son contenu n'est pas exhaustif.&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_calendar ===&lt;br /&gt;
contient les agendas (les noms des agendas ne se trouvent pas dans cette table). La table est liée aux tables bab_cal_public, bab_cal_resources ou bab_cal_events (il n'y a pas de tables pour les agendas personnels)&lt;br /&gt;
* id : identifiant d'un agenda&lt;br /&gt;
* owner : correspond pour un agenda de ressources à l'identifiant de l'enregistrement dans la table bab_cal_resources&lt;br /&gt;
* type : type de l'agenda.&lt;br /&gt;
Agenda  : 1&lt;br /&gt;
Agenda  : 2&lt;br /&gt;
Agenda de ressources : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_categories  ===&lt;br /&gt;
contient les catégories d'événements&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* name : nom de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* bgcolor : couleur héxa de la catégorie (ex : CC0000)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events ===&lt;br /&gt;
contient les événements des agendas (tous types d'agendas confondus). Cette table ne permet pas de savoir dans quels agendas sont publiés les événements car un événement peut faire partie de pluieurs agendas : voir table bab_cal_events_owners.&lt;br /&gt;
* id : identifiant de l'événement&lt;br /&gt;
* title : titre de l'événement&lt;br /&gt;
* description : description de l'événement&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* location : lieu de l'événement&lt;br /&gt;
* start_date : date et heure de début de l'événement&lt;br /&gt;
* end_date : date et heure de fin de l'événement&lt;br /&gt;
* id_cat : identifiant de la catégorie d'événement&lt;br /&gt;
* id_creator : identifiant de l'auteur de l'événement&lt;br /&gt;
* hash : rempli uniquement lorsque l'événement est répétitif (ex : R_4697c6374e306b988eff36a868ff6f2c)&lt;br /&gt;
* color : couleur de l'événement (ex : FF0033)&lt;br /&gt;
* bprivate : indique si l'événement est privé. Valeur possible : Y ou N&lt;br /&gt;
* block : indique si l'événement est verrouillé. Valeur possible : Y ou N&lt;br /&gt;
* bfree : indique si l'événement est libre. Valeur possible : Y ou N&lt;br /&gt;
* date_modification : date de dernière modification de l'événement&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* uuid : identifiant unique de l'événement (utilisé pour des outils de synchronisation externe)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_notes ===&lt;br /&gt;
contient les notes privées associées aux événements d'agendas par les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur&lt;br /&gt;
* note : contenu de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_owners ===&lt;br /&gt;
lie les événements d'agendas (bab_cal_events) avec les agendas (bab_calendars)&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_cal : identifiant de l'agenda&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_reminders ===&lt;br /&gt;
contient les rappels d'événements pour les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur qui veut le rappel&lt;br /&gt;
* day : nombre de jours avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* hour : nombre d'heures avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* minute : nombre de minutes avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* bemail : vaut Y si les rappels doivent être envoyés par e-mails (voir options dans config.php), sinon N&lt;br /&gt;
* processed : vaut Y si l'utilisateur a demandé à cacher le rappel de sa fenêtre, sinon N par défaut&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_public ===&lt;br /&gt;
contient les agendas collectifs&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : description de l'agenda&lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_resources ===&lt;br /&gt;
contient les agendas de ressources&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : &lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
* availability_lock : vaut 1 si on veut empêcher la création d'événements en surbooking, sinon 0.&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_user_options ===&lt;br /&gt;
contient les options privés des utilisateurs sur l'ensemble des agendas&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles ===&lt;br /&gt;
contient les articles&lt;br /&gt;
* id : identifiant de l'article&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se situe l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de l'article&lt;br /&gt;
* date : date de création de l'article&lt;br /&gt;
* date_publication : date de publication de l'article&lt;br /&gt;
* date_archiving : date d'archivage de l'article&lt;br /&gt;
* date_modification : date de dernière modification de l'article&lt;br /&gt;
* title : titre de l'article&lt;br /&gt;
* head : introduction de l'article (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps de l'article&lt;br /&gt;
* body_format : format du texte de la description : html...&lt;br /&gt;
* archive : indique si l'article est une archive. Valeurs possibles : N ou Y&lt;br /&gt;
* lang : langue de l'article (fr, en...)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'article dans le thème par rapport aux autres articles du thème&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles_images ===&lt;br /&gt;
contient les images associées aux articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts ===&lt;br /&gt;
contient les brouillons d'articles (Rappel : avant d'être soumis ou approuvés, les textes sont des brouillons. Les brouillons se transforment en articles dès qu'ils sont soumis et approuvés)&lt;br /&gt;
* id : identifiant du brouillon&lt;br /&gt;
* id_author : identifiant de l'auteur du brouillon&lt;br /&gt;
* date_creation : date de création du brouillon&lt;br /&gt;
* date_modification : date de dernière modification du brouillon&lt;br /&gt;
* date_submission : date de soumission du brouillon&lt;br /&gt;
* date_publication : date de publication du brouillon&lt;br /&gt;
* date_archiving : date d'archivage du brouillon&lt;br /&gt;
* title : titre du brouillon&lt;br /&gt;
* head : introduction du brouillon (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps du brouillon&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* lang : langue du brouillon (fr, en...)&lt;br /&gt;
* trash : indique si le brouillon est dans la corbeille ou pas. Valeurs possibles : N ou Y&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se trouve le brouillon (peut être vide)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* hpage_private : vaut Y si l'article est proposé pour les pages d'accueil privées&lt;br /&gt;
* hpage_public : vaut Y si l'article est proposé pour les pages d'accueil publiques&lt;br /&gt;
* notify_members : vaut Y l'option 'notifier les lecteurs' est cochée&lt;br /&gt;
* idfai : identifiant de l'instance en cours du schéma d'approbation&lt;br /&gt;
* result : statut d'approbation (type entier). Valeurs possibles : 0, 1, 2, 3&lt;br /&gt;
0 : statut par défaut si pas d'approbation en cours&lt;br /&gt;
1 : l'article brouillon est en attente d'approbation&lt;br /&gt;
2 : l'article brouillon est approuvé (Remarque : ce statut n'est jamais utilisé car un article brouillon approuvé se transforme en article)&lt;br /&gt;
3 : l'article brouillon a été refusé&lt;br /&gt;
* id_article : identifiant de l'article si le brouillon est une modification d'un article existant&lt;br /&gt;
* id_anonymous : identifiant de l'auteur si l'auteur n'est pas authentifié. C'est l'identifiant d'un enregistrement dans la table BAB_USERS_LOG_TBL.&lt;br /&gt;
* approbation : vaut 0, 1 ou 2&lt;br /&gt;
* update_datemodif : vaut Y si&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_files ===&lt;br /&gt;
contient les fichiers joints aux brouillons d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* name : nom du fichier (Ex : gaston.jpg)&lt;br /&gt;
* description : description du fichier&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier par rapport aux autres fichiers joints de l'article brouillon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_images ===&lt;br /&gt;
contient les images associées aux brouillons d'articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_notes ===&lt;br /&gt;
contient les commentaires des approbateurs qui ont refusés les articles brouillons (Pour le publicateur, les commentaires sont affichées en prévisualisation de l'article, depuis la liste des brouillons (lien Publication/onglet Mes Articles si l'article est en cours d'approbation))&lt;br /&gt;
* id : identifiant de la note&lt;br /&gt;
* id_draft : identifiant de l'article brouillon associé&lt;br /&gt;
* content : contenu texte de la note&lt;br /&gt;
* id_author : identifiant de l'auteur de la note&lt;br /&gt;
* date_note : date de création de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles brouillons&lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_files ===&lt;br /&gt;
contient les fichiers joints des articles&lt;br /&gt;
* id : identifiant du fichier joint à l'article&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* name : &lt;br /&gt;
* description : description du fichier joint&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier joint avec les autres fichiers joints d'un même article&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_log ===&lt;br /&gt;
contient l'historique des modifications d'articles&lt;br /&gt;
* id : identifiant de la modification&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de la modification&lt;br /&gt;
* date_log : date et heure de la modification&lt;br /&gt;
* action_log : statut de la modification. Valeurs possibles : lock, unlock, commit, refused, accepted.&lt;br /&gt;
Lorsqu'on saisit la raison de la modification avant de modifier un article, le statut est lock.&lt;br /&gt;
Lorsqu'on soumet un article, le statut est commit. Si l'article ne passe pas par approbation, il y a immédiatement un autre enregistrement avec le statut accepted. commit et accepted sont aussi utilisés lorsqu'on modifie un brouillon puis qu'on soumet.&lt;br /&gt;
Lorsqu'on modifie un article et qu'on l'enregistre (on ne le soumet pas), seul un enregistrement est créé : celui avec le statut lock et la raison de la modification.&lt;br /&gt;
Il n'y a pas d'enregistrements si on créé un article et qu'il ne doit pas être approuvé.&lt;br /&gt;
Lorsqu'on supprime un brouillon, le statut est unlock.&lt;br /&gt;
* art_log : description de la modification. Contient le texte saisit comme raison de la modification &lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles&lt;br /&gt;
* id_art : identifiant de l'article&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_comments ===&lt;br /&gt;
contient les commentaires des articles&lt;br /&gt;
* id : identifiant du commentaire&lt;br /&gt;
* id_parent : identifiant du commentaire parent&lt;br /&gt;
* id_article : identifiant de l'article associé au commentaire&lt;br /&gt;
* id_topic : identifiant du thème d'articles dans lequel est créé l'article&lt;br /&gt;
* id_author : auteur du commentaire&lt;br /&gt;
* id_last_editor : identifiant du dernier auteur modificateur&lt;br /&gt;
* date : date de création du commentaire&lt;br /&gt;
* last_update : date de la dernière modification du commentaire&lt;br /&gt;
* subject : titre du commentaire&lt;br /&gt;
* message : contenu texte du commentaire&lt;br /&gt;
* confirmed : Y si le commentaire est approuvé, N sinon&lt;br /&gt;
* name : nom de l'auteur du commentaire&lt;br /&gt;
* email : email de l'auteur du commentaire&lt;br /&gt;
* idfai : identifiant de l'instance du schéma d'approbation utilisé pour ce commentaire&lt;br /&gt;
* lang : langue du commentaire (fr, en...)&lt;br /&gt;
* article_rating : note attribuée à l'article. Valeurs possibles : 0, 1, 2, 3, 4, 5&lt;br /&gt;
0 : l'article n'est pas noté&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topcat_order ===&lt;br /&gt;
contient les numéros pour les tris d'affichage des catégories et des thèmes. Attention, sous une catégorie parente, il est possible d'ordonner les sous-catégories avec les sous-thèmes (il y a donc des mélanges d'où la colonne type).&lt;br /&gt;
Rappel : une catégorie est un conteneur de sous-catégories ou de thèmes.&lt;br /&gt;
* id : identifiant de l'ordre&lt;br /&gt;
* id_topcat : identifiant de la catégorie ou du thème que l'on veut ordonner&lt;br /&gt;
* type : 1 si l'ordre est définit pour une catégorie d'articles. 2 si l'ordre est défini pour un thème d'articles.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'objet par rapport aux autres objets de la catégorie parente (id_parent) &lt;br /&gt;
* id_parent : identifiant de la catégorie d'articles parente d'idtopcat. C'est la catégorie dans laquelle on veut ordonner notre objet. Vaut 0 si l'objet qu'on veut trier est une catégorie de premier niveau (pas de catégorie parente).&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics ===&lt;br /&gt;
contient les thèmes d'articles&lt;br /&gt;
* id : identifiant du thème&lt;br /&gt;
* category : nom du thème&lt;br /&gt;
* description : description du thème&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* id_cat : identifiant de la catégorie dans laquelle se trouve le thème&lt;br /&gt;
* idsaart : identifiant du schéma d'approbation à la création d'articles&lt;br /&gt;
* idsacom : identifiant du schéma d'approbation des commentaires&lt;br /&gt;
* idsa_update : identifiant du schéma d'approbation à la modification des articles&lt;br /&gt;
* notify : Y si les auteurs peuvent notifier les lecteurs par email, N sinon&lt;br /&gt;
* lang : langue du thème (fr, en...)&lt;br /&gt;
* article_tmpl : nom du modèle d'articles&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
* restrict_access : Y si les auteurs peuvent restreindre l'accès aux articles, N sinon&lt;br /&gt;
* allow_hpages : Y si on permet aux auteurs de proposer leurs articles pour les pages d'accueil, N sinon&lt;br /&gt;
* allow_pubdates : Y si on permet aux auteurs de spécifier des dates de publication, N sinon&lt;br /&gt;
* allow_attachments : Y si on permet aux auteurs de joindre des fichiers avec leurs articles, N sinon&lt;br /&gt;
* allow_update : entier indiquant si les auteurs peuvent modifier leurs articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les auteurs ne peuvent pas modifier leurs articles&lt;br /&gt;
1 : les auteurs peuvent modifier leurs articles, mais avec approbation&lt;br /&gt;
2 : les auteurs peuvent modifier leurs articles et sans approbation&lt;br /&gt;
* max_articles : nombre maximum d'articles sur la page des archives&lt;br /&gt;
* allow_manupdate : entier indiquant si les gestionnaires peuvent modifier les articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les gestionnaires ne peuvent pas modifier les articles&lt;br /&gt;
1 : les gestionnaires peuvent modifier les articles, mais avec approbation&lt;br /&gt;
2 : les gestionnaires peuvent modifier les articles et sans approbation&lt;br /&gt;
* auto_approbation : Y si on approuve automatiquement le contributeur dans le cas où il fait partie de la première étape du schéma d'approbation, N sinon&lt;br /&gt;
* busetags : Y si on utilise les mots-clés du thésaurus, N sinon&lt;br /&gt;
* allow_addImg : Y si on permet aux auteurs d'associer une image à un article&lt;br /&gt;
* allow_article_rating : Y si on permet aux auteurs des commentaires de noter les articles, N sinon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicscom_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant faire des commentaires sur le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsman_groups ===&lt;br /&gt;
Table de droits d'accès : groupes gestionnaires du thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsmod_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant modifier des articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicssub_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant soumettre de nouveaux articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsview_groups ===&lt;br /&gt;
Table de droist d'accès : groupes pouvant voir les articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group :&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories ===&lt;br /&gt;
contient les catégories d'articles (conteneurs des thèmes d'articles)&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* title : titre de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* enabled : vaut Y si la section de la catégorie est activée, N sinon&lt;br /&gt;
* template : nom du patron de section&lt;br /&gt;
* id_dgowner : identifiant de la délégation où se trouve la catégorie, 0 si dans tout le site&lt;br /&gt;
* optional : utilisation inconnue !!!&lt;br /&gt;
* id_parent : identifiant de la catégorie parente&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories_images ===&lt;br /&gt;
contient les images associées aux catégories d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idCategory : identifiant de la catégorie d'articles&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_images ===&lt;br /&gt;
contient les images associées aux thèmes d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idTopic : identifiant du thème&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
== Utilisateurs ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_users ===&lt;br /&gt;
contient les comptes utilisateurs (attention : les enregistrements sont liés avec les tables d'annuaires comme bab_dbdir_entries)&lt;br /&gt;
* id : identifiant de l'utilisateur&lt;br /&gt;
* nickname : identifiant de connexion&lt;br /&gt;
* firstname : prénom&lt;br /&gt;
* lastname : nom&lt;br /&gt;
* hashname : &lt;br /&gt;
* email : adresse de messagerie&lt;br /&gt;
* date : &lt;br /&gt;
* password : &lt;br /&gt;
* changepwd : &lt;br /&gt;
* remote_addr : &lt;br /&gt;
* confirm_hash : &lt;br /&gt;
* is_confirmed : &lt;br /&gt;
* disabled : &lt;br /&gt;
* validity_start : &lt;br /&gt;
* validity_end : &lt;br /&gt;
* lang : langue à utiliser pour l'interface Ovidentia (fr, en...) ou valeur vide&lt;br /&gt;
* skin : nom du skin à utiliser pour l'interface Ovidentia ou valeur vide&lt;br /&gt;
* style : nom du fichier css du skin à utiliser pour l'interface Ovidentia ou valeur vide&lt;br /&gt;
* lastlog : &lt;br /&gt;
* datelog : &lt;br /&gt;
* langfilter : filtre de langue à utiliser pour l'interface Ovidentia (fr, en...) ou valeur vide&lt;br /&gt;
* date_longformat : &lt;br /&gt;
* date_shortformat : &lt;br /&gt;
* time_format : &lt;br /&gt;
* cookie_validity : &lt;br /&gt;
* cookie_id : &lt;br /&gt;
* id_sitemap_profile : identifiant du profil du plan du site (lié avec la table bab_sitemap_profiles) associé à l'utilisateur&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=API_noyau/module&amp;diff=4673</id>
		<title>API noyau/module</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=API_noyau/module&amp;diff=4673"/>
				<updated>2009-12-11T09:59:41Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Développement de modules]]&lt;br /&gt;
[[Catégorie:API Ovidentia]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Cette partie contient l'ensemble des fonctions mises à la disposition des modules par le noyau.&lt;br /&gt;
Ces fonctions se trouvent dans le fichier addonapi.php qui se trouve dans le répertoire '''&amp;quot;utilit&amp;quot;''' de la distribution.&lt;br /&gt;
&lt;br /&gt;
== API date/temps ==&lt;br /&gt;
&lt;br /&gt;
Voir l'article : [[API des dates]]&lt;br /&gt;
&lt;br /&gt;
== API Navigateur ==&lt;br /&gt;
===bab_browserOS()===&lt;br /&gt;
Retourne le système d'exploitation ( windows, macos, linux ou chaîne vide si autre )&lt;br /&gt;
:'''function bab_browserOS()'''&lt;br /&gt;
===bab_browserAgent()===&lt;br /&gt;
Retourne le type de navigateur ( konqueror, opera, msie, nn6, nn4 ou chaîne vide si autre )&lt;br /&gt;
:'''function bab_browserAgent()'''&lt;br /&gt;
===bab_browserVersion()===&lt;br /&gt;
Retourne la version du navigateur&lt;br /&gt;
:'''function bab_browserVersion()'''&lt;br /&gt;
&lt;br /&gt;
== API Traduction ==&lt;br /&gt;
===bab_translate()===&lt;br /&gt;
Permet de traduire une chaîne&lt;br /&gt;
:'''function bab_translate($str, $folder = &amp;quot;&amp;quot;, $lang=&amp;quot;&amp;quot;)'''&lt;br /&gt;
* '''$str''' :&lt;br /&gt;
*: Contient la chaîne à traduire&lt;br /&gt;
* '''$folder''' :&lt;br /&gt;
*: Sous répertoire du répertoire lang ( pour les modules )&lt;br /&gt;
* '''$lang''' :&lt;br /&gt;
*: Vers quelle langue il faut faire la traduction. Si vide le système utilise la langue courante&lt;br /&gt;
&lt;br /&gt;
===bab_getAvailableLanguages()===&lt;br /&gt;
Retourne un tableau contenant les différentes langues disponibles&lt;br /&gt;
:'''function bab_getAvailableLanguages()'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== API Utilisateur ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Voir l'article [[API des utilisateurs et des annuaires#Les comptes utilisateurs ]]&lt;br /&gt;
&lt;br /&gt;
== API ACL ==&lt;br /&gt;
&lt;br /&gt;
Consultez la documentation [[Access Control List#Fonctions pour tester les droits]]&lt;br /&gt;
&lt;br /&gt;
== API Calendrier popup ==&lt;br /&gt;
===bab_calendarPopup()===&lt;br /&gt;
&lt;br /&gt;
Cette fonction est dépréciée, elle retourne une url pour afficher l'agenda de sélection d'une date. Il est préférable d'utiliser l'[[API javascript bab_dialog]] avec bab_dialog.selectdate()&lt;br /&gt;
&lt;br /&gt;
:'''function bab_calendarPopup($callback, $month=&amp;quot;&amp;quot;, $year=&amp;quot;&amp;quot;, $low=&amp;quot;&amp;quot;, $high=&amp;quot;&amp;quot;)'''&lt;br /&gt;
&lt;br /&gt;
* '''$callback''' :&lt;br /&gt;
*: Nom de la fonction javascript à appeler lorsque l'utilisateur a choisis une date&lt;br /&gt;
* '''$month''' :&lt;br /&gt;
*: Numéro du mois&lt;br /&gt;
* '''$year''' :&lt;br /&gt;
*: Numéro de l'année&lt;br /&gt;
* '''$low''' :&lt;br /&gt;
*: nombre d'année avant l'année spécifiée par $year disponible dans le calendrier&lt;br /&gt;
* '''$high''' :&lt;br /&gt;
*: nombre d'année après l'année spécifiée par $year disponible dans le calendrier&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== API templates/OVML ==&lt;br /&gt;
===bab_printTemplate()===&lt;br /&gt;
&lt;br /&gt;
Retourne le template HTML fusionné avec les variables de l'objet passé en paramètre. Pour plus d'informations, voir un [[Exemple d'utilisation de la fonction bab printTemplate()]]&lt;br /&gt;
&lt;br /&gt;
:'''function bab_printTemplate( &amp;amp;$class, $file, $section=&amp;quot;&amp;quot;)'''&lt;br /&gt;
&lt;br /&gt;
* '''&amp;amp;$class''' :&lt;br /&gt;
*: Objet contenant les variables et les méthodes utilisées lors de la fusion avec le template&lt;br /&gt;
* '''$file''' :&lt;br /&gt;
*: Emplacement du fichier de template&lt;br /&gt;
* '''$section''':&lt;br /&gt;
*: Ce paramètre est optionnel, il permet de spécifier le nom du template a utiliser, si celui-ci n'est pas précisé, tout le fichier sera utilisé comme un template.&lt;br /&gt;
&lt;br /&gt;
===bab_toHtml()===&lt;br /&gt;
&lt;br /&gt;
Retourne la chaîne de caractères encodée pour être utilisée en HTML dans un template par exemple&lt;br /&gt;
&lt;br /&gt;
:'''function bab_toHtml($str, $option = BAB_HTML_ENTITIES)'''&lt;br /&gt;
&lt;br /&gt;
* '''$str''' :&lt;br /&gt;
*: chaîne de caractères&lt;br /&gt;
* '''$option''' :&lt;br /&gt;
*:BAB_HTML_ALL		: Une combinaison des options &lt;br /&gt;
*:BAB_HTML_ENTITIES	: Protéger les caractères pour l'affichage html&lt;br /&gt;
*:BAB_HTML_AUTO		: Créer des paragraphes uniquement si le texte contiens des retours à la ligne&lt;br /&gt;
*:BAB_HTML_P		: Les doubles retours à la lignes serons transformés en paragraphes&lt;br /&gt;
*:BAB_HTML_BR		: Les retours à la ligne serons remplacés par des retours à la ligne HTML&lt;br /&gt;
*:BAB_HTML_LINKS	: les url et les adresses email serons remplacées par des liens cliquables &lt;br /&gt;
*:BAB_HTML_JS		: encode les caractères spéciaux pour créer une chaîne de caractères javascript&lt;br /&gt;
*:BAB_HTML_REPLACE	: Transforme les macro $XXX() d'Ovidentia&lt;br /&gt;
&lt;br /&gt;
remarque : pour du texte saisi par l'éditeur WYSIWYG il n'est pas nécessaire d'utiliser cette fonction, l'API permet de récupérer le texte déjà transformé en HTML : [[API editeur]]&lt;br /&gt;
&lt;br /&gt;
===bab_printOvmlTemplate()===&lt;br /&gt;
&lt;br /&gt;
Retourne le contenu du fichier ovml traité par le parser.&lt;br /&gt;
&lt;br /&gt;
:'''function bab_printOvmlTemplate($file, $args=array())'''&lt;br /&gt;
&lt;br /&gt;
* '''$file''' :&lt;br /&gt;
*: Emplacement du fichier OVML&lt;br /&gt;
* '''$args''':&lt;br /&gt;
*: Ce paramètre est optionnel, il permet de spécifier des variables et leurs valeurs qui pourrons être utilisées dans le fichier OVML, par exemple $_GET.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_abbr()===&lt;br /&gt;
&lt;br /&gt;
Retourne une version abrégée de la chaîne passée en paramètre&lt;br /&gt;
&lt;br /&gt;
:'''function bab_abbr($text, $type, $max_length)'''&lt;br /&gt;
&lt;br /&gt;
* '''$text''' :&lt;br /&gt;
*: Chaîne de caractère&lt;br /&gt;
* '''$type''' :&lt;br /&gt;
*: BAB_ABBR_FULL_WORDS : le texte est tronqué si la chaine est trop longue mais sans couper les mots&lt;br /&gt;
*: BAB_ABBR_INITIAL : La plremière lettre de chaque mot en majuscule avec un point après la lettre (initiales)&lt;br /&gt;
* '''$max_length''' :&lt;br /&gt;
*: Longueur maximale de la chaine en nombre de caractères&lt;br /&gt;
&lt;br /&gt;
== API fichiers / Répertoires ==&lt;br /&gt;
===bab_getFileMimeType()===&lt;br /&gt;
&lt;br /&gt;
Retourne le type mime d'un fichier&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getFileMimeType($file)'''&lt;br /&gt;
&lt;br /&gt;
* '''$file''' :&lt;br /&gt;
*: Chemin complet (sur le système) vers le fichier&lt;br /&gt;
&lt;br /&gt;
===bab_getFileContentDisposition()===&lt;br /&gt;
&lt;br /&gt;
Retourne une information de préférence de l'administrateur du système concernant le header HTTP &amp;quot;content-disposition&amp;quot; préconisé lors d'un téléchargement de fichier utilisant un script PHP.&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getFileContentDisposition()'''&lt;br /&gt;
&lt;br /&gt;
===bab_mkdir()===&lt;br /&gt;
&lt;br /&gt;
Création d'un répertoire. La fonction retourne true en cas de succès et false en cas d'échec.&lt;br /&gt;
&lt;br /&gt;
:'''function bab_mkdir($path, $mode='')'''&lt;br /&gt;
&lt;br /&gt;
* '''$path''' :&lt;br /&gt;
*: Chemin complet (sur le système) vers le répertoire à créer&lt;br /&gt;
* '''$mode''' :&lt;br /&gt;
*: Paramètre optionnel, les droits d'accès en octale par exemple 0777&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== API Annuaires ==&lt;br /&gt;
&lt;br /&gt;
Voir l'article : [[API des utilisateurs et des annuaires#Les fiches d'annuaires]]&lt;br /&gt;
&lt;br /&gt;
== API Groupes ==&lt;br /&gt;
&lt;br /&gt;
Voir l'article : [[API des groupes]]&lt;br /&gt;
&lt;br /&gt;
== API Debug ==&lt;br /&gt;
===bab_debug()===&lt;br /&gt;
&lt;br /&gt;
Afficher une information dans la console de debug. Pour activer la console de debug, il faut placer un cookie sur le poste client, en ajoutant debug=1 dans n'importe quelle page d'ovidentia, le cookie sera enregistré avec la sévérité 1. Pour que la console s'affiche, il faut aussi être administrateur. Si un fichier bab_debug.txt existe à la racine du site, les informations serons loggées dans ce fichier sans contraintes de droits d'accès.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:'''function bab_debug($data, $severity = DBG_TRACE)'''&lt;br /&gt;
&lt;br /&gt;
* '''$data''' :&lt;br /&gt;
*: Information a afficher dans la console, $data peut être une chaîne de caractères, un tableau ou un objet&lt;br /&gt;
* '''$severity''' :&lt;br /&gt;
*: Niveau de sévérité du message&lt;br /&gt;
&lt;br /&gt;
===bab_getDebug()===&lt;br /&gt;
&lt;br /&gt;
Cette fonction retourne la console de debug au format HTML, ceci permet d'utiliser le debug dans des popups ou la console n'est pas disponible par défaut.&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getDebug()'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== API Registry ==&lt;br /&gt;
===bab_getRegistryInstance()===&lt;br /&gt;
&lt;br /&gt;
retourne une instance de l'objet bab_registry. Plus d'informations sont disponibles dans documentation : [[Base de registre]]&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getRegistryInstance()'''&lt;br /&gt;
&lt;br /&gt;
== API GET/POST ==&lt;br /&gt;
===bab_rp()===&lt;br /&gt;
&lt;br /&gt;
Retourne une variable de la requête http, la valeur par défaut sera utilisée si le nom de la variable ne peut pas être trouvé dans la liste des variables soumises au script.&lt;br /&gt;
&lt;br /&gt;
bab_rp recherche l'information dans $_GET et $_POST&lt;br /&gt;
&lt;br /&gt;
:'''function bab_rp($name, $default = &amp;quot;&amp;quot;)'''&lt;br /&gt;
&lt;br /&gt;
* '''$name'''&lt;br /&gt;
*: Nom de la variable&lt;br /&gt;
* '''$default'''&lt;br /&gt;
*: Valeur par défaut&lt;br /&gt;
&lt;br /&gt;
===bab_pp()===&lt;br /&gt;
&lt;br /&gt;
Retourne une variable de la requête http, la valeur par défaut sera utilisée si le nom de la variable ne peut pas être trouvé dans la liste des variables soumises au script.&lt;br /&gt;
&lt;br /&gt;
bab_pp recherche l'information dans $_POST&lt;br /&gt;
&lt;br /&gt;
:'''function bab_pp($name, $default = &amp;quot;&amp;quot;)'''&lt;br /&gt;
&lt;br /&gt;
* '''$name'''&lt;br /&gt;
*: Nom de la variable&lt;br /&gt;
* '''$default'''&lt;br /&gt;
*: Valeur par défaut&lt;br /&gt;
&lt;br /&gt;
===bab_gp()===&lt;br /&gt;
&lt;br /&gt;
Retourne une variable de la requête http, la valeur par défaut sera utilisée si le nom de la variable ne peut pas être trouvé dans la liste des variables soumises au script.&lt;br /&gt;
&lt;br /&gt;
bab_gp recherche l'information dans $_GET&lt;br /&gt;
&lt;br /&gt;
:'''function bab_gp($name, $default = &amp;quot;&amp;quot;)'''&lt;br /&gt;
&lt;br /&gt;
* '''$name'''&lt;br /&gt;
*: Nom de la variable&lt;br /&gt;
* '''$default'''&lt;br /&gt;
*: Valeur par défaut&lt;br /&gt;
&lt;br /&gt;
== API Divers ==&lt;br /&gt;
&lt;br /&gt;
===bab_getAddonInfosInstance()===&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getAddonInfosInstance($addon_name)'''&lt;br /&gt;
* '''$addon_name''' :&lt;br /&gt;
*: nom du module&lt;br /&gt;
&lt;br /&gt;
retourne un objet bab_addonInfos correspondant au nom du module passé en paramètre. &lt;br /&gt;
Pour plus de détails, consulter la documentation de l'[[API de gestion d'un module]]&lt;br /&gt;
&lt;br /&gt;
===bab_locale()===&lt;br /&gt;
&lt;br /&gt;
Initialise les informations de localisation en fonction des paramètres de l'utilisateur. Ceci permet de faire de la traduction en utilisant [http://fr.php.net/gettext gettext].&lt;br /&gt;
&lt;br /&gt;
La fonction effectue un appel à [http://fr.php.net/setlocale setlocale] avec en paramètre LC_ALL et la chaine correspondante aux options de langue choisie par l'utilisateur ou l'administrateur.&lt;br /&gt;
&lt;br /&gt;
La fonction retourne false en cas d'erreur ou la chaine de la locale si la valeur a bien été définie. Par exemple la valeur retournée pourra être &amp;quot;fr&amp;quot; ou &amp;quot;fr_FR&amp;quot; ou &amp;quot;fr_FR.utf8&amp;quot; ...&lt;br /&gt;
&lt;br /&gt;
:'''function bab_locale()'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_getActiveSessions()===&lt;br /&gt;
&lt;br /&gt;
Retourne un tableau avec les sessions en cours sur l'installation d'Ovidentia. Pour chaque session, les clefs suivantes sont disponibles :&lt;br /&gt;
&lt;br /&gt;
* id_user&lt;br /&gt;
* user_name&lt;br /&gt;
* user_email&lt;br /&gt;
* session_id&lt;br /&gt;
* remote_addr&lt;br /&gt;
* forwarded_for&lt;br /&gt;
* registration_date&lt;br /&gt;
* previous_login_date&lt;br /&gt;
* login_date&lt;br /&gt;
* last_hit_date&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:'''function bab_getActiveSessions()'''&lt;br /&gt;
&lt;br /&gt;
== API Authentification ==&lt;br /&gt;
===bab_requireCredential()===&lt;br /&gt;
&lt;br /&gt;
L'appel à cette fonction force l'affichage du formulaire d'authentification d'Ovidentia. Après renseignement de l'identifiant et du mot de passe, l'utilisateur est automatiquement redirigé vers la page d'origine où bab_requireCredential() a été appelée.&lt;br /&gt;
&lt;br /&gt;
Exemple d'utilisation : l'utilisateur courant se situe sur une page restreinte par des droits d'accès. On a vérifié que l'utilisateur courant n'avait pas les droits nécessaires : on cherche donc à l'amener sur le formulaire d'authentification.&lt;br /&gt;
&lt;br /&gt;
Cette fonction peut s'avérer très utile dans le cas d'urls externes. Par exemple : un utilisateur reçoit un e-mail contenant une adresse url vers le portail Ovidentia. Si bab_requireCredential() a été utilisé, l'utilisateur sera redirigé vers le formulaire d'authentification s'il n'avait pas les droits nécessaires.&lt;br /&gt;
&lt;br /&gt;
'''function bab_requireCredential($message)'''&lt;br /&gt;
&lt;br /&gt;
* '''$message'''&lt;br /&gt;
*: Message d'erreurs qui sera affiché avec le formulaire d'authentification&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===bab_requireAccess===&lt;br /&gt;
&lt;br /&gt;
L'appel à cette fonction force l'affichage du formulaire d'authentification d'Ovidentia. Après renseignement de l'identifiant et du mot de passe, l'utilisateur est automatiquement redirigé vers la page d'origine où bab_requireAccess() a été appelée.&lt;br /&gt;
&lt;br /&gt;
Cette fonction est quasi-similaire à bab_requireCredential(). Elle contient cependant 2 paramètres supplémentaires permettant de faciliter son utilisation avec des droits ACL (tables *_groups).&lt;br /&gt;
&lt;br /&gt;
'''function bab_requireAccess($tables, $idObject, $loginMessage)'''&lt;br /&gt;
&lt;br /&gt;
* '''$tables'''&lt;br /&gt;
*: nom de la table ACL ou tableau contenant les noms des tables ACL à tester. Attention : la redirection vers le formulaire d'authentification sera effectuée si l'utilisateur n'a pas accès dans l'un des droits d'accès (OU).&lt;br /&gt;
* '''$idObject'''&lt;br /&gt;
*: Identifiant de l'objet à tester avec les tables ACL&lt;br /&gt;
* '''$loginMessage'''&lt;br /&gt;
*: Message d'erreurs qui sera affiché avec le formulaire d'authentification&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4628</id>
		<title>Structures des tables de données d'Ovidentia</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4628"/>
				<updated>2009-09-08T09:36:51Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Table bab_topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cet article est en cours de rédaction. Son contenu n'est pas exhaustif.&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_calendar ===&lt;br /&gt;
contient les agendas (les noms des agendas ne se trouvent pas dans cette table). La table est liée aux tables bab_cal_public, bab_cal_resources ou bab_cal_events (il n'y a pas de tables pour les agendas personnels)&lt;br /&gt;
* id : identifiant d'un agenda&lt;br /&gt;
* owner : correspond pour un agenda de ressources à l'identifiant de l'enregistrement dans la table bab_cal_resources&lt;br /&gt;
* type : type de l'agenda.&lt;br /&gt;
Agenda  : 1&lt;br /&gt;
Agenda  : 2&lt;br /&gt;
Agenda de ressources : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_categories  ===&lt;br /&gt;
contient les catégories d'événements&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* name : nom de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* bgcolor : couleur héxa de la catégorie (ex : CC0000)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events ===&lt;br /&gt;
contient les événements des agendas (tous types d'agendas confondus). Cette table ne permet pas de savoir dans quels agendas sont publiés les événements car un événement peut faire partie de pluieurs agendas : voir table bab_cal_events_owners.&lt;br /&gt;
* id : identifiant de l'événement&lt;br /&gt;
* title : titre de l'événement&lt;br /&gt;
* description : description de l'événement&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* location : lieu de l'événement&lt;br /&gt;
* start_date : date et heure de début de l'événement&lt;br /&gt;
* end_date : date et heure de fin de l'événement&lt;br /&gt;
* id_cat : identifiant de la catégorie d'événement&lt;br /&gt;
* id_creator : identifiant de l'auteur de l'événement&lt;br /&gt;
* hash : rempli uniquement lorsque l'événement est répétitif (ex : R_4697c6374e306b988eff36a868ff6f2c)&lt;br /&gt;
* color : couleur de l'événement (ex : FF0033)&lt;br /&gt;
* bprivate : indique si l'événement est privé. Valeur possible : Y ou N&lt;br /&gt;
* block : indique si l'événement est verrouillé. Valeur possible : Y ou N&lt;br /&gt;
* bfree : indique si l'événement est libre. Valeur possible : Y ou N&lt;br /&gt;
* date_modification : date de dernière modification de l'événement&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* uuid : identifiant unique de l'événement (utilisé pour des outils de synchronisation externe)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_notes ===&lt;br /&gt;
contient les notes privées associées aux événements d'agendas par les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur&lt;br /&gt;
* note : contenu de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_owners ===&lt;br /&gt;
lie les événements d'agendas (bab_cal_events) avec les agendas (bab_calendars)&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_cal : identifiant de l'agenda&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_reminders ===&lt;br /&gt;
contient les rappels d'événements pour les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur qui veut le rappel&lt;br /&gt;
* day : nombre de jours avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* hour : nombre d'heures avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* minute : nombre de minutes avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* bemail : vaut Y si les rappels doivent être envoyés par e-mails (voir options dans config.php), sinon N&lt;br /&gt;
* processed : vaut Y si l'utilisateur a demandé à cacher le rappel de sa fenêtre, sinon N par défaut&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_public ===&lt;br /&gt;
contient les agendas collectifs&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : description de l'agenda&lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_resources ===&lt;br /&gt;
contient les agendas de ressources&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : &lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
* availability_lock : vaut 1 si on veut empêcher la création d'événements en surbooking, sinon 0.&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_user_options ===&lt;br /&gt;
contient les options privés des utilisateurs sur l'ensemble des agendas&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles ===&lt;br /&gt;
contient les articles&lt;br /&gt;
* id : identifiant de l'article&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se situe l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de l'article&lt;br /&gt;
* date : date de création de l'article&lt;br /&gt;
* date_publication : date de publication de l'article&lt;br /&gt;
* date_archiving : date d'archivage de l'article&lt;br /&gt;
* date_modification : date de dernière modification de l'article&lt;br /&gt;
* title : titre de l'article&lt;br /&gt;
* head : introduction de l'article (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps de l'article&lt;br /&gt;
* body_format : format du texte de la description : html...&lt;br /&gt;
* archive : indique si l'article est une archive. Valeurs possibles : N ou Y&lt;br /&gt;
* lang : langue de l'article (fr, en...)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'article dans le thème par rapport aux autres articles du thème&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles_images ===&lt;br /&gt;
contient les images associées aux articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts ===&lt;br /&gt;
contient les brouillons d'articles (Rappel : avant d'être soumis ou approuvés, les textes sont des brouillons. Les brouillons se transforment en articles dès qu'ils sont soumis et approuvés)&lt;br /&gt;
* id : identifiant du brouillon&lt;br /&gt;
* id_author : identifiant de l'auteur du brouillon&lt;br /&gt;
* date_creation : date de création du brouillon&lt;br /&gt;
* date_modification : date de dernière modification du brouillon&lt;br /&gt;
* date_submission : date de soumission du brouillon&lt;br /&gt;
* date_publication : date de publication du brouillon&lt;br /&gt;
* date_archiving : date d'archivage du brouillon&lt;br /&gt;
* title : titre du brouillon&lt;br /&gt;
* head : introduction du brouillon (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps du brouillon&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* lang : langue du brouillon (fr, en...)&lt;br /&gt;
* trash : indique si le brouillon est dans la corbeille ou pas. Valeurs possibles : N ou Y&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se trouve le brouillon (peut être vide)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* hpage_private : vaut Y si l'article est proposé pour les pages d'accueil privées&lt;br /&gt;
* hpage_public : vaut Y si l'article est proposé pour les pages d'accueil publiques&lt;br /&gt;
* notify_members : vaut Y l'option 'notifier les lecteurs' est cochée&lt;br /&gt;
* idfai : identifiant de l'instance en cours du schéma d'approbation&lt;br /&gt;
* result : statut d'approbation (type entier). Valeurs possibles : 0, 1, 2, 3&lt;br /&gt;
0 : statut par défaut si pas d'approbation en cours&lt;br /&gt;
1 : l'article brouillon est en attente d'approbation&lt;br /&gt;
2 : l'article brouillon est approuvé (Remarque : ce statut n'est jamais utilisé car un article brouillon approuvé se transforme en article)&lt;br /&gt;
3 : l'article brouillon a été refusé&lt;br /&gt;
* id_article : identifiant de l'article si le brouillon est une modification d'un article existant&lt;br /&gt;
* id_anonymous : identifiant de l'auteur si l'auteur n'est pas authentifié. C'est l'identifiant d'un enregistrement dans la table BAB_USERS_LOG_TBL.&lt;br /&gt;
* approbation : vaut 0, 1 ou 2&lt;br /&gt;
* update_datemodif : vaut Y si&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_files ===&lt;br /&gt;
contient les fichiers joints aux brouillons d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* name : nom du fichier (Ex : gaston.jpg)&lt;br /&gt;
* description : description du fichier&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier par rapport aux autres fichiers joints de l'article brouillon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_images ===&lt;br /&gt;
contient les images associées aux brouillons d'articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_notes ===&lt;br /&gt;
contient les commentaires des approbateurs qui ont refusés les articles brouillons (Pour le publicateur, les commentaires sont affichées en prévisualisation de l'article, depuis la liste des brouillons (lien Publication/onglet Mes Articles si l'article est en cours d'approbation))&lt;br /&gt;
* id : identifiant de la note&lt;br /&gt;
* id_draft : identifiant de l'article brouillon associé&lt;br /&gt;
* content : contenu texte de la note&lt;br /&gt;
* id_author : identifiant de l'auteur de la note&lt;br /&gt;
* date_note : date de création de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles brouillons&lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_files ===&lt;br /&gt;
contient les fichiers joints des articles&lt;br /&gt;
* id : identifiant du fichier joint à l'article&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* name : &lt;br /&gt;
* description : description du fichier joint&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier joint avec les autres fichiers joints d'un même article&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_log ===&lt;br /&gt;
contient l'historique des modifications d'articles&lt;br /&gt;
* id : identifiant de la modification&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de la modification&lt;br /&gt;
* date_log : date et heure de la modification&lt;br /&gt;
* action_log : statut de la modification. Valeurs possibles : lock, unlock, commit, refused, accepted.&lt;br /&gt;
Lorsqu'on saisit la raison de la modification avant de modifier un article, le statut est lock.&lt;br /&gt;
Lorsqu'on soumet un article, le statut est commit. Si l'article ne passe pas par approbation, il y a immédiatement un autre enregistrement avec le statut accepted. commit et accepted sont aussi utilisés lorsqu'on modifie un brouillon puis qu'on soumet.&lt;br /&gt;
Lorsqu'on modifie un article et qu'on l'enregistre (on ne le soumet pas), seul un enregistrement est créé : celui avec le statut lock et la raison de la modification.&lt;br /&gt;
Il n'y a pas d'enregistrements si on créé un article et qu'il ne doit pas être approuvé.&lt;br /&gt;
Lorsqu'on supprime un brouillon, le statut est unlock.&lt;br /&gt;
* art_log : description de la modification. Contient le texte saisit comme raison de la modification &lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles&lt;br /&gt;
* id_art : identifiant de l'article&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_comments ===&lt;br /&gt;
contient les commentaires des articles&lt;br /&gt;
* id : identifiant du commentaire&lt;br /&gt;
* id_parent : identifiant du commentaire parent&lt;br /&gt;
* id_article : identifiant de l'article associé au commentaire&lt;br /&gt;
* id_topic : identifiant du thème d'articles dans lequel est créé l'article&lt;br /&gt;
* id_author : auteur du commentaire&lt;br /&gt;
* id_last_editor : identifiant du dernier auteur modificateur&lt;br /&gt;
* date : date de création du commentaire&lt;br /&gt;
* last_update : date de la dernière modification du commentaire&lt;br /&gt;
* subject : titre du commentaire&lt;br /&gt;
* message : contenu texte du commentaire&lt;br /&gt;
* confirmed : Y si le commentaire est approuvé, N sinon&lt;br /&gt;
* name : nom de l'auteur du commentaire&lt;br /&gt;
* email : email de l'auteur du commentaire&lt;br /&gt;
* idfai : identifiant de l'instance du schéma d'approbation utilisé pour ce commentaire&lt;br /&gt;
* lang : langue du commentaire (fr, en...)&lt;br /&gt;
* article_rating : note attribuée à l'article. Valeurs possibles : 0, 1, 2, 3, 4, 5&lt;br /&gt;
0 : l'article n'est pas noté&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topcat_order ===&lt;br /&gt;
contient les numéros pour les tris d'affichage des catégories et des thèmes. Attention, sous une catégorie parente, il est possible d'ordonner les sous-catégories avec les sous-thèmes (il y a donc des mélanges d'où la colonne type).&lt;br /&gt;
Rappel : une catégorie est un conteneur de sous-catégories ou de thèmes.&lt;br /&gt;
* id : identifiant de l'ordre&lt;br /&gt;
* id_topcat : identifiant de la catégorie ou du thème que l'on veut ordonner&lt;br /&gt;
* type : 1 si l'ordre est définit pour une catégorie d'articles. 2 si l'ordre est défini pour un thème d'articles.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'objet par rapport aux autres objets de la catégorie parente (id_parent) &lt;br /&gt;
* id_parent : identifiant de la catégorie d'articles parente d'idtopcat. C'est la catégorie dans laquelle on veut ordonner notre objet. Vaut 0 si l'objet qu'on veut trier est une catégorie de premier niveau (pas de catégorie parente).&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics ===&lt;br /&gt;
contient les thèmes d'articles&lt;br /&gt;
* id : identifiant du thème&lt;br /&gt;
* category : nom du thème&lt;br /&gt;
* description : description du thème&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* id_cat : identifiant de la catégorie dans laquelle se trouve le thème&lt;br /&gt;
* idsaart : identifiant du schéma d'approbation à la création d'articles&lt;br /&gt;
* idsacom : identifiant du schéma d'approbation des commentaires&lt;br /&gt;
* idsa_update : identifiant du schéma d'approbation à la modification des articles&lt;br /&gt;
* notify : Y si les auteurs peuvent notifier les lecteurs par email, N sinon&lt;br /&gt;
* lang : langue du thème (fr, en...)&lt;br /&gt;
* article_tmpl : nom du modèle d'articles&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
* restrict_access : Y si les auteurs peuvent restreindre l'accès aux articles, N sinon&lt;br /&gt;
* allow_hpages : Y si on permet aux auteurs de proposer leurs articles pour les pages d'accueil, N sinon&lt;br /&gt;
* allow_pubdates : Y si on permet aux auteurs de spécifier des dates de publication, N sinon&lt;br /&gt;
* allow_attachments : Y si on permet aux auteurs de joindre des fichiers avec leurs articles, N sinon&lt;br /&gt;
* allow_update : entier indiquant si les auteurs peuvent modifier leurs articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les auteurs ne peuvent pas modifier leurs articles&lt;br /&gt;
1 : les auteurs peuvent modifier leurs articles, mais avec approbation&lt;br /&gt;
2 : les auteurs peuvent modifier leurs articles et sans approbation&lt;br /&gt;
* max_articles : nombre maximum d'articles sur la page des archives&lt;br /&gt;
* allow_manupdate : entier indiquant si les gestionnaires peuvent modifier les articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les gestionnaires ne peuvent pas modifier les articles&lt;br /&gt;
1 : les gestionnaires peuvent modifier les articles, mais avec approbation&lt;br /&gt;
2 : les gestionnaires peuvent modifier les articles et sans approbation&lt;br /&gt;
* auto_approbation : Y si on approuve automatiquement le contributeur dans le cas où il fait partie de la première étape du schéma d'approbation, N sinon&lt;br /&gt;
* busetags : Y si on utilise les mots-clés du thésaurus, N sinon&lt;br /&gt;
* allow_addImg : Y si on permet aux auteurs d'associer une image à un article&lt;br /&gt;
* allow_article_rating : Y si on permet aux auteurs des commentaires de noter les articles, N sinon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicscom_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant faire des commentaires sur le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsman_groups ===&lt;br /&gt;
Table de droits d'accès : groupes gestionnaires du thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsmod_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant modifier des articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicssub_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant soumettre de nouveaux articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsview_groups ===&lt;br /&gt;
Table de droist d'accès : groupes pouvant voir les articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group :&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories ===&lt;br /&gt;
contient les catégories d'articles (conteneurs des thèmes d'articles)&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* title : titre de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* enabled : vaut Y si la section de la catégorie est activée, N sinon&lt;br /&gt;
* template : nom du patron de section&lt;br /&gt;
* id_dgowner : identifiant de la délégation où se trouve la catégorie, 0 si dans tout le site&lt;br /&gt;
* optional : utilisation inconnue !!!&lt;br /&gt;
* id_parent : identifiant de la catégorie parente&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories_images ===&lt;br /&gt;
contient les images associées aux catégories d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idCategory : identifiant de la catégorie d'articles&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_images ===&lt;br /&gt;
contient les images associées aux thèmes d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idTopic : identifiant du thème&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4627</id>
		<title>Structures des tables de données d'Ovidentia</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4627"/>
				<updated>2009-09-08T09:36:29Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Table bab_art_drafts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cet article est en cours de rédaction. Son contenu n'est pas exhaustif.&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_calendar ===&lt;br /&gt;
contient les agendas (les noms des agendas ne se trouvent pas dans cette table). La table est liée aux tables bab_cal_public, bab_cal_resources ou bab_cal_events (il n'y a pas de tables pour les agendas personnels)&lt;br /&gt;
* id : identifiant d'un agenda&lt;br /&gt;
* owner : correspond pour un agenda de ressources à l'identifiant de l'enregistrement dans la table bab_cal_resources&lt;br /&gt;
* type : type de l'agenda.&lt;br /&gt;
Agenda  : 1&lt;br /&gt;
Agenda  : 2&lt;br /&gt;
Agenda de ressources : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_categories  ===&lt;br /&gt;
contient les catégories d'événements&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* name : nom de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* bgcolor : couleur héxa de la catégorie (ex : CC0000)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events ===&lt;br /&gt;
contient les événements des agendas (tous types d'agendas confondus). Cette table ne permet pas de savoir dans quels agendas sont publiés les événements car un événement peut faire partie de pluieurs agendas : voir table bab_cal_events_owners.&lt;br /&gt;
* id : identifiant de l'événement&lt;br /&gt;
* title : titre de l'événement&lt;br /&gt;
* description : description de l'événement&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* location : lieu de l'événement&lt;br /&gt;
* start_date : date et heure de début de l'événement&lt;br /&gt;
* end_date : date et heure de fin de l'événement&lt;br /&gt;
* id_cat : identifiant de la catégorie d'événement&lt;br /&gt;
* id_creator : identifiant de l'auteur de l'événement&lt;br /&gt;
* hash : rempli uniquement lorsque l'événement est répétitif (ex : R_4697c6374e306b988eff36a868ff6f2c)&lt;br /&gt;
* color : couleur de l'événement (ex : FF0033)&lt;br /&gt;
* bprivate : indique si l'événement est privé. Valeur possible : Y ou N&lt;br /&gt;
* block : indique si l'événement est verrouillé. Valeur possible : Y ou N&lt;br /&gt;
* bfree : indique si l'événement est libre. Valeur possible : Y ou N&lt;br /&gt;
* date_modification : date de dernière modification de l'événement&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* uuid : identifiant unique de l'événement (utilisé pour des outils de synchronisation externe)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_notes ===&lt;br /&gt;
contient les notes privées associées aux événements d'agendas par les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur&lt;br /&gt;
* note : contenu de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_owners ===&lt;br /&gt;
lie les événements d'agendas (bab_cal_events) avec les agendas (bab_calendars)&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_cal : identifiant de l'agenda&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_reminders ===&lt;br /&gt;
contient les rappels d'événements pour les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur qui veut le rappel&lt;br /&gt;
* day : nombre de jours avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* hour : nombre d'heures avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* minute : nombre de minutes avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* bemail : vaut Y si les rappels doivent être envoyés par e-mails (voir options dans config.php), sinon N&lt;br /&gt;
* processed : vaut Y si l'utilisateur a demandé à cacher le rappel de sa fenêtre, sinon N par défaut&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_public ===&lt;br /&gt;
contient les agendas collectifs&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : description de l'agenda&lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_resources ===&lt;br /&gt;
contient les agendas de ressources&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : &lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
* availability_lock : vaut 1 si on veut empêcher la création d'événements en surbooking, sinon 0.&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_user_options ===&lt;br /&gt;
contient les options privés des utilisateurs sur l'ensemble des agendas&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles ===&lt;br /&gt;
contient les articles&lt;br /&gt;
* id : identifiant de l'article&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se situe l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de l'article&lt;br /&gt;
* date : date de création de l'article&lt;br /&gt;
* date_publication : date de publication de l'article&lt;br /&gt;
* date_archiving : date d'archivage de l'article&lt;br /&gt;
* date_modification : date de dernière modification de l'article&lt;br /&gt;
* title : titre de l'article&lt;br /&gt;
* head : introduction de l'article (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps de l'article&lt;br /&gt;
* body_format : format du texte de la description : html...&lt;br /&gt;
* archive : indique si l'article est une archive. Valeurs possibles : N ou Y&lt;br /&gt;
* lang : langue de l'article (fr, en...)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'article dans le thème par rapport aux autres articles du thème&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles_images ===&lt;br /&gt;
contient les images associées aux articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts ===&lt;br /&gt;
contient les brouillons d'articles (Rappel : avant d'être soumis ou approuvés, les textes sont des brouillons. Les brouillons se transforment en articles dès qu'ils sont soumis et approuvés)&lt;br /&gt;
* id : identifiant du brouillon&lt;br /&gt;
* id_author : identifiant de l'auteur du brouillon&lt;br /&gt;
* date_creation : date de création du brouillon&lt;br /&gt;
* date_modification : date de dernière modification du brouillon&lt;br /&gt;
* date_submission : date de soumission du brouillon&lt;br /&gt;
* date_publication : date de publication du brouillon&lt;br /&gt;
* date_archiving : date d'archivage du brouillon&lt;br /&gt;
* title : titre du brouillon&lt;br /&gt;
* head : introduction du brouillon (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps du brouillon&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* lang : langue du brouillon (fr, en...)&lt;br /&gt;
* trash : indique si le brouillon est dans la corbeille ou pas. Valeurs possibles : N ou Y&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se trouve le brouillon (peut être vide)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* hpage_private : vaut Y si l'article est proposé pour les pages d'accueil privées&lt;br /&gt;
* hpage_public : vaut Y si l'article est proposé pour les pages d'accueil publiques&lt;br /&gt;
* notify_members : vaut Y l'option 'notifier les lecteurs' est cochée&lt;br /&gt;
* idfai : identifiant de l'instance en cours du schéma d'approbation&lt;br /&gt;
* result : statut d'approbation (type entier). Valeurs possibles : 0, 1, 2, 3&lt;br /&gt;
0 : statut par défaut si pas d'approbation en cours&lt;br /&gt;
1 : l'article brouillon est en attente d'approbation&lt;br /&gt;
2 : l'article brouillon est approuvé (Remarque : ce statut n'est jamais utilisé car un article brouillon approuvé se transforme en article)&lt;br /&gt;
3 : l'article brouillon a été refusé&lt;br /&gt;
* id_article : identifiant de l'article si le brouillon est une modification d'un article existant&lt;br /&gt;
* id_anonymous : identifiant de l'auteur si l'auteur n'est pas authentifié. C'est l'identifiant d'un enregistrement dans la table BAB_USERS_LOG_TBL.&lt;br /&gt;
* approbation : vaut 0, 1 ou 2&lt;br /&gt;
* update_datemodif : vaut Y si&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_files ===&lt;br /&gt;
contient les fichiers joints aux brouillons d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* name : nom du fichier (Ex : gaston.jpg)&lt;br /&gt;
* description : description du fichier&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier par rapport aux autres fichiers joints de l'article brouillon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_images ===&lt;br /&gt;
contient les images associées aux brouillons d'articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_notes ===&lt;br /&gt;
contient les commentaires des approbateurs qui ont refusés les articles brouillons (Pour le publicateur, les commentaires sont affichées en prévisualisation de l'article, depuis la liste des brouillons (lien Publication/onglet Mes Articles si l'article est en cours d'approbation))&lt;br /&gt;
* id : identifiant de la note&lt;br /&gt;
* id_draft : identifiant de l'article brouillon associé&lt;br /&gt;
* content : contenu texte de la note&lt;br /&gt;
* id_author : identifiant de l'auteur de la note&lt;br /&gt;
* date_note : date de création de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles brouillons&lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_files ===&lt;br /&gt;
contient les fichiers joints des articles&lt;br /&gt;
* id : identifiant du fichier joint à l'article&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* name : &lt;br /&gt;
* description : description du fichier joint&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier joint avec les autres fichiers joints d'un même article&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_log ===&lt;br /&gt;
contient l'historique des modifications d'articles&lt;br /&gt;
* id : identifiant de la modification&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de la modification&lt;br /&gt;
* date_log : date et heure de la modification&lt;br /&gt;
* action_log : statut de la modification. Valeurs possibles : lock, unlock, commit, refused, accepted.&lt;br /&gt;
Lorsqu'on saisit la raison de la modification avant de modifier un article, le statut est lock.&lt;br /&gt;
Lorsqu'on soumet un article, le statut est commit. Si l'article ne passe pas par approbation, il y a immédiatement un autre enregistrement avec le statut accepted. commit et accepted sont aussi utilisés lorsqu'on modifie un brouillon puis qu'on soumet.&lt;br /&gt;
Lorsqu'on modifie un article et qu'on l'enregistre (on ne le soumet pas), seul un enregistrement est créé : celui avec le statut lock et la raison de la modification.&lt;br /&gt;
Il n'y a pas d'enregistrements si on créé un article et qu'il ne doit pas être approuvé.&lt;br /&gt;
Lorsqu'on supprime un brouillon, le statut est unlock.&lt;br /&gt;
* art_log : description de la modification. Contient le texte saisit comme raison de la modification &lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles&lt;br /&gt;
* id_art : identifiant de l'article&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_comments ===&lt;br /&gt;
contient les commentaires des articles&lt;br /&gt;
* id : identifiant du commentaire&lt;br /&gt;
* id_parent : identifiant du commentaire parent&lt;br /&gt;
* id_article : identifiant de l'article associé au commentaire&lt;br /&gt;
* id_topic : identifiant du thème d'articles dans lequel est créé l'article&lt;br /&gt;
* id_author : auteur du commentaire&lt;br /&gt;
* id_last_editor : identifiant du dernier auteur modificateur&lt;br /&gt;
* date : date de création du commentaire&lt;br /&gt;
* last_update : date de la dernière modification du commentaire&lt;br /&gt;
* subject : titre du commentaire&lt;br /&gt;
* message : contenu texte du commentaire&lt;br /&gt;
* confirmed : Y si le commentaire est approuvé, N sinon&lt;br /&gt;
* name : nom de l'auteur du commentaire&lt;br /&gt;
* email : email de l'auteur du commentaire&lt;br /&gt;
* idfai : identifiant de l'instance du schéma d'approbation utilisé pour ce commentaire&lt;br /&gt;
* lang : langue du commentaire (fr, en...)&lt;br /&gt;
* article_rating : note attribuée à l'article. Valeurs possibles : 0, 1, 2, 3, 4, 5&lt;br /&gt;
0 : l'article n'est pas noté&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topcat_order ===&lt;br /&gt;
contient les numéros pour les tris d'affichage des catégories et des thèmes. Attention, sous une catégorie parente, il est possible d'ordonner les sous-catégories avec les sous-thèmes (il y a donc des mélanges d'où la colonne type).&lt;br /&gt;
Rappel : une catégorie est un conteneur de sous-catégories ou de thèmes.&lt;br /&gt;
* id : identifiant de l'ordre&lt;br /&gt;
* id_topcat : identifiant de la catégorie ou du thème que l'on veut ordonner&lt;br /&gt;
* type : 1 si l'ordre est définit pour une catégorie d'articles. 2 si l'ordre est défini pour un thème d'articles.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'objet par rapport aux autres objets de la catégorie parente (id_parent) &lt;br /&gt;
* id_parent : identifiant de la catégorie d'articles parente d'idtopcat. C'est la catégorie dans laquelle on veut ordonner notre objet. Vaut 0 si l'objet qu'on veut trier est une catégorie de premier niveau (pas de catégorie parente).&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics ===&lt;br /&gt;
contient les thèmes d'articles&lt;br /&gt;
* id : identifiant du thème&lt;br /&gt;
* category : nom du thème&lt;br /&gt;
* description : description du thème&lt;br /&gt;
* id_cat : identifiant de la catégorie dans laquelle se trouve le thème&lt;br /&gt;
* idsaart : identifiant du schéma d'approbation à la création d'articles&lt;br /&gt;
* idsacom : identifiant du schéma d'approbation des commentaires&lt;br /&gt;
* idsa_update : identifiant du schéma d'approbation à la modification des articles&lt;br /&gt;
* notify : Y si les auteurs peuvent notifier les lecteurs par email, N sinon&lt;br /&gt;
* lang : langue du thème (fr, en...)&lt;br /&gt;
* article_tmpl : nom du modèle d'articles&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
* restrict_access : Y si les auteurs peuvent restreindre l'accès aux articles, N sinon&lt;br /&gt;
* allow_hpages : Y si on permet aux auteurs de proposer leurs articles pour les pages d'accueil, N sinon&lt;br /&gt;
* allow_pubdates : Y si on permet aux auteurs de spécifier des dates de publication, N sinon&lt;br /&gt;
* allow_attachments : Y si on permet aux auteurs de joindre des fichiers avec leurs articles, N sinon&lt;br /&gt;
* allow_update : entier indiquant si les auteurs peuvent modifier leurs articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les auteurs ne peuvent pas modifier leurs articles&lt;br /&gt;
1 : les auteurs peuvent modifier leurs articles, mais avec approbation&lt;br /&gt;
2 : les auteurs peuvent modifier leurs articles et sans approbation&lt;br /&gt;
* max_articles : nombre maximum d'articles sur la page des archives&lt;br /&gt;
* allow_manupdate : entier indiquant si les gestionnaires peuvent modifier les articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les gestionnaires ne peuvent pas modifier les articles&lt;br /&gt;
1 : les gestionnaires peuvent modifier les articles, mais avec approbation&lt;br /&gt;
2 : les gestionnaires peuvent modifier les articles et sans approbation&lt;br /&gt;
* auto_approbation : Y si on approuve automatiquement le contributeur dans le cas où il fait partie de la première étape du schéma d'approbation, N sinon&lt;br /&gt;
* busetags : Y si on utilise les mots-clés du thésaurus, N sinon&lt;br /&gt;
* allow_addImg : Y si on permet aux auteurs d'associer une image à un article&lt;br /&gt;
* allow_article_rating : Y si on permet aux auteurs des commentaires de noter les articles, N sinon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicscom_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant faire des commentaires sur le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsman_groups ===&lt;br /&gt;
Table de droits d'accès : groupes gestionnaires du thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsmod_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant modifier des articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicssub_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant soumettre de nouveaux articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsview_groups ===&lt;br /&gt;
Table de droist d'accès : groupes pouvant voir les articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group :&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories ===&lt;br /&gt;
contient les catégories d'articles (conteneurs des thèmes d'articles)&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* title : titre de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* enabled : vaut Y si la section de la catégorie est activée, N sinon&lt;br /&gt;
* template : nom du patron de section&lt;br /&gt;
* id_dgowner : identifiant de la délégation où se trouve la catégorie, 0 si dans tout le site&lt;br /&gt;
* optional : utilisation inconnue !!!&lt;br /&gt;
* id_parent : identifiant de la catégorie parente&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories_images ===&lt;br /&gt;
contient les images associées aux catégories d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idCategory : identifiant de la catégorie d'articles&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_images ===&lt;br /&gt;
contient les images associées aux thèmes d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idTopic : identifiant du thème&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4626</id>
		<title>Structures des tables de données d'Ovidentia</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4626"/>
				<updated>2009-09-08T09:35:55Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Table bab_articles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cet article est en cours de rédaction. Son contenu n'est pas exhaustif.&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_calendar ===&lt;br /&gt;
contient les agendas (les noms des agendas ne se trouvent pas dans cette table). La table est liée aux tables bab_cal_public, bab_cal_resources ou bab_cal_events (il n'y a pas de tables pour les agendas personnels)&lt;br /&gt;
* id : identifiant d'un agenda&lt;br /&gt;
* owner : correspond pour un agenda de ressources à l'identifiant de l'enregistrement dans la table bab_cal_resources&lt;br /&gt;
* type : type de l'agenda.&lt;br /&gt;
Agenda  : 1&lt;br /&gt;
Agenda  : 2&lt;br /&gt;
Agenda de ressources : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_categories  ===&lt;br /&gt;
contient les catégories d'événements&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* name : nom de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* bgcolor : couleur héxa de la catégorie (ex : CC0000)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events ===&lt;br /&gt;
contient les événements des agendas (tous types d'agendas confondus). Cette table ne permet pas de savoir dans quels agendas sont publiés les événements car un événement peut faire partie de pluieurs agendas : voir table bab_cal_events_owners.&lt;br /&gt;
* id : identifiant de l'événement&lt;br /&gt;
* title : titre de l'événement&lt;br /&gt;
* description : description de l'événement&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* location : lieu de l'événement&lt;br /&gt;
* start_date : date et heure de début de l'événement&lt;br /&gt;
* end_date : date et heure de fin de l'événement&lt;br /&gt;
* id_cat : identifiant de la catégorie d'événement&lt;br /&gt;
* id_creator : identifiant de l'auteur de l'événement&lt;br /&gt;
* hash : rempli uniquement lorsque l'événement est répétitif (ex : R_4697c6374e306b988eff36a868ff6f2c)&lt;br /&gt;
* color : couleur de l'événement (ex : FF0033)&lt;br /&gt;
* bprivate : indique si l'événement est privé. Valeur possible : Y ou N&lt;br /&gt;
* block : indique si l'événement est verrouillé. Valeur possible : Y ou N&lt;br /&gt;
* bfree : indique si l'événement est libre. Valeur possible : Y ou N&lt;br /&gt;
* date_modification : date de dernière modification de l'événement&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* uuid : identifiant unique de l'événement (utilisé pour des outils de synchronisation externe)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_notes ===&lt;br /&gt;
contient les notes privées associées aux événements d'agendas par les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur&lt;br /&gt;
* note : contenu de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_owners ===&lt;br /&gt;
lie les événements d'agendas (bab_cal_events) avec les agendas (bab_calendars)&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_cal : identifiant de l'agenda&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_reminders ===&lt;br /&gt;
contient les rappels d'événements pour les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur qui veut le rappel&lt;br /&gt;
* day : nombre de jours avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* hour : nombre d'heures avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* minute : nombre de minutes avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* bemail : vaut Y si les rappels doivent être envoyés par e-mails (voir options dans config.php), sinon N&lt;br /&gt;
* processed : vaut Y si l'utilisateur a demandé à cacher le rappel de sa fenêtre, sinon N par défaut&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_public ===&lt;br /&gt;
contient les agendas collectifs&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : description de l'agenda&lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_resources ===&lt;br /&gt;
contient les agendas de ressources&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : &lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
* availability_lock : vaut 1 si on veut empêcher la création d'événements en surbooking, sinon 0.&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_user_options ===&lt;br /&gt;
contient les options privés des utilisateurs sur l'ensemble des agendas&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles ===&lt;br /&gt;
contient les articles&lt;br /&gt;
* id : identifiant de l'article&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se situe l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de l'article&lt;br /&gt;
* date : date de création de l'article&lt;br /&gt;
* date_publication : date de publication de l'article&lt;br /&gt;
* date_archiving : date d'archivage de l'article&lt;br /&gt;
* date_modification : date de dernière modification de l'article&lt;br /&gt;
* title : titre de l'article&lt;br /&gt;
* head : introduction de l'article (obligatoire)&lt;br /&gt;
* head_format : format du texte de la description : html...&lt;br /&gt;
* body : corps de l'article&lt;br /&gt;
* body_format : format du texte de la description : html...&lt;br /&gt;
* archive : indique si l'article est une archive. Valeurs possibles : N ou Y&lt;br /&gt;
* lang : langue de l'article (fr, en...)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'article dans le thème par rapport aux autres articles du thème&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles_images ===&lt;br /&gt;
contient les images associées aux articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts ===&lt;br /&gt;
contient les brouillons d'articles (Rappel : avant d'être soumis ou approuvés, les textes sont des brouillons. Les brouillons se transforment en articles dès qu'ils sont soumis et approuvés)&lt;br /&gt;
* id : identifiant du brouillon&lt;br /&gt;
* id_author : identifiant de l'auteur du brouillon&lt;br /&gt;
* date_creation : date de création du brouillon&lt;br /&gt;
* date_modification : date de dernière modification du brouillon&lt;br /&gt;
* date_submission : date de soumission du brouillon&lt;br /&gt;
* date_publication : date de publication du brouillon&lt;br /&gt;
* date_archiving : date d'archivage du brouillon&lt;br /&gt;
* title : titre du brouillon&lt;br /&gt;
* head : introduction du brouillon (obligatoire)&lt;br /&gt;
* body : corps du brouillon&lt;br /&gt;
* lang : langue du brouillon (fr, en...)&lt;br /&gt;
* trash : indique si le brouillon est dans la corbeille ou pas. Valeurs possibles : N ou Y&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se trouve le brouillon (peut être vide)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* hpage_private : vaut Y si l'article est proposé pour les pages d'accueil privées&lt;br /&gt;
* hpage_public : vaut Y si l'article est proposé pour les pages d'accueil publiques&lt;br /&gt;
* notify_members : vaut Y l'option 'notifier les lecteurs' est cochée&lt;br /&gt;
* idfai : identifiant de l'instance en cours du schéma d'approbation&lt;br /&gt;
* result : statut d'approbation (type entier). Valeurs possibles : 0, 1, 2, 3&lt;br /&gt;
0 : statut par défaut si pas d'approbation en cours&lt;br /&gt;
1 : l'article brouillon est en attente d'approbation&lt;br /&gt;
2 : l'article brouillon est approuvé (Remarque : ce statut n'est jamais utilisé car un article brouillon approuvé se transforme en article)&lt;br /&gt;
3 : l'article brouillon a été refusé&lt;br /&gt;
* id_article : identifiant de l'article si le brouillon est une modification d'un article existant&lt;br /&gt;
* id_anonymous : identifiant de l'auteur si l'auteur n'est pas authentifié. C'est l'identifiant d'un enregistrement dans la table BAB_USERS_LOG_TBL.&lt;br /&gt;
* approbation : vaut 0, 1 ou 2&lt;br /&gt;
* update_datemodif : vaut Y si &lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_files ===&lt;br /&gt;
contient les fichiers joints aux brouillons d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* name : nom du fichier (Ex : gaston.jpg)&lt;br /&gt;
* description : description du fichier&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier par rapport aux autres fichiers joints de l'article brouillon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_images ===&lt;br /&gt;
contient les images associées aux brouillons d'articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_notes ===&lt;br /&gt;
contient les commentaires des approbateurs qui ont refusés les articles brouillons (Pour le publicateur, les commentaires sont affichées en prévisualisation de l'article, depuis la liste des brouillons (lien Publication/onglet Mes Articles si l'article est en cours d'approbation))&lt;br /&gt;
* id : identifiant de la note&lt;br /&gt;
* id_draft : identifiant de l'article brouillon associé&lt;br /&gt;
* content : contenu texte de la note&lt;br /&gt;
* id_author : identifiant de l'auteur de la note&lt;br /&gt;
* date_note : date de création de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles brouillons&lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_files ===&lt;br /&gt;
contient les fichiers joints des articles&lt;br /&gt;
* id : identifiant du fichier joint à l'article&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* name : &lt;br /&gt;
* description : description du fichier joint&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier joint avec les autres fichiers joints d'un même article&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_log ===&lt;br /&gt;
contient l'historique des modifications d'articles&lt;br /&gt;
* id : identifiant de la modification&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de la modification&lt;br /&gt;
* date_log : date et heure de la modification&lt;br /&gt;
* action_log : statut de la modification. Valeurs possibles : lock, unlock, commit, refused, accepted.&lt;br /&gt;
Lorsqu'on saisit la raison de la modification avant de modifier un article, le statut est lock.&lt;br /&gt;
Lorsqu'on soumet un article, le statut est commit. Si l'article ne passe pas par approbation, il y a immédiatement un autre enregistrement avec le statut accepted. commit et accepted sont aussi utilisés lorsqu'on modifie un brouillon puis qu'on soumet.&lt;br /&gt;
Lorsqu'on modifie un article et qu'on l'enregistre (on ne le soumet pas), seul un enregistrement est créé : celui avec le statut lock et la raison de la modification.&lt;br /&gt;
Il n'y a pas d'enregistrements si on créé un article et qu'il ne doit pas être approuvé.&lt;br /&gt;
Lorsqu'on supprime un brouillon, le statut est unlock.&lt;br /&gt;
* art_log : description de la modification. Contient le texte saisit comme raison de la modification &lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles&lt;br /&gt;
* id_art : identifiant de l'article&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_comments ===&lt;br /&gt;
contient les commentaires des articles&lt;br /&gt;
* id : identifiant du commentaire&lt;br /&gt;
* id_parent : identifiant du commentaire parent&lt;br /&gt;
* id_article : identifiant de l'article associé au commentaire&lt;br /&gt;
* id_topic : identifiant du thème d'articles dans lequel est créé l'article&lt;br /&gt;
* id_author : auteur du commentaire&lt;br /&gt;
* id_last_editor : identifiant du dernier auteur modificateur&lt;br /&gt;
* date : date de création du commentaire&lt;br /&gt;
* last_update : date de la dernière modification du commentaire&lt;br /&gt;
* subject : titre du commentaire&lt;br /&gt;
* message : contenu texte du commentaire&lt;br /&gt;
* confirmed : Y si le commentaire est approuvé, N sinon&lt;br /&gt;
* name : nom de l'auteur du commentaire&lt;br /&gt;
* email : email de l'auteur du commentaire&lt;br /&gt;
* idfai : identifiant de l'instance du schéma d'approbation utilisé pour ce commentaire&lt;br /&gt;
* lang : langue du commentaire (fr, en...)&lt;br /&gt;
* article_rating : note attribuée à l'article. Valeurs possibles : 0, 1, 2, 3, 4, 5&lt;br /&gt;
0 : l'article n'est pas noté&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topcat_order ===&lt;br /&gt;
contient les numéros pour les tris d'affichage des catégories et des thèmes. Attention, sous une catégorie parente, il est possible d'ordonner les sous-catégories avec les sous-thèmes (il y a donc des mélanges d'où la colonne type).&lt;br /&gt;
Rappel : une catégorie est un conteneur de sous-catégories ou de thèmes.&lt;br /&gt;
* id : identifiant de l'ordre&lt;br /&gt;
* id_topcat : identifiant de la catégorie ou du thème que l'on veut ordonner&lt;br /&gt;
* type : 1 si l'ordre est définit pour une catégorie d'articles. 2 si l'ordre est défini pour un thème d'articles.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'objet par rapport aux autres objets de la catégorie parente (id_parent) &lt;br /&gt;
* id_parent : identifiant de la catégorie d'articles parente d'idtopcat. C'est la catégorie dans laquelle on veut ordonner notre objet. Vaut 0 si l'objet qu'on veut trier est une catégorie de premier niveau (pas de catégorie parente).&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics ===&lt;br /&gt;
contient les thèmes d'articles&lt;br /&gt;
* id : identifiant du thème&lt;br /&gt;
* category : nom du thème&lt;br /&gt;
* description : description du thème&lt;br /&gt;
* id_cat : identifiant de la catégorie dans laquelle se trouve le thème&lt;br /&gt;
* idsaart : identifiant du schéma d'approbation à la création d'articles&lt;br /&gt;
* idsacom : identifiant du schéma d'approbation des commentaires&lt;br /&gt;
* idsa_update : identifiant du schéma d'approbation à la modification des articles&lt;br /&gt;
* notify : Y si les auteurs peuvent notifier les lecteurs par email, N sinon&lt;br /&gt;
* lang : langue du thème (fr, en...)&lt;br /&gt;
* article_tmpl : nom du modèle d'articles&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
* restrict_access : Y si les auteurs peuvent restreindre l'accès aux articles, N sinon&lt;br /&gt;
* allow_hpages : Y si on permet aux auteurs de proposer leurs articles pour les pages d'accueil, N sinon&lt;br /&gt;
* allow_pubdates : Y si on permet aux auteurs de spécifier des dates de publication, N sinon&lt;br /&gt;
* allow_attachments : Y si on permet aux auteurs de joindre des fichiers avec leurs articles, N sinon&lt;br /&gt;
* allow_update : entier indiquant si les auteurs peuvent modifier leurs articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les auteurs ne peuvent pas modifier leurs articles&lt;br /&gt;
1 : les auteurs peuvent modifier leurs articles, mais avec approbation&lt;br /&gt;
2 : les auteurs peuvent modifier leurs articles et sans approbation&lt;br /&gt;
* max_articles : nombre maximum d'articles sur la page des archives&lt;br /&gt;
* allow_manupdate : entier indiquant si les gestionnaires peuvent modifier les articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les gestionnaires ne peuvent pas modifier les articles&lt;br /&gt;
1 : les gestionnaires peuvent modifier les articles, mais avec approbation&lt;br /&gt;
2 : les gestionnaires peuvent modifier les articles et sans approbation&lt;br /&gt;
* auto_approbation : Y si on approuve automatiquement le contributeur dans le cas où il fait partie de la première étape du schéma d'approbation, N sinon&lt;br /&gt;
* busetags : Y si on utilise les mots-clés du thésaurus, N sinon&lt;br /&gt;
* allow_addImg : Y si on permet aux auteurs d'associer une image à un article&lt;br /&gt;
* allow_article_rating : Y si on permet aux auteurs des commentaires de noter les articles, N sinon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicscom_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant faire des commentaires sur le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsman_groups ===&lt;br /&gt;
Table de droits d'accès : groupes gestionnaires du thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsmod_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant modifier des articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicssub_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant soumettre de nouveaux articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsview_groups ===&lt;br /&gt;
Table de droist d'accès : groupes pouvant voir les articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group :&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories ===&lt;br /&gt;
contient les catégories d'articles (conteneurs des thèmes d'articles)&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* title : titre de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* enabled : vaut Y si la section de la catégorie est activée, N sinon&lt;br /&gt;
* template : nom du patron de section&lt;br /&gt;
* id_dgowner : identifiant de la délégation où se trouve la catégorie, 0 si dans tout le site&lt;br /&gt;
* optional : utilisation inconnue !!!&lt;br /&gt;
* id_parent : identifiant de la catégorie parente&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories_images ===&lt;br /&gt;
contient les images associées aux catégories d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idCategory : identifiant de la catégorie d'articles&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_images ===&lt;br /&gt;
contient les images associées aux thèmes d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idTopic : identifiant du thème&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4625</id>
		<title>Structures des tables de données d'Ovidentia</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4625"/>
				<updated>2009-09-08T09:35:23Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Table bab_cal_events */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cet article est en cours de rédaction. Son contenu n'est pas exhaustif.&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_calendar ===&lt;br /&gt;
contient les agendas (les noms des agendas ne se trouvent pas dans cette table). La table est liée aux tables bab_cal_public, bab_cal_resources ou bab_cal_events (il n'y a pas de tables pour les agendas personnels)&lt;br /&gt;
* id : identifiant d'un agenda&lt;br /&gt;
* owner : correspond pour un agenda de ressources à l'identifiant de l'enregistrement dans la table bab_cal_resources&lt;br /&gt;
* type : type de l'agenda.&lt;br /&gt;
Agenda  : 1&lt;br /&gt;
Agenda  : 2&lt;br /&gt;
Agenda de ressources : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_categories  ===&lt;br /&gt;
contient les catégories d'événements&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* name : nom de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* bgcolor : couleur héxa de la catégorie (ex : CC0000)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events ===&lt;br /&gt;
contient les événements des agendas (tous types d'agendas confondus). Cette table ne permet pas de savoir dans quels agendas sont publiés les événements car un événement peut faire partie de pluieurs agendas : voir table bab_cal_events_owners.&lt;br /&gt;
* id : identifiant de l'événement&lt;br /&gt;
* title : titre de l'événement&lt;br /&gt;
* description : description de l'événement&lt;br /&gt;
* description_format : format du texte de la description : html...&lt;br /&gt;
* location : lieu de l'événement&lt;br /&gt;
* start_date : date et heure de début de l'événement&lt;br /&gt;
* end_date : date et heure de fin de l'événement&lt;br /&gt;
* id_cat : identifiant de la catégorie d'événement&lt;br /&gt;
* id_creator : identifiant de l'auteur de l'événement&lt;br /&gt;
* hash : rempli uniquement lorsque l'événement est répétitif (ex : R_4697c6374e306b988eff36a868ff6f2c)&lt;br /&gt;
* color : couleur de l'événement (ex : FF0033)&lt;br /&gt;
* bprivate : indique si l'événement est privé. Valeur possible : Y ou N&lt;br /&gt;
* block : indique si l'événement est verrouillé. Valeur possible : Y ou N&lt;br /&gt;
* bfree : indique si l'événement est libre. Valeur possible : Y ou N&lt;br /&gt;
* date_modification : date de dernière modification de l'événement&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* uuid : identifiant unique de l'événement (utilisé pour des outils de synchronisation externe)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_notes ===&lt;br /&gt;
contient les notes privées associées aux événements d'agendas par les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur&lt;br /&gt;
* note : contenu de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_owners ===&lt;br /&gt;
lie les événements d'agendas (bab_cal_events) avec les agendas (bab_calendars)&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_cal : identifiant de l'agenda&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_reminders ===&lt;br /&gt;
contient les rappels d'événements pour les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur qui veut le rappel&lt;br /&gt;
* day : nombre de jours avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* hour : nombre d'heures avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* minute : nombre de minutes avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* bemail : vaut Y si les rappels doivent être envoyés par e-mails (voir options dans config.php), sinon N&lt;br /&gt;
* processed : vaut Y si l'utilisateur a demandé à cacher le rappel de sa fenêtre, sinon N par défaut&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_public ===&lt;br /&gt;
contient les agendas collectifs&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : description de l'agenda&lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_resources ===&lt;br /&gt;
contient les agendas de ressources&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : &lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
* availability_lock : vaut 1 si on veut empêcher la création d'événements en surbooking, sinon 0.&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_user_options ===&lt;br /&gt;
contient les options privés des utilisateurs sur l'ensemble des agendas&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles ===&lt;br /&gt;
contient les articles&lt;br /&gt;
* id : identifiant de l'article&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se situe l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de l'article&lt;br /&gt;
* date : date de création de l'article&lt;br /&gt;
* date_publication : date de publication de l'article&lt;br /&gt;
* date_archiving : date d'archivage de l'article&lt;br /&gt;
* date_modification : date de dernière modification de l'article&lt;br /&gt;
* title : titre de l'article&lt;br /&gt;
* head : introduction de l'article (obligatoire)&lt;br /&gt;
* body : corps de l'article&lt;br /&gt;
* archive : indique si l'article est une archive. Valeurs possibles : N ou Y&lt;br /&gt;
* lang : langue de l'article (fr, en...)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'article dans le thème par rapport aux autres articles du thème&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles_images ===&lt;br /&gt;
contient les images associées aux articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts ===&lt;br /&gt;
contient les brouillons d'articles (Rappel : avant d'être soumis ou approuvés, les textes sont des brouillons. Les brouillons se transforment en articles dès qu'ils sont soumis et approuvés)&lt;br /&gt;
* id : identifiant du brouillon&lt;br /&gt;
* id_author : identifiant de l'auteur du brouillon&lt;br /&gt;
* date_creation : date de création du brouillon&lt;br /&gt;
* date_modification : date de dernière modification du brouillon&lt;br /&gt;
* date_submission : date de soumission du brouillon&lt;br /&gt;
* date_publication : date de publication du brouillon&lt;br /&gt;
* date_archiving : date d'archivage du brouillon&lt;br /&gt;
* title : titre du brouillon&lt;br /&gt;
* head : introduction du brouillon (obligatoire)&lt;br /&gt;
* body : corps du brouillon&lt;br /&gt;
* lang : langue du brouillon (fr, en...)&lt;br /&gt;
* trash : indique si le brouillon est dans la corbeille ou pas. Valeurs possibles : N ou Y&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se trouve le brouillon (peut être vide)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* hpage_private : vaut Y si l'article est proposé pour les pages d'accueil privées&lt;br /&gt;
* hpage_public : vaut Y si l'article est proposé pour les pages d'accueil publiques&lt;br /&gt;
* notify_members : vaut Y l'option 'notifier les lecteurs' est cochée&lt;br /&gt;
* idfai : identifiant de l'instance en cours du schéma d'approbation&lt;br /&gt;
* result : statut d'approbation (type entier). Valeurs possibles : 0, 1, 2, 3&lt;br /&gt;
0 : statut par défaut si pas d'approbation en cours&lt;br /&gt;
1 : l'article brouillon est en attente d'approbation&lt;br /&gt;
2 : l'article brouillon est approuvé (Remarque : ce statut n'est jamais utilisé car un article brouillon approuvé se transforme en article)&lt;br /&gt;
3 : l'article brouillon a été refusé&lt;br /&gt;
* id_article : identifiant de l'article si le brouillon est une modification d'un article existant&lt;br /&gt;
* id_anonymous : identifiant de l'auteur si l'auteur n'est pas authentifié. C'est l'identifiant d'un enregistrement dans la table BAB_USERS_LOG_TBL.&lt;br /&gt;
* approbation : vaut 0, 1 ou 2&lt;br /&gt;
* update_datemodif : vaut Y si &lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_files ===&lt;br /&gt;
contient les fichiers joints aux brouillons d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* name : nom du fichier (Ex : gaston.jpg)&lt;br /&gt;
* description : description du fichier&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier par rapport aux autres fichiers joints de l'article brouillon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_images ===&lt;br /&gt;
contient les images associées aux brouillons d'articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_notes ===&lt;br /&gt;
contient les commentaires des approbateurs qui ont refusés les articles brouillons (Pour le publicateur, les commentaires sont affichées en prévisualisation de l'article, depuis la liste des brouillons (lien Publication/onglet Mes Articles si l'article est en cours d'approbation))&lt;br /&gt;
* id : identifiant de la note&lt;br /&gt;
* id_draft : identifiant de l'article brouillon associé&lt;br /&gt;
* content : contenu texte de la note&lt;br /&gt;
* id_author : identifiant de l'auteur de la note&lt;br /&gt;
* date_note : date de création de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles brouillons&lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_files ===&lt;br /&gt;
contient les fichiers joints des articles&lt;br /&gt;
* id : identifiant du fichier joint à l'article&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* name : &lt;br /&gt;
* description : description du fichier joint&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier joint avec les autres fichiers joints d'un même article&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_log ===&lt;br /&gt;
contient l'historique des modifications d'articles&lt;br /&gt;
* id : identifiant de la modification&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de la modification&lt;br /&gt;
* date_log : date et heure de la modification&lt;br /&gt;
* action_log : statut de la modification. Valeurs possibles : lock, unlock, commit, refused, accepted.&lt;br /&gt;
Lorsqu'on saisit la raison de la modification avant de modifier un article, le statut est lock.&lt;br /&gt;
Lorsqu'on soumet un article, le statut est commit. Si l'article ne passe pas par approbation, il y a immédiatement un autre enregistrement avec le statut accepted. commit et accepted sont aussi utilisés lorsqu'on modifie un brouillon puis qu'on soumet.&lt;br /&gt;
Lorsqu'on modifie un article et qu'on l'enregistre (on ne le soumet pas), seul un enregistrement est créé : celui avec le statut lock et la raison de la modification.&lt;br /&gt;
Il n'y a pas d'enregistrements si on créé un article et qu'il ne doit pas être approuvé.&lt;br /&gt;
Lorsqu'on supprime un brouillon, le statut est unlock.&lt;br /&gt;
* art_log : description de la modification. Contient le texte saisit comme raison de la modification &lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles&lt;br /&gt;
* id_art : identifiant de l'article&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_comments ===&lt;br /&gt;
contient les commentaires des articles&lt;br /&gt;
* id : identifiant du commentaire&lt;br /&gt;
* id_parent : identifiant du commentaire parent&lt;br /&gt;
* id_article : identifiant de l'article associé au commentaire&lt;br /&gt;
* id_topic : identifiant du thème d'articles dans lequel est créé l'article&lt;br /&gt;
* id_author : auteur du commentaire&lt;br /&gt;
* id_last_editor : identifiant du dernier auteur modificateur&lt;br /&gt;
* date : date de création du commentaire&lt;br /&gt;
* last_update : date de la dernière modification du commentaire&lt;br /&gt;
* subject : titre du commentaire&lt;br /&gt;
* message : contenu texte du commentaire&lt;br /&gt;
* confirmed : Y si le commentaire est approuvé, N sinon&lt;br /&gt;
* name : nom de l'auteur du commentaire&lt;br /&gt;
* email : email de l'auteur du commentaire&lt;br /&gt;
* idfai : identifiant de l'instance du schéma d'approbation utilisé pour ce commentaire&lt;br /&gt;
* lang : langue du commentaire (fr, en...)&lt;br /&gt;
* article_rating : note attribuée à l'article. Valeurs possibles : 0, 1, 2, 3, 4, 5&lt;br /&gt;
0 : l'article n'est pas noté&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topcat_order ===&lt;br /&gt;
contient les numéros pour les tris d'affichage des catégories et des thèmes. Attention, sous une catégorie parente, il est possible d'ordonner les sous-catégories avec les sous-thèmes (il y a donc des mélanges d'où la colonne type).&lt;br /&gt;
Rappel : une catégorie est un conteneur de sous-catégories ou de thèmes.&lt;br /&gt;
* id : identifiant de l'ordre&lt;br /&gt;
* id_topcat : identifiant de la catégorie ou du thème que l'on veut ordonner&lt;br /&gt;
* type : 1 si l'ordre est définit pour une catégorie d'articles. 2 si l'ordre est défini pour un thème d'articles.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'objet par rapport aux autres objets de la catégorie parente (id_parent) &lt;br /&gt;
* id_parent : identifiant de la catégorie d'articles parente d'idtopcat. C'est la catégorie dans laquelle on veut ordonner notre objet. Vaut 0 si l'objet qu'on veut trier est une catégorie de premier niveau (pas de catégorie parente).&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics ===&lt;br /&gt;
contient les thèmes d'articles&lt;br /&gt;
* id : identifiant du thème&lt;br /&gt;
* category : nom du thème&lt;br /&gt;
* description : description du thème&lt;br /&gt;
* id_cat : identifiant de la catégorie dans laquelle se trouve le thème&lt;br /&gt;
* idsaart : identifiant du schéma d'approbation à la création d'articles&lt;br /&gt;
* idsacom : identifiant du schéma d'approbation des commentaires&lt;br /&gt;
* idsa_update : identifiant du schéma d'approbation à la modification des articles&lt;br /&gt;
* notify : Y si les auteurs peuvent notifier les lecteurs par email, N sinon&lt;br /&gt;
* lang : langue du thème (fr, en...)&lt;br /&gt;
* article_tmpl : nom du modèle d'articles&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
* restrict_access : Y si les auteurs peuvent restreindre l'accès aux articles, N sinon&lt;br /&gt;
* allow_hpages : Y si on permet aux auteurs de proposer leurs articles pour les pages d'accueil, N sinon&lt;br /&gt;
* allow_pubdates : Y si on permet aux auteurs de spécifier des dates de publication, N sinon&lt;br /&gt;
* allow_attachments : Y si on permet aux auteurs de joindre des fichiers avec leurs articles, N sinon&lt;br /&gt;
* allow_update : entier indiquant si les auteurs peuvent modifier leurs articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les auteurs ne peuvent pas modifier leurs articles&lt;br /&gt;
1 : les auteurs peuvent modifier leurs articles, mais avec approbation&lt;br /&gt;
2 : les auteurs peuvent modifier leurs articles et sans approbation&lt;br /&gt;
* max_articles : nombre maximum d'articles sur la page des archives&lt;br /&gt;
* allow_manupdate : entier indiquant si les gestionnaires peuvent modifier les articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les gestionnaires ne peuvent pas modifier les articles&lt;br /&gt;
1 : les gestionnaires peuvent modifier les articles, mais avec approbation&lt;br /&gt;
2 : les gestionnaires peuvent modifier les articles et sans approbation&lt;br /&gt;
* auto_approbation : Y si on approuve automatiquement le contributeur dans le cas où il fait partie de la première étape du schéma d'approbation, N sinon&lt;br /&gt;
* busetags : Y si on utilise les mots-clés du thésaurus, N sinon&lt;br /&gt;
* allow_addImg : Y si on permet aux auteurs d'associer une image à un article&lt;br /&gt;
* allow_article_rating : Y si on permet aux auteurs des commentaires de noter les articles, N sinon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicscom_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant faire des commentaires sur le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsman_groups ===&lt;br /&gt;
Table de droits d'accès : groupes gestionnaires du thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsmod_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant modifier des articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicssub_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant soumettre de nouveaux articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsview_groups ===&lt;br /&gt;
Table de droist d'accès : groupes pouvant voir les articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group :&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories ===&lt;br /&gt;
contient les catégories d'articles (conteneurs des thèmes d'articles)&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* title : titre de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* enabled : vaut Y si la section de la catégorie est activée, N sinon&lt;br /&gt;
* template : nom du patron de section&lt;br /&gt;
* id_dgowner : identifiant de la délégation où se trouve la catégorie, 0 si dans tout le site&lt;br /&gt;
* optional : utilisation inconnue !!!&lt;br /&gt;
* id_parent : identifiant de la catégorie parente&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories_images ===&lt;br /&gt;
contient les images associées aux catégories d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idCategory : identifiant de la catégorie d'articles&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_images ===&lt;br /&gt;
contient les images associées aux thèmes d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idTopic : identifiant du thème&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Object-Relational_Mapping&amp;diff=4624</id>
		<title>Object-Relational Mapping</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Object-Relational_Mapping&amp;diff=4624"/>
				<updated>2009-09-07T14:54:11Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Sélectionner des données (équivalent requêtes SELECT en MySQL) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La librairie LibOrm (Object-Relational Mapping) est une bibliothèque de correspondance entre la base de données et des objets PHP. Elle facilite la définition des tables de données et les requêtes SQL.&lt;br /&gt;
&lt;br /&gt;
Le module LibOrm est disponible sur CVS : [http://213.215.40.194/cgi-bin/cvsweb.cgi/libraries/LibOrm/libraries/LibOrm]&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=LibOrm|addon=LibOrm|version=0.6.3}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; Cette page ne recense pas toutes les possibilités de la librairie. Elle donne un aperçu des fonctions permettant de débuter dans l'utilisation de la librairie.&lt;br /&gt;
&lt;br /&gt;
=== Exemple ===&lt;br /&gt;
Nous travaillons sur un module d'Ovidentia qui requiert la librairie LibOrm. Pour plus d'explications sur la méthode d'intégration d'une librairie dans un module : [[Fichiers spécifiques des modules]].&lt;br /&gt;
&lt;br /&gt;
Dans notre module, nous gérons 2 tables de données : Contact et AdressePostale. Ces 2 tables sont liées car 1 contact a 1 adresse postale.&lt;br /&gt;
&lt;br /&gt;
==== Les tables de données ====&lt;br /&gt;
&lt;br /&gt;
Définition de la structure de la table AdressePostale. Il est indispensable de terminer le nom de la classe par Set.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Definition of a postal address.&lt;br /&gt;
 *&lt;br /&gt;
 * @property ORM_PkField        $id&lt;br /&gt;
 * @property ORM_TextField      $rue&lt;br /&gt;
 * @property ORM_StringField    $codepostal&lt;br /&gt;
 * @property ORM_StringField    $ville&lt;br /&gt;
 */&lt;br /&gt;
class monmodule_AddressePostaleSet extends ORM_MySqlRecordSet {&lt;br /&gt;
   function __construct() {&lt;br /&gt;
      parent::__construct();&lt;br /&gt;
      &lt;br /&gt;
     $this-&amp;gt;setPrimaryKey('id');&lt;br /&gt;
     $this-&amp;gt;addFields(&lt;br /&gt;
        ORM_TextField('rue')-&amp;gt;setDescription('Street'),&lt;br /&gt;
        ORM_StringField('codepostal', 10)-&amp;gt;setDescription('Zip code'),&lt;br /&gt;
        ORM_StringField('ville', 60)-&amp;gt;setDescription('City')&lt;br /&gt;
     );&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Définition de la classe AdressePostale en tant qu'enregistrement (record). Lorsque la librairie LibOrm retournera une ligne de la table AdressePostale, la librairie retournera un objet de la classe AdressePostale.&lt;br /&gt;
Remarque : si vous n'avez pas besoin de personnaliser la classe d'enregistrement, il n'est pas nécessaire de la créer. Elle sera automatiquement créée par la librairie à partir du nom de la classe AdressePostaleSet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class monmodule_AddressePostale extends ORM_MySqlRecord {&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Définition de la structure de la table Contact :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class monmodule_ContactSet extends ORM_MySqlRecordSet {&lt;br /&gt;
   function __construct() {&lt;br /&gt;
      parent::__construct();&lt;br /&gt;
     &lt;br /&gt;
      $this-&amp;gt;setPrimaryKey('id');&lt;br /&gt;
      $this-&amp;gt;addFields(&lt;br /&gt;
         ORM_StringField('nom', 80)-&amp;gt;setDescription('Nom'),&lt;br /&gt;
         ORM_StringField('prenom', 80)-&amp;gt;setDescription('Prénom'),&lt;br /&gt;
         ORM_StringField('poste', 50)-&amp;gt;setDescription('Métier'),&lt;br /&gt;
         ORM_StringField('bureau', 15)-&amp;gt;setDescription('Bureau'),&lt;br /&gt;
         ORM_StringField('telephone', 30)-&amp;gt;setDescription('Téléphone'),&lt;br /&gt;
         ORM_StringField('fax', 30)-&amp;gt;setDescription('Fax'),&lt;br /&gt;
         ORM_StringField('mobile', 30)-&amp;gt;setDescription('Téléphone Mobile'),&lt;br /&gt;
         ORM_StringField('email', 255)-&amp;gt;setDescription('E-mail')&lt;br /&gt;
      );&lt;br /&gt;
&lt;br /&gt;
      $this-&amp;gt;hasOne('addressepostale', 'monmodule_AddressePostaleSet');&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Définition de la classe Contact en tant qu'enregistrement (record).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class monmodule_Contact extends ORM_MySqlRecord {&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Type de champs : '''&lt;br /&gt;
&lt;br /&gt;
* ORM_PkField : Primary Key (1 seul dans une table)&lt;br /&gt;
* ORM_FkField : Foreign key (référence à une autre clé)&lt;br /&gt;
* ORM_IntField : entier&lt;br /&gt;
* ORM_BoolField : booléen&lt;br /&gt;
* ORM_CurrencyField : monnaie&lt;br /&gt;
* ORM_DateField : date&lt;br /&gt;
* ORM_TimeField : temps&lt;br /&gt;
* ORM_DatetimeField : date et temps&lt;br /&gt;
* ORM_StringField : chaine&lt;br /&gt;
* ORM_TextField : chaine multi-lignes&lt;br /&gt;
* ORM_EnumField : énumération&lt;br /&gt;
&lt;br /&gt;
=== Utilisation de la librairie et initialisation ===&lt;br /&gt;
&lt;br /&gt;
Après installation de la librairie sur le portail, vous pouvez l'utiliser dans votre code PHP en appelant la fonctionnalité.&lt;br /&gt;
Il est nécessaire d'initialiser le back-end (la base de données) qui sera utilisé. En effet la librairie prévoit des requêtes dans différents formats de base de données : MySQL, XML, RSS...&lt;br /&gt;
&lt;br /&gt;
Cet exemple montre l'utilisation du back-end MySQL. Le constructeur de la classe ORM_MySqlBackend prend en paramètre la variable globale d'Ovidentia (objet babDatabase) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
bab_functionality::get('LibOrm')-&amp;gt;initMySql();&lt;br /&gt;
$mysqlbackend = new ORM_MySqlBackend($GLOBALS['babDB']);&lt;br /&gt;
ORM_MySqlRecordSet::setBackend($mysqlbackend);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Requêtes : gestion des données ====&lt;br /&gt;
&lt;br /&gt;
Nous avons défini nos tables de données dans les chapitres précédents. Pour les exemples de requêtes les définitions de classes doivent être disponibles dans le code PHP.&lt;br /&gt;
&lt;br /&gt;
===== Insérer des données (équivalent requêtes INSERT dans MySQL) =====&lt;br /&gt;
&lt;br /&gt;
Pour ajouter une donnée (ici une adresse postale), on définit un nouvel enregistrement en utilisant la méthode newRecord() sur la classe de définition (ici monmodule_AdressePostaleSet).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$adresseset = new monmodule_AddressePostaleSet();&lt;br /&gt;
$adresse = $adresseset-&amp;gt;newRecord();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les champs définis dans la classe monmodule_AddressePostaleSet seront disponibles sous la forme de variables dans les objets de cette classe. La méthode save() sur l'objet effectuera l'enregistrement de la nouvelle donnée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$adresseset = new monmodule_AddressePostaleSet();&lt;br /&gt;
$adresse = $adresseset-&amp;gt;newRecord();&lt;br /&gt;
&lt;br /&gt;
$adresse-&amp;gt;rue = '45, rue Georges André';&lt;br /&gt;
$adresse-&amp;gt;codepostal = '54000';&lt;br /&gt;
$adresse-&amp;gt;ville = 'Nancy';&lt;br /&gt;
&lt;br /&gt;
$adresse-&amp;gt;save();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remarque :&lt;br /&gt;
&lt;br /&gt;
Dès l'utilisation de la méthode save() sur l'objet, vous travaillez sur la donnée enregistrée. Un nouvel appel à la méthode save() ne créera pas un nouvel enregistrement mais modifiera la donnée en cours :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$adresseset = new monmodule_AddressePostaleSet();&lt;br /&gt;
$adresse = $adresseset-&amp;gt;newRecord();&lt;br /&gt;
&lt;br /&gt;
$adresse-&amp;gt;rue = '45, rue Georges André';&lt;br /&gt;
$adresse-&amp;gt;codepostal = '54000';&lt;br /&gt;
$adresse-&amp;gt;ville = 'Nancy';&lt;br /&gt;
&lt;br /&gt;
$adresse-&amp;gt;save();&lt;br /&gt;
&lt;br /&gt;
$adresse-&amp;gt;codepostal = '78000';&lt;br /&gt;
$adresse-&amp;gt;ville = 'Versailles';&lt;br /&gt;
&lt;br /&gt;
$adresse-&amp;gt;save();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== Gestion des données liées ======&lt;br /&gt;
&lt;br /&gt;
Nos définitions de tables prévoyaient une liaison entre un contact et une adresse postale. Voici un exemple permettant d'insérer un contact et son adresse automatiquement. Il est nécessaire pour cela de définir une liaison JOIN :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$contactset = new monmodule_ContactSet();&lt;br /&gt;
$contactset-&amp;gt;join('addressepostale');&lt;br /&gt;
&lt;br /&gt;
$contact = $contactset-&amp;gt;newRecord();&lt;br /&gt;
&lt;br /&gt;
$contact-&amp;gt;nom = 'Martin';&lt;br /&gt;
$contact-&amp;gt;prenom = 'Henry';&lt;br /&gt;
$contact-&amp;gt;addressepostale-&amp;gt;rue = '45, rue Georges André';&lt;br /&gt;
$contact-&amp;gt;addressepostale-&amp;gt;codepostal = '54000';&lt;br /&gt;
$contact-&amp;gt;addressepostale-&amp;gt;ville = 'Nancy';&lt;br /&gt;
&lt;br /&gt;
$contact-&amp;gt;save();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Sélectionner des données (équivalent requêtes SELECT en MySQL) =====&lt;br /&gt;
&lt;br /&gt;
La sélection de données s'effectue par la méthode select() sur l'objet de définition. Il est conseillé d'utiliser la commande foreach pour parcourir les résultats.&lt;br /&gt;
&lt;br /&gt;
Cet exemple montre la sélection de tous les contacts et affiche leurs noms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$contactset = new monmodule_ContactSet();&lt;br /&gt;
&lt;br /&gt;
$contacts = $contactset-&amp;gt;select();&lt;br /&gt;
foreach ($contacts as $contact) {&lt;br /&gt;
    echo $contact-&amp;gt;nom;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cet exemple montre la sélection de tous les contacts dont le prénom est Paul et affiche leurs noms. On passe en paramètre à la méthode select() un critère (objet ORM_Criteria).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$contactset = new monmodule_ContactSet();&lt;br /&gt;
&lt;br /&gt;
$contacts = $contactset-&amp;gt;select($contactset-&amp;gt;prenom-&amp;gt;is('Paul'));&lt;br /&gt;
foreach ($contacts as $contact) {&lt;br /&gt;
    echo $contact-&amp;gt;nom;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cet exemple montre la sélection de tous les contacts dont le prénom est Paul et dont le nom commence par André et affiche leurs noms. L'opérateur _AND_ permet la création d'un critère à partir de 2 critères.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$contactset = new monmodule_ContactSet();&lt;br /&gt;
$contactset-&amp;gt;join('addressepostale');&lt;br /&gt;
&lt;br /&gt;
$contacts = $contactset-&amp;gt;select($contactset-&amp;gt;prenom-&amp;gt;is('Paul')-&amp;gt;_AND_($contactset-&amp;gt;nom-&amp;gt;startsWith('André')));&lt;br /&gt;
foreach ($contacts as $contact) {&lt;br /&gt;
    echo $contact-&amp;gt;nom;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Une autre méthode pour sélectionner un enregistrement : '''&lt;br /&gt;
&lt;br /&gt;
Pour sélectionner un seul enregistrement de table, vous pouvez utiliser la méthode select() mais choisissez plutôt la méthode get(). Cette dernière retourne exclusivement l'objet en recevant la valeur de la clé primaire.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$contactset = new monmodule_ContactSet();&lt;br /&gt;
$contactset-&amp;gt;join('addressepostale');&lt;br /&gt;
&lt;br /&gt;
$contact = $contactset-&amp;gt;get(5);&lt;br /&gt;
if ($contact !== NULL) {&lt;br /&gt;
    echo $contact-&amp;gt;nom;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Types de critères : '''&lt;br /&gt;
&lt;br /&gt;
* greaterThan&lt;br /&gt;
* greaterThanOrEqual&lt;br /&gt;
* lessThan&lt;br /&gt;
* lessThanOrEqual&lt;br /&gt;
* in&lt;br /&gt;
* is&lt;br /&gt;
* isNot&lt;br /&gt;
* notIn&lt;br /&gt;
* notLike&lt;br /&gt;
* like&lt;br /&gt;
* startsWith&lt;br /&gt;
* endsWith&lt;br /&gt;
* contains&lt;br /&gt;
* fieldIsNull&lt;br /&gt;
&lt;br /&gt;
''' Opérateurs : '''&lt;br /&gt;
&lt;br /&gt;
* _AND_&lt;br /&gt;
* _OR_&lt;br /&gt;
* _NOT&lt;br /&gt;
&lt;br /&gt;
'''Ordonner les résultats :'''&lt;br /&gt;
&lt;br /&gt;
Vous pouvez ordonner simplement les résultats en utilisant la méthode orderAsc() ou orderDesc() de cette manière :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$contactset = new monmodule_ContactSet();&lt;br /&gt;
$contactset-&amp;gt;join('addressepostale');&lt;br /&gt;
&lt;br /&gt;
$contacts = $contactset-&amp;gt;select()-&amp;gt;orderAsc($contactset-&amp;gt;nom);&lt;br /&gt;
foreach ($contacts as $contact) {&lt;br /&gt;
    echo $contact-&amp;gt;nom;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Mettre à jour des données (équivalent requêtes UPDATE en MySQL) =====&lt;br /&gt;
&lt;br /&gt;
La modification d'une donnée passe par la méthode save() sur l'objet en cours. La donnée en cours peut provenir d'une requête de sélection ou de création.&lt;br /&gt;
&lt;br /&gt;
Cet exemple montre 2 appels à la méthode save(). Le premier appel créé un nouvel enregistrement. Le deuxième effectue une modification de l'enregistrement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$adresseset = new monmodule_AddressePostaleSet();&lt;br /&gt;
$adresse = $adresseset-&amp;gt;newRecord(); &lt;br /&gt;
$adresse-&amp;gt;rue = '45, rue Georges André';&lt;br /&gt;
$adresse-&amp;gt;codepostal = '54000';&lt;br /&gt;
$adresse-&amp;gt;ville = 'Nancy';&lt;br /&gt;
 &lt;br /&gt;
$adresse-&amp;gt;save();&lt;br /&gt;
 &lt;br /&gt;
$adresse-&amp;gt;codepostal = '78000';&lt;br /&gt;
$adresse-&amp;gt;ville = 'Versailles';&lt;br /&gt;
 &lt;br /&gt;
$adresse-&amp;gt;save();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cet exemple montre l'appel à la méthode save() après une requête de sélection. Le code affecte une majuscule au prénom Paul à tous les contacts qui n'en n'avaient pas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$contactset = new monmodule_ContactSet();&lt;br /&gt;
$contactset-&amp;gt;join('addressepostale');&lt;br /&gt;
&lt;br /&gt;
$contacts = $contactset-&amp;gt;select($contactset-&amp;gt;prenom-&amp;gt;is('paul'));&lt;br /&gt;
foreach ($contacts as $contact) {&lt;br /&gt;
    $contact-&amp;gt;prenom = 'Paul';&lt;br /&gt;
    $contact-&amp;gt;save();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Supprimer des données (équivalent requêtes DELETE en MySQL) =====&lt;br /&gt;
&lt;br /&gt;
Pour supprimer des données, on utilise la méthode delete sur l'objet de définition. Cette méthode prend en paramètre un critère (objet ORM_Criteria).&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on supprime tous les contacts dont le prénom est paul :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$contactset = new monmodule_ContactSet();&lt;br /&gt;
&lt;br /&gt;
$contacts = $contactset-&amp;gt;delete($contactset-&amp;gt;prenom-&amp;gt;is('paul'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4621</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4621"/>
				<updated>2009-08-11T11:55:04Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Diagramme d'héritage des classes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de plusieurs options&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au format HTML, javascript, css...&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4620</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4620"/>
				<updated>2009-08-11T11:54:37Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Diagramme d'héritage des classes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de plusieurs options&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;br /&gt;
&lt;br /&gt;
Un peu d'explications :&lt;br /&gt;
&lt;br /&gt;
Sur la gauche de l'image, on aperçoit les classes Widget_ContainerWidget, Widget_Widget et Widget_Item. Tous les objets de la librairie héritent de la classe Widget_Item.&lt;br /&gt;
&lt;br /&gt;
On a pris comme exemple la classe Widget_Form qui gère la construction d'un formulaire de saisie. On remarque que la classe Widget_Form hérite de Widget_ContainerWidget. En effet, dans le cas des objets qui peuvent contenir d'autres objets, on passe par la classe Widget_ContainerWidget pour gérer les sous-éléments.&lt;br /&gt;
&lt;br /&gt;
Un second avantage est la relation de la classe Widget_ContainerWidget avec Widget_Layout. Widget_Layout gère la disposition des éléments dans un Widget_ContainerWidget. Ainsi, le choix d'une disposition VBoxLayout permettra d'afficher automatiquement les éléments à la verticale les uns en dessous des autres sans gérer nous-mêmes de retours à la ligne.&lt;br /&gt;
&lt;br /&gt;
Sur la droite, on aperçoit les classes Canvas. Elles sont destinées à afficher ou exporter les données au format désiré. Toutes les méthodes display() des objets de la librairie prennent en paramètre un Canvas. Le Canvas le plus utilisé est Widgets_HtmlCanvas : il affiche les objets (Form, InputSelect, DatePicker, Page...) pour une page Web donc au foramt HTML, javascript, css...&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Fichier:Diagramme.png&amp;diff=4619</id>
		<title>Fichier:Diagramme.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Fichier:Diagramme.png&amp;diff=4619"/>
				<updated>2009-08-11T11:41:35Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : Diagramme simplifié des classes de la librairie Widgets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Diagramme simplifié des classes de la librairie Widgets&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4618</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4618"/>
				<updated>2009-08-11T11:40:57Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Diagramme d'héritage des classes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de plusieurs options&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;br /&gt;
&lt;br /&gt;
[[Image:Diagramme.png|center|thumb|350px|Diagramme]]&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4617</id>
		<title>Widgets</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Widgets&amp;diff=4617"/>
				<updated>2009-08-11T09:46:40Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Documentation des librairies]]&lt;br /&gt;
&lt;br /&gt;
Cette librairie facilite la création des interfaces en proposant des objets associés à chaque élément connu d'une page Web : champ de formulaire, tableau, lien avec puce, popup calendrier de sélection d'un jour...&lt;br /&gt;
&lt;br /&gt;
{{Fonctionnalité|path=Widgets|addon=widgets|version=0.1.9}}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
&lt;br /&gt;
==== Fichier addonini.php ====&lt;br /&gt;
&lt;br /&gt;
Pour accéder aux widgets dans un module d'Ovidentia, il est nécessaire d'installer la librairie Widgets et le module jQuery.&lt;br /&gt;
&lt;br /&gt;
De manière a éviter tout problème ces pré-requis devront être signalés dans le fichier addonini.php du module en y ajoutant quelques lignes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;&amp;lt;?php/*&lt;br /&gt;
&lt;br /&gt;
[general]&lt;br /&gt;
name=&amp;quot;my_addon&amp;quot;&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
[addons]&lt;br /&gt;
widgets=&amp;quot;0.2.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[functionalities]&lt;br /&gt;
jquery=&amp;quot;Available&amp;quot;&lt;br /&gt;
&lt;br /&gt;
*/?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Utilisation de la librairie ====&lt;br /&gt;
&lt;br /&gt;
Pour utiliser la librairie dans un code PHP, il est nécessaire d'utiliser la fonction bab_functionality(). Il est conseillé d'inclure les styles utiles à quelques widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les pages ===&lt;br /&gt;
&lt;br /&gt;
La page est le point de départ d'une interface. C'est elle qui contient tous les éléments.&lt;br /&gt;
&lt;br /&gt;
On définit une page grâce à l'objet Widget_BabPage.&lt;br /&gt;
&lt;br /&gt;
La page créée est insérée dans le corps du site Ovidentia : le bandeau et les sections du site apparaîtront autour de la page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de définir le positionnement des éléments à l'intérieur de chaque élément.&lt;br /&gt;
Ici, on définit le positionnement pour la page en cours :&lt;br /&gt;
&lt;br /&gt;
# La méthode VBoxLayout() définit une mise en page verticale.&lt;br /&gt;
# La méthode HBoxLayout() définit une mise en page horizontale.&lt;br /&gt;
# La méthode FlowLayout() définit une mise en page horizontale en 'écoulement' : les éléments reviennent à la ligne automatiquement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour travailler avec des applications en pleine page ou avec des popups, vous pouvez désactiver le mode intégré avec la méthode setEmbedded(). Le bandeau et les sections du site n'apparaîtront pas :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setEmbedded(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour afficher le contenu de la page, on utilise la méthode displayHtml() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Définir un titre de page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;setTitle('Configuration');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ajouter un message d'erreurs à la page :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
 $page-&amp;gt;addError(&amp;quot;Vous n'avez pas les droits d'accès&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Insérer des éléments ===&lt;br /&gt;
&lt;br /&gt;
On ajoute des éléments via la méthode addItem() sur un élément conteneur (objet Widget_BabPage par exemple). Dans l'exemple ci-dessous, on ajoute un texte dans notre page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$bonjourLabel = $W-&amp;gt;Label('Bonjour');&lt;br /&gt;
$page-&amp;gt;addItem($bonjourLabel);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Navigation horizontale avec les onglets ===&lt;br /&gt;
&lt;br /&gt;
La méthode addItemMenu() sur l'objet Widget_BabPage permet de définir un onglet. La méthode setCurrentItemMenu() permet de définir l'onglet courant.&lt;br /&gt;
&lt;br /&gt;
Dans cet exemple, on affiche 2 onglets : configuration et droits. Droits est l'onglet en cours.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$addon = bab_getAddonInfosInstance('monmodule');&lt;br /&gt;
$page-&amp;gt;addItemMenu('configuration', 'Configuration', $addon-&amp;gt;getUrl().'user&amp;amp;idx=config');&lt;br /&gt;
$page-&amp;gt;addItemMenu('droits', 'Droits', $addon-&amp;gt;getUrl().'user&amp;amp;idx=droits');&lt;br /&gt;
$page-&amp;gt;setCurrentItemMenu('droits');&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les textes ===&lt;br /&gt;
&lt;br /&gt;
Les textes sont gérés par les objets Widget_Label et Widget_RichText.&lt;br /&gt;
&lt;br /&gt;
Widget_Label permet d’ajouter un élément texte simple. Si le contenu du texte contient un code javascript, il ne sera pas interprété. Une balise HTML s’affichera à l’écran et ne sera pas interprétée.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;Label('Qui vivra verra.');&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widget_RichText permet d’ajouter un élément texte complexe (texte mis en forme comme du HTML). Par défaut le fonctionnement est le même l’objet Widget_Label concernant l’affichage du texte. Cependant il possible d’utiliser la méthode setRenderingOptions() pour indiquer le format d’affichage du texte :&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ALL : valeur par défaut : combinaison de plusieurs options&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_ENTITIES : les caractères spéciaux seront convertis en caractères HTML&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_AUTO : des balises paragraphes seront ajoutées pour remplacer les retours à la ligne dans le texte&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_P : des balises paragraphes seront ajoutées pour remplacer les doubles retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_BR : des balises BR seront ajoutées pour remplacer les retours à la ligne&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_LINKS : les URL et les e-mails seront remplacés par des liens&lt;br /&gt;
&lt;br /&gt;
* BAB_HTML_JS : les caractères \ , ' et &amp;quot; seront protégés pour un code javascript, ce format n’est inclut dans BAB_HTML_ALL&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$texte = $W-&amp;gt;RichText('&amp;lt;b&amp;gt;Qui vivra verra.&amp;lt;/b&amp;gt;');&lt;br /&gt;
$texte-&amp;gt;setRenderingOptions(BAB_HTML_AUTO);&lt;br /&gt;
$page-&amp;gt;addItem($texte);&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Code Html libre ===&lt;br /&gt;
Vous pouvez insérer du code Html quelconque via l'objet Widget_Html :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
 &lt;br /&gt;
$html = $W-&amp;gt;Html('&amp;lt;ul&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 1&amp;lt;/li&amp;gt;&lt;br /&gt;
                    &amp;lt;li&amp;gt;Choix 2&amp;lt;/li&amp;gt;&lt;br /&gt;
                  &amp;lt;/ul&amp;gt;');&lt;br /&gt;
$page-&amp;gt;addItem($html);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les formulaires ===&lt;br /&gt;
&lt;br /&gt;
La création d'un formulaire utilise essentiellement les objets Widget_Form et Widget_InputWidget.&lt;br /&gt;
&lt;br /&gt;
Widget_Form permet de définir un formulaire, la cible (attribut action d'une balise form) est automatiquement pré-renseignée au point d'entrée d'Ovidentia (index.php). Pour configurer une cible plus précise, utilisez la méthode setHiddenValue() comme dans l'exemple ci-dessous.&lt;br /&gt;
&lt;br /&gt;
Par défaut, la méthode utilisée pour l'envoi des données est POST. Si vous désirez une méthode GET, appelez la méthode setReadOnly() :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setReadOnly();&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' Les champs : '''&lt;br /&gt;
&lt;br /&gt;
Les champs des formulaires sont des objets Widget_InputWidget. Liste des champs utiles :&lt;br /&gt;
&lt;br /&gt;
* Checkbox : case à cocher&lt;br /&gt;
* DatePicker : sélection d'une date avec popup de calendrier&lt;br /&gt;
* GroupPicker : sélection d'un groupe d'utilisateurs&lt;br /&gt;
* LineEdit : case de saisie&lt;br /&gt;
* SimpleHtmlEdit : case de saisie avec mise en forme (éditeur wysiwyg simplifié)&lt;br /&gt;
* TextEdit : case de saisie multi-lignes&lt;br /&gt;
* TimePicker : sélection d'une heure&lt;br /&gt;
* Uploader : champ fichier&lt;br /&gt;
&lt;br /&gt;
Après la création d'un champ, il est essentiel de définir son nom (attribut name d'une balise input) par la méthode setName(). Une valeur d'initialisation peut être renseignée via la méthode setValue().&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$champidentifiant = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Les boutons :'''&lt;br /&gt;
&lt;br /&gt;
L'objte Widget_SubmitButton permet de définir un bouton de soumission :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;SubmitButton()-&amp;gt;setLabel('Enregistrer'));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple avec l'affichage d'un formulaire contenant 2 cases de saisies Identifiant et Mot de passe :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$form = $W-&amp;gt;Form();&lt;br /&gt;
$form-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
$form-&amp;gt;setHiddenValue('tg', $GLOBALS['babAddonTarget'].'/admin');&lt;br /&gt;
$form-&amp;gt;setHiddenValue('idx', 'configurationsave');&lt;br /&gt;
    &lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;setValue('Votre identifiant'));&lt;br /&gt;
$form-&amp;gt;addItem($W-&amp;gt;LineEdit()-&amp;gt;setName('passe')-&amp;gt;setValue('Votre mot de passe'));&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addItem($form);&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Exemple de création d'une liste déroulante sélectionnée sur le 3ème choix :'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$select = $W-&amp;gt;Select()-&amp;gt;setName('notation');&lt;br /&gt;
$select-&amp;gt;addOption(1, 'mauvais');&lt;br /&gt;
$select-&amp;gt;addOption(2, 'bon');&lt;br /&gt;
$select-&amp;gt;addOption(3, 'parfait');&lt;br /&gt;
$select-&amp;gt;setValue(3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' La réception des données saisies : '''&lt;br /&gt;
&lt;br /&gt;
La réception des données saisies dans un formulaire dépend des conteneurs utilisés avec le formulaire. Explication :&lt;br /&gt;
&lt;br /&gt;
Dans notre exemple, l'objet Widget_Form n'a pas de nom et ne contient aucun conteneur (un conteneur est un objet Widget qui contient d'autres objets : une frame est un conteneur). Nos 2 champs identifiant et passe seront récupérés normalement par PHP :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$identifiantsaisit = bab_pp('identifiant', '');&lt;br /&gt;
$motdepassesaisit = bab_pp('identifiant', '');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cependant dès l'instant que vous définissez des noms aux conteneurs présents dans le formulaire, les données envoyées seront envoyées sous forme de tableaux.&lt;br /&gt;
&lt;br /&gt;
Si on définit un nom à l'objet Widget_Form :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$form = $W-&amp;gt;Form()-&amp;gt;setName('formulaire_identification');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les données seront reçues dans un tableau :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$donneesformulaire = bab_rp('formulaire_identification', array());&lt;br /&gt;
$identifiantsaisit = '';&lt;br /&gt;
$motdepassesaisit = '';&lt;br /&gt;
if (isset($donneesformulaire['identifiant'])) {&lt;br /&gt;
   $identifiantsaisit = $donneesformulaire['identifiant'];&lt;br /&gt;
}&lt;br /&gt;
if (isset($donneesformulaire['passe'])) {&lt;br /&gt;
   $motdepassesaisit = $donneesformulaire['passe'];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Styliser les éléments ===&lt;br /&gt;
&lt;br /&gt;
Vous pouvez styliser les éléments Widgets en appelant une feuille de styles CSS dans la page. Vous définissez alors des styles sur les classes générées par les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
$W-&amp;gt;includeCss();&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
$page-&amp;gt;addStyleSheet('styles.css');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour être plus précis, vous pouvez ajouter une classe sur tous les éléments widgets :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$field = $W-&amp;gt;LineEdit()-&amp;gt;setName('identifiant')-&amp;gt;addClass('field-description');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Exemples ===&lt;br /&gt;
&lt;br /&gt;
==== Hello world ! ====&lt;br /&gt;
&lt;br /&gt;
Commençons par un exemple simple qui se contentera d'afficher le texte &amp;quot;Hello world !&amp;quot; sur une page. L'exemple contient un certain nombre d'opérations qui seront nécessaires pour toutes les pages utilisant les widgets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Ici on récupère l'objet Func_Widgets qui servira notamment à créer tous les widgets et layouts&lt;br /&gt;
$W = bab_functionality::get('Widgets');&lt;br /&gt;
&lt;br /&gt;
// On crée une page, qui sera le container principal.&lt;br /&gt;
$page = $W-&amp;gt;BabPage();&lt;br /&gt;
&lt;br /&gt;
// On associe à la page une mise en page (layout) verticale : les éléments qu'on y ajoutera seront disposés les uns sous les autres.&lt;br /&gt;
$page-&amp;gt;setLayout($W-&amp;gt;VBoxLayout());&lt;br /&gt;
&lt;br /&gt;
// Création d'un simple texte (Label)&lt;br /&gt;
$helloLabel = $W-&amp;gt;Label('Hello world !');&lt;br /&gt;
&lt;br /&gt;
// On ajoute ce texte à la page.&lt;br /&gt;
$page-&amp;gt;addItem($helloLabel);&lt;br /&gt;
&lt;br /&gt;
// C'est fini, on affiche la page.&lt;br /&gt;
$page-&amp;gt;displayHtml();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Diagramme d'héritage des classes ===&lt;br /&gt;
&lt;br /&gt;
Voici un diagramme court montrant l'héritage et les relations entre les classes objets :&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	<entry>
		<id>https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4616</id>
		<title>Structures des tables de données d'Ovidentia</title>
		<link rel="alternate" type="text/html" href="https://wiki.ovidentia.fr/index.php?title=Structures_des_tables_de_donn%C3%A9es_d%27Ovidentia&amp;diff=4616"/>
				<updated>2009-08-06T09:05:37Z</updated>
		
		<summary type="html">&lt;p&gt;Jeraiz : /* Table bab_comments */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cet article est en cours de rédaction. Son contenu n'est pas exhaustif.&lt;br /&gt;
&lt;br /&gt;
== Agenda ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_calendar ===&lt;br /&gt;
contient les agendas (les noms des agendas ne se trouvent pas dans cette table). La table est liée aux tables bab_cal_public, bab_cal_resources ou bab_cal_events (il n'y a pas de tables pour les agendas personnels)&lt;br /&gt;
* id : identifiant d'un agenda&lt;br /&gt;
* owner : correspond pour un agenda de ressources à l'identifiant de l'enregistrement dans la table bab_cal_resources&lt;br /&gt;
* type : type de l'agenda.&lt;br /&gt;
Agenda  : 1&lt;br /&gt;
Agenda  : 2&lt;br /&gt;
Agenda de ressources : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_categories  ===&lt;br /&gt;
contient les catégories d'événements&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* name : nom de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* bgcolor : couleur héxa de la catégorie (ex : CC0000)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events ===&lt;br /&gt;
contient les événements des agendas (tous types d'agendas confondus). Cette table ne permet pas de savoir dans quels agendas sont publiés les événements car un événement peut faire partie de pluieurs agendas : voir table bab_cal_events_owners.&lt;br /&gt;
* id : identifiant de l'événement&lt;br /&gt;
* title : titre de l'événement&lt;br /&gt;
* description : description de l'événement&lt;br /&gt;
* location : lieu de l'événement&lt;br /&gt;
* start_date : date et heure de début de l'événement&lt;br /&gt;
* end_date : date et heure de fin de l'événement&lt;br /&gt;
* id_cat : identifiant de la catégorie d'événement&lt;br /&gt;
* id_creator : identifiant de l'auteur de l'événement&lt;br /&gt;
* hash : rempli uniquement lorsque l'événement est répétitif (ex : R_4697c6374e306b988eff36a868ff6f2c)&lt;br /&gt;
* color : couleur de l'événement (ex : FF0033)&lt;br /&gt;
* bprivate : indique si l'événement est privé. Valeur possible : Y ou N&lt;br /&gt;
* block : indique si l'événement est verrouillé. Valeur possible : Y ou N&lt;br /&gt;
* bfree : indique si l'événement est libre. Valeur possible : Y ou N&lt;br /&gt;
* date_modification : date de dernière modification de l'événement&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* uuid : identifiant unique de l'événement (utilisé pour des outils de synchronisation externe)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_notes ===&lt;br /&gt;
contient les notes privées associées aux événements d'agendas par les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur&lt;br /&gt;
* note : contenu de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_owners ===&lt;br /&gt;
lie les événements d'agendas (bab_cal_events) avec les agendas (bab_calendars)&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_cal : identifiant de l'agenda&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_events_reminders ===&lt;br /&gt;
contient les rappels d'événements pour les utilisateurs&lt;br /&gt;
* id_event : identifiant de l'événement&lt;br /&gt;
* id_user : identifiant de l'utilisateur qui veut le rappel&lt;br /&gt;
* day : nombre de jours avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* hour : nombre d'heures avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* minute : nombre de minutes avant l'événement quand le rappel doit se déclencher&lt;br /&gt;
* bemail : vaut Y si les rappels doivent être envoyés par e-mails (voir options dans config.php), sinon N&lt;br /&gt;
* processed : vaut Y si l'utilisateur a demandé à cacher le rappel de sa fenêtre, sinon N par défaut&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_public ===&lt;br /&gt;
contient les agendas collectifs&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : description de l'agenda&lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_resources ===&lt;br /&gt;
contient les agendas de ressources&lt;br /&gt;
* id : identifiant de l'agenda&lt;br /&gt;
* name : nom de l'agenda&lt;br /&gt;
* description : &lt;br /&gt;
* id_dgowner : identifiant de la délégation dans laquelle se trouve l'agenda (0 si dans Tout le site)&lt;br /&gt;
* idsa : identifiant du schéma d'approbation&lt;br /&gt;
* availability_lock : vaut 1 si on veut empêcher la création d'événements en surbooking, sinon 0.&lt;br /&gt;
&lt;br /&gt;
=== Table bab_cal_user_options ===&lt;br /&gt;
contient les options privés des utilisateurs sur l'ensemble des agendas&lt;br /&gt;
&lt;br /&gt;
== Articles ==&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles ===&lt;br /&gt;
contient les articles&lt;br /&gt;
* id : identifiant de l'article&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se situe l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de l'article&lt;br /&gt;
* date : date de création de l'article&lt;br /&gt;
* date_publication : date de publication de l'article&lt;br /&gt;
* date_archiving : date d'archivage de l'article&lt;br /&gt;
* date_modification : date de dernière modification de l'article&lt;br /&gt;
* title : titre de l'article&lt;br /&gt;
* head : introduction de l'article (obligatoire)&lt;br /&gt;
* body : corps de l'article&lt;br /&gt;
* archive : indique si l'article est une archive. Valeurs possibles : N ou Y&lt;br /&gt;
* lang : langue de l'article (fr, en...)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'article dans le thème par rapport aux autres articles du thème&lt;br /&gt;
* id_modifiedby : identifiant du dernier auteur modificateur&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
&lt;br /&gt;
=== Table bab_articles_images ===&lt;br /&gt;
contient les images associées aux articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts ===&lt;br /&gt;
contient les brouillons d'articles (Rappel : avant d'être soumis ou approuvés, les textes sont des brouillons. Les brouillons se transforment en articles dès qu'ils sont soumis et approuvés)&lt;br /&gt;
* id : identifiant du brouillon&lt;br /&gt;
* id_author : identifiant de l'auteur du brouillon&lt;br /&gt;
* date_creation : date de création du brouillon&lt;br /&gt;
* date_modification : date de dernière modification du brouillon&lt;br /&gt;
* date_submission : date de soumission du brouillon&lt;br /&gt;
* date_publication : date de publication du brouillon&lt;br /&gt;
* date_archiving : date d'archivage du brouillon&lt;br /&gt;
* title : titre du brouillon&lt;br /&gt;
* head : introduction du brouillon (obligatoire)&lt;br /&gt;
* body : corps du brouillon&lt;br /&gt;
* lang : langue du brouillon (fr, en...)&lt;br /&gt;
* trash : indique si le brouillon est dans la corbeille ou pas. Valeurs possibles : N ou Y&lt;br /&gt;
* id_topic : identifiant du thème d'articles où se trouve le brouillon (peut être vide)&lt;br /&gt;
* restriction : liste d'identifiants de groupes séparés par des virgules (opérateur OU) ou par des &amp;amp; (opérateur ET). C'est la liste des groupes à restreindre pour la lecture de l'article.&lt;br /&gt;
* hpage_private : vaut Y si l'article est proposé pour les pages d'accueil privées&lt;br /&gt;
* hpage_public : vaut Y si l'article est proposé pour les pages d'accueil publiques&lt;br /&gt;
* notify_members : vaut Y l'option 'notifier les lecteurs' est cochée&lt;br /&gt;
* idfai : identifiant de l'instance en cours du schéma d'approbation&lt;br /&gt;
* result : statut d'approbation (type entier). Valeurs possibles : 0, 1, 2, 3&lt;br /&gt;
0 : statut par défaut si pas d'approbation en cours&lt;br /&gt;
1 : l'article brouillon est en attente d'approbation&lt;br /&gt;
2 : l'article brouillon est approuvé (Remarque : ce statut n'est jamais utilisé car un article brouillon approuvé se transforme en article)&lt;br /&gt;
3 : l'article brouillon a été refusé&lt;br /&gt;
* id_article : identifiant de l'article si le brouillon est une modification d'un article existant&lt;br /&gt;
* id_anonymous : identifiant de l'auteur si l'auteur n'est pas authentifié. C'est l'identifiant d'un enregistrement dans la table BAB_USERS_LOG_TBL.&lt;br /&gt;
* approbation : vaut 0, 1 ou 2&lt;br /&gt;
* update_datemodif : vaut Y si &lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_files ===&lt;br /&gt;
contient les fichiers joints aux brouillons d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* name : nom du fichier (Ex : gaston.jpg)&lt;br /&gt;
* description : description du fichier&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier par rapport aux autres fichiers joints de l'article brouillon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_images ===&lt;br /&gt;
contient les images associées aux brouillons d'articles (on parle bien des images associées et pas des fichiers joints)&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idArticle : identifiant de l'article&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_notes ===&lt;br /&gt;
contient les commentaires des approbateurs qui ont refusés les articles brouillons (Pour le publicateur, les commentaires sont affichées en prévisualisation de l'article, depuis la liste des brouillons (lien Publication/onglet Mes Articles si l'article est en cours d'approbation))&lt;br /&gt;
* id : identifiant de la note&lt;br /&gt;
* id_draft : identifiant de l'article brouillon associé&lt;br /&gt;
* content : contenu texte de la note&lt;br /&gt;
* id_author : identifiant de l'auteur de la note&lt;br /&gt;
* date_note : date de création de la note&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_drafts_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles brouillons&lt;br /&gt;
* id_draft : identifiant de l'article brouillon&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_files ===&lt;br /&gt;
contient les fichiers joints des articles&lt;br /&gt;
* id : identifiant du fichier joint à l'article&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* name : &lt;br /&gt;
* description : description du fichier joint&lt;br /&gt;
* index_status : statut de l'indexation. Valeur entière.&lt;br /&gt;
non indexé : 0&lt;br /&gt;
indexé : 2&lt;br /&gt;
en attente d'être indexé : 3&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage du fichier joint avec les autres fichiers joints d'un même article&lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_log ===&lt;br /&gt;
contient l'historique des modifications d'articles&lt;br /&gt;
* id : identifiant de la modification&lt;br /&gt;
* id_article : identifiant de l'article&lt;br /&gt;
* id_author : identifiant de l'auteur de la modification&lt;br /&gt;
* date_log : date et heure de la modification&lt;br /&gt;
* action_log : statut de la modification. Valeurs possibles : lock, unlock, commit, refused, accepted.&lt;br /&gt;
Lorsqu'on saisit la raison de la modification avant de modifier un article, le statut est lock.&lt;br /&gt;
Lorsqu'on soumet un article, le statut est commit. Si l'article ne passe pas par approbation, il y a immédiatement un autre enregistrement avec le statut accepted. commit et accepted sont aussi utilisés lorsqu'on modifie un brouillon puis qu'on soumet.&lt;br /&gt;
Lorsqu'on modifie un article et qu'on l'enregistre (on ne le soumet pas), seul un enregistrement est créé : celui avec le statut lock et la raison de la modification.&lt;br /&gt;
Il n'y a pas d'enregistrements si on créé un article et qu'il ne doit pas être approuvé.&lt;br /&gt;
Lorsqu'on supprime un brouillon, le statut est unlock.&lt;br /&gt;
* art_log : description de la modification. Contient le texte saisit comme raison de la modification &lt;br /&gt;
&lt;br /&gt;
=== Table bab_art_tags ===&lt;br /&gt;
contient les tags (fonction Thésaurus) associés à des articles&lt;br /&gt;
* id_art : identifiant de l'article&lt;br /&gt;
* id_tag : identifiant du tag (lié à la table bab_tags)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_comments ===&lt;br /&gt;
contient les commentaires des articles&lt;br /&gt;
* id : identifiant du commentaire&lt;br /&gt;
* id_parent : identifiant du commentaire parent&lt;br /&gt;
* id_article : identifiant de l'article associé au commentaire&lt;br /&gt;
* id_topic : identifiant du thème d'articles dans lequel est créé l'article&lt;br /&gt;
* id_author : auteur du commentaire&lt;br /&gt;
* id_last_editor : identifiant du dernier auteur modificateur&lt;br /&gt;
* date : date de création du commentaire&lt;br /&gt;
* last_update : date de la dernière modification du commentaire&lt;br /&gt;
* subject : titre du commentaire&lt;br /&gt;
* message : contenu texte du commentaire&lt;br /&gt;
* confirmed : Y si le commentaire est approuvé, N sinon&lt;br /&gt;
* name : nom de l'auteur du commentaire&lt;br /&gt;
* email : email de l'auteur du commentaire&lt;br /&gt;
* idfai : identifiant de l'instance du schéma d'approbation utilisé pour ce commentaire&lt;br /&gt;
* lang : langue du commentaire (fr, en...)&lt;br /&gt;
* article_rating : note attribuée à l'article. Valeurs possibles : 0, 1, 2, 3, 4, 5&lt;br /&gt;
0 : l'article n'est pas noté&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topcat_order ===&lt;br /&gt;
contient les numéros pour les tris d'affichage des catégories et des thèmes. Attention, sous une catégorie parente, il est possible d'ordonner les sous-catégories avec les sous-thèmes (il y a donc des mélanges d'où la colonne type).&lt;br /&gt;
Rappel : une catégorie est un conteneur de sous-catégories ou de thèmes.&lt;br /&gt;
* id : identifiant de l'ordre&lt;br /&gt;
* id_topcat : identifiant de la catégorie ou du thème que l'on veut ordonner&lt;br /&gt;
* type : 1 si l'ordre est définit pour une catégorie d'articles. 2 si l'ordre est défini pour un thème d'articles.&lt;br /&gt;
* ordering : entier indiquant l'ordre d'affichage de l'objet par rapport aux autres objets de la catégorie parente (id_parent) &lt;br /&gt;
* id_parent : identifiant de la catégorie d'articles parente d'idtopcat. C'est la catégorie dans laquelle on veut ordonner notre objet. Vaut 0 si l'objet qu'on veut trier est une catégorie de premier niveau (pas de catégorie parente).&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics ===&lt;br /&gt;
contient les thèmes d'articles&lt;br /&gt;
* id : identifiant du thème&lt;br /&gt;
* category : nom du thème&lt;br /&gt;
* description : description du thème&lt;br /&gt;
* id_cat : identifiant de la catégorie dans laquelle se trouve le thème&lt;br /&gt;
* idsaart : identifiant du schéma d'approbation à la création d'articles&lt;br /&gt;
* idsacom : identifiant du schéma d'approbation des commentaires&lt;br /&gt;
* idsa_update : identifiant du schéma d'approbation à la modification des articles&lt;br /&gt;
* notify : Y si les auteurs peuvent notifier les lecteurs par email, N sinon&lt;br /&gt;
* lang : langue du thème (fr, en...)&lt;br /&gt;
* article_tmpl : nom du modèle d'articles&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
* restrict_access : Y si les auteurs peuvent restreindre l'accès aux articles, N sinon&lt;br /&gt;
* allow_hpages : Y si on permet aux auteurs de proposer leurs articles pour les pages d'accueil, N sinon&lt;br /&gt;
* allow_pubdates : Y si on permet aux auteurs de spécifier des dates de publication, N sinon&lt;br /&gt;
* allow_attachments : Y si on permet aux auteurs de joindre des fichiers avec leurs articles, N sinon&lt;br /&gt;
* allow_update : entier indiquant si les auteurs peuvent modifier leurs articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les auteurs ne peuvent pas modifier leurs articles&lt;br /&gt;
1 : les auteurs peuvent modifier leurs articles, mais avec approbation&lt;br /&gt;
2 : les auteurs peuvent modifier leurs articles et sans approbation&lt;br /&gt;
* max_articles : nombre maximum d'articles sur la page des archives&lt;br /&gt;
* allow_manupdate : entier indiquant si les gestionnaires peuvent modifier les articles. Valeurs possibles : 0, 1, 2&lt;br /&gt;
0 : les gestionnaires ne peuvent pas modifier les articles&lt;br /&gt;
1 : les gestionnaires peuvent modifier les articles, mais avec approbation&lt;br /&gt;
2 : les gestionnaires peuvent modifier les articles et sans approbation&lt;br /&gt;
* auto_approbation : Y si on approuve automatiquement le contributeur dans le cas où il fait partie de la première étape du schéma d'approbation, N sinon&lt;br /&gt;
* busetags : Y si on utilise les mots-clés du thésaurus, N sinon&lt;br /&gt;
* allow_addImg : Y si on permet aux auteurs d'associer une image à un article&lt;br /&gt;
* allow_article_rating : Y si on permet aux auteurs des commentaires de noter les articles, N sinon&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicscom_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant faire des commentaires sur le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsman_groups ===&lt;br /&gt;
Table de droits d'accès : groupes gestionnaires du thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsmod_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant modifier des articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicssub_groups ===&lt;br /&gt;
Table de droits d'accès : groupes pouvant soumettre de nouveaux articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group : &lt;br /&gt;
&lt;br /&gt;
=== Table bab_topicsview_groups ===&lt;br /&gt;
Table de droist d'accès : groupes pouvant voir les articles dans le thème d'articles&lt;br /&gt;
* id : &lt;br /&gt;
* id_object : &lt;br /&gt;
* id_group :&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories ===&lt;br /&gt;
contient les catégories d'articles (conteneurs des thèmes d'articles)&lt;br /&gt;
* id : identifiant de la catégorie&lt;br /&gt;
* title : titre de la catégorie&lt;br /&gt;
* description : description de la catégorie&lt;br /&gt;
* enabled : vaut Y si la section de la catégorie est activée, N sinon&lt;br /&gt;
* template : nom du patron de section&lt;br /&gt;
* id_dgowner : identifiant de la délégation où se trouve la catégorie, 0 si dans tout le site&lt;br /&gt;
* optional : utilisation inconnue !!!&lt;br /&gt;
* id_parent : identifiant de la catégorie parente&lt;br /&gt;
* display_tmpl : nom du patron d'affichage&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_categories_images ===&lt;br /&gt;
contient les images associées aux catégories d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idCategory : identifiant de la catégorie d'articles&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;br /&gt;
&lt;br /&gt;
=== Table bab_topics_images ===&lt;br /&gt;
contient les images associées aux thèmes d'articles&lt;br /&gt;
* id : identifiant de l'image&lt;br /&gt;
* idTopic : identifiant du thème&lt;br /&gt;
* name : nom du fichier image avec son extension (ex : gaston.jpg)&lt;br /&gt;
* relativePath : chemin relatif (par rapport au répertoire d'upload) de l'image sans le nom du fichier (ex : articles/DG0/articlesImg/1298/)&lt;/div&gt;</summary>
		<author><name>Jeraiz</name></author>	</entry>

	</feed>