openMairie Framework Documentation

openMairie Framework Documentation
openMairie Framework
Documentation
Version 4.5
openMairie
16 11 2015
Table des matières
1
2
Tutoriel - Créer une application
1.1 Tutoriel - Créer une application . . . . . . . . . . . . . . . . . . . . . . .
1.1.1
Créer la base de données . . . . . . . . . . . . . . . . . . . . . .
1.1.2
Créer les formulaires . . . . . . . . . . . . . . . . . . . . . . . .
1.1.2.1 Générer les formulaires et édition du courrier . . . . . . .
1.1.2.2 Générer les formulaires et édition de l’emetteur . . . . .
1.1.2.3 Générer les formulaires et édition de service . . . . . . .
1.1.2.4 Intégrer les formulaires dans le menu . . . . . . . . . . .
1.1.2.5 Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.3
Personnaliser son application . . . . . . . . . . . . . . . . . . . .
1.1.3.1 Faire un affichage courrier plus convivial . . . . . . . . .
1.1.3.2 Rendre obligatoire des champs . . . . . . . . . . . . . .
1.1.3.3 Valoriser un champ par défaut . . . . . . . . . . . . . . .
1.1.3.4 Mettre en majuscule un champ . . . . . . . . . . . . . .
1.1.3.5 Principe à retenir . . . . . . . . . . . . . . . . . . . . . .
1.1.4
Modifier la base et regénérer . . . . . . . . . . . . . . . . . . . .
1.1.4.1 Rajouter un champ registre dans courrier . . . . . . . . .
1.1.4.2 Rajouter l’adresse dans emetteur . . . . . . . . . . . . .
1.1.4.3 Améliorer la présentation du formulaire emetteur . . . .
1.1.4.4 Les surcharges d’openCimetiere . . . . . . . . . . . . .
1.1.5
Créer ses états . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.5.1 Créer l’état service . . . . . . . . . . . . . . . . . . . . .
1.1.5.2 Créer le sous-état courrier . . . . . . . . . . . . . . . . .
1.1.5.3 Associer le sous-état courrier à l’état service . . . . . . .
1.1.5.4 Mettre le nom et le prénom de l’emetteur dans le sous-état
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
4
5
7
8
9
9
12
13
14
15
15
15
15
16
16
17
17
18
18
19
19
21
Manuel d’usage
2.1 Manuel d’usage . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1
Installation . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.2
Configuration . . . . . . . . . . . . . . . . . . . . . . . .
2.1.3
Administration . . . . . . . . . . . . . . . . . . . . . . .
2.1.3.1 Les tableaux de bord . . . . . . . . . . . . . . . .
2.1.3.1.1
Widget . . . . . . . . . . . . . . . . . .
2.1.3.1.2
Composition . . . . . . . . . . . . . . .
2.1.3.2 Les éditions . . . . . . . . . . . . . . . . . . . .
2.1.3.2.1
États et lettres types . . . . . . . . . . .
2.1.3.2.1.1
Bloc ‘édition’ . . . . . . . . . .
2.1.3.2.1.2
Paramètres généraux de l’édition
2.1.3.2.1.3
Bloc ‘titre’ . . . . . . . . . . . .
2.1.3.2.1.4
Paramètres du titre de l’édition .
2.1.3.2.1.5
Bloc ‘corps’ . . . . . . . . . . .
2.1.3.2.1.6
Paramètres des sous-états . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
23
23
23
23
23
23
23
23
23
23
24
24
25
25
26
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
i
2.1.3.2.1.7
Bloc ‘champs de fusion’ . . . . . . . . . . .
2.1.3.2.1.8
Aide à la saisie dans les éditeurs de texte riche
2.1.3.2.1.9
Gestion des tableaux . . . . . . . . . . . . .
2.1.3.2.1.10 Gestion des code-barres . . . . . . . . . . . .
2.1.3.2.1.11 Gestion des sauts de page . . . . . . . . . . .
2.1.3.2.1.12 Gestion du mode plein écran . . . . . . . . .
2.1.3.2.1.13 Insertion de sous-états . . . . . . . . . . . . .
2.1.3.2.2
Sous-états . . . . . . . . . . . . . . . . . . . . . . .
2.1.3.2.3
Requêtes . . . . . . . . . . . . . . . . . . . . . . . .
2.1.3.2.4
Logos . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.3.3 La géolocalisation . . . . . . . . . . . . . . . . . . . . . . . .
2.1.4
Génération . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.4.2 L’interface . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.4.2.1
Analyse de la base . . . . . . . . . . . . . . . . . . .
2.1.4.2.2
Les fichiers à générer . . . . . . . . . . . . . . . . .
2.1.4.3 Conditions de génération . . . . . . . . . . . . . . . . . . . .
2.1.4.3.1
Contraintes de la base de données . . . . . . . . . .
2.1.4.3.2
Contraintes du système de fichiers . . . . . . . . . .
2.1.4.4 Définition des modèles de données . . . . . . . . . . . . . . .
2.1.4.4.1
L’identifiant . . . . . . . . . . . . . . . . . . . . . .
2.1.4.4.1.1
Définition de l’identifiant . . . . . . . . . . .
2.1.4.4.1.2
Fonctionnement interne du générateur . . . .
2.1.4.4.2
Les références vers d’autres objets . . . . . . . . . .
2.1.4.4.2.1
Définition des références . . . . . . . . . . .
2.1.4.4.2.2
Avec PostgresSQL . . . . . . . . . . . . . .
2.1.4.4.2.3
Fonctionnement interne du générateur . . . .
2.1.4.4.2.4
Affichage dans les formulaires . . . . . . . .
2.1.4.4.3
Les champs uniques . . . . . . . . . . . . . . . . . .
2.1.4.4.3.1
Définition des champs uniques . . . . . . . .
2.1.4.4.3.2
Fonctionnement interne du générateur . . . .
2.1.4.4.3.3
Affichage dans les formulaires . . . . . . . .
2.1.4.4.4
Les champs requis . . . . . . . . . . . . . . . . . . .
2.1.4.4.4.1
Définition des champs requis . . . . . . . . .
2.1.4.4.4.2
Fonctionnement interne du générateur . . . .
2.1.4.4.4.3
Affichage dans les formulaires . . . . . . . .
2.1.4.4.5
Le champ libellé . . . . . . . . . . . . . . . . . . . .
2.1.4.4.5.1
Définition du libellé . . . . . . . . . . . . . .
2.1.4.5 Fonctionnalités avancées . . . . . . . . . . . . . . . . . . . .
2.1.4.5.1
Ajouter une date de validité à un modèle . . . . . . .
2.1.4.5.1.1
Description . . . . . . . . . . . . . . . . . .
2.1.4.5.1.2
Définition des dates de validité . . . . . . . .
2.1.4.5.1.3
Affichage dans les formulaires . . . . . . . .
2.1.4.6 L’analyse de la base . . . . . . . . . . . . . . . . . . . . . . .
2.1.4.6.1
Type de champs . . . . . . . . . . . . . . . . . . . .
2.1.4.6.2
Equivalence type pgsql / type openMairie . . . . . .
2.1.4.6.3
Nom de champ et nom de table . . . . . . . . . . . .
2.1.4.7 Les fichiers générés . . . . . . . . . . . . . . . . . . . . . . .
2.1.4.7.1
Formulaires . . . . . . . . . . . . . . . . . . . . . .
2.1.4.7.1.1
Paramétres de type table . . . . . . . . . . .
2.1.4.7.1.2
Paramétres de type Form . . . . . . . . . . .
2.1.4.7.2
Objets « métier » . . . . . . . . . . . . . . . . . . .
2.1.4.7.3
Etats . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.4.7.4
Requêtes mémorisées . . . . . . . . . . . . . . . . .
2.1.4.7.5
Imports . . . . . . . . . . . . . . . . . . . . . . . .
2.1.4.7.6
Mots-clefs Robot Framework . . . . . . . . . . . . .
2.1.4.8 Paramétrage générateur . . . . . . . . . . . . . . . . . . . . .
2.1.4.8.1
gen/dyn/gen.inc.php . . . . . . . . . . . . .
ii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
26
26
26
28
28
28
28
28
28
28
28
28
29
29
30
30
31
31
31
31
31
31
31
32
32
32
32
32
32
32
32
32
33
33
33
33
33
33
33
33
33
34
34
34
34
35
35
35
36
36
36
36
37
38
38
38
38
38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
40
40
41
41
42
42
43
43
Manuel de référence
3.1 Manuel de référence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1
Arborescence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.1 Les répertoires spécifiques à l’applicatif . . . . . . . . . . . . . . . . .
3.1.1.1.1
data/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.1.2
app/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.1.3
dyn/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.1.4
gen/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.1.5
locales/ . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.1.6
obj/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.1.7
sql/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.1.8
tests/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.1.9
tmp/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.1.10 trs/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.2 Les répertoires du framework . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.2.1
php/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.2.2
core/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.2.3
css/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.2.4
img/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.2.5
js/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.2.6
lib/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.2.7
pdf/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.2.8
scr/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1.2.9
spg/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2
Initialisation de la base de données . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.2.1 Description du dossier data/pgsql/ . . . . . . . . . . . . . . . . . .
3.1.2.1.1
Description de tous les fichiers init*.sql . . . . . . . . . .
3.1.2.1.1.1
Le fichier init.sql . . . . . . . . . . . . . . . . . .
3.1.2.1.1.2
Les fichiers init_metier*.sql . . . . . . . . . .
3.1.2.1.1.3
Les fichiers init_parametrage*.sql . . . . . .
3.1.2.1.1.4
Le fichier init_data.sql . . . . . . . . . . . . . .
3.1.2.1.2
Description des fichiers vX.X.X.sql ou ver_X.X.X.sql
3.1.2.1.3
Description du fichier update_sequences.sql . . . . . .
3.1.2.1.4
Description du fichier install.sql . . . . . . . . . . . . .
3.1.2.2 Paramétrage de la connexion à la base de données . . . . . . . . . . . .
3.1.3
Paramétrage du framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.3.1 Les zones de navigation . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.3.1.1
Le menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.3.1.2
Les actions personnelles . . . . . . . . . . . . . . . . . . . .
3.1.3.1.3
Les raccourcis . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.3.1.4
Les actions globales . . . . . . . . . . . . . . . . . . . . . . .
3.1.3.2 Le tableau de bord . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.3.3 Les variables locales et la langue . . . . . . . . . . . . . . . . . . . . .
3.1.3.4 Le paramétrage de l application metier . . . . . . . . . . . . . . . . . .
3.1.3.5 Le Parametrage des librairies . . . . . . . . . . . . . . . . . . . . . . .
3.1.3.6 Le mode DEBUG . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.3.7 La version de votre application . . . . . . . . . . . . . . . . . . . . . .
3.1.3.8 Les informations generales . . . . . . . . . . . . . . . . . . . . . . . .
3.1.3.9 L’installation automatique . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
45
45
45
46
46
46
46
46
47
47
47
47
47
47
48
48
48
48
48
48
48
49
49
49
49
49
49
49
50
50
50
50
50
51
51
51
52
53
54
55
56
57
57
58
58
59
59
60
60
2.1.5
2.1.6
3
2.1.4.8.2
gen/dyn/tab.inc.php . . . . . .
2.1.4.8.3
gen/dyn/form.inc.php . . . . .
2.1.4.8.4
gen/dyn/permissions.inc.php
2.1.4.8.5
gen/dyn/pdf.inc.php . . . . . .
2.1.4.8.6
gen/dyn/etat.inc.php . . . . .
2.1.4.8.7
gen/dyn/sousetat.inc.php . .
Intégration . . . . . . . . . . . . . . . . . . . . . . . . . .
Pour aller plus loin... . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
iii
3.1.4
3.1.5
3.1.6
3.1.7
3.1.8
iv
3.1.3.10 Les paramétres des combos . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.3.11 Les paramétres éditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.3.12 Les paramétres om_sig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Afficher les tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.4.1 Les script scr/tab.php et scr/soustab.php . . . . . . . . . . . . . . . . . . . . .
3.1.4.2 La requête SQL d’affichage . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.4.3 Les fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.4.4 Le composant openMairie . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
La recherche avancée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.5.1 Les différents types de recherche . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.5.1.1
Recherche simple . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.5.1.2
Recherche avancée . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.5.1.2.1
Recherche avancée mono-critère . . . . . . . . . . . . . . . .
3.1.5.1.2.2
Recherche avancée multi-critères . . . . . . . . . . . . . . . .
3.1.5.2 Configuration de la recherche avancée . . . . . . . . . . . . . . . . . . . . . .
3.1.5.2.1
Activation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.5.2.2
Autres paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.5.3 Configuration des critères de recherche . . . . . . . . . . . . . . . . . . . . . .
3.1.5.3.1
Configuration simple . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.5.3.2
Configuration avancée . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.5.3.2.1
Créer un intervalle de date . . . . . . . . . . . . . . . . . . .
3.1.5.3.2.2
Créer un champ de recherche avec menu déroulant personnalisé
3.1.5.3.2.3
Tester si une donnée est présente ou non dans un groupe de
données . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Les formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.6.1.1
Consultation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.6.1.2
Ajout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.6.1.3
Modification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.6.1.4
Suppression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.6.1.5
Accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.6.2 Description technique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.6.2.1
scr/form.php et scr/sousform.php . . . . . . . . . . . . . . . . . . . .
3.1.6.3 Description de la classe dbform . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.6.3.1
Présentation des méthodes de la classe . . . . . . . . . . . . . . . . .
3.1.6.3.2
Méthodes d’initialisation de l’affichage du formulaire . . . . . . . . .
3.1.6.3.3
Méthodes d’actions . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.6.3.4
Gestion des transactions lors de l’appel aux méthodes d’actions . . . .
3.1.6.3.5
Méthodes appelées lors de la validation . . . . . . . . . . . . . . . .
3.1.6.4 Description de la classe formulaire . . . . . . . . . . . . . . . . . . . . . . . .
3.1.6.4.1
Méthodes d’affichage de widgets . . . . . . . . . . . . . . . . . . . .
3.1.6.4.2
Les méthodes de construction et d’affichage . . . . . . . . . . . . . .
3.1.6.4.3
Les méthodes assesseurs changent les valeurs des attributs de l’objet
formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Les actions vers formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.7.1 Actions des tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.7.1.1
Les actions par défaut . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.7.1.2
Créer de nouvelles actions . . . . . . . . . . . . . . . . . . . . . . .
3.1.7.1.2.1
Définition de l’action . . . . . . . . . . . . . . . . . . . . . .
3.1.7.1.2.2
Définition du mode d’affichage en sous-tableau . . . . . . . .
3.1.7.1.2.3
Définition de l’ordre d’affichage . . . . . . . . . . . . . . . .
3.1.7.1.2.4
Définition des droits d’affichage . . . . . . . . . . . . . . . .
3.1.7.2 Actions du menu contextuel de la consultation . . . . . . . . . . . . . . . . . .
3.1.7.2.1
Définition des actions dans les attributs de la classe de l’objet . . . . .
3.1.7.2.2
Définition des actions dans *.form.inc.php (obsolète) . . . . . . . . .
La gestion des accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.8.1 Fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.8.2 Les tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
60
60
61
61
62
62
62
63
63
63
63
63
63
64
64
64
65
65
66
66
66
67
68
68
68
68
69
69
69
69
69
70
70
70
73
73
73
74
74
76
76
77
77
78
78
79
79
79
79
79
80
80
81
81
81
3.1.9
3.1.10
3.1.11
3.1.12
3.1.13
3.1.8.3 Les règles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
3.1.8.4 La multi-collectivité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
3.1.8.5 Les login et logout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
3.1.8.6 Les utilitaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Module ‘Tableau de bord’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
3.1.9.1 principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
3.1.9.1.1
paramétrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.1.9.1.2
les widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.1.9.1.3
le tableau de bord paramétrable . . . . . . . . . . . . . . . . . . . . . 83
3.1.9.2 widget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.1.9.2.1
la création de widget . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.1.9.2.2
Le widget de type ‘Web’ . . . . . . . . . . . . . . . . . . . . . . . . 84
3.1.9.2.2.1
interne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3.1.9.2.2.2
externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3.1.9.2.3
Le widget de type ‘Script’ . . . . . . . . . . . . . . . . . . . . . . . . 85
3.1.9.2.4
Modèle de données . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
3.1.9.3 Les tableaux de bord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
3.1.9.3.1
accès au tableau de bord . . . . . . . . . . . . . . . . . . . . . . . . 86
3.1.9.3.2
Modèle de données . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
3.1.9.4 Composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Module ‘Édition’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
3.1.10.1 Les états et lettres types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
3.1.10.1.1 Paramétrer des états . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
3.1.10.1.2 Paramétrer des lettres-type . . . . . . . . . . . . . . . . . . . . . . . 89
3.1.10.1.3 Actif, non actif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
3.1.10.1.4 Les requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.1.10.1.4.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.1.10.1.4.2 Modèle de données . . . . . . . . . . . . . . . . . . . . . . . 90
3.1.10.1.5 Les sous-états . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.1.10.1.6 Les champs de fusion . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.1.10.1.7 Les variables de remplacement . . . . . . . . . . . . . . . . . . . . . 91
3.1.10.1.7.1 Les fichiers de configuration ../dyn/var*pdf.inc . . . . 91
3.1.10.1.7.2 Les méthodes globales de la classe du fichier
../obj/om_dbform.class.php . . . . . . . . . . . . . 91
3.1.10.1.7.3 La table de paramètres om_parametre . . . . . . . . . . . 91
3.1.10.1.8 Les logos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.1.10.1.9 L’éditeur WYSIWYG . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.1.10.1.10 Les anciens fichiers de paramétrage . . . . . . . . . . . . . . . . . . 91
3.1.10.1.11 La prévisualisation . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3.1.10.2 Les listings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3.1.10.2.1 Description de la fonctionnalité . . . . . . . . . . . . . . . . . . . . . 92
3.1.10.2.2 Le fichier de paramétrage ../sql/pgsql/<OBJ>.pdf.inc.php 92
3.1.10.3 Les étiquettes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3.1.10.3.1 Description de la fonctionnalité . . . . . . . . . . . . . . . . . . . . . 92
3.1.10.3.2 Le fichier de paramétrage ../sql/pgsql/<OBJ>.pdfetiquette.inc.php 92
3.1.10.4 Composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Module ‘Import’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3.1.11.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3.1.11.2 Paramétrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
3.1.11.2.1 Le script de paramétrage ../sql/pgsql/<OBJ>.import.inc.php 93
3.1.11.3 Composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Module ‘Reqmo’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
3.1.12.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
3.1.12.2 Paramétrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
3.1.12.2.1 Le script de paramétrage ../sql/pgsql/<OBJ>.reqmo.inc.php 94
3.1.12.3 Composants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Module ‘Géolocalisation’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.1.13.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
v
3.1.13.1.1 Géo localisation automatique . . . . . . . . . . . . . . . . . . . . .
3.1.13.1.2 Affichage de carte . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.13.1.3 Paramétrage de la carte . . . . . . . . . . . . . . . . . . . . . . . .
3.1.13.2 objet map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.13.3 afficher les layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.13.3.1 Les fonds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.13.3.2 Les datas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.13.3.3 Les flux wms . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.13.3.4 La notion de pannier . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.13.3.5 La géométrie à modifier : couche vectors : . . . . . . . . . . . . . .
3.1.13.3.6 Les géométries complémentaires . . . . . . . . . . . . . . . . . . .
3.1.13.4 installation d’om_sig_map . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.13.4.1 optimisation composant openLayers . . . . . . . . . . . . . . . . .
3.1.13.5 postgis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.13.5.1 principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.13.5.2 base et schéma . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.13.6 geocodage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.13.6.1 var_adresse_postale.inc . . . . . . . . . . . . . . . . . . . . . . . .
3.1.13.6.2 Mise en oeuvre dans un formulaire d’un bouton de la geolocalisation
3.1.13.7 data_sig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.13.7.1 Saisir le périmètre de sa commune . . . . . . . . . . . . . . . . . .
3.1.13.7.2 Récupérer les données de l’IGN . . . . . . . . . . . . . . . . . . .
3.1.13.7.3 Recupérer des données shape . . . . . . . . . . . . . . . . . . . . .
3.1.13.7.4 Recupération des données de la DGI . . . . . . . . . . . . . . . . .
3.1.14 Abstraction du ‘layout’ (ergonomie) . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.14.1 Le composant jquery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.14.2 Les feuilles de style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.15 Abstraction du ‘filestorage’ (stockage des fichiers) . . . . . . . . . . . . . . . . . . .
3.1.15.1 Principe général . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.15.2 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.15.2.1 Description de l’abstracteur . . . . . . . . . . . . . . . . . . . . . .
3.1.15.2.2 Description du fichier de configuration . . . . . . . . . . . . . . . .
3.1.15.2.3 Description des méthodes de la classe filestorage . . . . . . . . . .
3.1.15.2.4 Description du connecteur depredacted . . . . . . . . . . . . . . .
3.1.15.2.5 Description du connecteur filesystem . . . . . . . . . . . . . . . . .
3.1.15.2.6 Description du connecteur filetransferprotocol . . . . . . . . . . .
3.1.15.2.7 Description du connecteur alfresco . . . . . . . . . . . . . . . . . .
3.1.15.3 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.15.3.1 Configuration du widget Upload . . . . . . . . . . . . . . . . . . .
3.1.15.3.1.1 Contraintes . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.15.3.1.2 Métadonnées . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.15.3.2 Récupération du fichier . . . . . . . . . . . . . . . . . . . . . . . .
3.1.15.3.3 Scripts permettant de visualiser / d’accéder au fichier . . . . . . . .
3.1.15.3.3.1 spg/file.php . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.15.3.3.2 spg/voir.php . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.16 Tests et Intégration Continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.16.1 Pré-requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.16.1.1 PHPUnit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.16.1.1.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.16.1.2 Selenium Server . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.16.1.2.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.16.1.3 Robot Framework . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.16.1.3.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.16.2 Fonctionnement et Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.16.2.1 Pré-requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.16.2.2 Tous les tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.16.2.3 Un seul TestSuite . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.16.3 Développement et bonnes pratiques . . . . . . . . . . . . . . . . . . . . . . .
vi
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
96
96
96
97
97
99
99
99
101
102
103
103
103
104
104
104
104
104
105
107
107
108
108
109
109
109
109
110
110
110
110
110
111
112
112
113
113
113
113
113
114
114
114
114
115
115
115
115
115
115
115
115
115
116
116
116
116
116
3.1.16.3.1 Documentation RobotFramework
3.1.16.3.2 Convention de nommage . . . .
3.1.16.3.3 Génération . . . . . . . . . . . .
3.1.16.3.4 Bonnes pratiques . . . . . . . .
3.1.17 Les scripts specifiques de l’application . . . . . . .
3.1.17.1 Réaliser un script complementaire . . . .
3.1.17.2 Exemple . . . . . . . . . . . . . . . . . .
4
5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
116
117
117
117
117
117
119
Historique & Mises à niveau
4.1 Historique & Mises à niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1
La version 4.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.1.1 Les nouveautés de la version 4.5 . . . . . . . . . . . . . . . . . . . . . . .
4.1.1.2 Mettre à niveau depuis openMairie 4.4 vers 4.5 . . . . . . . . . . . . . . . .
4.1.2
La version 4.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.2.1 Les nouveautés de la version 4.4 . . . . . . . . . . . . . . . . . . . . . . .
4.1.2.2 Mettre à niveau depuis openMairie 4.3 vers 4.4 . . . . . . . . . . . . . . . .
4.1.2.2.1
Étape 1 : mettre à jour la base de données . . . . . . . . . . . . .
4.1.2.2.1.1
La structure . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.2.2.2
Étape 2 : mise à jour du menu . . . . . . . . . . . . . . . . . . . .
4.1.2.2.3
Étape 3 : vérification des requêtes et logos . . . . . . . . . . . . .
4.1.2.2.4
Étape 4 : système de stockage des fichiers . . . . . . . . . . . . .
4.1.2.2.5
Les erreurs connues . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.3
La version 4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.3.1 Les nouveautés de la version 4.3 . . . . . . . . . . . . . . . . . . . . . . .
4.1.3.2 Mettre à niveau depuis openMairie 4.2 vers 4.3 . . . . . . . . . . . . . . . .
4.1.3.2.1
Étape 1 : mettre à jour les surcharges du framework . . . . . . . .
4.1.3.2.1.1
Classe application . . . . . . . . . . . . . . . . . . .
4.1.3.2.1.2
Classe dbForm . . . . . . . . . . . . . . . . . . . . . . .
4.1.3.2.1.3
Classe formulaire . . . . . . . . . . . . . . . . . . . .
4.1.3.2.1.4
Classe table . . . . . . . . . . . . . . . . . . . . . . . .
4.1.3.2.2
Étape 2 : mettre à jour la base de données . . . . . . . . . . . . .
4.1.3.2.2.1
La structure . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.3.2.2.2
Les tables métier . . . . . . . . . . . . . . . . . . . . . .
4.1.3.2.2.3
PRIMARY KEY . . . . . . . . . . . . . . . . . . . . . . .
4.1.3.2.2.4
FOREIGN KEY (PostgresSQL) . . . . . . . . . . .
4.1.3.2.2.5
UNIQUE . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.3.2.2.6
NOT NULL . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.3.2.3
Étape 3 : mettre à jour les fichiers de surcharge du répertoire sql/
4.1.3.2.3.1
Alias des tables étrangères . . . . . . . . . . . . . . . . .
4.1.3.2.3.2
La clause ORDER BY . . . . . . . . . . . . . . . . . . . .
4.1.3.2.3.3
Les actions du tableau . . . . . . . . . . . . . . . . . . . .
4.1.3.2.3.4
Les actions d’openMairie . . . . . . . . . . . . . . . . . .
4.1.3.2.3.5
Les actions personnalisées . . . . . . . . . . . . . . . . .
4.1.3.2.3.6
Définition de l’action . . . . . . . . . . . . . . . . . . . .
4.1.3.2.3.7
Définition du mode d’affichage en sous-tableau . . . . . .
4.1.3.2.3.8
Définition de l’ordre d’affichage . . . . . . . . . . . . . .
4.1.3.2.3.9
Définition des droits d’affichage . . . . . . . . . . . . . .
4.1.3.2.4
Les erreurs connues . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.4
La version 4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.4.1 Les nouveautés de la version 4.2 . . . . . . . . . . . . . . . . . . . . . . .
4.1.4.2 Mettre à niveau depuis openMairie 4.1 vers 4.2 . . . . . . . . . . . . . . . .
4.1.4.2.1
EXTERNALS.txt . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.4.2.2
Regenerer les tables avec genfull.php . . . . . . . . . . . . .
4.1.4.2.3
Modifier les paramètres dyn . . . . . . . . . . . . . . . . . . . . .
4.1.4.2.4
Dans obj/ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.1.4.2.5
Evolution om_sig_point vers om_sig_map . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
123
123
123
123
123
123
123
123
123
123
124
124
124
124
124
124
124
124
124
125
125
125
125
125
125
126
126
126
126
126
126
126
127
127
128
128
128
128
128
129
129
129
129
129
129
130
130
130
Règles
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
131
vii
5.1
6
viii
Règles . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1
Convention de codage . . . . . . . . . . . . . . .
5.1.1.1 L’indentation du code . . . . . . . . . .
5.1.1.2 Encodage des fichiers . . . . . . . . . .
5.1.1.3 Tags dans le code PHP . . . . . . . . . .
5.1.1.4 HTML Valide et W3C . . . . . . . . . .
5.1.1.5 Les commentaires dans le code . . . . .
5.1.1.6 Images . . . . . . . . . . . . . . . . . .
5.1.2
Versionnage . . . . . . . . . . . . . . . . . . . .
5.1.2.1 Convention de numérotation des versions
5.1.3
Documentation . . . . . . . . . . . . . . . . . .
5.1.4
Publication . . . . . . . . . . . . . . . . . . . .
5.1.4.1 La documentation . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
131
131
131
131
131
131
131
132
132
132
132
132
132
Outils
6.1 Outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1
Apache Subversion (SVN) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1.1 Pré-requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1.2 L’arborescence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1.3 Les règles d’or . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1.4 Les commandes basiques à connaître . . . . . . . . . . . . . . . . . . . . . . .
6.1.1.5 Externals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1.6 Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1.7 Les clients graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1.8 Tutoriaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1.8.1
Importer un nouveau projet . . . . . . . . . . . . . . . . . . . . . . .
6.1.1.8.2
Publier une nouvelle version . . . . . . . . . . . . . . . . . . . . . .
6.1.1.8.3
svn utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2
Concurrent versions system (CVS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2.1 forge > local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2.2 local -> forge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2.3 local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2.4 export . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2.5 tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2.6 Import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2.7 checkout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2.8 Divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2.9 Changer le système de gestion des version de CVS vers SVN sur la forge de
l’adullact . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2.9.1
Pré-requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2.9.2
Etape 1 - Récupérer le code du CVS . . . . . . . . . . . . . . . . . .
6.1.2.9.3
Etape 2 - Changer le type de dépôt . . . . . . . . . . . . . . . . . . .
6.1.2.9.4
Etape 3 - Créer la structure du dépôt . . . . . . . . . . . . . . . . . .
6.1.2.9.5
Etape 4 - Importer le code sur le nouveau dépôt Subversion . . . . . .
6.1.2.9.5.1
Cas 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.2.9.5.2
Cas 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.3
GIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.4
Meld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.5
POEdit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.5.1 Spécification dans le code des chaînes à traduire . . . . . . . . . . . . . . . . .
6.1.5.2 Préparation des dossiers de locales . . . . . . . . . . . . . . . . . . . . . . . .
6.1.5.3 Installation et configuration de POEdit . . . . . . . . . . . . . . . . . . . . . .
6.1.5.3.1
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.5.3.2
Gestion de plusieurs langues . . . . . . . . . . . . . . . . . . . . . .
6.1.5.4 Configuration d’un projet dans POEdit . . . . . . . . . . . . . . . . . . . . . .
6.1.5.5 Traduction des chaînes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.6
Sphinx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.7
Github.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
135
135
135
135
135
135
136
136
136
136
137
137
137
138
139
140
140
140
141
141
142
142
142
142
142
143
143
143
143
143
143
143
144
144
144
144
145
145
145
145
145
145
146
6.1.7.1 Créer un projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.7.2 Importer la documentation depuis un projet subversion de l’adullact .
6.1.7.3 Faire l’import initial d’un projet sphinx . . . . . . . . . . . . . . . .
6.1.7.4 Contribuer à une documentation . . . . . . . . . . . . . . . . . . . .
6.1.8
readthedocs.org . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.8.1 Importer un nouveau projet sur RTD . . . . . . . . . . . . . . . . .
6.1.8.2 Paramétrer une nouvelle version d’un projet existant . . . . . . . . .
7
Contributeurs
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
146
146
147
147
147
147
148
149
ix
x
openMairie Framework Documentation, Version 4.5
Note : Cette création est mise à disposition selon le Contrat Paternité-Partage des Conditions Initiales à l’Identique
2.0 France disponible en ligne http://creativecommons.org/licenses/by-sa/2.0/fr/ ou par courrier postal à Creative
Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.
Ce document a pour but de guider les développeurs dans la mise en œuvre d’un projet openMairie.
Avec plus de 30 applications développées pour les collectivités locales accessibles sur le site http://openmairie.org,
nous souhaitons au travers de ce guide , diffuser notre expérience auprès des collectivités et des acteurs économiques du libre qui les accompagnent.
C’est donc une méthode conçue au fur à mesure de nos développements que nous vous proposons de partager et toutes remarques sont les bienvenues, alors n’hésitez pas à nous en faire part à l’adresse mail suivante :
contact@openmairie.org
Nous avons conçu openMairie pour fabriquer une maquette le plus en amont possible en s’appuyant sur le modèle
de données créé dans la base de données et en intégrant les composants standards du “monde libre”.
Cette maquette permet très rapidement d’engager un dialogue participatif avec les utilisateurs, de concentrer le
développeur uniquement sur le “métier” et de faire valider par l’utilisateur les évolutions successives.
Si vous débutez, il est préférable de commencer par le chapitre “créer une application” qui permet de prendre en
main facilement le générateur et le framework openMairie en vous guidant pas à pas dans le mise en place d’une
gestion de courrier.
Le chapitre sur le “framework” complète l’exemple ci dessus en vous décrivant le paramétrage, les classes formulaires et éditions du framework. Il a pour but de vous informer de manière complète sur le fonctionnement du
framework
Le chapitre consacré au “générateur” décrit dans le détail le fonctionnement de cet outil et de ses assistants. Cet
outil permet de fabriquer la maquette.
La version 4.1.0 permet de construire des applications composites (ou mash up) en intégrant des contenus venant
d’application externes. Cela permet de construire rapidement une application à faible coût grâce à la fusion de
multiple service internet
Le chapitre consacré a l’ “information géographique” décrit dans le détail le fonctionnement SIG interne d’openMairie combinant les API d’internet avec le framework. (La version 4.2.0 améliore l’interface avec l’intégration
de web service)
Enfin ce document rassemble toutes les règles de codage du projet openMairie, ainsi que des outils pour aider et
guider les développeurs de la communauté.
Les règles indiquées doivent être appliquées pour qu’un projet puisse intégrer la distribution openMairie car l’objectif est de faciliter la lisibilité et la maintenance du code ainsi que la prise en main par les collectivités.
Bonne lecture !
Table des matières
1
openMairie Framework Documentation, Version 4.5
2
Table des matières
CHAPITRE 1
Tutoriel - Créer une application
1.1 Tutoriel - Créer une application
Ce chapitre vous propose de créer une application de gestion de courrier pas à pas.
1.1.1 Créer la base de données
Vous devez au préalable récupérer le framework. Dans le répertoire www de votre serveur apache :
svn checkout svn://scm.adullact.net/scmrepos/svn/openmairie/openmairie_exemple/trunk openExemple
Il vous est proposé de créer la base de données sous PostgreSQL :
— Créer les tables nécessaires au framework openMairie :
cd data/pgsql
sudo su postgres
dropdb openexemple && createdb openexemple && psql openexemple -f install.sql
— Créer les tables nécessaires à notre exemple :
— table courrier
courrier
dateenvoi
objetcourrier
emetteur
service
int 8
date
text
int8
int8
cle primaire
int 8
varchar 20
varchar 20
cle primaire
cle secondaire
cle secondaire
— table emetteur
emetteur
nom
prenom
— table service
service
libelle
int 8
varchar 20
cle primaire
— La requête correspondante en PostgreSQL est la suivante :
-- Création des séquences
CREATE SEQUENCE emetteur_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
3
openMairie Framework Documentation, Version 4.5
CREATE SEQUENCE service_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
CREATE SEQUENCE courrier_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
-- Création des tables
CREATE TABLE emetteur (
emetteur
int PRIMARY KEY,
nom
varchar(20),
prenom
varchar(20)
);
CREATE TABLE service (
service
int PRIMARY KEY,
libelle
varchar(20)
);
CREATE TABLE courrier
courrier
dateenvoi
objetcourrier
emetteur
service
);
-- clé primaire
-- clé primaire
(
int PRIMARY KEY,
date,
text,
int REFERENCES emetteur,
int REFERENCES service
-- clé primaire
-- clé étrangère
-- clé étrangère
— Modifier le paramétrage openMairie pour faire un accès à la base créée :
dyn/database.inc.php
voir framework/parametrage
— Accéder avec votre navigateur sur openExemple :
login : demo
mot de passe : demo
1.1.2 Créer les formulaires
Nous allons maintenant créer les formulaires à l’aide du générateur.
Pour cela, il faut aller dans le menu Administration -> Générateur.
Vous devez avoir 3 nouveaux boutons : courrier, service et emetteur.
4
Chapitre 1. Tutoriel - Créer une application
openMairie Framework Documentation, Version 4.5
Avant de commencer, l’utilisateur apache www-data doit avoir les droits d’écriture dans les repertoires /gen , /sql
et /obj.
1.1.2.1 Générer les formulaires et édition du courrier
En appuyant sur le bouton de courrier, vous avez les choix de génération :
Au préalable, le générateur a fait une analyse de la base de données :
1.1. Tutoriel - Créer une application
5
openMairie Framework Documentation, Version 4.5
Le générateur a donc détecté 2 clés secondaires et aucun sous formulaire.
C’est pour cela qu’il propose 3 “reqmo” : 1 “reqmo” global et 2 “reqmos” suivant la clé secondaire.
Par défaut, seules les options du formulaire sont cochées.
Si vous le refaites plus tard, seules celles frabriquées par le générateur seront cochées.
Cochez les toutes :
En cliquant sur valider, vous avez le message :
6
Chapitre 1. Tutoriel - Créer une application
openMairie Framework Documentation, Version 4.5
Le paramétrage utilisé est le paramétrage standard.
Vous pouvez le modifier : voir générateur/paramétrage.
L’affichage par colone est “ok”, ce qui veut dire que la taille des colones dans le fichier pdf sera complet (attention
le script ne prend pas le champ blob).
1.1.2.2 Générer les formulaires et édition de l’emetteur
Nous allons procéder de la même manière avec le bouton emetteur.
L’analyse de la base de données est la suivante :
Le générateur repère un sous formulaire courrier. Effectivement, il y a une relation de un à plusieurs entre emetteur
et courrier : un emetteur peut avoir 0 à plusieurs courriers.
En cliquant sur toutes les options puis en validant, vous avez le message suivant :
1.1. Tutoriel - Créer une application
7
openMairie Framework Documentation, Version 4.5
1.1.2.3 Générer les formulaires et édition de service
Nous allons procéder de la même manière avec le bouton service
L’analyse de la base de données est la suivante :
Le générateur repère un sous formulaire courrier. Effectivement, il y a une relation de un à plusieurs entre service
et courrier : un service peut avoir 0 à plusieurs courriers.
En cliquant sur toutes les options, vous avez le message suivant :
8
Chapitre 1. Tutoriel - Créer une application
openMairie Framework Documentation, Version 4.5
1.1.2.4 Intégrer les formulaires dans le menu
Pour accéder à nos formulaires, nous allons les intégrer dans le menu (voir framework/parametrage/menu gauche).
Nous allons appeller le formulaire depuis le menu :
— option Application -> tab.php ?obj=courrier
— option Paramétrage -> tab.php ?obj=emetteur
— option Paramétrage -> tab.php ?obj=service
Il faut ouvrir avec un éditeur le fichier dyn/menu.inc.php et insérer le code suivant :
// {{{ Rubrique APPLICATION
$links[] = array(
"href" => "../scr/tab.php?obj=courrier",
"class" => "courrier",
"title" => _("courrier"),
"right" => "courrier"
);
// {{{ Rubrique PARAMETRAGE
$links[] = array(
"href" => "../scr/tab.php?obj=emetteur",
"class" => "emetteur",
"title" => _("emetteur"),
"right" => "emetteur"
);
$links[] = array(
"href" => "../scr/tab.php?obj=service",
"class" => "service",
"title" => _("service"),
"right" => "service"
);
Il faut également bien placer le code, c’est à dire dans la bonne rubrique (précisée en commentaire) après
$links = array();
et avant
$rubrik['links'] = $links;
Enfin pour y accéder il faut soit donner les droits via le menu framework, soit (et c’est en l’occurrence le cas) dans
le fichier config.inc.php (option utilisée que pour le développement) décommenter la ligne
$config['permission_if_right_does_not_exist'] = true;
Vous pouvez maintenant accéder à vos formulaires par le menu.
1.1.2.5 Menu
Application -> Courrier
Cette opération affiche la table courrier :
1.1. Tutoriel - Créer une application
9
openMairie Framework Documentation, Version 4.5
On accéde en appuyant sur + au formulaire d’insertion où les champs sont :
— la date du courrier avec calendrier,
— l’objet du courrier dans un champ textarea,
— deux contrôles “select” pour le service et l emetteur.
Paramétrage -> Emetteur
Cette operation affiche la table emetteur :
En appuyant sur +, on accède à la saisie.
L’onglet courrier est inactif tant que l’emetteur n’est pas saisi et validé.
10
Chapitre 1. Tutoriel - Créer une application
openMairie Framework Documentation, Version 4.5
Paramétrage -> Service
Cette opération affiche la table service :
En appuyant sur +, on accède à la saisie.
L’onglet courrier est inactif tant que le service n’est pas saisi.
Vous pouvez accéder aux éditions et requêtes mémorisées :
Export -> Edition
Cet option affiche l’ensemble des éditions pdf :
1.1. Tutoriel - Créer une application
11
openMairie Framework Documentation, Version 4.5
pour en savoir plus voir framework/edition
Export -> Requêtes Mémorisées
Cette option affiche les requêtes mémorisées :
pour en savoir plus voir framework/reqmo
Vous pouvez accéder aux éditions en appuyant dans le formulaire d’affichage sur l’imprimante.
Vous pouvez accéder au fichiers d’import :
Administration -> Import
Cette option affiche les scripts d’imports :
Pour en savoir plus voir framework/import.
1.1.3 Personnaliser son application
Nous allons maintenant personnaliser notre application.
Pour ce faire, nous allons saisir un jeu de données.
Vous pouvez le faire avec les formulaires, l’incrémentation des séquences étant faite par le framework. Tout comme
la création des tables stockant les séquences (méthode setId des objets metier).
Sinon exécutez la requête PostgreSQL suivante :
12
Chapitre 1. Tutoriel - Créer une application
openMairie Framework Documentation, Version 4.5
-- création des tables de séquence déjà faite
-- insertion de deux émetteurs avec récupération et incrémentation de la table de séquences
INSERT INTO emetteur (emetteur, nom, prenom) VALUES
(nextval('emetteur_seq'), 'dupont', 'pierre'),
(nextval('emetteur_seq'), 'durant', 'jacques');
-- insertion de deux services avec récupération et incrémentation de la table de séquences
INSERT INTO service (service, libelle) VALUES
(nextval('service_seq'), 'informatique'),
(nextval('service_seq'), 'telephonie');
-- insertion de deux courriers avec récupération et incrémentation de la table de séquences
INSERT INTO courrier (courrier, dateenvoi, objetcourrier, emetteur, service) VALUES
(nextval('courrier_seq'), '2010-12-01', 'Proposition de fourniture de service', 1, 1),
(nextval('courrier_seq'), '2010-12-02', 'Envoi de devis pour formation openMairie', 2, 1);
1.1.3.1 Faire un affichage courrier plus convivial
L’affichage des courriers se fait avec des libellés générés automatiquement.
Ainsi dans le fichier gen/sql/pgsql/courrier.inc.php (qui est inclus dans le fichier sql/pgsql/courrier.inc.php que
vous pourrez modifier) vous avez la variable $champAffiche.
Vu que ce fichier a été créé par le générateur (et est en lecture seule) et vu que nous souhaitons modifier la variable
(pour par exemple avoir le nom et le prénom de l’emetteur au lieu de simplement son nom) il nous faut ouvrir
le fichier sql/pgsql/courrier.inc.php où nous allons (après l’include !) réaffecter à la variable $champAffiche la
valeur suivante :
$champAffiche = array(
'courrier.courrier as "'._("courrier").'"',
'to_char(courrier.dateenvoi ,\'DD/MM/YYYY\') as "'._("dateenvoi").'"',
'concat(emetteur.nom,\' \',emetteur.prenom) as "'._("emetteur").'"',
'service.libelle as "'._("service").'"',
);
Il est possible que l’opération vous soit refusée (seul www-data ayant les droits d’écriture).
Si tel est le cas échéant il faudra se rajouter les permissions.
Le résultat est le suivant :
Courrier Dateenvoi Emetteur
Service
1
01/12/2010
dupont pierre
informatique
2
02/12/2010
durant jacques informatique
De la même manière, toujours dans le même fichier, vous pouvez changer les options de la zone de recherche en
réaffectant la variable $champRecherche. Actuellement on peut en plus de Tous faire une recherche sur courrier,
emetteur et service.
C’est parce qu’à l’orgine, dans le fichier généré, $champRecherche avait été affectée comme telle :
$champRecherche = array(
'courrier.courrier as "'._("courrier").'"',
'emetteur.nom as "'._("emetteur").'"',
'service.libelle as "'._("service").'"',
);
Supprimez un ou plusieurs élément(s) du tableau et il disparaîtra de la zone de recherche. Par exemple...
1.1. Tutoriel - Créer une application
13
openMairie Framework Documentation, Version 4.5
$champRecherche = array(
'emetteur.nom as "'._("emetteur").'"',
);
...donnera :
Nous souhaitons maintenant avoir les derniers courriers au début de la page affichée. Nous n’avons pas besoin
d’aller réécrire la requête, il existe une variable texte comprenant l’instruction de tri. Réaffectez cette variable $tri
dans votre courrier.inc.php de la manière suivante :
$tri= " order by dateenvoi desc";
Le résultat est le suivant :
Pour en savoir plus sur ces variables voir framework/affichage.
1.1.3.2 Rendre obligatoire des champs
Nous avons affiché le courrier avec une jointure de type LEFT JOIN ce qui ne rend pas obligatoire la saisie de
l’emetteur et du service (auquel le courrier est affecté).
Nous devons surcharger la méthode verifier().
Dans obj/courrier.class.php la méthode à insérer après le constructeur est celle-ci :
function verifier($val,&$db,$DEBUG) {
parent::verifier($val,$db,$DEBUG);
// Les champs service et emetteur sont obligatoires
if ($this->valF['service']==""){
$this->correct=False;
$this->addToMessage(_('service')."&nbsp;"._('obligatoire')."&nbsp;!");
//
}
if ($this->valF['emetteur']==""){
$this->correct=False;
$this->addToMessage(_('emetteur')."&nbsp;"._('obligatoire')."&nbsp;!");
}
}
Par défaut le premier champ (ici dateenvoi) est obligatoire, cette option est modifiable dans le générateur.
La commande parent : :verifier($val,$db,$DEBUG) ; permet de ne pas neutraliser la fonction surchargée (ici dans
gen/obj/courrier.class.php)
Pour plus d’informations voir framework/methode.
14
Chapitre 1. Tutoriel - Créer une application
openMairie Framework Documentation, Version 4.5
1.1.3.3 Valoriser un champ par défaut
Pour simplifier la saisie, nous souhaitons mettre la date du jour dans le champ dateenvoi lors d’un ajout de courrier.
Nous allons surcharger la methode setVal() dans obj/courrier.class.php de la manière suivante :
function setVal(&$form, $maj, $validation, &$db, $DEBUG=null){
parent::setVal($form, $maj, $validation, $db, $DEBUG=null);
if ($validation==0) {
if ($maj == 0){
$form->setVal("dateenvoi", date('Y-m-d'));
}
}
}
Le champ dateenvoi contiendra la date système (date(‘Y_m-d’)) si la validation est égale à 0 (ce qui signifie que
le formulaire n’a pas été validé) et si $maj est égal à 0 (ce qui signifie qu’il s’agit d’un ajout).
Les autres valeurs que peut prendre $maj sont :
— 1 : modifier
— 2 : supprimer
— 3 : consulter
1.1.3.4 Mettre en majuscule un champ
Nous souhaitons maintenant mettre en majuscule le champ nom de la table emetteur.
Nous allons surcharger la méthode setOnchange() dans obj/emetteur.class.php de la manière suivante :
function setOnchange(&$form,$maj){
parent::setOnchange($form,$maj);
$form->setOnchange("nom","this.value=this.value.toUpperCase()");
}
A la saisie ou à la modification du nom, le champ se mettra en majuscule.
1.1.3.5 Principe à retenir
Voila quelques exemples des possibilités de modification dans les fichiers sql (répertoire sql/...) et dans les méthodes de l’objet (repertoire obj/...).
En aucun cas il ne faut modifier les fichiers dans gen/ qui est l’espace de travail propre au générateur.
Nous allons dans le prochain chapitre modifier la base et regénérer les écrans sans mettre en danger votre personnalisation.
1.1.4 Modifier la base et regénérer
Le framework openMairie permet de modifier la base et prendre en compte ces modifications en regénérant les
scripts sans mettre en péril la personnalisation que vous avez effectuée.
Nous vous proposons de rajouter un champ registre dans la table courrier et de rajouter l’adresse dans la table
emetteur.
1.1. Tutoriel - Créer une application
15
openMairie Framework Documentation, Version 4.5
1.1.4.1 Rajouter un champ registre dans courrier
Il est proposé de rajouter un champ registre dans le courrier dont le but est de stocker le numéro de registre du
courrier sous la forme annee_numero_d_ordre.
Nous allons d’abord créer un champ registre dans la table courrier de la manière suivante :
ALTER TABLE courrier ADD registre VARCHAR( 20 ) ;
Vous devez regénérer votre application courrier dans l’option du menu Administration -> Générateur -> Courrier et laisser cochées les options par défaut :
gen/obj/courrier.class.php
gen/sql/pgsql/courrier.inc.php
gen/sql/pgsql/courrier.form.inc.php
Validez l’opération.
Vous pouvez remarquer si vous allez sur le formulaire d’ajout qu’il y a un nouveau champ registre. Votre personnalisation n’est pas affectée.
Nous voulons que le numéro de registre se mette en ajout de manière automatique une fois le formulaire validé.
Il faut donc surcharger les méthodes suivantes dans obj/courrier.class.php :
// pour que registre ne soit pas modifiable
function setType(&$form,$maj) {
parent::setType($form,$maj);
$form->setType('registre', 'hiddenstatic');
}
// pour la mise à jour de la séquence avant l'ajout de l enregistrement
function triggerajouter($id,&$db,$val,$DEBUG) {
// prochain numero de registre
// fonction DB pear
$temp= $db->nextId("registre");
// fabrication du numero annee_no_d_ordre
$temp= date('Y')."-".$temp;
$this->valF['registre'] = $temp;
}
Si vous souhaitez que registre apparaisse dans l’affichage de la table, vous devez aussi modifier la variable champAffiche de sql/pgsql/courrier.inc de la manière suivante :
$champAffiche = array(
'courrier.courrier as "'._("courrier").'"',
'to_char(courrier.dateenvoi ,\'DD/MM/YYYY\') as "'._("dateenvoi").'"',
'concat(emetteur.nom,\' \',emetteur.prenom) as "'._("emetteur").'"',
'service.libelle as "'._("service").'"',
'registre'
);
Votre affichage de la table courrier est modifié.
1.1.4.2 Rajouter l’adresse dans emetteur
Il est proposé de rajouter l’adresse de l’emetteur à savoir : le libellé, le code postal et la ville.
La requête est la suivante :
ALTER TABLE emetteur ADD adresse VARCHAR( 40 ) ,
ADD cp VARCHAR( 5 ) ,
ADD ville VARCHAR( 40 ) ;
16
Chapitre 1. Tutoriel - Créer une application
openMairie Framework Documentation, Version 4.5
Vous devez regénérer votre application courrier en allant dans l’option du menu : administration -> generateur ->
emetteur et laisser cochées les options par défaut :
gen/obj/emetteur.class.php
gen/sql/pgsql/emetteur.inc.php
gen/sql/pgsql/emetteur.form.inc.php
Validez l’opération.
N’ayant pas modifié sql/pgsql/emetteur.inc, le framework fonctionne avec le code généré.
1.1.4.3 Améliorer la présentation du formulaire emetteur
Nous pouvons continuer à améliorer les présentations de nos formulaires en utilisant les méthodes setGroupe() et
setRegroupe() dans le script obj/emetteur.class.php.
Il vous est proposé d’insérer dans votre script obj/emetteur.class.php le code suivant :
function setLayout(&$form, $maj) {
$form->setFieldset('nom','D',_('nom'),"collapsible");
$form->setFieldset('prenom','F');
$form->setFieldset('adresse','D',_('adresse'),"startClosed");
$form->setFieldset('ville','F');
}
Le fieldset nom est affiché par défaut, pas celui de l’adresse :
Vos formulaires sont maintenant au point.
Le paragraphe suivant vous indique les surcharges d’openCimetiere que vous pouvez intégrer dans votre exemple,
maintenant que vous avez la méthode.
1.1.4.4 Les surcharges d’openCimetiere
Vous pouvez utiliser openCimetiere (actuellement version 3.0.0-a5-dev) qui est téléchargeable au lien suivant :
svn ://scm.adullact.net/scmrepos/svn/opencimetiere/trunk
La base de données d’openCimetiere est plus complexe.
Si les surcharges qui ont été faites dans notre exemple sont celles d’openCourrier, il y a d’autre surcharges dans le
script courrier.class.php d’openCimetiere :
Les méthodes setLib, setGroupe et setRegroupe permettent une présentation en fieldset du courrier (utilisation
des champs vide 1 à 5 voir sql/pgsql/courrier.form.inc).
Il y a d’autres objets métier qui ont des surcharges intéressantes, par exemple l’objet obj/dossier.class.php où vous
avez un upload pour télécharger des fichiers.
Vous pouvez regarder également l’application openCourrier mais attention à la base de données qui est en
MySQL :
— openCourrier fonctionne avec des restrictions d’accès par service et les méthodes de login ont été modifiées
dans obj/utils.class.php ainsi qu’utilisateur.class.php qui a dans openCourrier un champ service.
— l’objet obj/tachenonsolde.class.php est un exemple de surcharge de tache.class.php qui affiche que les
tâches non soldées
1.1. Tutoriel - Créer une application
17
openMairie Framework Documentation, Version 4.5
— vous pouvez aussi regarder deux scripts de traitement :
— trt/num_registre.php qui remet à 0 le numéro de registre
— trt/archivage.php qui tranfere en archive les courriers avant une date
Vous avez également des détails sur les traitements dans le chapitre framework/util notament sur la mise à jour du
registre.
1.1.5 Créer ses états
Il vous est proposé de créer un état des courriers par service.
Il sera utilisé dans ce chapitre l’assistant état et sous-état du générateur.
Quittez le projet openCimetiere et revenez à openExemple.
1.1.5.1 Créer l’état service
Nous allons utiliser l’assistant état du générateur dans le menu :
Administration -> Générateur -> Assistants
Choisir Création d’état puis choisir dans le select l’option service.
Ensuite avec la touche CTRL sélectionner les champs service.service et service.libellé.
Cliquer ensuite sur Import service dans la base.
Un message apparaît : service enregistré.
Vous avez créé un enregistrement qui a pour identifiant service dans la table om_etat.
Vous devez rendre d’abord votre état service actif pour pouvoir y accéder.
18
Chapitre 1. Tutoriel - Créer une application
openMairie Framework Documentation, Version 4.5
Il faut maintenant permettre l’accès dans l’affichage du service :
— Ouvrir le fichier sql/pgsql/service.inc.php
— Ajouter le script suivant :
$href[3] = array(
"lien" => "../pdf/pdfetat.php?obj=".$obj."&amp;idx=",
"id" => "",
"lib" => "<img src=\"../om-theme/img/pdf-16x16.png\" alt=\""
._("Edition PDF")."\" title=\""._("Edition PDF")."\" />",
);
Nous rajoutons la ligne 3 dans le tableau href. Vous avez un état lié à l’affichage du service.
Il y a des exemples d’utilisation de href dans om_collectivité, om_etat, om_utilisateur,...
1.1.5.2 Créer le sous-état courrier
Nous allons utiliser l’assistant sous-état du générateur dans le menu :
Administration -> Générateur -> Assistants -> Création sous-état
Nous choisissons la table courrier et nous surlignons les champs courrier.dateenvoi, courrier.objetcourrier, courrier.emetteur et courrier.registre.
Nous choisissons courrier.service comme clé secondaire pour faire le lien avec service.
En cliquant sur Import courrier dans la base vous créez un enregistrement ayant pour identifiant courrier.service
dans la table om_sousetat :
1.1.5.3 Associer le sous-état courrier à l’état service
Vous devez rendre d’abord votre sous-état courrier.service actif pour pouvoir l’associer.
Allez dans l’option Sous Etat du menu Paramétrage.
1.1. Tutoriel - Créer une application
19
openMairie Framework Documentation, Version 4.5
Recherchez le sous-état courrier.service et modifiez le en cochant actif (premier fieldset : collectivité).
Il vous faut maintenant associer le sous-état courrier.service à l’état service.
Allez dans l’option Etat du menu Paramétrage.
Modifiez l’état service et dans le fieldset à déplier Sous-état(s) après l’avoir coché actif sélectionnez le sous-état
courrier.service.
Vous avez désormais un état des courriers par service (Paramétrage -> Service -> Edition PDF) :
20
Chapitre 1. Tutoriel - Créer une application
openMairie Framework Documentation, Version 4.5
1.1.5.4 Mettre le nom et le prénom de l’emetteur dans le sous-état
Nous souhaitons mettre le nom et le prénom de l’emetteur à la place de la clé secondaire.
Vous devez modifier la requête sql du sous-état courrier.service dans la table om_sousetat de la manière suivante :
select courrier.dateenvoi as dateenvoi,
courrier.objetcourrier as objetcourrier,
concat(emetteur.nom,' ',emetteur.prenom) as emetteur,
courrier.registre as registre
from &DB_PREFIXEcourrier LEFT JOIN &DB_PREFIXEemetteur on emetteur.emetteur = courrier.emetteur
where courrier.service='&idx'
Votre nouvel état a la forme suivante :
Vous avez de nombreux exemples d’utilisation d’état et de sous-état dans les applications openMairie.
Une utilisation originale a été faite pour le Cerfa du recensement dans openRecensement où à la place du logo il
a été mis une image du Cerfa.
On ne peut cependant pas faire tous les états et il est fort possible que vous ayez des états spécifiques. Vous avez
des exemples d’utilisation spécifique des méthodes de fpdf dans openElec : carte électorale, liste électorale,...
Vous pouvez compléter votre information avec le chapitre framework/edition et regarder les possibilités de paramétrage du générateur generateur/parametrage pour la réalisation d’état customisé.
Vous avez maintenant terminé l’exemple d’utilisation du Framework, le chapitre suivant a pour but de vous informer de manière complète sur ce dernier.
1.1. Tutoriel - Créer une application
21
openMairie Framework Documentation, Version 4.5
22
Chapitre 1. Tutoriel - Créer une application
CHAPITRE 2
Manuel d’usage
2.1 Manuel d’usage
2.1.1 Installation
2.1.2 Configuration
2.1.3 Administration
Cette rubrique est dédiée à l’administration des fonctionnalités disponibles depuis l’interface : les tableaux de
bord, les éditions, la géolocalisation, ...
2.1.3.1 Les tableaux de bord
Widget
...
Composition
...
2.1.3.2 Les éditions
États et lettres types
23
openMairie Framework Documentation, Version 4.5
2.1.3.2.1.1 Bloc ‘édition’ Les informations d’édition à saisir sont :
— id : identifiant de l’état/lettre type.
— libellé : libellé affiché dans l’application lors de la sélection d’une édition.
— actif : permet de définir si l’édition est active ou non.
Note : Les champs id et libellé sont obligatoires, les id actif sont uniques.
2.1.3.2.1.2 Paramètres généraux de l’édition Les champs de paramètres généraux de l’édition à saisir
sont :
— orientation : orientation de l’édition (portrait/paysage).
— format : format de l’édition (A4/A3).
— logo : sélection du logo depuis la table des logos configurés.
— logo haut/gauche : position du coin haut/gauche du logo par rapport au coin haut/gauche de l’édition.
— Marge gauche : marge gauche de l’édition
— Marge haut : marge haute de l’édition
— Marge droite : marge droite de l’édition
— Marge bas : marge basse de l’édition
24
Chapitre 2. Manuel d’usage
openMairie Framework Documentation, Version 4.5
2.1.3.2.1.3 Bloc ‘titre’
— titre : éditeur riche permettant une mise en page complexe.
2.1.3.2.1.4 Paramètres du titre de l’édition Positionnement :
— titre gauche : positionnement du titre par rapport à la marge gauche de l’édition.
— titre haut : positionnement du titre par rapport à la marge haute de l’édition.
— largeur de titre : taille de la largeur du titre.
— hauteur : hauteur minimum du titre.
Bordure :
— bordure : Affichage ou non d’une bordure.
2.1. Manuel d’usage
25
openMairie Framework Documentation, Version 4.5
2.1.3.2.1.5 Bloc ‘corps’
— corps : éditeur riche permettant une mise en page complexe.
2.1.3.2.1.6 Paramètres des sous-états
— Police personnalisée : sélection de la police des sous-états.
— Couleur texte : sélection de la couleur du texte des sous-états.
2.1.3.2.1.7 Bloc ‘champs de fusion’
— Requête : sélection d’un jeu de champs de fusion.
— Champs de fusion : Liste des champs de fusion disponibles pour la requête sélectionnée.
— Variables de remplacement : Liste des variables de remplacements disponibles.
2.1.3.2.1.8 Aide à la saisie dans les éditeurs de texte riche Trois configurations différentes de l’éditeur de
texte riche sont utilisées :
— configuration n°1 : corps de l’édition,
— configuration n°2 : titre de l’édition,
— configuration n°3 : blocs de texte avec une mise en forme limitée toujours destinés à être intégré dans une
édition via un champs de fusion.
Fonction / Configuration
N°1
N°2
N°3
Tableaux
x
x
Saut de page
x
Code barres
x
x
Majuscule/Minuscule
x
x
x
Insertion de sous-états
x
Plein écran
x
x
Correction orthographique x
x
x
Voir le code source
x
x
x
2.1.3.2.1.9 Gestion des tableaux
— Créer un tableau :
Choisir le nombre de lignes et de colonnes du tableau.
Note : Il faut bien placer le curseur dans une des cellules du tableau que l’on souhaite paramétrer. Idem pour le
paramétrage des lignes et colonnes.
— Paramétrage général du tableau :
— Largeur :
Ce champ sert à indiquer la largeur du tableau en % (UNIQUEMENT) par rapport à la largeur du
PDF.
Par exemple, si le PDF fait une largeur de 30 cm et que la lageur du tableau est de 10%, le tableau
fera 3 cm de largeur sur le PDF.
— Hauteur :
Ce champ sert à indiquer la hauteur du tableau en % (UNIQUEMENT) par rapport à la hauteur du
PDF.
Par exemple, si le PDF fait une hauteur de 50 cm et que la hauteur du tableau est de 25%, le tableau
fera 12.5 cm de hauteur sur le PDF.
— Espacement inter-cellules :
Espacement entre les cellules. En pixel.
26
Chapitre 2. Manuel d’usage
openMairie Framework Documentation, Version 4.5
— Espace interne cellule :
Espacement entre les bords de la cellule et son contenu. En pixel.
— Bordure :
Epaisseur des bordures du tableau. En pixel.
— Titre :
Lorsque cette case est cochée, elle permet de rajouter un titre au tableau.
— Alignement :
Permet de choisir le type d’alignement du texte dans le tableau. Valeurs possibles : n/a (aucun),
Gauche, Centré, Droite.
— Supprimer un tableau
— Paramétrage des cellules :
— Largeur :
Ce champ sert à indiquer la largeur de la colonne en % (UNIQUEMENT) par rapport à la largeur
du tableau.
Par exemple, si le tableau fait une largeur de 30 cm et que la largeur de la colonne est de 10%, la
colonne fera 3 cm de largeur.
— Hauteur :
Ce champ sert à indiquer la hauteur de la colonne en % (UNIQUEMENT) par rapport à la hauteur
du tableau.
Par exemple, si le tableau fait une hauteur de 50 cm et que la hauteur de la colonne est de 25%, la
colonne fera 12.5 cm de hauteur.
— Type de cellule :
Permet de définir si c’est une cellule “normale” ou une cellule qui va servir d’en-tête dans le tableau.
Valeurs possibles : Cellule, Cellule d’en-tête.
— Étendue :
Paramètre sur quoi doivent s’appliquer les paramètres renseignés. Valeurs possibles : n/a (aucun),
Ligne, Colonne, Groupe de lignes, Groupe de colonnes.
— Alignement :
Permet de choisir le type d’alignement du texte dans la cellule. Valeurs possibles : n/a (aucun),
Gauche, Centré, Droite.
— Fusionner des cellules :
En sélectionnant les cellules à fusionner et en cliquant sur Tableau → Cellule → Fusionner les cellules les cellules
seront fusionnées.
Si aucune cellule n’est sélectionnée, un menu apparaît :
— Colonnes :
Nombre de colonnes qui vont être fusionnées à partir de la cellule dans laquelle le curseur est positionné.
— Lignes :
Nombre de lignes qui vont être fusionnées à partir de la cellule dans laquelle le curseur est positionné.
— Diviser les cellules :
Divise la cellule dans laquelle le curseur est positionné si elle avait été fusionnée avant.
— Paramétrage des lignes :
— Type de ligne :
Permlet de définir le type de la ligne. Valeurs possibles : En-tête, Corps, Pied.
— Alignement :
Permet de choisir le type d’alignement du texte dans la ligne. Valeurs possibles : n/a (aucun),
Gauche, Centré, Droite.
— Hauteur :
Ce champ sert à indiquer la hauteur de la ligne en % (UNIQUEMENT) par rapport à la hauteur du
tableau.
Par exemple, si le tableau fait une hauteur de 50 cm et que la hauteur de la ligne est de 25%, la
ligne fera 12.5 cm de hauteur.
— Insérer une ligne :
Permet d’insérer une ligne avant ou après la ligne sur laquelle le curseur est positionné.
2.1. Manuel d’usage
27
openMairie Framework Documentation, Version 4.5
— Effacer une ligne :
Supprimer la ligne sur laquelle le curseur est positionné.
— Couper une ligne :
Coupe la ligne sur laquelle le curseur est positionné.
— Copier une ligne :
Copie la ligne sur laquelle le curseur est positionné.
— Coller une ligne :
Colle la ligne qui avait été copiée/coupée avant ou après la ligne sur laquelle le curseur est positionné.
— Insérer une colonne :
Insère une colonne avant ou après la colonne sur laquelle le curseur est positionné.
— Effacer une colonne :
Supprime la colonne sur laquelle le curseur est positionné.
2.1.3.2.1.10
Gestion des code-barres Saisir le champ de fusion
Sélectionner le champ de fusion
Cliquer sur le bouton de génération du code-barres puis valider le formulaire pour enregistrer les changements
2.1.3.2.1.11
Gestion des sauts de page ...
2.1.3.2.1.12
Gestion du mode plein écran ...
2.1.3.2.1.13
Insertion de sous-états ...
Sous-états
Requêtes
Logos
2.1.3.3 La géolocalisation
Ce document a pour objet de décrire le module sig interne d’openMairie dans la version om 4.4.5.
Dans sa version 4.4.5 ;
— intégration des formulaires dans le sig interne
— integration des résultats du moteur de recherche dans les cartes (cas utilisation moteur de recherche)
— intégration dans les cartes d’un résultat dans reqmo (cas d’utilisation reqmo)
— accès multiples aux objets
— accès à des objets multi géométrie
Dans un premier, temps, il sera décrit l’ergonomie du sig interne.
Dans une deuxiéme partie, nous aborderons le paramètrage du sig interne.
Enfin dans une troisième partie nous aborderons les éléments de développement.
2.1.4 Génération
Précision sur le vocabulaire utilisé dans cette documentation.
Modèle de données
« En informatique, un modèle de données est un modèle qui décrit de façon abstraite comment sont
représentées les données dans une organisation métier, un système d’information ou une base de
données. »
28
Chapitre 2. Manuel d’usage
openMairie Framework Documentation, Version 4.5
- cf. Wikipédia, Article Modèle de données.
Dans la documentation suivante, le terme modèle de données est utilisé pour désigner les classes métier d’openMairie ainsi que les formulaires qu’elles représentent.
Objet
Le mot objet fait référence aux instances des classes d’openMairie et, par extension, aux enregistrements en base
de données qui les représentent.
2.1.4.1 Introduction
Le générateur permet de construire des applications à partir de l’analyse d’un schéma d’une base de données.
Les informations récupérées dans le schéma sont les suivantes :
— la liste des tables ;
— le nom, le type et les contraintes de chaque colonne.
Sur cette analyse le générateur crée les modèles de données. openMairie gère :
— les clés primaires mono-colonne ;
— les clés étrangères ;
— la multi-collectivité (selon la présence d’un champ om_collectivite).
Le générateur contient également des assistants permettant de créer facilement des états associés à des
collectivités.
Attention : la version mysql est abandonnée
2.1.4.2 L’interface
Le menu generateur est le suivant :
En appuyant sur la touche generation on accède à l’écran de génération qui se décompose en :
— une analyse de la base de donnée en cours et de la table choisie
— un état des fichiers existants ou non
— les options de génération
2.1. Manuel d’usage
29
openMairie Framework Documentation, Version 4.5
Analyse de la base
Le programme propose une analyse de la base en cours :
— liste des tables de la base
— l’information sur la clé primaire de la table
— la longueur de l’enregistrement de la table
— les informations sur les champs : nom, type et longueur
— les clés secondaires (exemple table om_colllectivite)
— les sous formulaires à associer
A partir de la version 4.2.0, il n y a plus de choix de paramétrage dans l’écran.
Les fichiers à générer
Il est proposé une liste de case à cocher :
La case est cochée sur le fichier correspondant n’existe pas (colonne de droite)
Le formulaire métier auto généré, table.inc, tableform.inc est toujours coché (fichiers en gen/) :
— gen/obj/table.class.php
— gen/sql/basededonnees/table.inc
— gen/sql/basededonnees/table.form.inc
La génération de ces 3 fichiers ne met pas en péril votre programmation qui est en :
— obj/table.class.php
— sql/basededonnees/table.inc
— sql/basededonnees/table.form.inc
basededonnees = mysql ou pgsql
30
Chapitre 2. Manuel d’usage
openMairie Framework Documentation, Version 4.5
2.1.4.3 Conditions de génération
Contraintes de la base de données
Pour qu’un modèle de données puisse être généré, il faut que la table de base de donneés qui le représente remplisse
les conditions suivantes :
— la table doit avoir une clé primaire composée d’une seule colonne, ou une colonne portant le même nom
que la table ;
— les clés étrangères doivent référencer des tables remplissant la condition ci-dessus.
Si l’une de ces conditions n’est pas satisfaite, les interfaces de génération affichent une erreur.
Contraintes du système de fichiers
Le générateur crée les classes métier de l’application ainsi que les fichiers de surcharge. Pour pouvoir créer ces
fichiers, le serveur web PHP doit avoir les droits d’écriture dans les dossiers suivants :
— gen/obj
— gen/sql/pgsql
— gen/sql/mysql
— obj/
— sql/pgsql
— sql/mysql
Si des droits sont manquants :
— les scripts genauto et gensup ne permettent pas de générer ces fichiers que le serveur ne peut pas
écrire ;
— le script genfull quant-à lui, affiche des messages après la génération indiquants quels fichiers ne sont
pas accessibles (ces fichiers ne sont, bien entendu, pas générés).
2.1.4.4 Définition des modèles de données
L’identifiant
Chaque modèle de données doit avoir un champ destiné à contenir l’identifiant des objets. Sans ce champ, il n’est
pas possible de créer un modèle.
2.1.4.4.1.1 Définition de l’identifiant Il suffit d’ajouter la contrainte SQL PRIMARY KEY à une colonne
d’une table pour créer un champ identifiant. Il sera ensuite automatiquement géré par openMairie lors de l’ajout,
la modification et la suppression d’enregistrements.
2.1.4.4.1.2 Fonctionnement interne du générateur
tion d’un modèle ?
Comment ce champ est déterminé lors de la généra-
Le générateur suit la procédure suivante :
— il utilise la colonne ayant la contrainte PRIMARY KEY si elle existe ;
— sinon, il utilise la colonne ayant le même nom que la table.
S’il n’existe ni contrainte, ni colonne ayant le même nom que la table, le modèle ne peut pas être créé.
Note : Le fait d’utiliser une colonne ayant le même nom que la table pour déterminer le champ identifiant est là
pour une raison de rétro-compatibilité. Les versions d’openMairie antérieures à 4.3.0 n’utilisaient pas encore la
contrainte PRIMARY KEY.
Est-il possible d’utiliser une clé primaire composée de plusieurs colonnes ?
Non, et c’est bien mieux comme ça.
2.1. Manuel d’usage
31
openMairie Framework Documentation, Version 4.5
Les références vers d’autres objets
Un modèle de données peut contenir, un ou plusieurs champs, faisant référence à d’autres objets. Ces objets
pouvant être de modèle différent.
2.1.4.4.2.1
Définition des références La méthode pour créer des références diffère en fonction du SGBD.
2.1.4.4.2.2 Avec PostgresSQL
des champs de type référence.
Il suffit d’ajouter la contrainte SQL FOREIGN KEY à des colonnes pour créer
2.1.4.4.2.3 Fonctionnement interne du générateur
nération d’un modèle ?
Comment ces champs sont déterminés lors de la gé-
Le générateur conserve une liste des colonnes qui donneront, après génération, des champs références. Pour créer
cette liste, il suit la procédure suivante :
— avec PostgresSQL, le générateur peut interroger les tables du système contenant la liste des clés étrangères
d’une table particulière, ainsi que les tables étrangères référencées par ces clés ;
— dans un second temps, indifféremment du SGBD, il ajoute a la liste des clés étrangères le nom des colonnes
portant le même nom que d’autres tables.
La liste ainsi formée permettra au générateur de créer des champs de type référence dans les modèles de données.
2.1.4.4.2.4
Affichage dans les formulaires
Comment ces champs sont représentés dans les formulaires ?
Depuis le formulaire de l’objet faisant référence, ces champs sont représentés par des balises HTML <select>.
L’ensemble des objets pouvant être référencés sont listés sous la forme d’options.
Depuis le formulaire de l’objet référencé, un onglet apparaît pour chaque modèle différent faisant référence à cet
objet. Chaque onglet liste l’ensemble des objets faisant référence à l’objet présenté en formulaire.
Les champs uniques
Un modèle de données peut contenir un ou plusieurs champs uniques. Il n’est pas possible pour plusieurs objets
d’un même modèle d’avoir la même valeur pour ce champ.
Un modèle de données généré peut également contenir, au plus, un groupe de champs unique. Cette fois, c’est la
combinaison des valeurs de ces champs qui ne pourra exister qu’une seule fois.
2.1.4.4.3.1 Définition des champs uniques Il suffit de définir une contrainte SQL UNIQUE sur une colonne
ou un groupe de colonnes pour créer respectivement un ou plusieurs champs uniques.
2.1.4.4.3.2 Fonctionnement interne du générateur
nération d’un modèle ?
Comment ces champs sont déterminés lors de la gé-
L’abstracteur de base de données d’openMairie peut, en analysant une table, récupérer la liste de ses colonnes
uniques.
2.1.4.4.3.3
Affichage dans les formulaires
Comment ces champs sont représentés dans les formulaires ?
Ces champs sont affichés indifféremment des champs sans contrainte.
Lors de la validation d’un formulaire, une vérification est faite pour chaque champ unique, ainsi que pour un
éventuel groupe de champs uniques. Si une valeur (ou combinaison) est déjà présente dans la base de données, un
message d’erreur est affiché, et la base de données n’est pas modifiée.
32
Chapitre 2. Manuel d’usage
openMairie Framework Documentation, Version 4.5
Les champs requis
Un modèle de données peut contenir un ou plusieurs champs requis.
2.1.4.4.4.1 Définition des champs requis Il suffit de définir une contrainte SQL NOT NULL sans clause
DEFAULT sur une colonne pour créer un champ requis.
Attention : En ajoutant une clause DEFAULT a une contrainte NOT NULL nous indiquons clairement au
générateur que le champ n’est pas requis ! La valeur par défaut permet à l’utilisateur de laisser le champ vide
lors d’une validation de formulaire. Le SGBD se charge alors d’ajouter lui même cette valeur.
2.1.4.4.4.2 Fonctionnement interne du générateur
nération d’un modèle ?
Comment ces champs sont déterminés lors de la gé-
L’abstracteur de base de données d’openMairie peut, en analysant une table, récupérer la liste de ses colonnes
requises n’ayant pas de valeur par défaut.
2.1.4.4.4.3
Affichage dans les formulaires
Comment ces champs sont représentés dans les formulaires ?
Ces champs sont affichés avec un marqueur à côté de leur libellé, indiquant qu’ils sont requis. Par défaut openMairie utilise le caractère * pour indiquer les champs requis.
Si ces champs ne sont pas remplis lors de la validation d’un formulaire, un message d’erreur est affiché pour
chaque champ requis non complété, et la base de données n’est pas modifiée.
Le champ libellé
Pour représenter des objets dans des champs de type <select>, le générateur utilise un champ textuel particulier
appelé libellé.
Ce champ est également utilisé pour ordonner les éléments d’un tableau de manière croissante.
2.1.4.4.5.1 Définition du libellé Pour définir explicitement une colonne comme libellé d’un modèle, il faut la
nommer libelle.
Si cette colonne n’existe pas, le générateur considère la deuxième colonne de la table comme étant un libellé (ce
système était celui utilisé dans les versions d’openMairie 4.2.0 et inférieures).
Enfin s’il n’existe pas de seconde colonne, la clé primaire de la table est utilisé.
2.1.4.5 Fonctionnalités avancées
Ajouter une date de validité à un modèle
2.1.4.5.1.1 Description Le générateur permet de créer des objets qui seront considérés comme valides seulement pendant une période donnée.
Qu’est ce qu’un objet à date de validité ?
Un objet à date de validité est un objet contenant deux champs spécifiques :
— om_validite_debut, déterminant la date de début de validité ;
— om_validite_fin, déterminant la date de fin de validité.
Un objet valide se comporte comme un objet « traditionnel ». Par contre, lorsqu’il arrive à expiration, l’objet
n’apparaît plus dans les tableaux, les sous-tableaux et les champs de sélection (sauf s’il est actuellement valeur de
l’un de ses champs).
Un tel objet est valide lorsque :
2.1. Manuel d’usage
33
openMairie Framework Documentation, Version 4.5
— sa date de début de validité est nulle ET (sa date de fin de validité est nulle OU sa date de fin de validité
est strictement supérieure à la date actuelle) OU,
— sa date de début de validité est inférieure ou égale à la date actuelle ET (sa date de fin de validité est nulle
OU sa date de fin de validité est strictement supérieure à la date actuelle).
A l’inverse, il est considéré comme non-valide (expiré) lorsque :
— il n’est pas valide.
Est-il possible de consulter la liste des objets expirés d’un modèle donné ?
Oui.
Le tableau du modèle dispose d’un bouton Afficher les éléments expirés permettant d’afficher, en
plus des objets valides, les objets expirés. Lorsque les éléments expirés sont affichés, bouton devient Masquer
les éléments expirés.
2.1.4.5.1.2 Définition des dates de validité Pour que le générateur considère un modèle comme « à date de
validité », il faut que sa table de base de données contienne les deux colonnes suivantes :
— om_validite_debut DATE ;
— om_validite_fin DATE.
Important : Il ne faut surtout pas définir de contrainte NULL ou DEFAULT sur ces deux colonnes, sinon ces
champs seront obligatoires à chaque validation de formulaire.
2.1.4.5.1.3 Affichage dans les formulaires Ces champs apparaissent dans les formulaires sous la forme de
datepicker, comme des champs de type date classiques.
2.1.4.6 L’analyse de la base
Les informations de la base sont analysées par la méthode « constructeur » de gen.class.php.
La construction des formulaires se fait suivant 5 types de champs reconnus par le générateur :
-
string : chaîne de caractère
int : nombre (entier ou décimal)
date
blob : texte
geom : geometry (pour postgres)
Type de champs
la champ String est du type openMairie (méthode setType()) :
— text dans le cas général
— hiddenstatic si modification pour clé primaire
— select pour clé secondaire
Le champ date est du type openMairie date avec calendrier et java script de contrôle de saisie de date
(La date est au format français JJ/MM/AAAA)
le champ Int est du type openMairie (methode setType())
— hidden si clé primaire en ajout
— hiddenstatic si clé primaire en modification
— text avec contrôle numérique en javascript
— select pour clé secondaire
Le champ Blob est du type openMairie textarea
La longueur et la largeur sont définis en fichier de paramétrage form.inc
La taille n est pas pris en compte dans la longueur d’enregistrement
Les paramètres de dyn/form.inc permettent d’établir la longueur et la largeur d’affichage d’un blob :
34
Chapitre 2. Manuel d’usage
openMairie Framework Documentation, Version 4.5
$max=6; // nombre de ligne blob
$taille=80; // taille du blob
Les champs de type geometry sont des champs geom (accès a la fenetre tab_sig.php)
Equivalence type pgsql / type openMairie
L’information fournie par postgresql est moins complète que celle de mysql surtout au niveau de la longueur des
champs « string » où il est fourni :la longueur de stockage qui est égal à -1 quand le stockage est variable type
pgsql (longueur) type tableinfo si different -> type openMairie
Bigint
(8)
Smallint
(2)
Integer
(4)
Real
(4)
Doubleprecision (8)
Numeric
(20)
Money
(8)
Char
(1)
Character
(-1)
Character varying (-1)
Text
(-1)
Date
(4)
int8
Int2
Int4
Float4
Float8
Numeric
Money
Char
Bpchar
Varchar
text
Date
geometry
boleen
bolean
-5
->
->
->
->
->
->
->
->
->
->
->
->
int
Int
Int
Int
Int
Int
Int
String
(Quelque soit la longueur= 1)
String (Utilisation de la longueur d'affichage)
String (Utilisation de la longueur d'affichage)
blob (Utilisation des paramètres de form.inc)
Date (Utilisation des paramètres de form.inc $pgsql_longueur_date)
-> geom
-> checkbox
Pour postgresql, il est proposé dans form.inc 2 variables qui sont avec la version 4.2.0 inutiles car les longueurs
sont gérées par le générateur (valeurs négatives)
$pgsql_taille_defaut = 20; // taille du champ par défaut si retour pg_field_prtlen =0
$pgsql_taille_minimum = 10; // taille minimum d affichage d un champ
Attention, pour les champs geom, il faut gérer la carte à chercher pour l affichage de la carte en fenêtre
exemple de surcharge de la méthode setSelect pour afficher la carte dossier (de la table om_sig_ma
if($maj==1){ //modification
$contenu=array();
$contenu[0]=array("dossier",$this->getParameter("idx"));
$form->setSelect('geom',$contenu);
}
Nom de champ et nom de table
Attention au nom de tables ou de champs, évitez les termes SQL : match, table, index, type, len ... ou openMairie :
objet pour les noms de champs ou table.
2.1.4.7 Les fichiers générés
Les fichiers générés concernent :
— les formulaires
— les requêtes mémorisées
— le script d’import de données
2.1. Manuel d’usage
35
openMairie Framework Documentation, Version 4.5
Formulaires
Les formulaires sont génèrés suivant le nom de la table dans le répertoire sql, sous repertoire portant le nom de la
base pour régler le problème de compatibilité SQL (concaténation, extraction ...)
Deux types de formulaire sont générés : type table, type form.
2.1.4.7.1.1 Paramétres de type table
— gen/sql/basededonnees/nom_table.inc
— sql/basededonnees/nom_table.inc
Par défaut :
— tri en affichage vide
— champ de recherche avec les champs string
— pas d’affichage de champ blog
— rattachement de sous formulaire
— affichage de l’édition de la table
Dans le fichier paramètres : form.inc
$serie = nombre d’enregistrement par page
$ico = icône par defaut
2.1.4.7.1.2
Paramétres de type Form gen/sql/basededonnees/nom_table.form.inc
sql/basededonnees/nom_table.form.inc
Dans le fichier paramètres : form.inc
$ico = icône par defaut
Par défaut :
— tous les champs sont affichés les uns en dessous des autres
Objets « métier »
L’objet métier généré est stocké en gen/obj/nom_table.class.php. Ce script ne doit pas être modifié car il est
reconstitué à chaque génération :
Cela permet de pouvoir modifier la base de données (ajout, modification ou suppression de champs) et de regénérer
tout ou partie de l’application
Un second script héritant de l’objet généré permet de surcharger les méthodes et de personnalisé l’objet métier.
Toutes les modifications doivent être faites dans ce script soit en héritant de la méthode, soit en surchargeant la
méthode.
L’objet à personnaliser est stocké en obj/nom_table.class.php
Les méthodes générés dans l’objet métier gen/obj/nom_table.class.php sont par défaut les suivantes.
Le type de champs est :
— caché (hidden) en ajout pour la clé primaire automatique,
— modifiable en ajout si la clé primaire n’est pas automatique
— l’unicité de la clé primaire est vérifiée si elle est modifiable (version 4.2.0)
— la clé primaire est visible sans possibilité de modifier en modification
— la clé secondaire n’est pas modifiable en sous formulaire si c’est la clé primaire du formulaire
— la clé secondaire est un champ select qui reprend les informations de la table liée
— la date est au format français
— geom si ce champ est géométrique (version 4.2.0)
36
Chapitre 2. Manuel d’usage
openMairie Framework Documentation, Version 4.5
La longueur d’affichage et le maximum autorisé à la saisie est celle contenu dans la base d’origine
Le contrôle des clés secondaires des autres tables est généré : il n’est pas possible de supprimer un enregistrement
si des enregistrements sont liés à la clé primaire
Il est vérifier l’unicité de la clé si elle n’est pas automatique (version 4.2.0). Les libellés sont les noms des champs.
Ce module sert pour le formulaire et le(s) sous formulaire(s).
Les méthodes qui peuvent être implémentés dans obj/nom_table.class.php sont les suivantes
-
verifier
regroupe et groupe pour modifier les présentations [deprecated] utiliser setLayout
trigger avant ou après l'enregistrement:
triggerajouter
triggermodifier
triggersupprimer
triggerajouterapres
triggermodifierapres
triggersupprimerapres
Les méthodes de l’objet généré en gen/obj peuvent être surchargées totalement ou partiellement :
Exemple
om_profil.class.php :
surcharge des méthodes
setValFAjout setId,
verifierAjout
et setType car la clé primaire est numérique et non automatique
om_utilisateur.class.php :
champ pwd pour mot de passe methode partiellement surchargées (parent::setvalF($val);)
setvalF, setType, setValsousformulare,
surcharge avec un javascript de mise en majuscule du nom
Enfin, il est possible de mettre en place d’autres type de champs disponible dans openMairie en surchargeant la
méthode setType :
-
ComboG combo gauche
comboD combo droit
Localisation (geolocalisation en x, y)
http (lien)
httpclick (lien)
Password (Mot de passe)
Pagehtml (Textearea pour affichage html)
Textdisabled (Text non modifiable)
Selectdisabled (Select non modifiable)
Textreadonly (Text non modifiable)
Hidden (champ caché)
Checkbox (case a cocher oui/non)
Upload (chargement d'un fichier)
voir (voir un fichier téléchargé)
Rvb (choisir une couleur rvn avec la Palette de couleur) ...
voir framework/formulaire
Etats
Seul l’état « pdf » est généré par le générateur
Dans le menu gen (generateur), les états sont générés automatiquement avec un assistant.
Cet assistant vous permet de construire un état :
— en choisissant une table de la base
2.1. Manuel d’usage
37
openMairie Framework Documentation, Version 4.5
— en choisissant les champs à mettre dans l’état
L’etat est enregistré dans la table om_etat et peut être modifié menu->administration -> etat
De la même manière, il est possible de créer un sous etat.
Il est possible de choisir le champ qui sera la clé secondaire en lien avec la table mère
Le sousetat est enregistré dans la table om_sousetat et peut être modifié
menu->administration -> sousetat
Le calcul de la largeur des colonnes est automatique dans les sous états et l’état pdf.
Attention : les champs « blob » ne sont pas pris en compte dans les éditions.
Requêtes mémorisées
Les requêtes paramétrées sont crées suivant le principe suivant :
— une requête globale
— une requête avec un champ select pour chaque clé secondaire (il est possible de sélectionner la requête à
générer)
— Les autres champs sont sélectionnés à l’affichage
Les requêtes sont accessibles dans l’option du menu -> export.
Imports
Un script d’import des données est généré suivant le principe suivant :
— si la clé est automatique, génération du compteur
— tous les champs sont importés
— vérification de l’existence de la clé secondaire à chaque enregistrement
Les tables avec clés secondaires doivent donc être importées en dernier.
Mots-clefs Robot Framework
Un fichier de ressources de mots-clefs est créé pour chaque objet. De plus tous ces fichiers sont inclus dans un
fichier ressource général.
(Pour plus d’informations voir Génération.)
2.1.4.8 Paramétrage générateur
Le générateur fonctionne de manière autonome sans fichier de paramétrage. Il est tout de même possible de
paramétrer certains éléments grâce à des fichiers de paramétrage déposés dans le répertoire gen/dyn/.
Il n’est pas nécessaire de personnaliser toutes les variables du fichier. Il est recommandé de déclarer uniquement
les paramètres souhaitées. Par défaut, le générateur prend les paramètres inclus dans la classe gen.
gen/dyn/gen.inc.php
Il permet de définir des paramètres généraux pouvant être utilisés partout dans le générateur.
<?php
/**
* Mode de génération pour la gestion des identifiants et des références
*
* Permet de choisir par quel moyen sont récupérées les clés primaires et les
* clés étrangères :
* - "constraints" => en interrogeant les contraintes de la base de données
38
Chapitre 2. Manuel d’usage
openMairie Framework Documentation, Version 4.5
* - "postulate" => par les postulats :
_ "le nom d'un champ 'clé primaire' a pour nom le nom de la table."
*
_ "le nom d'un champ 'clé étrangère' a pour nom le nom de la table vers
*
laquelle elle fait référence, et fait référence au champ clé primaire
*
de cette table."
*
*
* Default : $key_constraints_mode = "constraints";
*/
$key_constraints_mode = "postulate";
/**
* Liste des tables à ne pas générer
*
* Permet de lister les tables dont la génération n'est pas souhaitable. Ces
* tables n'apparaissent donc plus dans le menu de génération ni dans la
* génération complète.
*
* Default : $tables_to_avoid = array();
*/
$tables_to_avoid = array(
"om_version",
"spatial_ref_sys",
);
/**
* Ce tableau de configuration permet de donner des informations de surcharges
* sur certains objets pour qu'elles soient prises en compte par le générateur.
*
* $tables_to_overload = array(
"<table>" => array(
*
// définition de la liste des classes qui surchargent la classe
*
// <table> pour que le générateur puisse générer ces surcharges
*
// et les inclure dans les tests de sous formulaire
*
"extended_class" => array("<classe_surcharge_1_de_table>", ),
*
// définition de la liste des champs à afficher dans l'affichage du
*
// tableau champAffiche dans <table>.inc.php
*
"displayed_fields_in_tableinc" => array("<champ_1>", ),
*
// définition des composantes du titre de la page : 'tablename' est
*
// la dernière composante du titre et 'breadcrumb' est la liste des
*
// premières composantes. Ce sont les chaines à traduire qui doivent
*
// être saisies ici. Le résultat serait :
*
// $ent = _("<libelle_1>")." -> "._("<libelle_2>")." -> "._("<libelle>");
*
"breadcrumb_in_page_title" => array("<libelle_1>", "<libelle_2>", ),
*
"tablename_in_page_title" => "<libelle>",
*
// désactivation des sousformulaires pour que les onglets ne s'affichent
*
// pas dans le contexte de la table
*
"tabs_in_form" => false,
*
),
*
* );
*/
$tables_to_overload = array(
//
"om_widget" => array(
//
"displayed_fields_in_tableinc" => array(
"libelle", "om_profil", "type",
),
//
"breadcrumb_in_page_title" => array("administration", "tableaux de bord", ),
"tablename_in_page_title" => "widgets",
//
"tabs_in_form" => false,
),
2.1. Manuel d’usage
39
openMairie Framework Documentation, Version 4.5
);
?>
gen/dyn/tab.inc.php
Ce fichier n’est plus utilisé par le générateur depuis la version 4.5, les paramètres gérés dans ce dernier ont été
transférés dans le fichier gen/dyn/gen.inc.php.
gen/dyn/form.inc.php
Ce script permet de personnaliser les éditions générées. On peut par exemple générer toutes les éditions au format
A3.
Voici les variables personnalisables :
<?php
/**
* Nombre d'enregistrements par page dans les listings
*/
$serie = 15;
/**
* Icône utilisée auparavant comme lien vers l'aide
* @deprecated
*/
$ico = "../img/ico_application.png";
/**
* Taille d'affichage du champ text (nombre de lignes)
*/
$max = 6;
/**
* Taille d'affichage du champ text (nombre de colonnes)
*/
$taille = 80;
/**
* Taille d'affichage du champ par défaut dans le cas où nous sommes
* dans l'impossibilité de déterminer la taille du champ.
* Uniquement pour le SGBD PostGreSQL
*/
$pgsql_taille_defaut = 20;
/**
* Taille d'affichage
* champs trop petits
* Uniquement pour le
*/
$pgsql_taille_minimum
/**
* Taille d'affichage
* champs trop grands
* Uniquement pour le
*/
$pgsql_taille_maximum
40
du champ minimum pour ne pas afficher des
où la saisie serait impossible
SGBD PostGreSQL
= 10;
du champ maximum pour ne pas afficher des
où le formulaire dépasserait de l'écran
SGBD PostGreSQL
= 30;
Chapitre 2. Manuel d’usage
openMairie Framework Documentation, Version 4.5
/**
* Taille d'affichage de la date
* Uniquement pour le SGBD PostGreSQL
*/
$pgsql_longueur_date = 12;
?>
gen/dyn/permissions.inc.php
Ce script permet de paramétrer la génération des permissions. L’objectif ici est de pouvoir indiquer des scripts à
ne pas examiner et des permissions à ajouter à celles trouvées automatiquement.
Voici les paramètres disponibles :
<?php
/**
* Liste des fichiers à ne pas prendre en compte
*
* Permet de lister les fichiers du répertoire obj/ dans lequel le système
* de génération des permissions ne doit pas passer.
*
* Default : $files_to_avoid = array();
*/
$files_to_avoid = array(
"pdf_lettre_rar.class.php",
"pilotage.class.php",
);
/**
* Liste des permissions spécifiques
*
* Permet de lister les permission que le système de génération des permissions
* n'est pas en mesure de trouver.
*
* Default : $permissions = array();
*/
$permissions = array(
"proces_verbal_fichier_telecharger",
"dossier_instructeur_modifier_instructeur",
);
?>
gen/dyn/pdf.inc.php
Ce script permet de personnaliser les éditions générées. On peut par exemple générer toutes les éditions au format
A3.
Voici les variables personnalisables :
<?php
$longueurtableau = 280;
$orientation='L';// orientation P-> portrait L->paysage";
$format='A4';// format A3 A4 A5;
$police='arial';
$margeleft=10;// marge gauche;
$margetop=5;// marge haut;
2.1. Manuel d’usage
41
openMairie Framework Documentation, Version 4.5
$margeright=5;// marge droite;
$border=1; // 1 -> bordure 0 -> pas de bordure";
$C1=0;// couleur texte R";
$C2=0;// couleur texte V";
$C3=0;// couleur texte B";
$size=10; //taille POLICE";
$height=4.6; // hauteur ligne tableau ";
$align='L';
// fond 2 couleurs
$fond=1;// 0- > FOND transparent 1 -> fond";
$C1fond1=234;// couleur fond R ";
$C2fond1=240;// couleur fond V ";
$C3fond1=245;// couleur fond B ";
$C1fond2=255;// couleur fond R";
$C2fond2=255;// couleur fond V";
$C3fond2=255;// couleur fond B";
// spe openelec
$flagsessionliste=0;// 1 - > affichage session liste ou 0 -> pas d'affichage";
// titre
$bordertitre=0; // 1 -> bordure 0 -> pas de bordure";
$aligntitre='L'; // L,C,R";
$heightitre=10;// hauteur ligne titre";
$grastitre='B';//\$gras='B' -> BOLD OU \$gras=''";
$fondtitre=0; //0- > FOND transparent 1 -> fond";
$C1titrefond=181;// couleur fond R";
$C2titrefond=182;// couleur fond V";
$C3titrefond=188;// couleur fond B";
$C1titre=75;// couleur texte R";
$C2titre=79;// couleur texte V";
$C3titre=81;// couleur texte B";
$sizetitre=15;
// entete colonne
$flag_entete=1;//entete colonne : 0 -> non affichage , 1 -> affichage";
$fondentete=1;// 0- > FOND transparent 1 -> fond";
$heightentete=10;//hauteur ligne entete colonne";
$C1fondentete=210;// couleur fond R";
$C2fondentete=216;// couleur fond V";
$C3fondentete=249;// couleur fond B";
$C1entetetxt=0;// couleur texte R";
$C2entetetxt=0;// couleur texte V";
$C3entetetxt=0;// couleur texte B";
$C1border=159;// couleur texte R";
$C2border=160;// couleur texte V";
$C3border=167;// couleur texte B";
$bt=1;// border 1ere et derniere ligne du tableau par page->0 ou 1";
?>
gen/dyn/etat.inc.php
Ce fichier n’est plus utilisé par le générateur depuis la version 4.0 et la gestion des éditions en base de données.
gen/dyn/sousetat.inc.php
Ce fichier n’est plus utilisé par le générateur depuis la version 4.0 et la gestion des éditions en base de données.
42
Chapitre 2. Manuel d’usage
openMairie Framework Documentation, Version 4.5
2.1.5 Intégration
2.1.6 Pour aller plus loin...
2.1. Manuel d’usage
43
openMairie Framework Documentation, Version 4.5
44
Chapitre 2. Manuel d’usage
CHAPITRE 3
Manuel de référence
3.1 Manuel de référence
openMairie_exemple est le framework de base dans lequel vous pouvez développer votre propre application.
openMairie_exemple est téléchargeable sur le site de l’adullact.
Il est proposé ici de décrire le fonctionnement du framework.
“En programmation orientée objet un framework est typiquement composé de classes mères qui seront dérivées et
étendues par héritage en fonction des besoins spécifiques à chaque logiciel qui utilise le framework”.
http://fr.wikipedia.org/wiki/Framework
Dans un environnement LAMP/WAMP, le framework openMairie intègre des composants au travers de classes
qui permettent de créer des formulaires et des états. Ces classes sont surchargées par les objets métier à créer.
openMairie intègre de nombreux composants : DBPEAR et FPDF dans toutes les applications, JQUERY pour
l’ergonomie, OPENLAYERS pour l’interface SIG ...
DBPEAR est un abstracteur de base de données qui permet d’utiliser diverses bases de données notamment
MYSQL ou POSTGRESQL.
FPDF est le composant qui permet de gérer le PDF.
Le développement consiste à créer des objets métier qui surchargent la classe abstraite om_dbformdyn.class.php
(composant openMairie). De base, les données de la base de données sont récupérées pour le formulaire (longueur,
max, nom).
— om_dbformdyn.class.php ; assure la liaison entre le formulaire et la base de données
— om_formulaire.class.php : rassemble toutes les méthodes permettant de construire des formulaires
Ce chapitre propose de vous décrire les outils de base du framework de la manière suivante :
— le paramétrage général du framework en /dyn
— les méthodes pour construire des formulaires avec le framework
— les outils d’édition du framework
— l’outil de requête paramétrable du framework
— la gestion des accès du framework ainsi que la gestion multi-collectivite
— l’ergonomie intégrant jquery
— la gestion de traitement et la construction de programme spécifiques avec les utilitaires
— l’import des données CSV du framework
3.1.1 Arborescence
Cette rubrique vise à décrire brièvement l’arborescence du framework pour comprendre l’objectif de chaque répertoire. Elle est divisée en deux parties : les répertoires spécifiques à l’applicatif qui sont modifiés lors du développement de l’applicatif et les répertoires du framework qui sont récupérés tel quel dans le framework.
[F] .htaccess dans les descriptions de répertoires ci-dessous représente des fichiers .htaccess empêchant
l’accès dans les répertoires en question qui ne doivent pas être accessibles depuis l’interface par l’utilisateur.
45
openMairie Framework Documentation, Version 4.5
3.1.1.1 Les répertoires spécifiques à l’applicatif
Ces répertoires sont ceux qui font l’applicatif. Par exemple, sur un applicatif comme openCimetière ce sont les
répertoires qui vont se trouver dans le gestionnaire de fichiers que l’on appelle les répertoires spécifiques.
data/
Contient tous les fichiers d’initialisation de la base de données de l’applicatif
[D] data/
|-[F] .htaccess
|-[D] pgsql/
|---- ...
|---- ...
app/
Contient tout les scripts spécifiques à l’applicatif que ce soit des javascripts ou des images ou des scripts PHP
[D] app/
|-[D] css/
|---- ...
|-[D] img/
|---- ...
|-[D] js/
|---- ...
|---- ...
dyn/
Contient les fichiers de paramétrage de l’applicatif
[D] dyn
|-[F] .htaccess
|---- ...
gen/
Contient les scripts (obj) et requêtes (sql) générés par le générateur
[D] gen
|-[F] .htaccess
|-[D] dyn/
|---- ...
|-[D] inc/
|---- ...
|-[D] obj/
|---- ...
|-[D] sql/
|-[D] pgsql
|---- ...
|---- ...
46
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
locales/
Contient les fichiers de traduction de l’applicatif
[D] locales/
|-[F] .htaccess
|---- ...
obj/
Contient les objets métiers surchargeant les objets générés
[D] obj/
|-[F] .htaccess
|---- ...
sql/
Contient les scripts sql surchargeant les scripts générés
[D] sql/
|-[F] .htaccess
|-[D] pgsql/
|---- ...
|---- ...
tests/
Contient les jeux de tests unitaires et fonctionnels de l’applicatif
[D] tests/
|-[F] .htaccess
|---- ...
tmp/
Contient les fichiers temporaires créés par l’applicatif
[D] tmp/
|-[F] .htaccess
|---- ...
trs/
Contient les fichiers stockés par l’applicatif
[D] trs/
|-[F] .htaccess
|-[D] 1/
|---- ...
|---- ...
3.1. Manuel de référence
47
openMairie Framework Documentation, Version 4.5
3.1.1.2 Les répertoires du framework
Ces répertoires sont ceux qui sont issus du framework, c’est-à-dire qu’ils ne sont pas dans l’applicatif lui même.
Par exemple, sur un applicatif comme openCimetière ce sont les répertoires qui vont être récupérés par une propriété externals sur le gestionnaire de versions que l’on appelle les répertoires du framework.
php/
Contient les librairies PHP utilisées par le framework (comme dbpear, phpmailer ou fpdf)
[D] php
|-[F] .htaccess
|---- ...
core/
Contient les classes de la librairie du framework
[D] core
|-[F] .htaccess
|---- ...
css/
Contient les feuilles de style de base du framework
[D] css/
|---- ...
img/
Contient les images du framework
[D] img/
|---- ...
js/
Contient les javascripts de base du framework
[D] js/
|---- ...
lib/
Contient les librairies javascripts utilisées par le framework (comme openLayers ou jquery)
[D] lib/
|---- ...
48
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
pdf/
Contient les scripts d’édition du framework
[D] pdf/
|---- ...
scr/
Contient les scripts d’affichage du framework
[D] scr/
|---- ...
spg/
Contient les sous programmes génériques du framework
[D] spg/
|---- ...
3.1.2 Initialisation de la base de données
3.1.2.1 Description du dossier data/pgsql/
Il est nécessaire de positionner l’entête de fichier suivant pour chacun des fichiers sql de ce dossier :
--------------------------------------------------------------------------------- Description succinte de l'utilité du fichier
--- Informations nécessaires à la génération ou à la composition du fichier
--- @package <APPLICATIF>
-- @version SVN : $Id$
--------------------------------------------------------------------------------
Description de tous les fichiers init*.sql
Il s’avère nécessaire de mettre dans l’entête des fichiers init*.sql la commande ou les instructions qui ont
permis de générer ou de composer le fichier en question.
3.1.2.1.1.1 Le fichier init.sql Ce fichier contient les instructions de base du framework. Il permet de créer
les tables et les séquences du framework (celles qui commencent par om_*). Il est généré grâce à la commande :
pg_dump -s -O -n <SCHEMA> -T <SCHEMA>.om_* <DATABASE>
Dans les applicatifs, ce fichier est sensé être directement copié depuis le framework.
3.1. Manuel de référence
49
openMairie Framework Documentation, Version 4.5
3.1.2.1.1.2 Les fichiers init_metier*.sql Ces fichiers contiennent les instructions de base de l’applicatif.
— Le fichier init_metier.sql permet de modifier (si besoin) le modèle de données du framework et de
créer les tables et les séquences de l’applicatif (celles qui ne commencent par om_*). Il est généré grâce à
la commande :
pg_dump -s -O -n <SCHEMA> -t <SCHEMA>.om_* <DATABASE>
Dans le framework, ce fichier est vide.
— Le fichier init_metier_sig.sql permet de modifier le modèle de données créé précédemment pour
y ajouter des champs de type geom pour la gestion du SIG.
— Le fichier init_metier_vue.sql permet de modifier le modèle de données créé précédemment pour
y remplacer une table par une vue vers la table d’un autre schéma ou d’une autre base de données.
3.1.2.1.1.3 Les fichiers init_parametrage*.sql Ces fichiers contiennent l’initialisation du paramétrage c’est-à-dire les données nécessaires à l’utilisation de l’application. Ils sont générés généralement grâce à
la commande :
pg_dump -a -t <SCHEMA>.<TABLE1> -t <SCHEMA>.<TABLE2> ... <DATABASE>
— Le fichier init_parametrage.sql permet d’initialiser par exemple la ou les collectivités de base
ainsi que les profils et l’utilisateur admin. Dans certains applicatifs simple, ce fichier peut être unique et
tout le paramétrage contenu dans ce dernier.
— Le fichier init_parametrage_permissions.sql permet d’initialiser les permissions de l’applicatif. Cette initialisation se trouve dans un fichier séparé pour appréhender plus facilement le paramétrage
des permissions et éventuellement la mise à jour de ce paramétrage.
— Le fichier init_parametrage_editions.sql permet d’initialiser les editions de base générique
de l’aplicatif. Cette initialisation se trouve dans un fichier séparé pour appréhender plus facilement le
paramétrage des éditions et éventuellement la mise à jour de ce paramétrage.
— Le fichier init_parametrage_*.sql peut permettre de découper encore l’initialisation pour appréhender plus facilement le paramétrage et éventuellement la mise à jour de ce paramétrage.
3.1.2.1.1.4 Le fichier init_data.sql Ce fichier contient l’initialisation d’un jeu de données à destination
de trois environnements distincts :
— l’environnement de développement,
— l’environnement de démonstration,
— l’environnement de tests.
Description des fichiers vX.X.X.sql ou ver_X.X.X.sql
Ces fichiers permettent de mettre à jour les applicatifs d’une version vers la version supérieure. Le X.X.X correspond au numéro de version vers lequel la mise à jour se fait et depuis la version juste précédente.
Lorsque le framework ou l’applicatif est en développement, ce fichier peut être suffixé par -dev et indique qu’il
n’a pas encore été intégré aux différents fichiers init*.sql. Juste avant une nouvelle version du framework, les
fichiers init*.sql doivent être regénérés pour intégrés les dernières modifications et ce fichier renommé avec
son nom vX.X.X.sql ou ver_X.X.X.sql standard.
Description du fichier update_sequences.sql
Ce fichier permet de créer une fonction capable de mettre à jour toutes les séquences correctement liées aux champs
auxquels elles se rattachent en fonction de la dernière valeur du champ dans la table. En plus de la création de la
fonction ce script exécute la fonction.
50
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
Description du fichier install.sql
Ce fichier permet d’initialiser tous les fichiers qui sont décrits ci-dessus dans le bon ordre. Par défaut ce fichier
installe la base de données et les données nécessaires aux trois environnements suivants :
— l’environnement de développement,
— l’environnement de démonstration,
— l’environnement de tests.
Note : Ce fichier comporte l’initialisation des commandes postgis par défaut pour la dernière version de postgis.
Les commandes pour l’ancienne version sont présentes et commentées dans ce même fichier.
3.1.2.2 Paramétrage de la connexion à la base de données
Le paramétrage de la connexion à la base de données se fait dans le fichier dyn/database.inc.php.
Note : Dans le framework le schéma utilisé par défaut est openexemple, dans les applicatifs c’est normalement le
nom de l’applicatif <APPLICATIF> (par exemple : openelec, opencimetiere, ...).
<?php
/**
* Ce fichier permet le paramétrage de la connexion à la base de données,
* chaque entrée du tableau correspond à une base différente. Attention
* l'index du tableau conn représente l'identifiant du dossier dans lequel
* seront stockés les fichiers propres a cette base dans l'application.
*
* @package openmairie_exemple
* @version SVN : $Id: database.inc.php 2302 2013-05-23 18:04:22Z fmichon $
*/
// PostGreSQL
$conn[1] = array(
"openExemple", // Titre
"pgsql", // Type de base
"pgsql", // Type de base
"postgres", // Login
"postgres", // Mot de passe
"tcp", // Protocole de connexion
"localhost", // Nom d'hote
"5432", // Port du serveur
"", // Socket
"openexemple", // Nom de la base
"AAAA-MM-JJ", // Format de la date
"openexemple", // Nom du schéma
"", // Préfixe
NULL, // Paramétrage pour l'annuaire LDAP
"mail-default", // Paramétarge pour le serveur de mail
"filestorage-default", // Paramétrage pour le stockage des fichiers
);
?>
La documentation de DB PEAR qui est le module d’abstraction utilisé par le framework donne plus d’informations
sur les paramètres.
3.1.3 Paramétrage du framework
Le paramétrage de l’application se fait dans le répertoire /dyn.
Il est proposé dans ce chapitre de décrire les différents fichiers de paramétrage.
3.1. Manuel de référence
51
openMairie Framework Documentation, Version 4.5
Pour le fichier dyn/database.inc.php, voir Paramétrage de la connexion à la base de données.
Les fichiers de paramétrage sont les suivants
dyn/menu.inc.php
menu principal à gauche
dyn/action.inc
menu haut
dyn/shortslink.inc
lien sous menu haut
dyn/dashboard.inc.php
tableau de bord
dyn/locales.inc
application
dyn/config.inc.php
application
dyn/include.inc.php
chemin d'accès aux librairies
dyn/debug.inc.php
mode debug
dyn/version.inc
paramétrage de la version
dyn/var_sig.inc
paramétrage sig
dyn/form_sig_update.inc.php
parametrage sig
dyn/form_sig_delete.inc.php
parametrage sig
dyn/var_adresse_postale.inc
parametrage sig
dyn/filestorage.inc.php
filestorage
dyn/footer.inc.php
enpieds
dyn/tab.inc.php
variable specifique à passer dans l'url pour tab.php
dyn/soustab.php
variable specifique à passer dans l'url pour soustab.php
dyn/form.php
variable specifique à passer dans l'url pour form.php
dyn/sousform.php
variable specifique à passer dans l'url pour sous.php
dyn/var.inc
variable application (deprecated : préférez om_parametre
dyn/varetatpdf.inc
variable etat et sousetat pdf
dyn/varlettretypepdf.inc
varaible lettre type
dyn/varsousform.get.specific.inc.php
variable spécifique sousform
dyn/directory.inc.php
connexions a des annuaires LDAP
dyn/comboaffichage.inc.php
paramétrage combo
dyn/comboparametre.inc.php
parametrage combo
dyn/comboretour.inc.php
paramétrage combo
README.txt
HISTORY.txt
LICENCE.txt
TODO.txt
INSTALL.txt
app/SPECIFIC.txt
fichiers textes
explication sur la partie spécifique de l application
3.1.3.1 Les zones de navigation
Quatre zones de navigation différentes sont disponibles dans le framework :
52
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
Le menu
Le but de cette zone de navigation est de rassembler les liens vers toutes les fonctions du logiciel regroupées
par rubrique et catégorie. Elle se situe à gauche du contenu et est visible uniquement lorsque l’utilisateur est
authentifié.
Par défaut le menu est composé de la manière suivante
application
export
3.1. Manuel de référence
vide par défaut, contient l'accès à votre application
contient le script "edition" qui reprend
les éditions pdf des tables
contient le menu "reqmo" qui reprend les requêtes
53
openMairie Framework Documentation, Version 4.5
traitement
parametrage
administration
mémorisées
vide par défaut, cet option contient les scripts de
traitements
Cette option contient vos tables de paramétrage
fonctionnel. Par défaut il contient le
paramétrage des états / sous-états / lettres type
Cette option contient les fonctions de configuration
de l'administrateur technique. Cela comprend
notamment le paramètrage de la collectivité,
om_sig et la gestion des droits d'accès
La configuration des liens se fait dans le fichier dyn/menu.inc.php. Ce fichier de paramétrage n’est pas
obligatoire. Si il n’existe pas, aucun lien n’est affiché. Ce fichier de paramétrage doit contenir la déclaration d’un
tableau de tableaux associatifs dans la variable $menu. Chaque tableau associatif représente une rubrique. Chaque
rubrique contient un tableau de tableaux associatifs, chacun représentant un lien.
Les caracteristiques de ce tableau sont les suivantes :
tableau rubrik
title (obligatoire)
description (texte qui s'affiche au survol de la rubrique)
href (contenu du lien href)
class (classe css qui s'affiche sur la rubrique)
right (droit que l'utilisateur doit avoir pour visionner cette rubrique)
links (obligatoire)
open (critères de pré-ouverture de cette rubrique du menu)
tableau links
title (obligatoire)
href (obligatoire) (contenu du lien href)
class (classe css qui s'affiche sur l'element)
right (droit que l'utilisateur doit avoir pour visionner cet element)
target (pour ouvrir le lien dans une nouvelle fenetre)
open (critères de pré-ouverture de la rubrique du menu dans laquelle est ce
lien, et sélection de ce lien en lien actif)
L’entrée open sert à marquer une entrée de menu comme active. La rubrique contenant cette entrée est ouverte
dès l’affichage de la page, et l’entrée active est mise en évidence. L’entrée open peut contenir soit une chaîne soit
un array() comportant plusieurs chaînes. Chaque chaîne est créée selon la syntaxe ’script.php|obj’,
chacune des deux parties étant optionnelle. Le caractère séparateur | est obligatoire.
Exemple [’\|om_collectivite’
sélectionnera
l’entrée
pour
toutes
les
url]
ayant
obj=om_collectivite
’tab.php|om_collectivite’ sélectionnera l’entrée pour l’affichage du tableau de la classe
om_collectivite
’unecran.php|’ sélectionnera l’entrée dès lors que le script unecran.php est appelé quelque soit
la classe obj
Les actions personnelles
Le but de cette zone de navigation est de regrouper des liens vers des fonctions qui concernent les informations de
connexion de l’utilisateur. Elle se situe dans le coin en haut à droite de l’écran et est visible uniquement lorsque
l’utilisateur est authentifié.
54
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
Par défaut les actions personnelles sont composées de quatre éléments :
— le login de l’utilisateur,
— le libellé de la collectivité,
— un lien vers la page de modification du mot de passe,
— un lien vers la page de déconnexion du logiciel.
Le login de l’utilisateur est récupéré par la méthode displayActionLogin() de la classe
om_application. Cette méthode peut être surchargée dans la classe utils.
Le libellé de la collectivité est récupéré par la méthode displayActionCollectivite() de la classe
om_application. Cette méthode peut être surchargée dans la classe utils.
La configuration des liens se fait dans le fichier dyn/actions.inc.php. Ce fichier de paramétrage n’est pas
obligatoire. Si il n’existe pas, aucun lien n’est affiché. Ce fichier de paramétrage doit contenir la déclaration d’un
tableau de tableaux associatifs dans la variable $actions. Chaque tableau associatif représente un lien.
<?php
//
$actions = array();
//
$actions[] = array(
"title" => _("Link"),
"description" => _("Description"),
"href" => "../scr/link.php",
"target" => "_blank",
"class" => "action-link",
"right" => "link",
);
?>
Description de chaque paramètre du tableau associatif :
Paramètre
title
description
href
target
class
right
Requis ?
O
N
N
N
N
N
Description
Texte
Texte qui s’affiche au survol de l’élément
Contenu du lien href
Attribut pour ouvrir le lien dans une nouvelle fenêtre
Classe CSS qui s’affiche sur l’élément
Permission nécessaire à l’utilisateur pour visualiser l’élément
Les raccourcis
Le but de cette zone de navigation est de regrouper des liens vers des fonctions précises utilisées très souvent.
Elle se situe en haut à droite de l’écran juste au dessous des actions personnelles et est visible uniquement lorsque
l’utilisateur est authentifié.
Par défaut les raccourcis contiennent uniquement un lien vers le tableau de bord.
La configuration des liens se fait dans le fichier dyn/shortlinks.inc.php. Ce fichier de paramétrage n’est
pas obligatoire. Si il n’existe pas, aucun lien n’est affiché. Ce fichier de paramétrage doit contenir la déclaration
d’un tableau de tableaux associatifs dans la variable $shortlinks. Chaque tableau associatif représente un lien.
3.1. Manuel de référence
55
openMairie Framework Documentation, Version 4.5
<?php
// On initialise le tableau conteneur
$shortlinks = array();
// On ajoute au tableau conteneur un tableau associatif représentant un lien
// (à répéter autant de fois que nécessaire)
$shortlinks[] = array(
"title" => _("Link"),
"description" => _("Description"),
"href" => "../scr/link.php",
"target" => "_blank",
"class" => "action-link",
"right" => "link",
);
?>
Paramètre
title
description
href
target
class
right
Requis ?
O
N
N
N
N
N
Description
Texte
Texte qui s’affiche au survol de l’élément
Contenu du lien href
Attribut pour ouvrir le lien dans une nouvelle fenêtre
Classe CSS qui s’affiche sur l’élément
Permission nécessaire à l’utilisateur pour visualiser l’élément
Les actions globales
Le but de cette zone de navigation est de représenter la section “À propos” du logiciel. Elle se situe en bas de
l’écran juste au dessous du contenu de la page et est visible lorsque l’utilisateur est authentifié ou non.
Par défaut les actions globales sont composées de trois éléments :
— le nom du logiciel ainsi que son numéro de version,
— un lien vers la documentation du site openMairie,
— un lien vers le site openMairie.
Le nom du logiciel est récupéré de la variable $config[’application’] présente dans le fichier
dyn/config.inc.php. La version est récupérée de la variable $version présente dans le fichier
dyn/version.inc.php.
La configuration des liens se fait dans le fichier dyn/footer.inc.php. Ce fichier de paramétrage n’est pas
obligatoire. Si il n’existe pas, aucun lien n’est affiché. Ce fichier de paramétrage doit contenir la déclaration d’un
tableau de tableaux associatifs dans la variable $footer. Chaque tableau associatif représente un lien.
<?php
// On initialise le tableau conteneur
$footer = array();
// On ajoute au tableau conteneur un tableau associatif représentant un lien
// (à répéter autant de fois que nécessaire)
$footer[] = array(
"title" => _("Link"),
"description" => _("Description"),
"href" => "../scr/link.php",
"target" => "_blank",
"class" => "action-link",
"right" => "link",
);
?>
56
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
Paramètre
title
description
href
target
class
right
Requis ?
O
N
N
N
N
N
Description
Texte
Texte qui s’affiche au survol de l’élément
Contenu du lien href
Attribut pour ouvrir le lien dans une nouvelle fenêtre
Classe CSS qui s’affiche sur l’élément
Permission nécessaire à l’utilisateur pour visualiser l’élément
3.1.3.2 Le tableau de bord
Le tableau de bord se paramètre dans le fichier dyn/dashboard.inc.
Ce fichier est appellé par le script scr/dashboard.php.
Pour avoir son propre tableau de bord, il suffit de decommenter la ligne // die() ; et on accède plus au widget
Voir chapitre : widget et tableau de bord paramétrable
3.1.3.3 Les variables locales et la langue
Les variables locales sont paramétrées dans le fichier dyn/locales.inc.php
Ce fichier contient :
— le paramétrage du codage des caracteres (ISO-8859-1 ou UTF8)
"DEPRECATED"
define('CHARSET', 'ISO-8859-1');
ou
define('CHARSET', 'UTF8');
Dans la version 4.2.0, il y a 2 paramètres :
pour la base : DB_CHARSET
pour apache : HTTP_CHARSET
Ces 2 paramètres remplacent CHARSET
Note ::
Dans apache, il est possible de modifiet l'encodage
dans etc/apache2/apache2.conf commenter ##AddDefaultCharset = ISO-8859-1
relancer ensuite apache : $ etc/apache2/init.d/apache2 reload
A partir de la version 3.0.1, l'imcompatibilité utf8 de la bibliotheque fpdf est traitée
— le dossier ou sont installées les variables du systeme
define('LOCALE', 'fr_FR');
— Le dossier contenant les locales et les fichiers de traduction
define('LOCALES_DIRECTORY', '../locales');
— Le domaine de traduction
define('DOMAIN', 'openmairie');
Les zones à traduire sont sous le format : _(“zone a traduire”)
Voir le chapitre sur les outils : poEdit
3.1. Manuel de référence
57
openMairie Framework Documentation, Version 4.5
3.1.3.4 Le paramétrage de l application metier
L’application métier est paramétrée dans dyn/var.inc
Ce script contient les paramétres globaux de l application . Attention les paramètres s’appliquent à toutes les bases
de l’application.
Le paramétrage spécifique par collectivité doit se faire dans la table om_parametre
La configuration générale de l’application se fait aussi dans dyn/config.inc.php.
Les paramètres sont récupérés avec la création d’un objet utils par : $f->config[’nom_du_parametre’]
Voir framework/utilitaire
Exemple de paramétrage avec openCourrier
$config['application'] = _("openCourrier");
$config['title'] = ":: "._("openMairie")." :: "._("openCourrier");
$config['session_name'] = "openCourrier";
— le mode demonstration de l’application se paramétre avec $config[’demo’]
Ce mode permet de pre-remplir le formulaire de login avec l’identifiant ‘demo’ et le mot de passe ‘demo’
$config['demo'] = false; l'application n'est pas en mode démo
true; l'application est en mode démo
Attention, pour empêcher de changer le mot de passe, il faut paramétrer l'accès
dans la table om_droit : password
— La configuration des extensions autorisees dans le module upload.php
Pour changer votre configuration, décommenter la ligne et modifier les extensions avec des ” ;” comme séparateur
$config['upload_extension'] = ".gif;.jpg;.jpeg;.png;.txt;.pdf;.csv;"
— La configuration de la taille maximale des fichiers dans le module upload.php
Pour changer votre configuration, décommenter la ligne et modifier la taille. La taille maximale est en mo.
$config['upload_taille_max'] = str_replace('M', '', ini_get('upload_max_filesize')) * 1024;
— Le thème de l’application
A partir de la version 3.1.0, le theme n’est plus géré dans config.inc.php. Il est initialisé dans EXTERNALS.TXT
du repertoire om-theme (version 4.2.0)
exemple pour om_ui_darkness
om_theme svn://scm.adullact.net/svnroot/openmairie/externals/jquery-ui-theme/
om_ui-darkness/tags/1.8.14
3.1.3.5 Le Parametrage des librairies
Le paramétrage de l’accès aux librairies se fait dans dyn/include.inc.php
Ce fichier permet de configurer les paths en fonction de la directive include_path du fichier php.ini.
Vous pouvez aussi modifier ces chemins avec vos propres valeurs si vous voulez personnaliser votre
installation :
PEAR
array_push($include, getcwd()."/../php/pear");
DB
58
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
array_push($include, getcwd()."/../php/db");
FPDF
array_push($include, getcwd()."/../php/fpdf");
OPENMAIRIE (dans CORE depuis la version 4.2.0)
define("PATH_OPENMAIRIE", getcwd()."../core/openmairie/");
Par défaut, les librairies sont incluses dans openmairie_exemple :
— /lib : contient les librairies javascript
— /php : contient les librairies php
3.1.3.6 Le mode DEBUG
Dans le code, pour logger une information, il suffit de d’utiliser la ligne suivante :
$this->addToLog("requete sig_interne maj parcelle inexistante :".$sql, EXTRA_VERBOSE_MODE);
Les différents modes DEBUG présents dans l’application sont définis dans le fichier core/om_debug.inc.php :
— EXTRA_VERBOSE_MODE - mode “très bavard” : affiche tous les messages
— VERBOSE_MODE - mode “bavard” : affiche tous les messages d’erreur ainsi que toutes les requêtes
exécutées
— DEBUG_MODE - mode “debug” : affiche tous les messages d’erreur
— PRODUCTION_MODE - mode “production” : il n y a pas de message
Dans l’applicatif, on peut paramétrer le mode DEBUG grâce au fichier dyn/debug.inc.php suivant. Il suffit de
commenter/décommenter l’instruction define souhaitée.
<?php
/**
* Ce fichier contient le parametrage pour le mode debug
*
* @package openmairie_exemple
* @version SVN : $Id: debug.inc.php 2198 2013-03-28 17:08:33Z fmichon $
*/
/**
*
*/
(defined("PATH_OPENMAIRIE") ? "" : define("PATH_OPENMAIRIE", ""));
require_once PATH_OPENMAIRIE."om_debug.inc.php";
/**
*
*/
//define('DEBUG', EXTRA_VERBOSE_MODE);
//define('DEBUG', VERBOSE_MODE);
//define('DEBUG', DEBUG_MODE);
define('DEBUG', PRODUCTION_MODE);
?>
Dans le dossier tmp/error_log.txt les messages de logs de niveau DEBUG_MODE sont écrits quelque soit le mode
définit.
3.1.3.7 La version de votre application
Vous devez mettre le numéro de version et la date de votre application dans dyn/version.inc
Voir le versionage des applications.
3.1. Manuel de référence
59
openMairie Framework Documentation, Version 4.5
3.1.3.8 Les informations generales
Les fichiers textes d’information générale sont à la racine de l’application :
README.txt :
ce fichier peut contenir entre autre, la liste des auteurs ayant participé au projet
HISTORY.txt : information sur chaque version :
les (+) et les (bugs) corrigés
app/SPECIFIC.txt :
Ici, vous décrivez la specificite de l application courante par rapport au framework
LICENCE.txt : licence libre de l application
TODO.txt : feuille de route - roadmap
INSTALL.txt : installation de l application
3.1.3.9 L’installation automatique
Lun fichier data/sql/install.sql permet d’installer rapidemment et data/sql/make_init.sh permet de constituer rapidemment des scripts sql d’installation.
3.1.3.10 Les paramétres des combos
Les paramétres des combos sont paramétrés dans les fichiers suivants (type de contrôle de formulaire comboD et
comboG (pour formulaire) ou comboD2 et comboG2 (pour sous formulaire)
- comboaffichage.inc.php :
paramétre de l'affichage dans la fenêtre combo.php
- comboparametre.inc.php
affecte des valeus spécifiques au formulaire parent si il y a plusieurs
enregistrement en lien (choix en affichage)
- comboretour.inc.php
meme chose que comboparametre.inc si il n'y a qu un enregistrement en lien
(pas d'affichage de la fenetre)
Voir chapitre framework/formulaire, sous programme générique combo.php
3.1.3.11 Les paramétres éditions
Les variables dans les éditions sont paramétrées dans
- varpdf.inc
- varetatpdf.inc
- varlettretypepdf.inc
pour les pdf
pour les états et les sous états
pour les lettres type
Voir chapitre framework/édition
3.1.3.12 Les paramétres om_sig
var_sig.php
les paramètres sont les suivants
60
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
$contenu_etendue[0]= array('4.5868,43.6518,4.6738,43.7018'
);
$contenu_etendue[1]= array('vitrolles'
);
$contenu_epsg[0] = array("","EPSG:2154","EPSG:27563");
$contenu_epsg[1] = array("choisir la projection",'lambert93','lambertSud');
$type_geometrie[0] = array("","point","line","polygon");
$type_geometrie[1] = array("choisir le type de géométrie",'point','ligne','polygone');
ces paramétres sont utilisés pour la saisie de carte : voir chapitre sig
Les post traitements de form_sig permettent de faire des traitement apres saisie de géométries avec om_sig
form_sig_update.inc.php
form_sig_delete.inc.php
3.1.4 Afficher les tables
Il est décrit dans ce paragraphe, l’utilisation et la configuration des tableaux d’enregistrements issus de la base de
données.
La gestion des tableaux se base sur le fichier core/om_table.class.php (classe table)
Pour chaque affichage de tableau, le script sql/DBTYPE/[objet].inc.php correspondant est appelé. Il permet de
stocker le détail des requêtes nécessaires à l’affichage du contenu.
Les tableaux sont construits lors de l’appel aux scripts scr/tab.php et scr/soustab.php.
3.1.4.1 Les script scr/tab.php et scr/soustab.php
L’appel à ces scripts permet d’afficher un tableau d’enregistrements de l’objet passé en paramètre.
Liste des paramètres passés à l’url :
— obj : nom de l’objet pour lequel on souhaite afficher le tableau
— premier : numéro de la première ligne affichée dans le tableau
— recherche : chaîne de caractères recherchée depuis le modules de recherche
— selectioncol : numéro de la colonne sélectionnée dans le module de recherche
— tricol : numéro de colonne et orientation (+/-) du tri du tableau
— valide : (true/false) affiche ou non les enregistrements non valide
L’appel à scr/soustab.php est fait en javascript depuis un formulaire afin d’afficher les informations liées à l’enregistrement en cours d’édition.
3.1. Manuel de référence
61
openMairie Framework Documentation, Version 4.5
3.1.4.2 La requête SQL d’affichage
Elle se trouve dans sql/DBTYPE/[objet].inc.php
Les paramètres sont les suivants pour om_parametre.inc.php
<?php
//Nombre d'enregistrements par page
$serie=15;
//Icone affiché (XXX à voir deprecated)
$ico="../img/ico_application.png";
//Titre du tableau
$ent = _("option")." -> "._("om_parametre");
//Table de référence (il peut y avoir une ou plusieurs jointure)
$table=DB_PREFIXE."om_parametre";
//Liste des champs du tableau
$champAffiche=array('om_parametre',
'libelle',
'valeur',
'om_collectivite');
//Champs pour la recherche
$champRecherche=array('libelle','valeur');
//Critère de tri par défaut
$tri="";
//édition PDF
$edition="om_parametre";
//sous formulaire(s) associé(s)
$sousformulaire= array()
//autre exemple de sous-formulaire avec om_collectivite.inc.php
$sousformulaire=array('om_etat',
'om_lettretype',
'om_parametre',
'om_sousetat',
'om_utilisateur');
?>
Il est possible de surcharger les liens du tableau (voir la configuration des actions)
3.1.4.3 Les fonctionnalités
—
—
—
—
—
—
—
—
la recherche simple
la recherche avancée
la pagination
le tri
les éléments archivés
l’export PDF
l’export CSV
les actions
3.1.4.4 Le composant openMairie
tab.php utilise les méthodes d’om_table.class.php qui est une classe d’openMairie
core/om_table.class.php
Les méthodes de ce composant peuvent être surchargées dans obj/om_table.class.php
62
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
3.1.5 La recherche avancée
3.1.5.1 Les différents types de recherche
Recherche simple
Cette recherche est celle disponible par défaut sur les tableaux d’openMairie.
Elle permet de :
— rechercher une valeur dans une colonne parmi toutes celles affichées ;
— rechercher une valeur dans toutes les colonnes affichées ;
— rechercher des valeurs approximatives.
Note : Il est possible de modifier la liste des colonnes dans laquelle est effectuée la recherche. Cette liste ne
correspond pas forcément aux colonnes affichées. Elle correspond seulement par défaut, c’est à dire lorsqu’aucune
surcharge ne modifie les fichiers générés dans gen/sql/.
Recherche avancée
Cette recherche est une fonctionnalité qui peut être activée et configurée manuellement pour un ou plusieurs
tableaux donnés.
Elle permet de :
— afficher un formulaire de recherche mono-critère permettant d’effectuer des recherches strictes ou approximatives ;
— afficher un formulaire de recherche multi-critères permettant d’effectuer des recherches strictes ou approximatives ;
— rechercher des valeurs dans des tables et des colonnes qui ne sont pas affichées.
3.1.5.1.2.1 Recherche avancée mono-critère Le formulaire de recherche mono-critère est un formulaire ne
s’affichant que si la recherche avancée est activée. Il permet aux utilisateurs de basculer sur un formulaire similaire
à celui de recherche simple lorsque la recherche avancée est activée.
Ce formulaire se comporte de la même manière que celui de recherche simple, avec quelques différences :
— il permet de rechercher des valeurs strictes ou approximatives (par défaut approximatives) ;
— il recherche dans toutes les colonnes proposées par la recherche simple ;
— il conserve les valeurs recherchées après la réalisation d’une action (ajout, modification, etc...) ;
— il dispose d’un bouton Vider le formulaire permettant de vider les champs ;
— il dispose d’un bouton + permettant de basculer sur le formulaire multi-critères.
3.1.5.1.2.2 Recherche avancée multi-critères Le formulaire de recherche multi-critères est un formulaire ne
s’affichant que si la recherche avancée est activée. Il permet aux utilisateurs de bénéficier de plusieurs champs, et
ainsi effectuer des recherches plus précise qu’avec le formulaire de recherche simple.
Description du formulaire :
— il peut afficher plusieurs champs, de type texte, nombre, date ou liste à choix ;
— il permet, pour chaque tableau, de configurer la liste des champs affichés ;
— il permet, pour chaque champ, de rechercher des valeurs strictes ou approximatives (par défaut approximatives) ;
— il permet, pour chaque champ, de rechercher des valeurs dans des tables et des colonnes qui ne sont pas
affichées ;
— il conserve les valeurs recherchées après la réalisation d’une action (ajout, modification, etc...) ;
— il dispose d’un bouton Vider le formulaire permettant de vider les champs ;
— il dispose d’un bouton + permettant de basculer sur le formulaire mono-critère.
3.1. Manuel de référence
63
openMairie Framework Documentation, Version 4.5
3.1.5.2 Configuration de la recherche avancée
Activation
Exemple avec le modèle om_utilisateur.
Pour activer la recherche avancée, rendez-vous dans le fichier sql/sgbd/om_utilisateur.inc.php et
ajoutez la configuration suivante au tableau d’options :
<?php
$options[] =
array('type' => 'search',
'display' => true,
'advanced' => $champs,
'default_form' => 'advanced',
'absolute_object' => 'om_utilisateur');
?>
Note : A partir de la version 4.3.0 d’openMairie, le tableau $options est disponible dans les fichiers sql/ de
l’application. Il n’est plus nécessaire de le déclarer manuellement.
La clé type est obligatoire. Elle permet de définir le type de l’option. Pour une recherche il faut saisir search.
La clé display est obligatoire. Elle permet d’afficher ou non la recherche, tout en conservant sa configuration.
— true permet d’afficher la recherche ;
— false permet de masquer la recherche.
La clé advanced est obligatoire (pour la recherche avancée). Elle permet de préciser que le formulaire de recherche est un formulaire de recherche avancée et non simple. Cette clé doit contenir le tableau des champs
configurés pour la recherche (voir plus bas pour la configuration des champs).
La clé default_form est optionnelle. Elle permet de choisir quel formulaire de recherche est ouvert par défaut.
La valeur advanced’ permet d’afficher le formulaire multi-critères. Les autres valeurs, ou si default_form
n’est pas configuré, affichent le formulaire mono-critère.
La clé absolute_object est obligatoire. Elle permet de spécifier à openMairie le nom du modèle l’objet
recherché. Ce nom est celui du fichier dans obj/, ici om_utilisateur.class.php (sans son extension).
Autres paramètres
Wildcard
Le wildcard permet de rendre la recherche stricte ou approximative.
Cette option peut se configurer pour un ou plusieurs modèles particuliers dans les fichiers correspondants du
répertoire sql/ de l’application. Elle peut également être configurée de manière globale pour l’ensemble dans
modèle à partir du fichier dyn/tab.inc.php.
Par défaut, il est paramétré de la manière suivante :
<?php
$options[] = array('type' => 'wildcard', 'left' => '%', 'right' => '%');
?>
— left détermine, dans la requête SQL de recherche, le caractère ajouté au début (à gauche) de la valeur
recherchée ;
— right détermine, dans la requête SQL de recherche, le caractère ajouté en fin (à droite) de la valeur
recherchée.
64
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
Avec cette configuration lorsque le mot « admin » est recherché dans une colonne, toutes les valeurs contenant «
admin » sont retournées.
En modifiant la configuration de cette manière :
<?php
$options[] = array('type' => 'wildcard', 'left' => '', 'right' => '%');
?>
Seules les valeurs commençant par « admin » seront retournées.
Enfin avec :
<?php
$options[] = array('type' => 'wildcard', 'left' => '', 'right' => '');
?>
Seules les valeurs égales exactement à « admin » seront retournées.
3.1.5.3 Configuration des critères de recherche
La recherche avancée ne fonctionnera pas tant que la liste des champs du formulaire multi-critères n’aura pas été
créée. Ces champs sont appelés ici des critères de recherche.
Configuration simple
Un critère de recherche est représenté par un tableau PHP contenant sa configuration.
<?php
$champs['identifiant_utilisateur'] =
array('colonne' => 'om_utilisateur',
'table' => 'om_utilisateur',
'type' => 'text',
'libelle' => _('Identifiant'),
'taille' => 10,
'max' => 8));
?>
La clé identifiant_utilisateur est le nom du champ HTML qui sera affiché sur le formulaire.
La clé colonne est obligatoire. Elle contient le nom de la colonne de la base de données qui sera interrogée si la
variable $_POST contient la clé identifiant_utilisateur.
La clé table est obligatoire. Elle contient le nom de la table de la base de données qui sera interrogée si la
variable $_POST contient la clé identifiant_utilisateur.
La clé ’type est obligatoire. Elle contient le type du champ HTML à afficher. Cela peut être date, text,
select, ou tout autre méthode de la classe formulaire. Pour les champs de type select, le nom du champ
HTML doit être le même que le nom de la colonne.
La clé libelle est obligatoire. Elle contient le libellé qui sera affiché à côté du champ dans le formulaire de
recherche.
La clé taille est optionnelle. Elle contient la taille du champ HTML (attribut HTML size).
La clé max est optionnelle. Elle contient la longueur maximale de la valeur du champ HTML (attribut HTML
maxlength).
3.1. Manuel de référence
65
openMairie Framework Documentation, Version 4.5
Une fois tous les critères de recherche configurés, il faudra simplement vérifier que le tableau des critères est bien
utilisé par l’option de type search.
Exemple de formulaire pour le tableau du modèle om_utilisateur :
<?php
$champs = array();
$champs['login'] = array(
'table' => 'om_utilisateur',
'colonne' => 'login',
'type' => 'text',
'libelle' => _('Login'));
$champs['email'] = array(
'table' => 'om_utilisateur',
'colonne' => 'email',
'type' => 'text',
'libelle' => _('E-mail'));
$champs['om_profil'] = array(
'table' => 'om_utilisateur',
'colonne' => 'om_profil',
'type' => 'select',
'libelle' => _('Profil'));
$options[] =
array('type' => 'search',
'display' => true,
'advanced' => $champs,
'default_form' => 'advanced',
'absolute_object' => 'om_utilisateur');
?>
Configuration avancée
3.1.5.3.2.1
Créer un intervalle de date Exemple : recherche des utilisateurs crées entre telle et telle date.
<?php
$champs['date_de_creation'] =
array('colonne' => 'creation_date',
'table' => 'user',
'libelle' => _('Date de creation'),
'type' => 'date',
'where' => 'intervaldate');
?>
Cette configuration permet de créer deux champs HTML datepicker :
— date_de_creation_min : permettra de saisir une date minimale
— date_de_creation_max : permettra de saisir une date maximale
Ces champs permettent de rechercher les utilisateurs dont la date de créations est incluse dans l’intervalle saisi,
bornes comprises. Il est possible de ne saisir qu’une seule date afin de rechercher les utilisateurs ayant été créés
avant ou après une date particulière.
3.1.5.3.2.2 Créer un champ de recherche avec menu déroulant personnalisé Exemple : recherche des utilisateurs administrateurs.
Dans cet exemple, l’information se trouve directement dans la table interrogée.
66
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
<?php
// soit 'user' une table contenant une colonne 'is_admin'
$args = array();
$args[0] = array('', 'true', 'false');
$args[1] = array(_('Tous'), _('Oui'), _('Non'));
$champs['administrator'] =
array('colonne' => 'is_admin',
'table' => 'user',
'libelle' => _('Administrateur'),
'type' => 'select',
'subtype' => 'manualselect',
'args' => $args);
?>
Cette configuration permet de créer un champ HTML de type select avec trois choix :
— Tous (valeur ‘’) ;
— Oui (valeur true) ;
— Non (valeur false).
Le tableau $args[0] contient les valeurs associées aux choix. Elles seront recherchées telles quelles dans la
base de données.
En sélectionnant « Oui », la requête SQL de recherche sera construite comme suit :
-- PostgresSQL
WHERE user.is_admin::varchar like 'true'
Il est possible de saisir n’importe quelle chaîne de caractères dans $args[0] et pas seulement des valeurs
booléennes.
Attention : Cette recherche n’est pas sensible à la casse. Plusieurs fonctions de formatage sont appelées sur
user.is_admin avant de tester l’égalité.
3.1.5.3.2.3 Tester si une donnée est présente ou non dans un groupe de données Exemple : recherche des
utilisateurs administrateurs.
Dans cet exemple, l’information se trouve non pas dans la table utilisateur mais dans la table administrateur
disposant d’une colonne user_id (clé étrangère). Il nous faut utiliser une sous-requête pour récupérer l’ensemble
des identifiants de la table administrateur afin de tester si un identifiant utilisateur est effectivement présent dans
cette liste.
<?php
// soit 'user' une table contenant pas la colonne 'is_admin'
// soit 'admin' une table contenant une colonne 'user_id'
$args = array();
$args[0] = array('', 'true', 'false');
$args[1] = array(_('Tous'),
_('Administrateurs'),
_('Utilisateurs simples'));
$subquery = 'SELECT user_id FROM admin';
$champs['administrator'] =
array('colonne' => 'id',
'table' => 'user',
'libelle' => _('Administrateur'),
3.1. Manuel de référence
67
openMairie Framework Documentation, Version 4.5
'type' => 'select',
'subtype' => 'manualselect',
'where' => 'insubquery',
'args' => $args,
'subquery' => $subquery);
?>
Cette configuration permet de créer un champ HTML de type select avec trois choix :
— Tous (valeur ‘’) ;
— Administrateurs (valeur true) ;
— Utilisateurs simples (valeur false).
Le tableau $args[0] contient les valeurs associées aux choix. La valeur true indique que les identifiants des
utilisateurs doivent se trouver dans la sous-requête. La valeur false indique qu’ils ne doivent pas se trouver dans
la sous-requête. Contrairement à l’exemple « Créer un champ de recherche avec menu déroulant personnalisé »,
les valeurs ne seront pas recherchées telles quelles dans la base de données et ne doivent surtout pas être modifiées.
En sélectionnant « Administrateurs », la requête SQL de recherche sera construite comme suit :
WHERE user.id IN (SELECT user_id FROM admin)
3.1.6 Les formulaires
Les formulaires openMairie sont une visualisation d’un objet d’une classe métier.
3.1.6.1 Introduction
Les formulaires permettent la consultation, l’ajout, la modification et la suppression d’enregistrements des tables
de la base de données.
Consultation
La consultation d’un élément est construite de la même façon qu’un formulaire. Elle contient une liste d’actions
contextuelles configurable. Les données ne sont pas éditables.
Ajout
L’ajout permet l’éditions de données. Lors de la validation, un traitement spécifique des données est effectué. Si
la clé primaire de la table est automatique alors elle est générée.
68
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
Modification
L’ouverture d’un élément en modification permet l’éditions de données déjà existantes, lors de la validation du
formulaire les données sont traitées, vérifiées puis envoyées dans la base.
Suppression
Accessible depuis la liste des actions contextuelles, une confirmation est demandée pour chaque suppression.
Accès
L’accès aux formulaires se fait depuis un tableau d’éléments ou depuis la consultation d’un élément via le menu
contextuel.
Par défaut, depuis les tableaux, les actions d’ajout et consultation sont disponible.
3.1.6.2 Description technique
La gestion des formulaires se base sur deux classes :
— formulaire : core/om_formulaire.class.php
— dbform : core/om_dbform.class.php
La classe “formulaire” permet la gestion de l’affichage et “dbform” gère le traitement des données et la liaison à
la base de données.
scr/form.php et scr/sousform.php
Ces scripts sont appelés pour afficher un formulaire. Ils instancient l’objet et appellent la méthode formulaire de
celui-ci.
Ces scripts prennent plusieurs paramètres :
— obj : nom de la classe pour laquelle on souhaite afficher le formulaire
— action : type d’action (ajout, modification, suppression, consultation)
— idx : identifiant (dans la base de données) de l’élément sur lequel on souhaite effectuer l’action
— retour : deux valeurs possible tab ou form selon l’origine de l’action
Le paramètre “action” peut prendre 4 valeurs :
— 0 : affiche un formulaire d’ajout, le paramètre idx n’est donc pas nécessaire.
— 1 : affiche le formulaire de modification.
— 2 : affiche le formulaire de suppression.
3.1. Manuel de référence
69
openMairie Framework Documentation, Version 4.5
— 3 : affiche le formulaire de consultation.
Les autres paramètres passés permettent de conserver la configuration du tableau d’origine.
3.1.6.3 Description de la classe dbform
class dbform($id, &$db, $DEBUG = false)
Cette classe est centrale dans l’application. Elle est la classe parente de chaque objet métier. Elle comprend
des méthodes de gestion (initialisation, traitement, vérification, trigger) des valeurs du formulaire. Elle fait
le lien entre la base de données et le formulaire. Elle contient les actions possibles sur les objets (ajout,
modification, suppression, consultation).
Présentation des méthodes de la classe
Les méthodes de dbform peuvent être surchargées dans obj/om_dbform.class.php ainsi que dans toutes les classes
métier.
Méthodes d’initialisation de l’affichage du formulaire
dbform.formulaire($enteteTab, $validation, $maj, &$db, $postVar, $aff, $DEBUG =
false, $idx, $premier = 0, $recherche = “”, $tricol = “”, $idz =
“”, $selectioncol = “”, $advs_id = “”, $valide = “”, $retour = “”,
$actions = array(), $extra_parameters = array())
Méthode d’initialisation de l’affichage de formulaire.
dbform.sousformulaire($enteteTab, $validation, $maj, &$db, $postVar, $premiersf,
$DEBUG, $idx, $idxformulaire, $retourformulaire, $typeformulaire, $objsf, $tricolsf, $retour= “”, $actions = array())
Méthode d’initialisation de l’affichage de sous formulaire.
Ces méthodes instancient un objet “formulaire” et initialisent certains de ses attributs via les méthodes suivantes :
dbform.setVal(&$form, $maj, $validation)
Permet de définir les valeurs des champs en contexte formulaire
dbform.setValsousformulaire(&$form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire)
Permet de définir les valeurs des champs en contexte sous-formulaire
dbform.set_form_default_values(&$form, $maj, $validation)
Permet de définir les valeurs des champs en contextes formulaire et sous-formulaire
dbform.setType(&$form, $maj)
Permet de définir le type des champs
dbform.setLib(&$form, $maj)
Permet de définir le libellé des champs
dbform.setTaille(&$form, $maj)
Permet de définir la taille des champs
dbform.setMax(&$form, $maj)
Permet de définir le nombre de caractères maximum des champs
dbform.setSelect(&$form, $maj, $db, $DEBUG = false)
Méthode qui effectue les requêtes de configuration des champs
dbform.init_select(&$form = null, &$db = null, $maj, $debug, $field, $sql,
$sql_by_id, $om_validite = false, $multiple = false)
Méthode qui permet la configuration des select et select multiple, elle effectue les requêtes et
met en forme le tableau des valeurs à afficher. Il est possible de définir si le champ lié est affecté
par une date de validité ou de configurer l’affichage de select_multiple.
dbform.setOnchange(&$form, $maj)
Permet de définir l’attribut “onchange” sur chaque champ
dbform.setOnkeyup(&$form, $maj)
Permet de définir l’attribut “onkeyup” sur chaque champ
70
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
dbform.setOnclick(&$form, $maj)
Permet de définir l’attribut “onclick” sur chaque champ
dbform.setGroupe(&$form, $maj)
Permet d’aligner plusieurs champs (obsolète depuis la version 4.3.0)
dbform.setRegroupe(&$form, $maj)
Permet de regrouper les champs dans des fieldset (obsolète depuis la version 4.3.0)
dbform.setLayout(&$form, $maj)
Méthode de mise en page, elle permet de gérer la hiérarchie d’ouverture et fermeture des balises
div et fieldset avec les méthodes :
formulaire.setBloc($champ, $contenu, $libelle = ‘’, $style = ‘’)
permet d’ouvrir/fermer ($contenu=D/F) une balise div sur un champ ($champ),
avec un libellé ($libelle) et un attribut class ($style).
—une liste de classes css pour fieldset est disponible : ‘group’ permet une mise en
ligne des champs contenu dans le div et ‘col_1 à col_12’ permet une mise en
page simplifiée (par exemple : “col_1” permet de définir une taille dynamique de
1/12ème de la page , col_6 correspond à 6/12 soit 50% de l’espace disponible).
—il est possible de créer et ajouter des classes css aux différents div afin d’obtenir
une mise en page personnalisé.
formulaire.setFieldset($champ, $contenu, $libelle = ‘’, $style = ‘’)
permet d’ouvrir/fermer ($contenu=D/F) un fieldset sur un champ ($champ), avec
une légende ($libelle) et un attribut class ($style).
—une liste de classes css pour fieldset est disponible : ‘collapsible’ ajoute un bouton sur la légende (jQuery) afin de refermer le fieldset et ‘startClosed’ idem à la
différence que le fieldset est fermé au chargement de la page.
—exemple d’implémentation de la méthode setLayout() sans utiliser les méthodes setGroupe() et setRegroupe() :
<?php
function setLayout(&$form, $maj) {
//Ouverture d'un div sur une colonne de 1/2 (6/12) de la largeur du
//conteneur parent
$form->setBloc('om_collectivite','D',"","col_6");
//Ouverture d'un fieldset
$form->setFieldset('om_collectivite','D',_('om_collectivite'),
"collapsible");
//Ouverture d'un div les champs compris entre
//"om_collectivite" et "actif"
//la classe group permet d'afficher les champs en ligne
$form->setBloc('om_collectivite','D',"","group");
//Fermeture du groupe
$form->setBloc('actif','F');
//Fermeture du fieldset
$form->setFieldset('actif','F','');
//Fermeture du div de 50%
$form->setBloc('actif','F');
//Ouverture d'un div sur une colonne de 1/2 de la largeur du
//conteneur parent
$form->setBloc('orientation','D',"","col_6");
$form->setFieldset('orientation', 'D',
_("Parametres generaux du document"),
"startClosed");
$form->setBloc('orientation','D',"","group");
$form->setBloc('format','F');
$form->setBloc('footerfont','D',"","group");
$form->setBloc('footertaille','F');
$form->setBloc('logo','D',"","group");
$form->setBloc('logotop','F');
3.1. Manuel de référence
71
openMairie Framework Documentation, Version 4.5
$form->setFieldset('logotop','F','');
$form->setBloc('logotop','F');
//Ouverture d'un div de largeur maximum sur un seul champ
$form->setBloc('titre','DF',"","col_12");
//Ouverture d'un div de largeur maximum
$form->setBloc('titreleft','D',"","col_12");
$form->setFieldset('titreleft','D',
_("Parametres du titre du document"),
"startClosed");
$form->setBloc('titreleft','D',"","group");
$form->setBloc('titrehauteur','F');
$form->setBloc('titrefont','D',"","group");
$form->setBloc('titrealign','F');
$form->setFieldset('titrealign','F','');
$form->setBloc('titrealign','F');
//Ouverture d'un div de largeur maximum sur un seul champ
$form->setBloc('corps','DF',"","col_12");
//Ouverture d'un div de largeur maximum
$form->setBloc('corpsleft','D',"","col_12");
$form->setFieldset('corpsleft','D',
_("Parametres du corps du document"),
"startClosed");
$form->setBloc('corpsleft','D',"","group");
$form->setBloc('corpshauteur','F');
$form->setBloc('corpsfont','D',"","group");
$form->setBloc('corpsalign','F');
$form->setFieldset('corpsalign','F','');
$form->setBloc('corpsalign','F');
//Ouverture d'un div de largeur maximum sur un seul champ
$form->setBloc('om_sql','DF',"","col_12");
//Ouverture d'un div de 1/2 de la largeur du conteneur parent
$form->setBloc('om_sousetat','D',"","col_6");
$form->setFieldset('om_sousetat','D',
_("Sous etat(s) : selection"),
"startClosed");
$form->setBloc('om_sousetat','D',"","group");
$form->setBloc('sousetat','F');
$form->setFieldset('sousetat','F', '');
$form->setBloc('sousetat','F');
//Ouverture d'un div de 1/2 de la largeur du conteneur parent
$form->setBloc('se_font','D',"","col_6");
$form->setFieldset('se_font','D',
_("Sous etat(s) : police / marges / couleur"),
"startClosed");
$form->setBloc('se_font','D',"","group");
$form->setBloc('se_couleurtexte','F');
$form->setFieldset('se_couleurtexte','F','');
$form->setBloc('se_couleurtexte','F');
}
?>
72
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
Méthodes d’actions
Ces méthodes sont appelées lors de la validation du formulaire.
dbform.ajouter($val, &$db = NULL, $DEBUG = false)
Cette méthode permet l’insertion de données dans la base, elle appelle toutes les méthodes de
traitement, vérification et méthodes spécifiques à l’ajout.
dbform.modifier($val = array(), &$db = NULL, $DEBUG = false)
Cette méthode permet la modification de données dans la base, elle appelle toutes les méthodes
de traitement et vérification des données retournées par le formulaire.
dbform.supprimer($val = array(), &$db = NULL, $DEBUG = false)
Cette méthode permet la suppression de données dans la base, elle appelle toutes les méthodes
de traitement et vérification des données retournées par le formulaire.
Gestion des transactions lors de l’appel aux méthodes d’actions
Afin de verifier les erreurs de base de données, la méthode isError est appelée, si la valeur true lui est passée en
second paramètre elle ne stop pas l’execution mais retour true ou false. Cela dans le but d’appeler ces méthodes
sur des objets métier instanciés manuellement dans des contextes qui n’utilise pas la classe formulaire. Exemple :
lors de la création d’un web service qui instancierait une classe, si une erreur de base de données se produit, le
script s’arrête et aucun message ne peut être transmis au client du web service, ce qui ne se produit pas si le second
paramètre est défini à true.
Il est important d’instancier un objet métier et d’appeler les méthodes ajouter, modifier ou supprimer pour effectuer
un changement sur celui-ci car toutes les méthodes de trigger seront appelées.
Méthodes appelées lors de la validation
dbform.setValFAjout($val = array())
Méthode de traitement des données retournées par le formulaire (utilisé lors de l’ajout)
dbform.setvalF($val = array())
Méthode de traitement des données retournées par le formulaire
dbform.verifier($val = array(), &$db = NULL, $DEBUG = false)
Méthode de vérification des données et de retour d’erreurs
dbform.verifierAjout($val = array(), &$db = NULL)
Méthode de vérification des données et de retour d’erreurs (utilisé lors de l’ajout)
dbform.setId(&$db = NULL)
Initialisation de la clé primaire (si clé automatique lors de l’ajout)
dbform.cleSecondaire($id, &$db = NULL, $val = array(), $DEBUG = false)
Cette méthode est appelée lors de la suppression d’un objet, elle permet de vérifier si l’objet
supprimé n’est pas lié à une autre table pour en empêcher la suppression.
dbform.triggerajouter($id, &$db = NULL, $val = array(), $DEBUG = false)
Permet d’effectuer des actions avant l’insertion des données dans la base
dbform.triggerajouterapres($id, &$db = NULL, $val = array(), $DEBUG = false)
Permet d’effectuer des actions après l’insertion des données dans la base
dbform.triggermodifier($id, &$db = NULL, $val = array(), $DEBUG = false)
Permet d’effectuer des actions avant la modification des données dans la base
dbform.triggermodifierapres($id, &$db = NULL, $val = array(), $DEBUG =
false)
Permet d’effectuer des actions après la modification des données dans la base
dbform.triggersupprimer($id, &$db = NULL, $val = array(), $DEBUG = false)
Permet d’effectuer des actions avant la modification des données dans la base
3.1. Manuel de référence
73
openMairie Framework Documentation, Version 4.5
dbform.triggersupprimerapres($id, &$db = NULL, $val = array(), $DEBUG =
false)
Permet d’effectuer des actions après la modification des données dans la base
3.1.6.4 Description de la classe formulaire
class formulaire($unused = NULL, $validation, $maj, $champs = array(), $val = array(), $max =
array())
Cette classe permet une gestion complète de l’affichage d’un formulaire.
Les méthodes de core/om_formulaire.class.php peuvent être surchargées dans obj/om_formulaire.class.php
Méthodes d’affichage de widgets
Les widgets sont des éléments de formulaire, ils sont composés d’un ou plusieurs champs. Chaque méthode permet
d’afficher un seul widget.
formulaire.text()
champ texte (format standard)
formulaire.hidden()
champ non visible avec valeur conservée
formulaire.password()
champ password
formulaire.textdisabled()
champ texte non modifiable (grisé)
formulaire.textreadonly()
champ texte non modifiable
formulaire.hiddenstatic()
champ non modifiable, la valeur est récupéré par le formulaire.
formulaire.hiddenstaticnum()
champ numérique non modifiable et valeur récupérer
formulaire.statiq()
Valeur affichée et non modifiable
formulaire.affichepdf()
récupère un nom d’objet (un scan pdf)
formulaire.checkbox()
case à cocher valeurs possibles : True ou False
formulaire.checkboxstatic()
affiche Oui/Non, non modifiable (mode consultation)
formulaire.checkboxnum()
cochée = 1 , non cochée = 0
formulaire.http()
lien http avec target = _blank (affichage dans une autre fenêtre)
formulaire.httpclick()
lien avec affichage dans la même fenêtre.
formulaire.date()
date modifiable avec affichage de calendrier jquery
formulaire.date2()
date modifiable avec affichage de calendrier jquery pour les sous-formulaires
formulaire.hiddenstaticdate()
date non modifiable Valeur récupéré par le formulaire
formulaire.datestatic()
affiche la date formatée, non modifiable (mode consultation)
formulaire.textarea()
affichage d un textarea
74
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
formulaire.textareamulti()
textarea qui récupère plusieurs valeurs d’un select
formulaire.textareahiddenstatic()
affichage non modifiable d’un textarea et récupération de la valeur
formulaire.pagehtml()
affichage d’un textarea et transforme les retours charriot en </ br>
formulaire.select()
champ select
formulaire.selectdisabled()
champ select non modifiable
formulaire.selectstatic()
affiche la valeur de la table liée, non modifiable (mode consultation)
formulaire.selecthiddenstatic()
affiche la valeur de la table liée, non modifiable ainsi que la valeur dans un champ hidden
formulaire.select_multiple()
affiche un select multiple, les valeurs passées au formulaires doivent être séparées par une virgule.
formulaire.select_multiple_static()
affiche seulement les valeurs d’un select multiple, les valeurs passées au formulaires doivent
être séparées par une virgule.
formulaire.comboG()
permet d’effectuer une corrélation entre un groupe de champ et un identifiant dans les formulaires
formulaire.comboG2()
permet d’effectuer une corrélation entre un groupe de champ et un identifiant dans les sous
formulaires
formulaire.comboD()
permet d’effectuer une corrélation entre un groupe de champ et un identifiant dans les formulaires
formulaire.comboD2()
permet d’effectuer une corrélation entre un groupe de champ et un identifiant dans les sous
formulaires
formulaire.upload()
fait appel à spg/upload.php pour télécharger un fichier
formulaire.upload2()
fait appel à spg/upload.php pour télécharger un fichier dans un sous formulaire
formulaire.voir()
fait appel à spg/voir.php pour visualiser un fichier
formulaire.voir2()
fait appel à spg/voir.php pour visualiser un fichier depuis un sous formulaire
formulaire.localisation()
fait appel à spg/localisation.php
formulaire.localisation2()
fait appel à spg/localisation.php
formulaire.rvb()
fait appel à spg/rvb.php pour affichage de la palette couleur
formulaire.rvb2()
fait appel à spg/rvb.php pour affichage de la palette couleur
formulaire.geom()
ouvre une fenêtre tab_sig.php pour visualiser ou saisir une géométrie (selon l’action) la carte est
définie en setSelect
Les widgets comboG, comboD, date, upload, voir et localisation sont à mettre dans les formulaires. Les contrôle
comboG2, comboD2, date2, upload2, voir2 et localisation sont à mettre dans les sous formulaires.
Les widgets font appel des scripts d’aide à la saisie stockés dans le répertoire /spg, ils sont appelés par js/script.js.
Ce script peut être surchargé dans app/js/script.js.
3.1. Manuel de référence
75
openMairie Framework Documentation, Version 4.5
spg/combo.php
Ce programme est appelé par le champ comboD, comboG, comboD2, comboG2, le paramétrage se fait dans les
fichiers :
— dyn/comboparametre.inc.php
— dyn/comboretour.inc.php
— dyn/comboaffichage.inc.php
spg/localisation.php et js/localisation.js
ce programme est liée au champ formulaire “localisation”.
spg/voir.php
Ce script est associé au champ “upload”.
Ce sous programme permet de visualiser un fichier téléchargé sur le serveur (pdf ou image).
spg/upload.php
Ce script utilise la classe core/upload.class.php (composant openMairie).
Le paramétrage des extensions téléchargeables se fait dans dyn/config.inc.php. Le paramétrage de la taille maximale des fichiers téléchargeables se fait dans la classe métier de l’objet.
spg/rvb.php et js/rvb.js
Ce script est associé au champ “rvb” et affiche une palette de couleur pour récupérer un code rvb.
Les méthodes de construction et d’affichage
Le formulaire est constitué de div, fieldset et de champs les méthodes suivantes permettent une mise en page
structurée.
formulaire.entete()
ouverture du conteneur du formulaire.
formulaire.enpied()
fermeture du conteneur du formulaire.
formulaire.afficher()
affichage des champs, appelle les méthodes suivante :
formulaire.debutFieldset()
ouverture de fieldset.
formulaire.finFieldset()
fermeture de fieldset
formulaire.debutBloc()
ouverture de div.
formulaire.finBloc()
fermeture de div.
formulaire.afficherChamp()
affichage de champ.
Les méthodes assesseurs changent les valeurs des attributs de l’objet formulaire
Ces méthodes sont appelées depuis les classes métier, elles permettent la configuration du formulaire.
formulaire.setType()
type de champ
formulaire.setVal()
valeur du champ
formulaire.setLib()
libellé du champ
formulaire.setSelect()
permet de remplir les champs select avec la table liée
76
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
formulaire.setTaille()
taille du champ
formulaire.setMax()
nombre de caractères maximum acceptés
formulaire.setOnchange()
permet de définir des actions sur l’événement “onchange”
formulaire.setKeyup()
permet de définir des actions sur l’événement “onkeyup”
formulaire.setOnclick()
permet de définir des actions sur l’événement “onclick”
formulaire.setvalF()
permet de traiter les données avant insert/update dans la base de données
formulaire.setGroupe()
(obsolète depuis 4.3.0)
formulaire.setRegroupe()
(obsolète depuis 4.3.0)
formulaire.setBloc($champ, $contenu, $libelle = ‘’, $style = ‘’)
permet d’ouvrir/fermer ($contenu=D/F/DF) une balise div sur un champ ($champ), avec un
libellé ($libelle) et un attribut class ($style).
formulaire.setFieldset($champ, $contenu, $libelle = ‘’, $style = ‘’)
permet d’ouvrir/fermer ($contenu=D/F/DF) un fieldset sur un champ ($champ), avec une légende ($libelle) et un attribut class ($style).
3.1.7 Les actions vers formulaires
Les liens vers les formulaires sont principalement dans les tableaux et formulaires de consultation d’objets.
3.1.7.1 Actions des tableaux
La surcharge des actions de tableaux se fait via les scripts sql/sgbd/objet.inc.php.
L’ajout d’actions se présente de cette façon :
<?php
// Actions en coin ('corner') : ajouter
$tab_actions['corner']['ajouter'] =
array('lien' => 'form.php?obj='.$obj.'&amp;action=0',
'id' => '&amp;advs_id='.$advs_id.'&amp;tricol='.$tricol.
'&amp;valide='.$valide.'&amp;retour=tab',
'lib' => '<span class="om-icon om-icon-16 om-icon-fix add-16"
title="'._('Ajouter').'">'._('Ajouter').'</span>',
'rights' => array('list' => array($obj, $obj.'_ajouter'),
'operator' => 'OR'),
'ordre' => 10,);
// Actions à gauche ('left'): consulter
$tab_actions['left']['consulter'] =
array('lien' => 'form.php?obj='.$obj.'&amp;action=3'.'&amp;idx=',
'id' => '&amp;premier='.$premier.'&amp;advs_id='.$advs_id.
'&amp;recherche='.$recherche1.'&amp;tricol='.$tricol.
'&amp;selectioncol='.$selectioncol.'&amp;valide='.
$valide.'&amp;retour=tab',
'lib' => '<span class="om-icon om-icon-16 om-icon-fix
consult-16" title="'._('Consulter').'">'.
_('Consulter').'</span>',
'rights' => array('list' => array($obj, $obj.'_consulter'),
'operator' => 'OR'),
'ordre' => 10,);
3.1. Manuel de référence
77
openMairie Framework Documentation, Version 4.5
// Action sur la cinquième colonne de contenu
$tab_actions['specific_content'][4] =
array('lien' => 'form.php?obj='.$obj.'&amp;action=2'.'&amp;idx=',
'id' => '&amp;premier='.$premier.'&amp;advs_id='.$advs_id.
'&amp;recherche='.$recherche1.'&amp;tricol='.$tricol.
'&amp;selectioncol='.$selectioncol.
'&amp;valide='.$valide.'&amp;retour=tab',
'lib' => '<span class="om-icon om-icon-16 om-icon-fix
delete-16" title="'._('Consulter').'">'.
_('Consulter').'</span>',
'rights' => array('list' => array($obj, $obj.'_consulter'),
'operator' => 'OR'),
'ordre' => 10,);
?>
Plusieurs emplacements d’actions existent :
— corner : actions dans la première cellule du tableau
— left : action situées dans la première colonne, disponibles pour chaque élément du tableau
— content : action sur le contenu du tableau
— specific_content : action sur une colonne de contenu du tableau
Les actions par défaut
Par défaut seules les actions ajouter et consulter sont disponibles depuis les tableaux.
Créer de nouvelles actions
La création d’actions pour un tableau particulier se fait depuis le répertoire sql/sgbd/.
Les actions doivent se définir dans les fichier objet.inc.php de la manière suivante :
<?php
$tab_actions['left']['modifier'] =
array('lien' => 'form.php?obj='.$obj.'&amp;action=1'.'&amp;idx=',
'id' => '&amp;premier='.$premier.'&amp;advs_id='.$advs_id.'&amp;recherche='.$recherche1.
'lib' => '<span class="om-icon om-icon-16 om-icon-fix edit-16" title="'._('Modifier').'"
'rights' => array('list' => array($obj, $obj.'_modifier'), 'operator' => 'OR'),
'ordre' => 20,);
?>
78
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
3.1.7.1.2.1 Définition de l’action La première clé de $tab_actions permet choisir la position d’affichage :
— corner pour les actions en coin ;
— left pour les actions de gauche.
Note : Depuis la version 4.3.0 d’openMairie, il est désormais possible d’afficher plusieurs actions dans le coin du
tableau (au niveau de l’action ajouter).
La seconde clé de $tab_actions permet de définir la nouvelle action. Cette clé doit être différente de :
ajouter, consulter, modifier et supprimer.
Les clés lien, id et lib s’utilise de la même manière qu’avant.
3.1.7.1.2.2 Définition du mode d’affichage en sous-tableau
être affichée en ajax ou non dans les sous-tableaux :
— true, l’action utilisera la fonction ajaxIt() ;
— false, l’action n’utilisera pas la fonction ajaxIt().
3.1.7.1.2.3 Définition de l’ordre d’affichage
rapport aux autres actions.
La clé ajax permet d’indiquer si l’action doit
La clé ordre permet de déterminer l’ordre d’affichage par
Chaque action dispose d’une valeur numérique permettant de définir sa place au sein d’une position. L’action
numéro 1 s’affichera en premier, l’action numéro 10 s’affichera après les actions de numéro inférieur, etc.
Ordre des actions par défaut d’openMairie :
— ajouter à pour ordre 10 dans la position corner ;
— consulter à pour ordre 10 dans la position left.
Si la position corner est sélectionnée :
— 9, l’action s’affichera avant l’action ajouter ;
— 11, l’action s’affichera après l’action ajouter.
Si la position left est sélectionnée :
— 9, l’action s’affichera avant l’action consulter ;
— 11, l’action s’affichera après l’action consulter.
3.1.7.1.2.4 Définition des droits d’affichage La clé rights permet de définir le ou les droits nécessaires à
l’utilisateur pour visualiser cette action. Cette clé est optionnelle. Si rights n’existe pas, tous les utilisateurs
pourront visualiser cette action s’ils peuvent visualiser le tableau correspondant.
La clé list permet de définir le tableau des droits nécessaire.
La clé operator permet de définir l’opérateur utilisé pour pour vérifier les droits de la liste list :
— OR, l’utilisateur doit avoir au moins un droit ;
— AND, l’utilisateur doit avoir tous les droits.
3.1.7.2 Actions du menu contextuel de la consultation
Dans dyn/config.inc.php :
<?php
/**
* Parametre de gestion des nouvelles actions
* Permet de definir si la gestion des actions se fait dans la classe ou non.
* Si on decide d'utiliser les nouvelles actions alors il n'y à pas de
* retro-compatibilité, les actions supplémentaires de portlet initialement
* déclarées dans sql/pgsql/*.inc.php ne fonctionneront plus et devront
* être initialisées dans les attributs de la classe ciblée.
* Default : $config['activate_class_action'] = true;
*/
$config['activate_class_action'] = true;
?>
3.1. Manuel de référence
79
openMairie Framework Documentation, Version 4.5
Définition des actions dans les attributs de la classe de l’objet
La configuration se fait dans les attributs des classes (obj/*.class.php).
L’ajout d’une action se présente de cette façon :
<?php
var $class_actions = array(
2 => array(
"portlet" => array(
"libelle"=>"supprimer",
"class" => "delete-16",
"order"=>20,
),
"method" => "supprimer",
"button" => "supprimer",
"permission_suffix" => "supprimer",
"condition" => "delete_coll_condition"
),
);
?>
La clé du tableau correspond à la valeur $maj, le paramètre “method” correspond à la méthode appelée lors de la
validation du formulaire, “button” est le texte du bouton de validation, “permission_suffix” est le suffixe du droit
qui sera testé lors de l’affichage de l’action, “condition” permet de définir une méthode qui sera appelée avant
l’affichage de l’action dans le portlet, si cette méthode retourne “true” l’action sera affichée.
Si la clé “portlet” est définie l’action correspondante sera affichée (sous condition), la clé “libelle” est le texte
affiché sur le lien, la classe définie dans “class” sera ajoutée à celles du lien, “order” permet de définir l’ordre, la
clé “url” peu être utilisé pour définir une url spécifique.
Les action de classes permettent de surcharger les actions ajouter, modifier, consulter et supprimer définies dans
core/om_db_form.class.php.
Définition des actions dans *.form.inc.php (obsolète)
Dans dyn/config.inc.php :
<?php
$config['activate_class_action'] = false;
?>
La configuration des actions du menu contextuel des formulaires en consultation se fait via les scripts
sql/sgbd/objet.form.inc.php
Dans ces scripts, peuvent être surchargés, la liste des champs (ordre ou champs affichés), requêtes sql permettant
de remplir les widget de formulaires ainsi que les actions du menu contextuel.
L’ajout d’une action se présente de cette façon :
<?php
$portlet_actions['edition'] = array(
'lien' => '../pdf/pdflettretype.php?obj=om_utilisateur&amp;idx=',
'id' => '',
'lib' => '<span class="om-prev-icon om-icon-16 om-icon-fix pdf-16"
title="'._('Edition').'">'._('Edition').'</span>',
'ajax' => false,
'ordre' => 21,
);
?>
80
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
3.1.8 La gestion des accès
Le framework fournit un gestionnaire d’accès configurable dans les menus :
— administration -> profil
— administration -> droit
— administration -> utilisateur
Les accès sont conservés dans les tables du même nom.
3.1.8.1 Fonctionnalités
— Synchronisation des utilisateurs provenant d’un annuaire
— Modification du mot de passe par l’utilisateur
— Mot de passe oublié et réinitialisation du mot de passe
3.1.8.2 Les tables
La gestion des accès est gérée avec 3 tables :
om_profil : gestion par défaut de 5 profils :
— administrateur (5)
— super utilisateur (4)
— utilisateur (3)
— utilisateur limité (2)
— consultation (1)
Les profils sont hiérarchiques, le profil 5 étant le plus élevé, il a accès à toutes les actions des profils inférieurs.
om_droit : à chaque profil est affecté un ou plusieurs droits.
om_utilisateur : cette table permet de donner un login, un mot de passe et un profil à chaque utilisateur.
Diagramme de classe
3.1. Manuel de référence
81
openMairie Framework Documentation, Version 4.5
3.1.8.3 Les règles
Le droit sur un objet porte le nom de l’objet, pour chaque objet il existe deux types de droits :
— généraux : il n’est composé que du nom de l’objet et permet d’accéder à toutes les actions sur celui-ci.
— spécifique : il se compose du nom de l’objet puis d’un suffixe.
Détails des suffixes de droits :
— _tab : permet d’accéder au tableau
— _ajouter : permet d’ajouter un objet
— _modifier : permet de modifier l’objet
— _supprimer : permet de supprimer l’objet
— _consulter : permet de consulter l’objet
3.1.8.4 La multi-collectivité
Les collectivités peuvent être de niveau 1 ou de niveau 2. Les utilisateurs de chaque collectivité héritent de ce
niveau. Les utilisateurs de niveau 1 n’ont accès qu’à leur collectivité tandis que les utilisateurs de niveau 2 ont
accès à toutes les collectivités disponibles. Lors de la conception de la base de données un champ om_collectivite
peut être ajouté à chaque table ayant besoin d’un filtrage par collectivité. Les utilisateurs de niveau 1 ne verront
aucune notion de collectivité et n’auront accès qu’aux éléments liés à leur propre collectivité.
3.1.8.5 Les login et logout
Le login se fait par le script scr/login.php
login.php valorise les variables sessions permettant la gestion des accès et sécurités
<?php
$_SESSION['profil'] = $profil;
$_SESSION['nom'] = $nom;
$_SESSION['login'] = $login;
?>
La déconnexion se fait avec le script scr/logout.php
Le changement de mot de passe se fait avec le script scr/password.php
L’accès au changement de mot de passe se fait par défaut dans le menu haut (voir framework/paramétrage)
3.1.8.6 Les utilitaires
La gestion des droits d’accès se fait dans les méthodes des utilitaires :
— php/openmairie/om_application.class.php (composant openMairie)
— obj/utils.class.php
(voir framework/utilitaire)
3.1.9 Module ‘Tableau de bord’
Avertissement : Cette rubrique est en cours de rédaction.
3.1.9.1 principe
Il est proposé dans ce chapitre de décrire le tableau de bord paramètrable pour les utilisateurs
82
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
paramétrage
l’accès au tableau de bord paramètrable dyn/dashboard.inc.php
(voir framework/paramétrage)
Par défaut, le tableau de bord paramétrable est activé, il peut être déconnecté en enlevant le commentaire // die().
les widgets
Les widgets sont des liens et/ou de petits scripts paramétrables qui peuvent être rajoutés dans le tableau de bord.
Ces scripts sont conservés dans la table om_widget.
Chaque utilisateur paramètre son tableau de bord.
le tableau de bord paramétrable
L’administrateur choisit les widgets présents sur le tableau de bord de chaque profil parmi ceux proposés dans
l’application. Il peut placer les widgets où il le souhaite.
3.1.9.2 widget
Le widget (WIDGET DASHBOARD) est un bloc d’informations contextualisées accessible depuis le tableau de
bord de l’utilisateur. Il peut être de type ‘Web’ ou de type ‘Script’.
la création de widget
La saisie des widget se fait dans administration -> om_widget.
La grille de saisie est la suivante
libellé du widget qui apparaitra à l adition du widget dans le tableau de bord
lien qui sera implémenté (# : pas de lien)
texte : texte du widget (iframe, javascript, ajax ...)
profil : profil autorisé pour le tableau de bord
Le tableau de bord, peut gérer toutes sortes d’informations internes ou externes à l’application
les taches non soldees pour openCourrier
les appels à la maintenance
l'horoscope, la météo, une vidéo, des photos ...
3.1. Manuel de référence
83
openMairie Framework Documentation, Version 4.5
Le widget de type ‘Web’
3.1.9.2.2.1
interne les liens sur les cartes (à mettre danbs le champ lien) :
la carte de raphele avec tab_sig_point.php
../scr/tab_sig_point_db.php?obj=raphele_1&zoom=6
celle de mas thibert :
../scr/tab_sig_point.php?obj=odp_6&zoom=7
les accès personnalisés “ajax”au travers de son code utilisateur (dans openCourrier)
<script type='text/javascript'>
$.ajax({
type: 'GET',
url:'../app/tab_wid.php',
cache: false,
data: '&obj=tachenonsolde_service',
success: function(html){
$('#aff3').append(html);
}
});
</script>
<div id='aff3'></div>
Ce code lance dans le widget ../app/tab_wid.php ?obj=tachenonsolde_service
tachenonsolde_service est initialisé dans sql/mysql/tachenonsolde_service.inc
Il ne s’affichera que la première page (paramétrer $serie pour le nombre d’enregistrement affichés)
Attention si vous affichez plusieurs widgets “openmairie”, mettre un id different pour chaque div (ici aff3)
3.1.9.2.2.2 externe Les autres applications openMairie peuvent aussi être accessibles par widget de la même
manière que le paragraphe ci dessus.
D’autres widgets externes sont accessibles en mettant dans le champ texte les scripts suivants :
Acces à une video externe avec un “iframe”
<iframe width='200' height='150'
src='http://www.youtube.com/embed/gS5B4LlqkfI'
frameborder='0' allowfullscreen>
</iframe>
La meteo grace à un javascript du site tameteo.com
<div id='cont_f5089b722555454d1872b91f52beafd4'>
<h2 id='h_f5089b722555454d1872b91f52beafd4'>
<a href='http://www.tameteo.com/' title='Météo'>Météo</a></h2>
<a id='a_f5089b722555454d1872b91f52beafd4'
href='http://www.tameteo.com/
meteo_Arles-Europe-France-Bouches+du+Rhone--1-25772.html'
target='_blank' title='Météo Arles'
style='color:#666666;font-family:1;font-size:14px;'></a>
<script type='text/javascript'
src='http://www.tameteo.com/wid_loader/f5089b722555454d1872b91f52beafd4'>
</script>
</div>
Horoscope au travers d un iframe qui pointe sr astroo.com
84
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
<!--DEBUT CODE ASTROO-->
<!--debut code perso-->
<iframe width='232' height='302' marginheight='0' marginwidth='0' frameborder='0'
align='center' src='http://www.astroo.com/horoscope.htm'
name='astroo' allowtransparency='true'>
<!--fin code perso-->
<a href='http://www.astroo.com/horoscope.php' target='_top'
title='Cliquez-ici pour afficher l'horoscope quotidien'>
<font face='Verdana' size='2'><b>afficher l'horoscope du jour</b>
</font></a>
</iframe>
<noscript>
<a href='http://www.astroo.com/horoscope.php' target='_blank'>horoscope</a>
</noscript>
<!--FIN CODE ASTROO-->
Acces à un fil rss avec un module ajax google
<script src='http://www.gmodules.com/ig/ifr?url=
http://www.ajaxgaier.com/iGoogle/rss-reader%2B.xml
&up_title=Actualit%C3%A9s%20atReal
&up_feed=http%3A%2F%2Fwww.atreal.fr%2Fatreal%2Fcommunaute%2Factualites-atreal%2FRSS
&up_contentnr=9&up_fontsize=9&up_lineheight=70
&up_titlelink=&up_bullet=1
&up_reload_feed=0&up_reload_fqcy=0
&up_hl_background=FFFFFF&synd=open&w=200&h=100
&title=
&border=%23ffffff%7C3px%2C1px+solid+%23999999&output=js'>
</script>
Affichage de photos avec flick ‘r (appel javascript) :
<table><tr>
<div class='flick_r'>
<script type='text/javascript'
src='http://www.flickr.com/badge_code_v2.gne?count=3
&display=latest&size=s
&layout=h&source=user
&user=27995901%40N03'></script>
</div>
</tr></table>
Le widget de type ‘Script’
app/widget_example.php
<?php
/**
* WIDGET DASHBOARD - widget_example.
*
* L'objet de ce script est de fournir un exemple de widget de type 'Script'.
*
* @package openmairie_framework
* @version SVN : $Id$
*/
// On instancie la classe utils uniquement si la variable $f n'est pas déjà définie
// pour protéger l'accès direct au script depuis l'URL. La permission "forbidden"
// a pour vocation de n'être donnée à aucun utilisateur.
require_once "../obj/utils.class.php";
if (!isset($f)) {
$f = new utils(null, "forbidden");
3.1. Manuel de référence
85
openMairie Framework Documentation, Version 4.5
}
//
$footer = "";
//
$footer_title = "";
//
$widget_is_empty = true;
?>
Modèle de données
CREATE TABLE om_widget
(
om_widget integer NOT NULL, -- Identifiant unique
libelle character varying(100) NOT NULL, -- Libellé du widget
lien character varying(80) NOT NULL DEFAULT ''::character varying, -- Lien qui pointe vers le wi
texte text NOT NULL DEFAULT ''::text, -- Texte affiché dans le widget
type character varying(40) NOT NULL, -- Type du widget ('web' si pointe vers une URL ou 'file' s
CONSTRAINT om_widget_pkey PRIMARY KEY (om_widget)
);
—
—
—
—
—
—
—
—
—
obj/om_widget.class.php
sql/pgsql/om_widget.form.inc.php
sql/pgsql/om_widget.inc.php
core/obj/om_widget.class.php
core/sql/pgsql/om_widget.form.inc.php
core/sql/pgsql/om_widget.inc.php
gen/obj/om_widget.class.php
gen/sql/pgsql/om_widget.form.inc.php
gen/sql/pgsql/om_widget.inc.php
3.1.9.3 Les tableaux de bord
accès au tableau de bord
Le paramétrage se fait en cliquant sur le lien “paramétrer son tableau de bord”
Il apparait alors
un "plus" pour ajouter un widget pour une colone
une croix pour supprimer un widget
Le déplacement du widget de haut en bas ou de gauche à droite se fait par copier/glisser avec la souris.
86
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
En cliquant sur “+”, il est possible de rajouter des widgets dans son tableau de bord
Modèle de données
CREATE TABLE om_dashboard
(
om_dashboard integer NOT NULL, -- Identifiant unique
om_profil integer NOT NULL, -- Profil auquel on affecte le tableau de ville
bloc character varying(10) NOT NULL, -- Bloc de positionnement du widget
3.1. Manuel de référence
87
openMairie Framework Documentation, Version 4.5
"position" integer, -- Position du widget dans le bloc
om_widget integer NOT NULL, -- Identifiant du widget
CONSTRAINT om_dashboard_pkey PRIMARY KEY (om_dashboard),
CONSTRAINT om_dashboard_om_profil_fkey FOREIGN KEY (om_profil)
REFERENCES openexemple.om_profil (om_profil),
CONSTRAINT om_dashboard_om_widget_fkey FOREIGN KEY (om_widget)
REFERENCES openexemple.om_widget (om_widget)
);
—
—
—
—
—
—
—
—
—
obj/om_dashboard.class.php
sql/pgsql/om_dashboard.form.inc.php
sql/pgsql/om_dashboard.inc.php
core/obj/om_dashboard.class.php
core/sql/pgsql/om_dashboard.form.inc.php
core/sql/pgsql/om_dashboard.inc.php
gen/obj/om_dashboard.class.php
gen/sql/pgsql/om_dashboard.form.inc.php
gen/sql/pgsql/om_dashboard.inc.php
3.1.9.4 Composants
Les scripts du framework qui s’occupent de la gestion du tableau de bord sont :
— scr/dashboard.php
— scr/dashboard_composer.php
— spg/widgetctl.php
3.1.10 Module ‘Édition’
Avertissement : Cette rubrique est en cours de rédaction.
Le framework openMairie permet d’effectuer des éditions au format PDF. Ce module est composé de trois éléments fonctionnels :
— les états et lettres types,
— les listings,
— les étiquettes.
3.1.10.1 Les états et lettres types
C’est la fonctionnalité la plus évoluée du module ‘Édition’, elle permet à l’utilisateur final de composer directement depuis l’interface du logiciel des éditions complexes au format PDF comme des factures, des courriers, des
procès verbaux, ... Il est possible d’insérer dans ces éditions : un logo, des sous-états, des champs de fusion.
Paramétrer des états
Il est conseillé d’utiliser l’assistant état du générateur.
Les paramètres sont les suivants
orientation portrait ou paysage
format="A4", A3
position et nom du logo
titre de l état
position et caractéristiques du titre
corps de l état
position et caractéristiques du corps
88
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
la requête SQL
les sous-états associés et les caractéristiques
Pour le corps et le titre, les zones entre crochets (exemple [nom]) sont les champs de fusion, sélectionnés par la
requête SQL.
Ces champs de fusion peuvent être mis en majucule ou en minuscule selon les besoins grâce aux balises
<MAJ></MAJ> et <min></min>.
EX. :
Requête SQL = SELECT nom as nom FROM A ;
Cette phrase dans un PDF ‘Lorem [nom] dolor sit amet, <MAJ>[nom]</MAJ> adipiscing elit. Curabitur feugiat.’
deviendra ‘Lorem nom dolor sit amet, NOM adipiscing elit. Curabitur feugiat.’
Les variables commençant par “&” sont celles définies dans dyn/varpdf.inc (exemple &aujourdhui) et dans la table
om_parametre.
— obj/om_etat.class.php
— core/obj/om_etat.class.php
— gen/obj/om_etat.class.php
— sql/pgsql/om_etat.form.inc.php
— sql/pgsql/om_etat.inc.php
— core/sql/pgsql/om_etat.form.inc.php
— core/sql/pgsql/om_etat.inc.php
— gen/sql/pgsql/om_etat.form.inc.php
— gen/sql/pgsql/om_etat.inc.php
Paramétrer des lettres-type
Il est conseillé d’utiliser l’assistant lettre-type du générateur.
Les paramètres sont les suivants
orientation portrait ou paysage
format="A4", A3
position et nom du logo
titre de la lettre
position et caractéristiques du titre
corps de la lettre
position et caractéristiques du corps
la requête SQL
Pour le corps et le titre, les zones entre crochets sont les champs de fusion, sélectionnés par la requête.
Les variables commençant par “&” sont celles définies dans dyn/varlettretypepdf.inc (exemple &aujourdhui) et
dans la table om_parametre.
— obj/om_lettretype.class.php
— core/obj/om_lettretype.class.php
— gen/obj/om_lettretype.class.php
— sql/pgsql/om_lettretype.form.inc.php
— sql/pgsql/om_lettretype.inc.php
— core/sql/pgsql/om_lettretype.form.inc.php
— core/sql/pgsql/om_lettretype.inc.php
— gen/sql/pgsql/om_lettretype.form.inc.php
— gen/sql/pgsql/om_lettretype.inc.php
Actif, non actif
Les sous-etats sont liés a un ou plusieurs état.
3.1. Manuel de référence
89
openMairie Framework Documentation, Version 4.5
Les états, sous-états, et lettre type peuvent être “actif” ou “non-actif”.
Par défaut sont pris en compte :
1 - l’édition “actif” de la collectivité
2 - l’édition “actif” de la multicollectivité
3 - l’édition “non-actif” de la multicollectivité
Les éditions d’une collectivité ayant le statut “non-actif” ne sont pas prises en compte.
Les requêtes
3.1.10.1.4.1 Description Une requête peut être :
— de type SQL
— de type OBJET
3.1.10.1.4.2
Modèle de données
CREATE TABLE om_requete
(
om_requete integer NOT NULL, -- Identifiant unique
code character varying(50) NOT NULL, -- Code de la requête
libelle character varying(100) NOT NULL, -- Libellé de la requête
description character varying(200), -- Description de la requête
requete text, -- Requête SQL
merge_fields text, -- Champs de fusion
type character varying(200) NOT NULL, -- Requête SQL ou objet ?
classe character varying(200), -- Nom de(s) la classe(s) contenant la méthode
methode character varying(200), -- Méthode (de la première classe si plusieurs définies) fournis
CONSTRAINT om_requete_pkey PRIMARY KEY (om_requete)
);
—
—
—
—
—
—
—
—
—
obj/om_requete.class.php
sql/pgsql/om_requete.form.inc.php
sql/pgsql/om_requete.inc.php
core/obj/om_requete.class.php
core/sql/pgsql/om_requete.form.inc.php
core/sql/pgsql/om_requete.inc.php
gen/obj/om_requete.class.php
gen/sql/pgsql/om_requete.form.inc.php
gen/sql/pgsql/om_requete.inc.php
Les sous-états
Il est conseillé d’utiliser l’assistant sous-etat du générateur.
Les paramètres sont les suivants
texte et caractéristique du Titre
Intervalle avant et après le tableau
Entête de tableau (nom de colonne)
caractéristique du tableau
caractéristique des cellules
total, moyenne, nombre
requête SQL
Pour le titre, les zones entre crochets sont les champs de fusion, sélectionnés par la requête.
Les variables commençant par “&” sont celles définies dans dyn/varpdf.inc (exemple &aujourdhui) et dans la table
om_parametre.
90
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
—
—
—
—
—
—
—
—
—
obj/om_sousetat.class.php
core/obj/om_sousetat.class.php
gen/obj/om_sousetat.class.php
sql/pgsql/om_sousetat.form.inc.php
sql/pgsql/om_sousetat.inc.php
core/sql/pgsql/om_sousetat.form.inc.php
core/sql/pgsql/om_sousetat.inc.php
gen/sql/pgsql/om_sousetat.form.inc.php
gen/sql/pgsql/om_sousetat.inc.php
Les champs de fusion
Les variables de remplacement
Lorsque dans les zones de remplacement des éditions, une chaîne de caractère commençant par “&” est identifiée
elle essaye d’être remplacée. Ces éléments sont nommées variables de remplacement. Elles peuvent provenir de
trois sources différentes :
— les fichiers de configuration ../dyn/var*pdf.inc,
— les méthodes globales de la classe du fichier ../obj/om_dbform.class.php,
— la table de paramètres om_parametre.
3.1.10.1.7.1
Les fichiers de configuration ../dyn/var*pdf.inc
3.1.10.1.7.2
Les méthodes globales de la classe du fichier ../obj/om_dbform.class.php
3.1.10.1.7.3 La table de paramètres om_parametre prefixe_edition_substitution_vars
doit être définit.
Les logos
—
—
—
—
—
—
—
—
—
obj/om_logo.class.php
core/obj/om_logo.class.php
gen/obj/om_logo.class.php
sql/pgsql/om_logo.form.inc.php
sql/pgsql/om_logo.inc.php
core/sql/pgsql/om_logo.form.inc.php
core/sql/pgsql/om_logo.inc.php
gen/sql/pgsql/om_logo.form.inc.php
gen/sql/pgsql/om_logo.inc.php
L’éditeur WYSIWYG
Description de l’intégration de TinyMCE et des différents configurations.
Les anciens fichiers de paramétrage
Les
fichiers
de
paramétrage
../sql/pgsql/<OBJ>.etat.inc.php,
../sql/pgsql/<OBJ>.etat.inc,
../sql/pgsql/<OBJ>.lettretype.inc.php
ou
../sql/pgsql/<OBJ>.lettretype.inc sont les anciens fichiers de paramétrage des éditions. Ils
ne peuvent plus être utilisé depuis la version 4.0 du framework.
Un système d’import est disponible dans le générateur pour transformer ces anciens fichiers de paramétrage en
enregistremment selon le nouveau format de paramétrage.
3.1. Manuel de référence
91
openMairie Framework Documentation, Version 4.5
La prévisualisation
Le bouton Prévisualiser permet, pour une lettre type ou un état, d’avoir un apercu du document qui sera généré.
Les champs de fusion ne seront pas interprétés.
3.1.10.2 Les listings
Description de la fonctionnalité
Le fichier de paramétrage ../sql/pgsql/<OBJ>.pdf.inc.php
Un état PDF peut être généré par le générateur (option).
Les paramètres sont les suivants
texte et caractéristique du Titre
Entête de tableau (nom de colonne)
caractéristique du tableau
caractéristique des cellules
total, moyenne, nombre
requête SQL
3.1.10.3 Les étiquettes
Description de la fonctionnalité
Le fichier de paramétrage ../sql/pgsql/<OBJ>.pdfetiquette.inc.php
3.1.10.4 Composants
Les scripts du framework qui s’occupent de la gestion des éditions sont :
— core/fpdf_etat.php
— core/fpdf_etiquette.php
— core/db_fpdf.php
— core/om_edition.class.php
— scr/edition.php
Les librairies PHP sont :
— php/fpdf/
— php/tcpdf/
3.1.11 Module ‘Import’
Avertissement : Cette rubrique est en cours de rédaction.
3.1.11.1 Principe
Ce module permet l’import de données au format CSV dans les tables de la base de données par une interface
utilisateur.
Exemple de format de fichier à importer (utilisateur.txt) :
92
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
nom,login,pwd,profil
"Georges DANDIN";"Georges";"21232f297a57a5a743894a0e4a801fc3";"3"
"Raymond DAVOS";"Raymond";"fe01ce2a7fbac8fafaed7c982a04e229";"3"
"Albert DUPONT";"Albert";"05c7e24700502a079cdd88012b5a76d3";"6"
3.1.11.2 Paramétrage
Le script de paramétrage ../sql/pgsql/<OBJ>.import.inc.php
Dans utilisateur.import .inc.php , il est defini :
le message affiché en import :
$import= "Insert utilisateur" : Message
la table cible de l'import
$table= "utilisateur"
la clé primaire si elle est automatique (mise en place d'une séquence) ;
ce champ est vide sinon
$id="utilisateur"
Le verrouillage de la base de données
$verrou = 1 mise-à-jour de la base
= 0 pas de mise-à-jour pour une phase de test
Le mode débug
$DEBUG =1 affichage des enregistrements à l'ecran
=0 pas d'affichage
La mise en place d'un fichier d'erreur :
$fic_erreur=1 fichier erreur
=0 pas de fichier d'erreur
La mise en place d'un fichier de rejet reprenant les enregistrements csv rejetés
ce fichier contient les enregistrements en erreur et permet de relancer le
traitement après correction (manuelle)
$fic_rejet=1 fichier de rejet pour relance traitement
=0 pas de fichier rejet
La première ligne affiche le nom des champs :
$ligne1=1 la première ligne contient les noms de champs
=0 sinon
Les zones obligatoires : tableau $obligatoire
$obligatoire['nom']=1;// obligatoire = 1
$obligatoire['login']=1;// obligatoire = 1
les tests d'existence d'une clé secondaire
$exit['profil']=1 => 0=non / 1=oui
$sql_exist["profil"]= "sélect profil froc profil cherre profil = '"
La liste des champs à insérer
il faut mettre en commentaire les zones non traitées
$zone['nom']='0' => la 1ère zone contient le nom
$zone['login']=1 => la 2ème zone contient le login
$zone['pwd']='2' => la 3ème zone contient le mot de passe (crypté)
$zone['profil']='3' => la 4ème zone contient le profil
La valeur par défaut :
3.1. Manuel de référence
93
openMairie Framework Documentation, Version 4.5
En effet, si $zone['profil']="" on peut définir un profil par défaut
$defaut['profil']='5' Le profil par défaut sera 5
3.1.11.3 Composants
Les scripts du framework qui gèrent le module ‘Import’ sont :
— core/om_import.class.php
— scr/import.php
3.1.12 Module ‘Reqmo’
Avertissement : Cette rubrique est en cours de rédaction.
3.1.12.1 Principe
les requêtes mémorisées permettent au développeur de fournir un ensemble de requêtes :
— mémorisées
— accessible dans le menu export -> requêtes
— paramétrables par l’utilisateur
— permettant un affichage html en tableau ou un transfert au format csv sur tableur (choix du séparateur à l
utilisateur)
menu export-> requete
3.1.12.2 Paramétrage
Le script de paramétrage ../sql/pgsql/<OBJ>.reqmo.inc.php
Les parametres de reqmo sont :
94
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
$reqmo[’libelle’] contient le libéllé affiché en haut
$reqmo[’sql’] contient la requete SQL.
Dans la requete, les paramétres sont mis entre []
et ils sont définis en dessous sous la forme reqmo[parametre]=.
“checked” : la colonne est affiché ou non
“un tableau” array(a,b) et le choix a ou b est donné à l utilisateur de requete
“une requete sql” : le choix se fait dans la table du select
La requete executée est celle qui est reconstituée avec les zones sasisies par l’utilisateur
voies sous openCimetiere
$reqmo['libelle']=" Voies par cimetiere ";
$reqmo['sql']=" select voie,voietype,voielib,
[zonetype],[zonelib],
[cimetierelib]
from voie
inner join zone
on voie.zone=zone.zone
inner join cimetiere
on zone.cimetiere=cimetiere.cimetiere
where cimetiere.cimetiere = [cimetiere] order by [tri]";
$reqmo['tri']= array('voielib',
'zonelib'
);
$reqmo['zonetype']="checked";
$reqmo['zonelib']="checked";
$reqmo['cimetierelib']="checked";
$reqmo['cimetiere']="select cimetiere,concat(cimetiere,' ',
cimetierelib) from cimetiere";
3.1.12.3 Composants
Les scripts du framework qui gèrent le module ‘Reqmo’ sont :
— core/om_reqmo.class.php
— scr/reqmo.php
3.1.13 Module ‘Géolocalisation’
Il est necessaire que l’API openLayers soit dans le framework :
lib/openlayers
3.1.13.1 Principe
Il est proposé dans ce chapitre de decrire le module tab_sig.php qui permet la geo localisation d’objet dans openMairie
A partir de la version 4.4.0, l’accès au module géographique se fait en mettant l’option_localisation
d’om_paramètre à la valeur “sig_interne”
L’objectif de tab_sig_map est de permettre une saisie le plus souvent automatique par un point, ligne, multiligne,
polygone, multipolygone. Cette saisie est stockée dans la base métier postgresql. Elle est affichée sur des fonds
existants sur internet : google sat, openStretmap ou bing (pour l instant) en utilisant le composant javascript
openLayers
Il n’est donc pas nécessaire de disposer d’un SIG pour utiliser tab_sig.php.
3.1. Manuel de référence
95
openMairie Framework Documentation, Version 4.5
Le format de stockage des données pgsql est celui de l’OGC et il est accessible aux clients libres où propriétaires
qui respectent ce format (QGIS, GRASS, VEREMAP ... pour les clients libres)
Géo localisation automatique
L’enjeu est de limiter au maximum la géo localisation manuelle dès qu’il y a une possibilité de géo localisation
automatique.
Elle se fait au travers de 2 programmes (voir paragraphe sur le geocodage) :
— adresse_postale.php : positionnement suivant le numero et rue
— adresse_postale_google.php : positionnement suivant le numero et rue avec google
— adresse_postale_bing.php : positionnement suivant le numero et rue avec bing
— adresse_postale_mapquest.php : positionnement suivant le numero et rue avec mapquest
La géolocalisation automatique peut se faire sur une base externe postgresql (eventuellement via une vue)
le script tab_sig.php permet de saisir manuellement le point.
Affichage de carte
L’affichage se fait avec openLayers dont le composant est de base dans le framework openMairie : lib/openLayers.
(le composant est installé de manière a être optimisé avec une css openmairie)
La librairie proj4 inclus dans lib/openLayers permet de pouvoir utiliser les projections lambert sud et lambert 93.
La projection géographique et Mercator est de base dans openLayers
L’enjeu est donc de projeter les données stockées dans la base “métier” postgresql - postgis (les communes devant
utiliser le lambert93) en mercator pour être lisible avec les cartes accessibles sur internet.
L’affichage des datas est fait au travers d’une requête postgresql qui alimente un tableau json lu comme une couche
openLayers.
La data à modifier est fourni par requete postgresql au format wkt à openLayers. (voir paragraphe layers)
tab_sig.php permet
- l affichage de/des fond(s)
- l'affichage de données (data)
- l affichage du geométries qui peut être créé ou déplacé (couche wkt)
dans la version 4.2.0, tab_sig permet aussi
- l'affichage de flux wms et wfs (getmap) et de recuperer les données (getfeature)
- la collation de géométrie dans un pannier et son enregistrement en multi géométries
Paramétrage de la carte
Le paramétrage général (contenu dans scr/tab_sig.php) des cartes est modifiable dans dyn/var_sig.inc
// *** parametre de tab_sig.php ***
// generer une cle pour le site : http://code.google.com/intl/fr/apis/maps/signup.html
$cle_google = "";
$fichier_jsons="json_points.php?obj=";
$fichier_wkt="wkt_point.php";
//zoom par couche : zoom standard permettant un passage de zoom a l autre
$zoom_osm_maj=18;
$zoom_osm=14;
$zoom_sat_maj=8;
$zoom_sat=4;
$zoom_bing_maj=8;
$zoom_bing=4;
96
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
// popup data contenuHTML
$width_popup=200;
$cadre_popup=1;
$couleurcadre_popup="black";
$fontsize_popup=12;
$couleurtitre_popup="black";
$weightitre_popup="bold";
$fond_popup="yellow";
$opacity_popup="0.7";
// image localisation maj ou consultation
$img_maj="img/punaise.png";
$img_maj_hover="img/punaise_hover.png";
$img_consult="img/punaise_point.png";
$img_consult_hover="img/punaise_point_hover.png";
$img_w=14;
$img_h=32;
$img_click="1.3";// multiplication hauteur et largeur image cliquee
// *** parametres d om_sig_map.class.php, om_sig_wms.class.php
$contenu_etendue[0]= array('4.5868,43.6518,4.6738,43.7018',
'4.701,43.3966,4.7636,43.4298',
'4.71417,43.64,4.72994,43.65166',
'4.72345,43.55348,4.73134,43.55932',
'5.2094,43.4136,5.3345,43.4759'
);
$contenu_etendue[1]= array('agglomeration',
'salin de giraud',
'raphele',
'Mas thibert',
'vitrolles'
);
$contenu_epsg[0] = array("","EPSG:2154","EPSG:27563");
$contenu_epsg[1] = array("choisir la projection",'lambert93','lambertSud');
La version 4.4.0 contient les étendues des communes des bouches du rhône.
3.1.13.2 objet map
ce chapitre propose de décrire l’utilisation de l’objet map d’openLayers dans tab_sig.php.
Cet objet permet de définir
— le div ou la carte sera affichée (dans tab_sig.php la carte s’affiche avec le div : map-Id)
— les options de la carte et les controles affichés
3.1.13.3 afficher les layers
ce chapitre propose de décrire l’utilisation de l’objet layers d’openLayers dans tab_sig.php.
3.1. Manuel de référence
97
openMairie Framework Documentation, Version 4.5
Dans le lien, il est possible de définir
-
la carte a afficher suivant l'id : ?obj=
Obligatoire
le fond affichable par défaut : sat, bing, osm : &fond =
l'étendue : &etendue =
l enregistrement à modifier : &idx=
Les cartes sont paramétrées dans om_sig_map (menu administration)
Il est possible de copier une carte et de paramétrer les champs suivants :
-
id : identifiant unique (obligatoire)
libelle
fonds a afficher et data (osm, bing, sat(google))
étendue et epsg (voir sig/var_sig_point.inc)
url (qui pointe sur la fiche ou le formulaire de saisie)
requete sql qui affiche les données json et qui doit désigné :
le titre
la description
l idx
- la mise a jour si oui,
le champ géometrique et la table maj,
le type de géometrie et le nom de la couche openLayers (version 4.2.0)
- le retour de la carte
Dans tab_sig.php, il y a 3 types de layers :
98
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
— les fonds de cartes existants sur internet (base layers)
— les données issus de postgresql (overlays)
— les données wms (overlay)
Les fonds
Il est proposé les fonds suivants :
osm : openstreetmap
sat : satelite google
bing : satellite microsoft
Les datas
Information de la carte : layer_info
Cette couche fait appel à sig_json.php
Il est possible de faire appel a un autre script (voir dyn/var_sig.inc)
La requête pgsql est paramétrée dans la table om_sig_map et doit définir les champs geom, titre, description et
texte.
sig_json.php présente tous les enregistrements d’un même point (même géom) sur un seul popup
En effet, il est constitué un popup lorsque l on clique sur l objet et donne la possibilité à un accès URL parametrée
dans om_sig_map
Les flux wms
Le paramètrage des flux wms est saisi dans om_sig_wms
3.1. Manuel de référence
99
openMairie Framework Documentation, Version 4.5
il faut saisir
-
libelle du champ
la collectivité
l'identifiant (il doit être unique pour chaque couche wms)
le lien de la couche (http)
les layers de la couches séparés par une virgule
Exemple de lien avec qgis serveur
http://localhost/cgi-bin/qgis_mapserv.fcgi
?SERVICE=WMS&VERSION=1.3.0
&map=/var/www/openfoncier/trunk/app/qgis/openfoncier.qgs
L’affectation des flux wms dans une carte est saisi dans om_sig_map_wms
Il est saisi
le nom du flux wms
nom du layer sur la carte
l ordre d affichage
la visibilité par défaut (case à cocher)
Sur la carte ci dessous le flux wms est activé et affiche le lotissement (getMap)
En cliquant sur le lotissement, il est possible d’accéder aux données (getFeature)
version 4.4.0
Trois nouveaux paramètres sont disponnibles :
sqlfilter : possibilité de filtre du flux wms (attribut FILTER)
compléter la zone avec une requête SQL qui va généré le filtre (syntaxe suivant le serveur WMS)
100
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
exemple d’un filtre
pour produire le filtre suivant :
layer1:"champ1" = 'valeur1',layer2:"champ2" = 'valeur2'
il faut entrer la requête suivante pour selectionner les electeurs d'un bureau :
select 'electeur:²bureau² = '''||bureau.bureau||''' as buffer from &DB_PREFIXEbureau where bureau
select 'electeur:²bureau² = ''&idx'' as buffer from &DB_PREFIXEbureau where bureau = '&idx'
² = caractère utilisé pour les doubles quotes : "
|| concatenation sql
''' permet d echapper la simple quote
'' sql remplace les deux quotes par une quote (caractere quote)
le filtre final appliqué au flux wms est : electeur:"bureau" = '04'
pour le bureau 04
base_layers : possibilité d’utiliser le flux wms comme base layers (au même niveau qu’OSM)
single_tile : raméne le flux wms en une seule image pour la fenêtre et non en imagette (permet de corriger les
labels tronqués)
Attention les temps de réponses peuvent s’allonger car il n’y a pas de cache.
La notion de pannier
Le pannier permet de pouvoir stocker des géométries au travers de flux wms mais attention, la géométrie est
récupérée dans une table ou une vue postgis (c’est pour l’instant une limite de la version 4.2.0)
exemple : openFoncier carte dossier :
Il est proposé dans ce cas de stocker des polygones dans le pannier et de sauvegarder un multipolygone constitué
de ces polygones récupérés dans le pannier
Choisir dans le select “polygone” ; L’etat est “dessinner”
Il apparait le pannier “parcelle”. Sélectionner les parcelles en cliquant dessus (elles sont vertes)
Valider une fois les parcelles choisies (elles deviennent rouge)
3.1. Manuel de référence
101
openMairie Framework Documentation, Version 4.5
Appuyer sur “enregistrer”, l’état devient enregistrer
Cliquer sur le jeu de parcelles de votre choix (ce jeu devient vert clair)
Il peut y avoir un ou plusieurs panniers : exemple : parcelle, batiment. par contre la géométrie récupérée ne
concerne qu une seule couche
la gestion de pannier se fait dans om_sig_map_wms
panier :
pa_nom :
pa_layer :
pa_attribut:
pa_encaps:
pa_sql:
option pannier activé (Oui/non)
nom du pannier
nom du layer pannier
attribut de la couche à récupérer
caractère d'encapsuation (la ')
requête de récupération
pa_type_geometrie:
type de géométrie
Exemple dossier/openFoncier :
parcelle
parcelle
parcelle
'
select astext(st_union(geom)) as geom
from &DB_PREFIXEparcelle where parcelle in
polygone
le script de gestion de pannier est : scr/sig_pannier.php
La géométrie à modifier : couche vectors :
Le chargement de la couche vectors se fait si dans la table om_sig_map, la case maj est activée.
La géométrie est récupérée par le script sig_wkt.php (appel a un script paramètrable dans var_sig.inc) et la carte
est centrée sur la géométrue
Il est possible de :
— positionner manellement la géométrie
102
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
— déplacer la géométrie
— enregistrer la géometrie [selectionner la géométrie, le programme] form_sig.php est chargé en
fenetre et permet de supprimer la géométrie (champ geometrique = null) ou modifier cette
géométrie.
Les fonctions javascript et les controles sont activées suivant chaque état.
Dans dyn/form_sig_update.inc.php, il est possible de paramétrer des post traitements de saisie
Dans dyn/form_sig_delete.inc.php, il est possible de paramétrer des post traitements de suppression
Les géométries complémentaires
Il peut y avoir plusieurs géométries pour un même objet.
Elles sont saisies dans om_sig_map_comp
titre
ordre d affichage
actif
Mise a jour
type de géométrie
table
champ
polygone
1
coché
coché
polygone
dossier
geom1
nom de la nouvelle géométrie
ordre d'affichage dans le select
activé la nouvelle géométrie
autorisé la mise à jour
polygone, point, ligne
table du champ géométrique
champ géometrique concerné
Dans l exemple précédent, il apparait une fenêtre select ou l utilisateur a le choix entre une géométrie “point” et
une géométrie “polygone” du fait de la mise en place d’une géométrie complémentaire.
3.1.13.4 installation d’om_sig_map
Pour faire fonctionner tab_sig.php, il faut :
— installer postgis sous postgres
— openlayers qui est de base dans le framework lib/openlayers
optimisation composant openLayers
construire un OpenLayers.js compresse dans le repertoire build
$ cd buill
$ python build.py
3.1. Manuel de référence
103
openMairie Framework Documentation, Version 4.5
le fichier fait 800 ko au lieu de 3 Mo
— compression lite
$ python build.py lite.cfg
le fichier fait 120 ko
regarder dans le fichier "lite" les fichiers qui sont inclus
et éventuellement le compléter
3.1.13.5 postgis
ce chapitre propose de décrire les possibilités d’utilisation de postgis dans openMairie.
principes
Il est proposé un renvoi sur la documentation française.
http://postgis.refractions.net/documentation/manual-1.3/ch06.html
ou sur le projet pédagogique postgis (conférence avec documentation et nombreux exemples :
https://adullact.net/projects/postgis/
Les requêtes utilisant des fonctions potgis peuvent être implémentées dans “reqmo”
Il sera proposé un lien sur un tutorial utilisant les fonctions postgis.
base et schéma
Il est noté que les applications openMairie peuvent s’installer dans un schéma.
Les tables et fonctions postgis sont alors accessible dans le schéma public.
3.1.13.6 geocodage
Ce chapitre est consacré au problème de géocodage.
Il est propose un géocodage interne (sgbd adresse en reseau interne) ou un geocodage externe
Il convient de regarder les termes de licences concernant les API externes non libres (mapquest/osm) afin de
s’assurer de bien respecter les obligations de l’autorisation gratuite.
Un document décrivant les contraintes juridiques et techniques de l’utilisation des API est accessible via ce lien.
Le parametrage se fait dans le fichier sig/var_adresse_postale.php
var_adresse_postale.inc
paramètrage général
$longueurRecherche=1;
adresse postale stockée sur une base dans le réseau interne
// table et champs de la requete adresse postale ou l information doit etre recupere
$t="adresse_postale";
// table adresse postale
$t_voie = "rivoli";
// code adresse
$t_numero="num_voi";
// numero dans la voie
$t_complement="suf_voi";
// suffixe (bis, ter ...)
$t_geom="the_geom";
// geometry point(X,Y)
$t_adresse="(typevoie ||' '||nomvoie)";
// libelle de l adresse
104
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
$t_quartier="id_parc";
// *** a voir
$t_cp='';
$t_ville='';
$t_insee='';
// nom champ cp
// nom champ ville
// nom champ insee
// champ du formulaire ou l adresse est saisi pour retour du point de geolocalisation
$f_numero='numero_voie';
// nom champ du numero dans la voie
$f_voie='voie';
// nom champ du code de la voie (rivoli)
$f_complement='complement';
// nom champ du complement de numero
$f_geom='geom';
// nom champ geometrique point(X,Y)
$f_libelle='libelle_voie';
// nom champ libelle de la voie
// *** a voir
$f_cp='';
// nom champ cp
$f_ville='';
// nom champ ville
$f_insee='';
// nom champ insee
Cas ou la table d’adresse est stockées dans une autre base (voir parametrage framework de database.inc.php) :
$db_externe='Oui'; // Oui : base externe
$dsn_externe= array(
'title' =>"base locale des adresses de l'IGN",
'phptype' => "pgsql",
'dbsyntax' => "pgsql",
'username' => "postgres",
'password' => "postgres",
'protocol' => "tcp",
'hostspec' => "localhost",
'port'
=> "5432",
'socket'
=> "",
'database' => "ignlocal",
'formatdate'=> "AAAA-MM-JJ",
'schema' => "public",
'prefixe' =>""
);
$db_option_externe=array('debug'=>2,
'portability'=>DB_PORTABILITY_ALL);
Géolocalisation par accès à un API externe
// variables par defaut cp et ville si non renseignées dans le formulaire
// pour recherche
$cp="13200";
$ville="Arles";
$pays = ""; // a voir
// epsg de transformation pt adresse postale dans la base en cours
$epsg= "EPSG:27563";
// acces au script adresse_postale externe
$adresse_interne="Oui";
$google="Oui"; // google
$bing="Oui";
// bing
$osm="Oui";
// mapquest
le parametre $adresse_interne à Oui permet de consulter une adresse stiockée dans le réseau interne sur la même
base, ou sur une base différente (voir plus haut)
Ensuite 3 API peuvent être initialisés : google, bing et mapquest
Mise en oeuvre dans un formulaire d’un bouton de la geolocalisation
La géolocalisation se fait sur la base du script
3.1. Manuel de référence
105
openMairie Framework Documentation, Version 4.5
sig/adresse_postale.php
qui fait appel suivant le paramétrage à :
adresse_postale_bing.php
adresse_postale_google.php
adresse_postale_mapquest.php
Il est appelé depuis la classe métier suivant l’exemple suivant :
Exemple de openmairie_domainepublic : objet odp
dans sql/pgsql/odp.form.inc : le champ adressepostale est implementé comme un champ vide
$champs=array("odp", ...
"'' as adresse_postale", // specific
dans obj/odp.class.php
dans la methode setType, le champ adresse_postale est du type httpclick
function setType (&$form, $maj) {
parent::setType ($form, $maj);
$form->setType('adresse_postale', 'httpclick');
avec la methode setVal : valoriser par défaut l'accès au script adresse_postale
app/js/script.js
function setVal(&$form, $maj, $validation, &$db, $DEBUG=null){
// bouton adresse postale
$form->setVal("adresse_postale",
"adresse_postale('f1',f1.libelle_voie.value,f1.numero_voie.value)");
}
Initialiser une variable globale égale à 0 et qui prend la valeur 1 si la zone geometrique
est au format wkt
En effet le point ramené par l API externe est au format geographique (lattitude, longitude) en wk
il commence par POINT(x, y) et il convient de le mettre dans la projection de la zone géometrique
class odp extends odp_gen {
106
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
var $wkt=0;
dans la methode setValF, repérer une valeur wkt
if(substr($val['geom'],0,5)== "POINT"){
$this->wkt=1;
$this->valF['geom'] = null;
} ...
utiliser les methodes de mise à jour après saisie pour la geometrie :
function triggermodifierapres($id,&$db,$val,$DEBUG) {
if($this->wkt==1){
$this->sig_wkt($id,&$db,$val,$DEBUG);
}
}
function triggerajouterapres($id,&$db,$val,$DEBUG) {
$id=$this->valF[odp]; // id n est pas valorise en ajout
if($this->wkt==1){
$this->sig_wkt($id,&$db,$val,$DEBUG);
}
}
function sig_wkt($id,&$db,$val,$DEBUG){
// si wkt -> saisie en format binaire wkb pour postgre
$projection = $db -> getOne("select srid from geometry_columns where f_table_name='".
$this->table."'");
$sql ="update ".$this->table." set geom =geometryfromtext('".$val["geom"]."', ".
$projection." ) where ".$this->table." ='".$id."'";
$res = $db -> query($sql);
if (DB :: isError($res)){
die($res->getMessage()."erreur ".$sql);
}else{
$this->msg = $this->msg."&nbsp;"._("le point trouvé par l'API est sauvegardé")."&nbsp;
$this->table."&nbsp;".$id;
}
}
3.1.13.7 data_sig
ce chapitre propose de décrire la récupération de données SIG nécessaires à la mise en oeuvre des scripts SIG
internes openMairie.
Saisir le périmètre de sa commune
Il s’agit d’adapter ses cartes au périmètre de sa commune
Aller sur openstreetMap http://www.openstreetmap.org/
Chercher la ville : exemple “Gréasque”
Ajuster la carte aux frontières communales
Aller dans l onglet export et noter les coordonnées géographiques “zone à exporter”
3.1. Manuel de référence
107
openMairie Framework Documentation, Version 4.5
Dans le fichier dyn/var_sig.inc, modifier le tableau de variables avec les coordonnées de la manière suivante
$contenu_etendue[0]= array('5.5155,43.4081,5.5781,43.4426');
$contenu_etendue[1]= array('greasque');
Modifier les cartes de om_sig_point
Récupérer les données de l’IGN
Les bases suivantes sont fournies gratuitement aux collectivités
— base topographique
— base parcellaire
— base adresse
L’application openReferentiel (Vitrolles) permet de créer un référentiel local sur la collectivité
Les données sont fournies par département.
Il faut récupérer les fichiers shape dans une base IGN puis ensuite construire le référentiel de la commune avec
openReferentiel.
Recupérer des données shape
Il est proposé un exemple de récupération de données “parcelle”
Les données de l’IGN sont fournies aux communes par département.
Insérer le fichier parcelle dans la base (exemple IGN)
shp2pgsql -s 2154 -I -D -W LATIN1 PARCELLE.SHP | psql ign
Il est créer dans la base “ign” une table parcelle décrite ci dessous
108
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
gid serial NOT NULL,
numero character varying(4),
feuille smallint,
section character varying(2),
code_dep character varying(2),
nom_com character varying(45),
code_com character varying(3),
com_abs character varying(3),
code_arr character varying(3),
the_geom geometry
ainsi qu un enregistrement parcelle dans géometry_columns (postgis est obligatoire dans la base) et un index
Selectionner les parcelles de la commune concernée et inserer les dans une nouvelle table
insert into parcelle_greasque
(parcelle, section, commune, geom)
select
section||numero, section, code_dep||code_com, the_geom from parcelle
where code_com = '046';
Pour mettre à jour le champ surface de parcelle dans openfoncier
update parcelle set surface = round(cast(area2d(geom) as numeric), 2)
Recupération des données de la DGI
Les fichiers textes de la DGI sont dans un format récupéré dans le cadre de l application openCadastre qui reconstitue des tables postgresql.
Les fichiers gémétriques au format EDIGEO ne sont pas récupérés compte tenu de son format non standard et il
est préféré utiliser les formats shape de l IGN
L’application openCadastre permet de récupérer les données “texte”.
3.1.14 Abstraction du ‘layout’ (ergonomie)
Avertissement : Cette rubrique est en cours de rédaction.
Depuis la version openMairie 4, il est utilisé l’ergonomie de jquery.
3.1.14.1 Le composant jquery
Les skins jquery peuvent être rajoutés dans le répertoire /om_theme/.
Il est possible de générer un nouveau thème directement depuis le site de Jquery-UI
http://jqueryui.com/download
pour télécharger un thème standard
http://jqueryui.com/themeroller pour créer un thème personnalisé
Le changement de thème peut se faire dans le fichier EXTERNALS.txt
voir framework/paramétrage
3.1.14.2 Les feuilles de style
Les feuilles de style sont stockées dans le repertoire css/ et sont cascadables
3.1. Manuel de référence
109
openMairie Framework Documentation, Version 4.5
main.css
: feuille de style principale openMairie
om-theme/om.css : suivant la feuille de style jquery (voir EXTERNALS.txt)
app/css
: surcharge spécifique a l'application (exemple : le logo de
l'application)
3.1.15 Abstraction du ‘filestorage’ (stockage des fichiers)
Avertissement : Cette rubrique est en cours de rédaction.
3.1.15.1 Principe général
L’objectif de cette rubrique est de gérer le stockage des fichiers dans les applications. Ce stockage permet d’avoir
des stockages complexes.
Termes :
— abstracteur : classe d’abstraction, c’est elle qui est instanciée et qui instancie les classes spécialisées en
fonction des critères,
— connecteur : classe spécialisée.
Description des fichiers permettant de gérer le filestorage :
[D] dyn
|-[F] filestorage.inc.php
|---- ...
[D] core
|-[F] om_filestorage.class.php
|-[F] om_filestorage_deprecated.class.php
|-[F] om_filestorage_filesystem.class.php
|-[F] om_filestorage_filetransferprotocol.class.php *
|-[F] om_filestorage_alfresco.class.php *
|---- ...
* (ce fichier n'existe pas il est là à titre d'illustration de ce que le système est capable de fa
3.1.15.2 Fonctionnement
Description de l’abstracteur
[core/om_filestorage.class.php]
Ce fichier est composé de deux classes : la classe d’abstraction, la classe de base pour les classes spécialisées.
La classe ‘filestorage’ est une classe d’abstraction de stockage de fichiers. C’est cette classe qui est instanciée
et utilisée par d’autres scripts pour gérer la création, récupération, suppression de fichiers et ce peu importe le
stockage utilisé. Son objectif est d’instancier la classe de stockage spécifique aussi appelée plugin de stockage
correspondant au paramétrage sélectionné. Cette classe de stockage spécifique hérite de la classe ‘filestorage_base’
qui lui sert de modèle.
Description du fichier de configuration
[dyn/filestorage.inc.php]
Ce fichier de configuration doit permettre le paramétrage du stockage dans chacune des applications. Par exemple,
il permet dans une installation d’openElec de stocker les fichiers en utilisant le connecteur ‘filesystem’ dans le
path /var/openelec/data sur le système de fichiers et dans une autre installation d’openElec de stocker les fichiers
dans ‘alfresco’ sur un autre serveur.
110
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
Il doit permettre de sélectionner le stockage à utiliser ainsi que le paramétrage spécifique à chacun des connecteurs.
Par exemple : pour le stockage ‘filesystem’, il doit être possible de paramétrer le répertoire dans lequel vont être
stockés les fichiers, pour le stockage ‘alfresco’ il doit être possible de paramétrer l’adresse de l’hôte, l’identifiant
et le mot de passe de connexion, ....
Il permet aussi de stocker la configuration du stockage de fichier temporaire.
Ce fichier s’inspire des autres fichiers de configuration (mail.inc.php, directory.inc.php, ...). Il doit contenir un
tableau associatif :
$filestorage = array();
Exemple d’un paramétrage (la clé filestorage-default doit être rajoutée dans une des valeurs du paramétrage du
fichier database.inc.php comme l’est mail-default ou directory-default) :
$filestorage["filestorage-default"] = array {
"storage" => "filesystem", // l'attribut storage est obligatoire
"storage_path" => "", // l'attribut storage_path n'est pas obligatoire
"path" => "/var/www/openfoncier/data/",
"temporary" => array(
"storage" => "filesystem", // l'attribut storage est obligatoire
"path" => "../tmp/", // le repertoire de stockage
...
}
Si aucun filestorage n’est paramétré, le filestorage deprecated sera instancié et le filestorage temporaire sera le
filesystem.
Description des méthodes de la classe filestorage
La classe ‘filestorage’ contient des méthodes de gestion des fichiers :
filestorage.create($data, $metadonnees, $mode = “from_content”)
Permet de créer un fichier sur le filestorage,
$data : contenu du fichier
$metadonnees : tableau contenant la liste des métadonnées ($cle => valeur)
$mode [”from_content”, “from_path”] :
—from_content : $data contient le contenu du fichier.
—from_temporary : $data l’uid d’un fichier enregistré sur le filesystem temporary.
—from_path : $data contient le chemin du fichier à enregistrer.
Cette méthode retourne l’UUID du fichier enregistré.
filestorage.update($uid, $data, $metadonnees, $mode = “from_content”)
Permet de mettre à jour un fichier sur le filestorage,
$data : contenu du fichier
$metadonnees : tableau contenant la liste des métadonnées ($cle => valeur)
$mode [”from_content”, “from_path”] :
—from_content : $data contient le contenu du fichier.
—from_temporary : $data l’uid d’un fichier enregistré sur le filesystem temporary.
—from_path : $data contient le chemin du fichier à enregistrer.
Cette méthode retourne l’UUID du fichier enregistré.
filestorage.get($uid)
Cette méthode retourne le contenu et les métadonnées d’un fichier en fonction de l’UUID passé en paramètre.
filestorage.delete($uid)
Cette méthode supprime un fichier en fonction de l’UUID passé en paramètre.
filestorage.create_temporary($data, $metadonnees, $mode = “from_content”)
Permet de créer un fichier sur le filestorage temporaire,
3.1. Manuel de référence
111
openMairie Framework Documentation, Version 4.5
$data : contenu du fichier
$metadonnees : tableau contenant la liste des métadonnées ($cle => valeur)
$mode [”from_content”, “from_path”] :
—from_content : utilisation normale de la méthode create(), $data contient le contenu du fichier.
—from_path : $data contient le chemin du fichier à enregistrer.
Cette méthode retourne l’UUID du fichier enregistré temporairement.
filestorage.get_temporary($uid)
Cette méthode retourne le contenu et les métadonnées d’un fichier enregistré temporairement en fonction
de l’UUID passé en paramètre.
filestorage.delete_temporary($uid)
Cette méthode supprime un fichier temporaire en fonction de l’UUID passé en paramètre.
L’appel aux méthodes “temporary” se fait sur une instance de filesystem défini dans le paramétrage. Ces méthodes
sont implémentés dans la classe de base contrairement aux autres méthodes, elle peuvent toutefois être surchargées
dans les classes de connecteurs spécifiques.
Description du connecteur depredacted
[core/om_filestorage_deprecated.class.php]
Cette classe est une classe de stockage spécifique aussi appelée plugin de stockage pour le système d’abstraction
de stockage des fichiers. Le principe de ce plugin est de stocker tous les fichiers à plat selon la méthode utilisée
avant la création du système de stockage. Ce plugin a été créé uniquement dans un soucis de garder la compatibilité
pour les applications existantes.
Description du connecteur filesystem
[core/om_filestorage_filesystem.class.php]
Cette classe est une classe de stockage spécifique aussi appelée plugin de stockage pour le système d’abstraction
de stockage des fichiers. Le principe de ce plugin est de stocker tous les fichiers en renommant le fichier avec
un UUID (identifiant unique) et en créant une arborescence à deux niveaux. Le premier est composé des deux
premiers caractères de l’UUID du fichier et le second niveau des quatre premiers caractères de l’UUID du fichier.
Un fichier avec l’extension .info permet de stocker les informations de base du fichier ainsi que des métadonnées.
Schéma du stockage :
/repertoire/de/stockage/25/252e/252ece72d4c0f88782d9fd6b99f43dfd
/repertoire/de/stockage/ :
/25/ : Le premier niveau des dossiers contenant les deux premiers caractères de l'uuid du fichier,
/252e/ : Le second niveau des dossiers contenant les 4 premiers caractères de l'uuid du fichier, l
252ece72d4c0f88782d9fd6b99f43dfd : Le fichier est stocké avec pour nom un uuid sans extension, la
252ece72d4c0f88782d9fd6b99f43dfd.info : Les fichiers .info sont là pour stocker les métadonnées de
# trois informations obligatoires (ces commentaires ne doivent pas apparaître dans le fichier .inf
filename="plop.pdf"
mimetype="application/pdf"
size="124541"
# métadonnées supplémentaires facultatives (ces commentaires ne doivent pas apparaître dans le fic
propriete1="valeur1"
propriete2="valeur2"
252ece72d4c0f88782d9fd6b99f43dfd_lock : Les fichiers _lock sont là pour servir de marqueur et indi
112
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
Exemple d’arborescence de stockage :
/repertoire/de/stockage/25/252e/252ece72d4c0f88782d9fd6b99f43dfd
/repertoire/de/stockage/25/252e/252ece72d4c0f88782d9fd6b99f43dfd.info
/repertoire/de/stockage/25/252e/252ece72d4c0f88782d9fd6b99f43dfd_lock
/repertoire/de/stockage/25/252e/252eacd35ef547dab12ded6b99f43dfd
/repertoire/de/stockage/25/252e/252eacd35ef547dab12ded6b99f43dfd.info
/repertoire/de/stockage/25/252e/252eacd35ef547dab12ded6b99f43dfd_lock
/repertoire/de/stockage/12/123a/123aacd35ef547dab12ded6b99f43dfd
/repertoire/de/stockage/12/123a/123aacd35ef547dab12ded6b99f43dfd.info
/repertoire/de/stockage/12/123a/123aacd35ef547dab12ded6b99f43dfd_lock
Méthode pour générer les uuid :
function generate_uuid($prefix = "") {
return md5(uniqid($prefix, true));
}
Description du connecteur filetransferprotocol
[core/om_filestorage_filetransferprotocol.class.php]
Ce fichier permet de déclarer la classe spécialisée pour stocker les fichiers sur un FTP (ce fichier n’existe pas il est
là à titre d’illustration de ce que le système est capable de faire).
Description du connecteur alfresco
[core/om_filestorage_alfresco.class.php]
Ce fichier permet de déclarer la classe spécialisée pour stocker les fichiers sur Alfresco (ce fichier n’existe pas il
est là à titre d’illustration de ce que le système est capable de faire).
3.1.15.3 Utilisation
Les méthodes de la classe d’abstraction sont désormais utilisées dans la classe upload et dans les widgets upload
file du formulaire.
Il est possible de paramétrer une liste de métadonnées d’un champ upload, certains champs de ce formulaire
pouvant contenir certaines informations à ajouter aux informations du fichier uploadé, il est necessaire de créer
le fichier lors de la validation du formulaire. Pour ce faire le fichier uploadé sera enregistré temporairement sur
le filestorage défini pour les fichiers temporaires puis enregistré sur le filestorage définitif lors de la validation du
formulaire.
Hors formulaire la méthode create peut être utlisée de 3 façons :
— en lui passant le chemin du fichier dans $data et avec le mode défini à “from_path”
— en lui passant le contenu du fichier dans $data (fonctionnement existant avant modification)
— en lui passant l’UUID d’un fichier temporaire avec le mode défini à “from_temporary”
Configuration du widget Upload
3.1.15.3.1.1 Contraintes Les contraintes sont à rajouter dans la classe métier de l’objet concerné, dans la
méthode setSelect.
Exemple de configuration de l’ajout de contraintes de contrôles de la taille maximale et de l’extension lors de
l’upload de fichier :
3.1. Manuel de référence
113
openMairie Framework Documentation, Version 4.5
<?php
$params = array(
"constraint" => array(
"size_max" => 2,
"extension" => ".pdf;.txt;.odt"
),
);
?>
La taille maximale est en mo et la liste des extensions est une chaîne de caractères.
3.1.15.3.1.2
Métadonnées Il y a des métadonnées globales et spécifiques.
Les globales sont définies dans [obj/om_db_form.class.php] dans l’attribut $metadata_global.
Exemple de configuration :
<?php
var $metadata_global = array(
"metadonne1" => "méthodeQuiRetourneLaBonneValeur1",
"metadonne2" => "méthodeQuiRetourneLaBonneValeur2",
);
?>
Les specifiques sont à ajouter en attribut de la classe métier de l’objet concerné.
Exemple de configuration de l’ajout de métadonnées :
<?php
var $metadata = array(
"champ" => array(
"metadonne1" => "méthodeQuiRetourneLaBonneValeur1",
"metadonne2" => "méthodeQuiRetourneLaBonneValeur2",
),
),
);
?>
Les clés de ces tableaux sont les noms des métadonnées, les valeurs associées sont les noms des méthodes qui
retournent les métadonnées.
Récupération du fichier
//
$file = $f->storage->get($fic);
Scripts permettant de visualiser / d’accéder au fichier
3.1.15.3.3.1
spg/file.php Le script permet de télécharger le fichier.
Le code pour composer le lien vers ce script est le suivant :
<?php
$file_download_link = "../spg/file.php?";
if ($obj != "" && $champ != "" && $id != "") {
$file_download_link .= "obj=".$obj."&amp;champ=".$champ."&amp;id=".$id;
} else {
$file_download_link .= "uid=".$fic;
}
114
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
?>
3.1.15.3.3.2
spg/voir.php Le script permet de visualiser le fichier.
<?php
$file_voir_link = "../spg/voir.php?";
if ($obj != "" && $champ != "" && $id != "") {
$file_voir_link .= "obj=".$obj."&amp;champ=".$champ."&amp;id=".$id;
} else {
$file_voir_link .= "uid=".$fic;
}
?>
3.1.16 Tests et Intégration Continue
3.1.16.1 Pré-requis
PHPUnit
https://phpunit.de
3.1.16.1.1.1
Installation
wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
sudo mv phpunit.phar /usr/local/bin/phpunit
Selenium Server
http://www.seleniumhq.org
3.1.16.1.2.1
Installation
wget http://selenium-release.storage.googleapis.com/2.45/selenium-server-standalone-2.45.0.jar
java -jar selenium-server-standalone-2.45.0.jar
Robot Framework
http://robotframework.org/
3.1.16.1.3.1
Installation
sudo apt-get install python python-pip
sudo pip install robotframework robotframework-selenium2library robotframework-selenium2screenshot
Avertissement : La librairie selenium2screenshots doit être modifiée pour fonctionner correctement.
vim /usr/local/lib/python2.7/dist-packages/Selenium2Screenshots/keywords.robot
:%s/u'
'/u'
'
count=1/g
3.1. Manuel de référence
115
openMairie Framework Documentation, Version 4.5
3.1.16.2 Fonctionnement et Utilisation
Pré-requis
Les tests doivent être joués dans un environnement balisé et reproductible à l’identique. Pour ce faire il est nécessaire avant chaque lancement de test, de dérouler une routine qui permet de mettre en place un environnement de
tests. Un script permet de dérouler cette routine de manière automatisée :
./om-tests -c initenv
Ce script permet de :
— supprimer la base de données
— créer la base de données
— initialiser la base de données grâce au script data/pgsql/install.sql
— redémarrer apache pour prendre les traductions en compte
— donner les droits à apache pour les dossiers dans lequel il peut écrire
— faire un lien symbolique vers le dossier de l’applicatif pour que les tests en question dans le dossier
/var/www/
Tous les tests
Lancer tous les tests avec initialisation de l’environnement de tests
./om-tests -c runall
Un seul TestSuite
Lancer un TestSuite avec initialisation de l’environnement de tests
./om-tests -c runone -t 000_testsuite_a_executer.robot
Lancer un TestSuite sans initialisation de l’environnement de tests
./om-tests -c runone -t 000_testsuite_a_executer.robot --noinit
3.1.16.3 Développement et bonnes pratiques
Il est prévu de consigner ici les bonnes pratiques et les consignes pour le développement des tests.
Documentation RobotFramework
http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html
Librairies :
— Base - BuiltIn : http://robotframework.org/robotframework/latest/libraries/BuiltIn.html
— Base - String : http://robotframework.org/robotframework/latest/libraries/String.html
— Base - Collections : http://robotframework.org/robotframework/latest/libraries/Collections.html
— Base - OperatingSystem : http://robotframework.org/robotframework/latest/libraries/OperatingSystem.html
— Selenium2 : http://rtomac.github.io/robotframework-selenium2library/doc/Selenium2Library.html
— Requests : http://bulkan.github.io/robotframework-requests/
— Selenium2Screenshots : https://robotframework-selenium2screenshots.readthedocs.org/en/latest/_downloads/keywords.html
116
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
Convention de nommage
— Un fichier de test par thème fonctionnel, une TestCase par fonctionnalité.
— Convention de nommage :
— des fichiers : mon_theme_fonctionnel.robot
— des testcase : Saisir un nouvel élément
Génération
Pré-requis : créer le dossier ‘gen’ dans ‘../tests/resources/core/gen/’.
Lancer une génération complète à chaque modification de la structure de la base de données permet de créer les
mots-clefs basiques de chaque table : “depuis le contexte”, “ajouter”, “modifier”, “supprimer” et “saisir”.
Bonnes pratiques
— Éviter d’utiliser les sélecteurs XPATH, les sélecteurs CSS ou par ID sont largement préférables.
3.1.17 Les scripts specifiques de l’application
Les méthodes spécifiques à l’application sont dans obj/utils.class.php qui héritent de la class
om_application.class.php d ‘openmairie
Vous pouvez surcharger les classes d’om_application.class.php dans utils.class.php
Exemple : surcharge de la méthode login() pour conserver le service d’un utilisateur en variable session dans
openCourrier.
Ces classes contiennent les méthodes utilisées par le framework mais qui peuvent vous aider à développer les
scripts complémentaires de votre application.
Les scripts complémentaires sont mis en répertoire app / et peuvent être créer pour :
— faire un traitement (remise à 0 d’un registre, archivage, export ....)
— faire un sous programme spécifique appellé par un formulaire (bible.php dans openCourrier)
— faire une recherche avec un affichage particulier
Les scripts javascripts sont mis dans le fichier app/js/script.js
Les images spécifiques sont stockées dans app/img
3.1.17.1 Réaliser un script complementaire
Il est proposé ici de vous montrer comment réaliser ce script complémentaire
Le script commence obligatoirement par un appel à la bibliothèque utils.class.php et la creation d un objet $f :
require_once "../obj/utils.class.php";
$f = new utils(NULL,
"courrier",
_("recherche"),
"ico_recherche.png",
"recherche");
Les parametres de l’objet sont les suivants :
flag : si flag= Null affichage complete
nonhtml : pas d affichage
htmlonly : tout les elements externes html avec body vide
3.1. Manuel de référence
117
openMairie Framework Documentation, Version 4.5
right : droit géré en om_droit - vide ne verifie pas
title : titre affiché
icon : icone affiché
help : aide affiché
utils.class.php fait la Verification si l utilisateur est authentifié et si l utilisateur a le droit (util.class surcharge
core/om_application.class.php qui contient les scripts de base du framework)
Si le paramétre “right” est vide vous pouvez faire appel aux méthodes suivantes
isAccredited() // a le droit ou pas
isAuthentified // si non authentifié, il est rejeté
$f->setRight($obj); // affecte un droit d acces
$f->isAuthorized(); //verification que l utilisateur accéde
// Affectation des variables en dehors du constructeur
$f->setTitle($ent);
$f->setIcon($ico);
$f->setHelp($obj);
$f->setFlag(NULL);
// affichage
$f->display();
Pour executer une requête dans un fichier sql vous devez stocker votre requête dans le répertoire
sql/type_de_sgbd/nom_de_requete.inc afin de préserver la portabilité de vos travaux sur d’autres sgbd :
// appel au fichier requête
include ("../sql/".$f->phptype."/courrier_scr.inc");
// lancement de la requete sql_courrier et test erreur
$res=$f->db->query($sql_courrier);
$f->isDatabaseError($res);
Pour parcourir les enregistrements vous utilisez les méthodes dbpear suivantes :
// du debut à la fin de la requête
while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
// j'affiche le champ courrier
echo $row['courrier'];
}
Pour ecrire dans la base vous pouvez utiliser les méthodes insert ou update mais vous pouvez utilisez la méthode
autoexecute spécifique à db pear :
requête sql
$sql = "INSERT INTO ... ";
$res2 = $f -> db -> query($sql);
$f->isDatabaseError($res2);
ou avec un tableau $valF
$obj = table
$valF[$obj]=$f-> db -> nextId(DB_PREFIXE.$obj);
$res1= $f-> db -> autoExecute(DB_PREFIXE.$obj,$valF,DB_AUTOQUERY_INSERT);
$f->isDatabaseError($res1);
118
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
Vous pouvez faire une Description du role de la page de la manière suivante
$description = _("Cette page vous permet de .. ");
$f->displayDescription($description);
Un message d erreur s’affiche suivant :
$class : qui est la classe css qui s’affiche sur l’element et qui peut être
“error” : pour le message erreur
“valid” : pour le message de validation
le code est le suivant
$message = _("Mot de passe actuel incorrect");
$f->displayMessage($class, $message);
Pour afficher un fieldset, le code est le suivant
echo "<fieldset class=\"cadre ui-corner-all ui-widget-content\">\n";
echo "\t<legend class=\"ui-corner-all ui-widget-content ui-state-active\">";
echo _("Courrier")."</legend>";
...
echo "</fieldset>
il peut être par défaut ouvert
echo "<fieldset class= ... collapsible\">\n";
ou il peut être fermé
echo "<fieldset ... startClosed\">\n";
Vous pouvez faire appel a des scripts js complementaires en utilisant la méthode
$f->addHTMLHeadJs(array("../js/formulairedyn.js", "../js/onglet.js"));
Pour la gestion des accents, il est conseillé de ne pas mettre d accent dans le code (utf8 au lieu de latin1-iso8859-1)
et de mettre les accents dans la traduction
Pour définir le chemin par défaut pour l’ ** upload de fichier**, il faut utiliser la méthode
$path=$f->getPathFolderTrs()
3.1.17.2 Exemple
Il est proposé de prendre l’exemple du traitement de la remise du registre a 0 dans openCourrier
// ENTETE NORMALISEE
/**
* Cette page permet de remettre a 0 le registre
*
* @package openmairie_exemple
* @version SVN : $Id: xxxx.php 311 2010-12-06 11:43:36 xxxxx $
*/
// CREATION DE L' OBJET $f
require_once "../obj/utils.class.php";
3.1. Manuel de référence
119
openMairie Framework Documentation, Version 4.5
$f = new utils(NULL, "traitement", _("remise a 0 du registre"), "ico_registre.png", "recherche");
// get
if (isset ($_GET['validation'])){
$validation=$_GET['validation'];
}else{
$validation=0;
}
/**
* Description de la page
*/
$description = _("Cette page vous permet de remettre a 0 le numero de registre ".
"Ce traitement est a faire en debut d annee.");
$f->displayDescription($description);
// TEST VALIDATION
// SI = 0 affichage du numero de registre
// SI = 1 mise à 0 du registre et affichage du résultat
if($validation==0){
$validation=1;
// REQUETE DU REGISTRE
$sql= "select id from registre_seq" ;
$res1=$f->db->getOne($sql);
$f->isDatabaseError($res1);
// AFFICHAGE DANS UN FIELDSET
echo "<fieldset class=\"cadre ui-corner-all ui-widget-content\">\n";
echo "\t<legend class=\"ui-corner-all ui-widget-content ui-state-active\">";
echo _("Registre ")."</legend>";
if ($res1!=0){
echo "<br>"._("le dernier no du registre est")." : &nbsp;&nbsp;".$res1."&nbsp;&nbsp;";
}else{
echo "<br>"._("vous avez deja fait une remise a 0")."<br>";
}
echo "<form method=\"POST\" action=\"num_registre.php?validation=".
$validation."\" name=f1>";
echo "</fieldset>";
// BOUTON DE VALIDATION
echo "\t<div class=\"formControls\">";
echo "<input type='submit' value='"._("remise a 0 du registre").
"&nbsp;' >";
echo "</div>";
echo "</form>";
}else { // validation=1
// VALORISATION DE $valF
$valF=array();
$valF['id']=0;
// REQUETE MISE A JOUR avec autoExecute
$res2= $f->db->autoExecute("registre_seq",$valF,DB_AUTOQUERY_UPDATE);
120
Chapitre 3. Manuel de référence
openMairie Framework Documentation, Version 4.5
$f->isDatabaseError($res2);
// AFFICHAGE DU RESULTAT AVEC UN FIELDSET
echo "<fieldset class=\"cadre ui-corner-all ui-widget-content\">\n";
echo "\t<legend class=\"ui-corner-all ui-widget-content ui-state-active\">";
echo _("Registre ")."</legend>";
echo "<center><b>"._("remise a 0 du registre reussie")."</b></center>";
echo "</fieldset>";
}//validation
Notes
_(“Registre ”) : _(“texte”) permet l’utilisation de poedit pour la traduction de texte
class=”cadre ui-corner-all ui-widget-content” : suivant css de jquery
3.1. Manuel de référence
121
openMairie Framework Documentation, Version 4.5
122
Chapitre 3. Manuel de référence
CHAPITRE 4
Historique & Mises à niveau
4.1 Historique & Mises à niveau
4.1.1 La version 4.5
4.1.1.1 Les nouveautés de la version 4.5
...
4.1.1.2 Mettre à niveau depuis openMairie 4.4 vers 4.5
— Remplacer tous les appels au script scr/requeteur.php par des appels au script scr/reqmo.php.
Le code du module ‘Reqmo’ a été factorisé et a entrainé la suppression du script en question.
4.1.2 La version 4.4
4.1.2.1 Les nouveautés de la version 4.4
...
4.1.2.2 Mettre à niveau depuis openMairie 4.3 vers 4.4
Cette procédure permet de mettre à niveau une application utilisant openMairie version 4.3.0 vers openMairie
4.4.0.
Pour conserver une application fonctionnelle tout au long de la mise à niveau, il est vivement conseillé de :
— suivre les étapes de cette procédure dans l’ordre ;
— ne pas utiliser le générateur lorsque ce n’est pas indiqué.
Consultez la section sur les erreurs connues si des erreurs persistent après la mise à niveau.
Étape 1 : mettre à jour la base de données
4.1.2.2.1.1 La structure La structure de la base de données d’openMairie a changée sensiblement depuis
la version 4.3.0. Pour mettre à jour la base de données depuis cette version il faudra exécuter le script SQL
ver_4.4.0.sql.
Pour PostgresSQL :
/data/pgsql/ver_4.4.0.sql
123
openMairie Framework Documentation, Version 4.5
Important : Le support de mysql à été abandonné.
Régénérer les fichiers via le générateur.
Vérifier les surcharges des objets : obj/ et sql/
Étape 2 : mise à jour du menu
Suite à l’ajout d’une table contenant les logos et une autre contenant les requêtes, les entrées correspondantes dans
le menu devraient êtres ajoutées.
Étape 3 : vérification des requêtes et logos
Vérifier que les logos et requêtes sont dans les bons état/lettres type.
Étape 4 : système de stockage des fichiers
Le système de stockage de fichier ayant été mis à jour, le système utilisé conserve la compatibilité avec les fichiers
existant.
Les erreurs connues
4.1.3 La version 4.3
4.1.3.1 Les nouveautés de la version 4.3
...
4.1.3.2 Mettre à niveau depuis openMairie 4.2 vers 4.3
Cette procédure permet de mettre à niveau une application utilisant openMairie version 4.2.0 vers openMairie
4.3.0.
Pour conserver une application fonctionnelle tout au long de la mise à niveau, il est vivement conseillé de :
— suivre les étapes de cette procédure dans l’ordre ;
— ne pas utiliser le générateur lorsque ce n’est pas indiqué.
Consultez la section sur les erreurs connues si des erreurs persistent après la mise à niveau.
Étape 1 : mettre à jour les surcharges du framework
4.1.3.2.1.1
Classe application Supprimer l’utilisation de l’attribut :
<?php
var $permission_if_right_does_not_exist = true;
?>
S’il est utilisé dans une surchage, il doit être remplacée par :
124
Chapitre 4. Historique & Mises à niveau
openMairie Framework Documentation, Version 4.5
<?php
$this->config['permission_if_right_does_not_exist'];
?>
Les méthodes surchargés de la classe om_application doivent être mises à jour avec leur nouvelle implémentation.
4.1.3.2.1.2 Classe dbForm Les méthodes surchargés de la classe dbForm doivent être mises à jour avec leur
nouvelle implémentation.
4.1.3.2.1.3 Classe formulaire Les méthodes surchargés de la classe formulaire doivent être mises à
jour avec leur nouvelle implémentation.
4.1.3.2.1.4 Classe table Les méthodes surchargés de la classe table doivent être mises à jour avec leur
nouvelle implémentation.
Supprimer l’utilisation de la méthode :
<?php
function countHrefColumns($href = array())
?>
Si elle est utilisée dans une surchage, elle doit être remplacée par :
<?php
function countActions($actions)
?>
Étape 2 : mettre à jour la base de données
4.1.3.2.2.1 La structure La structure de la base de données d’openMairie a changée sensiblement depuis
la version 4.2.0. Pour mettre à jour la base de données depuis cette version il faudra exécuter le script SQL
ver_4.3.0.sql.
Pour MySQL :
/data/mysql/ver_4.3.0.sql
Pour PostgresSQL :
/data/pgsql/ver_4.3.0.sql
4.1.3.2.2.2 Les tables métier Le générateur gère maintenant plusieurs contraintes :
— PRIMARY KEY
— FOREIGN KEY
— UNIQUE
— NOT NULL
En fonction de ces contraintes les fichiers de l’application sont générés différemment par rapport à openMairie
version 4.2.0.
4.1. Historique & Mises à niveau
125
openMairie Framework Documentation, Version 4.5
4.1.3.2.2.3
PRIMARY KEY Ajouter la contrainte SQL PRIMARY KEY.
Le générateur peut maintenant utiliser les clés primaires. Pour créer le champ identifiant, il faudra utiliser la
contrainte PRIMARY KEY à la place des noms de table en tant que nom de colonne.
4.1.3.2.2.4
FOREIGN KEY (PostgresSQL) Ajouter la contrainte SQL FOREING KEY.
Le générateur gère également les clés étrangères des bases PostgresSQL. Pour créer des références, il faudra
utiliser la contrainte FOREIGN KEY à la place des noms de table étrangères en tant que nom de colonne.
4.1.3.2.2.5 UNIQUE
— Ajouter la contrainte SQL UNIQUE.
— Mettre a jour les fichiers de surcharge du répertoire obj/.
La contrainte UNIQUE permet maintenant de gérer automatiquement les champs uniques. Il n’est plus nécessaire
de surcharger la méthode verifier des modèles pour gérer ce type de champ. Il faudra nettoyer les surcharges
de verifier en supprimant la vérification manuelle des champs requis et les remplacer par des contraintes
UNIQUE dans la base de données.
4.1.3.2.2.6 NOT NULL
— Ajouter la contrainte NOT NULL aux champs requis.
— Supprimer la clause DEFAULT des champs requis.
— Supprimer la contrainte NOT NULL des champs non-requis ou ajouter la clause DEFAULT en
fonction du besoin.
— Mettre a jour les fichiers de surcharge du répertoire obj/.
— Générer.
Toutes les colonnes NOT NULL généreront des champs requis. Des champs qui n’étaient pas requis dans la version
4.2.0 peuvent donc l’être dans la version 4.3.0 après une génération. Il faut donc supprimer la contrainte NOT
NULL des colonnes qui ne sont pas réellement requises par l’application ou ajouter une valeur par defaut avec la
clause DEFAULT.
Concernant les champs requis par l’application. Il n’est plus nécessaire de surcharger la méthode verifier des
modèles pour gérer ce type de champ. Il faudra nettoyer les surcharges de verifier en supprimant la vérification
manuelle des champs requis et les remplacer par des contraintes NOT NULL sans clause DEFAULT dans la base
de données.
Important : Vous pouvez générer à nouveau l’application à partir d’ici.
Étape 3 : mettre à jour les fichiers de surcharge du répertoire sql/
4.1.3.2.3.1
gen/sql/.
Alias des tables étrangères Prefixer le nom des colonnes étrangères par l’alias généré dans
Le générateur peut donner à une table étrangère un alias unique. Cela permet d’effectuer plusieurs jointures sur une
même table sans avoir d’erreur d’ambiguïté avec les nom des colonnes. Pour cela, dans les fichiers du répertoire
sql/ contenant plusieurs référence vers une même table étrangère, les noms des colonnes provenant de ces tables
étrangères devront être préfixés par l’alias adéquat. Cet alias apparaît dans la définition de la variable $table
dans les fichiers générés du répertoire gen/sql/.
4.1.3.2.3.2 La clause ORDER BY Supprimer les surcharges de la variable $tri = ‘ORDER BY libelle’, ce
tri est généré par défaut.
Le générateur crée maintenant une clause SQL ORDER BY pour chaque modèle. Le tri par défaut se fait sur
une éventuelle colonne libelle. Si elle n’existe pas la deuxième colonne de la table est utilisée, sinon la clé
primaire.
Note : Dans le cas où la deuxième colonne d’une table est utilisée comme libellé, si cette colonne est une clé
étrangère, alors le tri se fera sur le libellé de la table étrangère.
126
Chapitre 4. Historique & Mises à niveau
openMairie Framework Documentation, Version 4.5
4.1.3.2.3.3
Les actions du tableau
4.1.3.2.3.4 Les actions d’openMairie
— Remplacer $href[0] par $tab_actions[’corner’][’ajouter’].
— Remplacer $href[1] par $tab_actions[’left’][’modifier’].
— Remplacer $href[2] par $tab_actions[’left’][’supprimer’].
Pour surcharger l’action ajouter, il faut maintenant surcharger $tab_actions[’corner’][’ajouter’]
et non plus $href[0] :
<?php
$tab_actions['corner']['ajouter'] =
array('lien' => 'form.php?obj='.$obj.'&amp;action=0',
'id' => '&amp;advs_id='.$advs_id.'&amp;tricol='.$tricol.'&amp;valide='.$valide.'&amp;ret
'lib' => '<span class="om-icon om-icon-16 om-icon-fix add-16" title="'._('Ajouter').'">'
'rights' => array('list' => array($obj, $obj.'_ajouter'), 'operator' => 'OR'),
'ordre' => 10,);
?>
Pour surcharger l’action modifier, il faut maintenant surcharger $tab_actions[’left’][’modifier’]
et non plus $href[1] :
<?php
$tab_actions['left']['modifier'] =
array('lien' => 'form.php?obj='.$obj.'&amp;action=1'.'&amp;idx=',
'id' => '&amp;premier='.$premier.'&amp;advs_id='.$advs_id.'&amp;recherche='.$recherche1.
'lib' => '<span class="om-icon om-icon-16 om-icon-fix edit-16" title="'._('Modifier').'"
'rights' => array('list' => array($obj, $obj.'_modifier'), 'operator' => 'OR'),
'ordre' => 20,);
?>
Pour surcharger l’action de contenu, il faut maintenant surcharger $tab_actions[’content’] et non plus
$href[1] :
<?php
$tab_actions['content'] = $tab_actions['left']['modifier'];
?>
Pour surcharger l’action supprimer, il faut maintenant surcharger $tab_actions[’left’][’supprimer’]
et non plus $href[2] :
<?php
$tab_actions['left']['supprimer'] =
array('lien' => 'form.php?obj='.$obj.'&amp;action=2&amp;idx=',
'id' => '&amp;premier='.$premier.'&amp;advs_id='.$advs_id.'&amp;recherche='.$recherche1.
'lib' => '<span class="om-icon om-icon-16 om-icon-fix delete-16" title="'._('Supprimer')
'rights' => array('list' => array($obj, $obj.'_supprimer'), 'operator' => 'OR'),
'ordre' => 30,);
?>
4.1. Historique & Mises à niveau
127
openMairie Framework Documentation, Version 4.5
4.1.3.2.3.5
Les actions personnalisées
Redéfinir les actions avec la nouvelle manière.
Les actions personnalisées doivent être défini selon la nouvelle manière. Exemple :
<?php
$tab_actions['left']['edition'] = array(
'lien' => '../pdf/pdfetat.php?obj=om_collectivite&amp;idx=',
'id' => '',
'lib' => '<span class="om-icon om-icon-16 om-icon-fix pdf-16" title="'._('Edition').'">'._('Ed
'ajax' => false,
'ordre' => 21,
);
?>
4.1.3.2.3.6 Définition de l’action La première clé de $tab_actions permet choisir la position d’affichage :
— corner pour les actions en coin ;
— left pour les actions de gauche.
La seconde clé de $tab_actions permet de définir la nouvelle action. Cette clé doit être différente de :
ajouter, consulter, modifier et supprimer.
Les clés lien, id et lib s’utilise de la même manière qu’avant.
4.1.3.2.3.7 Définition du mode d’affichage en sous-tableau
être affichée en ajax ou non dans les sous-tableaux :
— true, l’action utilisera la fonction ajaxIt() ;
— false, l’action n’utilisera pas la fonction ajaxIt().
La clé ajax permet d’indiquer si l’action doit
4.1.3.2.3.8 Définition de l’ordre d’affichage La clé ordre permet de déterminer l’odre d’affichage par rapport aux autres actions.
Chaque action dispose d’une valeur numérique permettant de définir sa place au sein d’une position. L’action
numéro 1 s’affichera en premier, l’action numéro 10 s’affichera après les actions de numéro inférieur, etc.
Ordre des actions par défaut d’openMairie :
— ajouter à pour ordre 10 dans la position corner ;
— consulter à pour ordre 10 dans la position left.
Si la position corner est sélectionnée :
— 9, l’action s’affichera avant l’action ajouter ;
— 11, l’action s’affichera après l’action ajouter.
Si la position left est sélectionnée :
— 9, l’action s’affichera avant l’action consulter ;
— 11, l’action s’affichera après l’action consulter.
4.1.3.2.3.9 Définition des droits d’affichage La clé rights permet de définir le ou les droits nécessaire à
l’utilisateur pour visualiser cette action. Cette clé est optionnelle. Si rights n’existe pas, tous les utilisateurs
pourront visualiser cette action s’ils peuvent visualiser le tableau correspondant.
La clé list permet de définir le tableau des droits nécessaire.
La clé operator permet de définir l’opérateur utilisé pour pour vérifier les droits de la liste list :
— OR, l’utilisateur doit avoir au moins un droit ;
— AND, l’utilisateur doit avoir tous les droits.
128
Chapitre 4. Historique & Mises à niveau
openMairie Framework Documentation, Version 4.5
Les erreurs connues
4.1.4 La version 4.2
4.1.4.1 Les nouveautés de la version 4.2
...
4.1.4.2 Mettre à niveau depuis openMairie 4.1 vers 4.2
La version 4.2.0 du framework prend en charge plus de fonctionnalités et donne toutes possibilité de surcharge
aux applications :
— surcharge des objets généres par le generateur ;
— surcharge des composants de base openMairie stocké dans core ;
— surcharge de la présentation de base (dans img et css), des thèmes (om-theme) dans app/css app/img ;
— surcharge du javascript de base app/js/script.js.
EXTERNALS.txt
Vider les 9 repertoires concernés avant de lancer externals.
Appliquer le fichier EXTERNALS.txt d’openmairie :
core
spg
scr
lib
css
js
img
pdf
php
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/core/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/spg/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/scr/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/lib/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/css/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/js/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/img/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/pdf/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/php/
om-theme svn://scm.adullact.net/svnroot/openmairie/externals/om-theme/kinosura/tags/1.0.0
Deux répertoires sont remarquables :
— core contient maintenant la librairie openMairie (4.2.0) ;
— om_theme est le theme de l’application.
Les dossiers suivant sont spécifiques à l’application elle même :
— app, scripts spécifiques de l’application, noter dans specific.txt les spécificités ;
— data, scripts SQL d’initialisation de la base de données ;
— dyn, paramétrage de l application ;
— gen, fichiers générés de l’application ;
— obj, surcharge des objets générés dans gen/obj/, surcharge du core d’openMairie om_dbformdyn,
om_formulaire (4.2.0), om_application (util) ;
— sql, requêtes SQL surchargeant les fichiers de gen/sql ;
— tmp, fichiers temporaires de l’application (ajouter les droits d’écriture pour le serveur web) ;
— trs, fichiers uploadés par l’application (ajouter les droits d’écriture pour le serveur web.
Regenerer les tables avec genfull.php
Ajouter les droits d’écriture à www-data dans gen :
$ sudo chmod -R 777 gen
4.1. Historique & Mises à niveau
129
openMairie Framework Documentation, Version 4.5
Modifier les paramètres dyn
locales.inc.php (charset) include.inc.php (core)
Dans obj/
Ajouter om_table.class.php, om_dbform.class.php, et om_formulaire.class.php.
Evolution om_sig_point vers om_sig_map
om_sig_map est le nouvel outil SIG d’openMairie.
Ne concerne que PostgresSQL.
Executer le script data/pgsql/ver4.2.0.sql.
Regénérer les 4 nouvelles tables. Ajouter les scripts spécifiques dans /obj et /sql/pgsql.
130
Chapitre 4. Historique & Mises à niveau
CHAPITRE 5
Règles
5.1 Règles
5.1.1 Convention de codage
La convention de codage openMairie s’applique à tout le code qui fait partie de la distribution officielle d’openMairie ainsi qu’aux applicatifs de la gamme. La convention de codage permet de conserver un code consistant et
de le rendre lisible et maintenable facilement par les développeurs openMairie.
5.1.1.1 L’indentation du code
Pour améliorer la lisibilité, il faut utiliser une indentation de 4 espaces et non pas des tabulations. En effet, les
éditeurs de texte interprètent différemment les tabulations alors que les espaces sont tous interprétés de la même
façon. De plus lors de commit, les historiques des gestionnaires de versions (CVS ou SVN) sont faussés par ces
caractères.
Il est recommandé que la longueur des lignes ne dépasse pas 75 à 85 caractères.
5.1.1.2 Encodage des fichiers
L’encodage des fichiers doit être UTF-8.
5.1.1.3 Tags dans le code PHP
Il faut utiliser toujours < ?php ?> pour délimiter du code PHP, et non la version abrégée < ? ?>. Cela est la méthode
la plus portable pour inclure du code PHP sur des systèmes d’exploitations disposant de configurations différentes.
5.1.1.4 HTML Valide et W3C
Le Code HTML rendu doit être validé et correspondre aux standards W3C.
5.1.1.5 Les commentaires dans le code
Tous les fichiers PHP doivent avoir un entête de ce style
<?php
/**
* Courte description du fichier
*
* Description plus détaillée du fichier (si besoin en est)...
*
131
openMairie Framework Documentation, Version 4.5
* @package openmairie
* @version SVN : $Id$
*/
?>
5.1.1.6 Images
Les fichiers images ajoutés dans les applications openMairie doivent être au format PNG (Portable Network Graphics). Ce format permet d’obtenir des images de qualité avec des propriétés de transparence.
5.1.2 Versionnage
5.1.2.1 Convention de numérotation des versions
Cette convention concerne le framework et les applications. Il est convenu de numéroter les versions sur 3 chiffres
séparés par des points.
exemple : openMairie 4.0.0
Le premier chiffre représente une version majeure
Le deuxième chiffre est une évolution mineure
Le troisième chiffre est une correction de bug
Les versions beta sont indiqués en fin de numérotation et ne sont jamais maintenues
openmairie_exemple_4.0.0beta
Seule la dernière version opérationnelle est maintenu
Exemple de versionning (complément de la réunion “dev-openMairie” du 13 juin 2012) :
4.2.0alpha1
4.2.0beta1
4.2.0rc1
4.2.0
première
première
première
première
version
version
version
version
non testée
testée par le développeur
testée en production (1 site)
stable généralisable
5.1.3 Documentation
Ce paragraphe vise à regrouper les bonnes pratiques qui permettent à toute la communauté openMairie de travailler sur les mêmes bases et avec les mêmes références concernant les outils de rédaction et de publication de
documentation afin de faciliter la contribution et d’obtenir un rendu homogène.
Voici les postulats :
— chaque logiciel/application possède une seule documentation Sphinx qui contient un manuel d’utilisation
et un guide technique biens séparés
— le code source de la documentation doit être déposé dans un dépôt GIT sur github.com
— la génération de la documentation est gérée de manière automatique par readthedocs.org
— docs.openmairie.org est l’unique interface d’accès pour toutes les documentations
— un lien dans le footer de chaque application permet d’accéder à la version de l’application du manuel
d’utilisateur sur le site docs.openmairie.org
5.1.4 Publication
5.1.4.1 La documentation
Lorsqu’il y a une nouvelle version de l’application et que la version majeure ou mineure est incrémentée, il faut
ajouter une nouvelle version de la documentation aussi.
132
Chapitre 5. Règles
openMairie Framework Documentation, Version 4.5
Voici la liste des étapes à reproduire :
Sur GitHub :
— ajouter une nouvelle branch en reprenant la version majeure et mineure pour la nommer ;
— dans le readme de la documentation, modifier les versions ;
— dans le fichier source/conf.py, modifier les variables project, copyright, version et release ;
— dans le fichier source/index.rst, modifier le titre de la documentation ;
— dans settings, modifier la branche par défaut pour mettre la nouvelle.
Sur readthedoc :
— dans le menu admin, puis version, changer la version par défaut ;
— désactiver la version stable et latest.
Depuis l’URL docs.openmairie.org faire un “refresh” pour mettre à jour la page de présentation des documentations : http://docs.openmairie.org/?refresh
Dans l’application, modifier le lien dans le fichier doc/index.php pour pointer vers la nouvelle URL.
5.1. Règles
133
openMairie Framework Documentation, Version 4.5
134
Chapitre 5. Règles
CHAPITRE 6
Outils
6.1 Outils
Cette section vise à rassembler des liens, des informations, des tutoriels sur des outils qui ne font pas partie du
Framework mais qui sont utilisés par la communauté :
6.1.1 Apache Subversion (SVN)
Site officiel du projet SVN
6.1.1.1 Pré-requis
Installer subversion : http://subversion.apache.org/packages.html
Il existe également des outils graphiques comme TortoiseSVN (Windows).
6.1.1.2 L’arborescence
Voici l’arborescence standard d’un projet versionné sur un SVN :
/trunk/
/tags/
/branches/
— trunk/ : la version en cours de développement.
— tags/ : les différentes versions publiées. Les dossiers dans tags/ sont des copies du dossier trunk/ a un instant
précis. Ils permettent de fixer une version pour la publier. Il est interdit d’effectuer une modification dans
un de ces dossiers, la bonne méthode étant de faire la modification dans le trunk/ et de faire une nouvelle
version dans le dossier tags/.
— branches/ : ...
6.1.1.3 Les règles d’or
— Ne jamais commiter dans un tag.
— Ne jamais commiter sans message de commit.
— Ne jamais tagger une version qui contient des externals vers un ‘trunk’.
135
openMairie Framework Documentation, Version 4.5
6.1.1.4 Les commandes basiques à connaître
Récupérer une copie locale :
svn co svn+ssh://nom-du-développeur@scm.adullact.net/openmairie/openmairie_exemple/trunk
openmairie_exemple
Mettre à jour sa copie locale :
svn up
Voir l’état de sa copie locale :
svn st
Voir la différence entre sa copie locale et le dépôt :
svn diff
svn ci
6.1.1.5 Externals
C’est une propriété sur le dépôt SVN permettant d’importer du code provenant d’un dépôt différent.
Le fichier EXTERNALS.txt :
#
# created by: svn propset svn:externals -F ./EXTERNALS.txt .
#
core
spg
scr
lib
css
js
img
pdf
php
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/core/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/spg/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/scr/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/lib/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/css/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/js/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/img/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/pdf/
svn://scm.adullact.net/svnroot/openmairie/openmairie_exemple/tags/4.2.0/php/
om-theme svn://scm.adullact.net/svnroot/openmairie/externals/om-theme/kinosura/tags/1.0.0
Appliquer les propriétés externals :
svn propset svn:externals -F ./EXTERNALS.txt .
svn up
svn ci
attention le repertoire ne doit pas etre existant (copie de travail verouillée)
6.1.1.6 Keywords
6.1.1.7 Les clients graphiques
Il est recommandé de savoir utiliser et d’utiliser subversion en ligne de commande mais il existe quelques clients
graphiques qui permettent de réaliser certaines opérations d’une manière plus conviviale.
— Meld
— TortoiseSVN
— ...
136
Chapitre 6. Outils
openMairie Framework Documentation, Version 4.5
6.1.1.8 Tutoriaux
Importer un nouveau projet
Un nouveau projet est une nouvelle application qui se base sur la dernière version taggée d’openmairie_exemple.
Ce tutorial contient certains pré-requis comme la création du projet sur la forge, le fait d’avoir un utilisateur avec
les droits corrects sur le projet, le fait d’avoir consulter la dernière version taggée d’openmairie_exemple
On se positionne dans la dossier tmp pour récupérer la dernière version d’openmairie_exemple
cd /tmp
svn export --ignore-externals svn://scm.adullact.net/svnroot/openmairie/
openmairie_exemple/tags/<DERNIERE_VERSION_OPENMAIRIE_EXEMPLE>/ openexemple
On cré l’arborescence standard sur le dépôt (si elle n’existe pas déjà)
svn mkdir svn+ssh://<NOM_DU_DEVELOPPEUR>@scm.adullact.net/scmrepos/svn/<NOUVEAU_PROJET>/trunk
svn mkdir svn+ssh://<NOM_DU_DEVELOPPEUR>@scm.adullact.net/scmrepos/svn/<NOUVEAU_PROJET>/tags
svn mkdir svn+ssh://<NOM_DU_DEVELOPPEUR>@scm.adullact.net/scmrepos/svn/<NOUVEAU_PROJET>/branches
On se positionne dans le dossier précédemment importé pour supprimer les répertoires à recupérer en EXTERNALS depuis le framework
cd openexemple
rm -rf core/ css/ img/ js/ lib/ pdf/ php/ scr/ spg/ tests/resources/core/
On se positionne dans le dossier précédemment importé pour importer sur le dépôt son contenu
cd openexemple
svn import . svn+ssh://<NOM_DU_DEVELOPPEUR>@scm.adullact.net/svnroot/<NOUVEAU_PROJET>/trunk
On se positionne dans son dossier de développement pour créer la copie locale du projet
cd ~/public_html/
svn co svn+ssh://<NOM_DU_DEVELOPPEUR>@scm.adullact.net/scmrepos/svn/<NOUVEAU_PROJET>/trunk
<NOUVEAU_PROJET>
On se positionne dans le dossier php de l’application pour appliquer les externals
cd <NOUVEAU_PROJET>
svn propset svn:externals -F ./EXTERNALS.txt .
svn up
svn ci
Publier une nouvelle version
Ce tutorial contient certains pré-requis comme le fait d’avoir un utilisateur avec les droits corrects sur le projet ou
connaître comment incrémenter le numéro de version de l’application à publier.
Avant de publier une application, il faut vérifier que l’EXTERNALS de la librairie openMairie ne pointe pas vers
le ‘trunk’. Pour cela
less php/EXTERNALS.txt
#
# created by: svn propset svn:externals -F ./EXTERNALS.txt .
#
openmairie svn://scm.adullact.net/svnroot/openmairie/openmairie/trunk/
fpdf svn://scm.adullact.net/svnroot/openmairie/externals/fpdf/tags/1.6-min/
pear http://svn.php.net/repository/pear/pear-core/tags/PEAR-1.9.1/
db http://svn.php.net/repository/pear/packages/DB/tags/RELEASE_1_7_13/
6.1. Outils
137
openMairie Framework Documentation, Version 4.5
Ici on voit que openmairie pointe vers le ‘trunk’. Nous devons d’abord publier la librairie
svn cp svn+ssh://<NOM_DU_DEVELOPPEUR>@scm.adullact.net/openmairie/openmairie/trunk
svn+ssh://<NOM_DU_DEVELOPPEUR>@scm.adullact.net/openmairie/openmairie/tags/<NOUVELLE_VERSIO
Le message pourra être : Tag openmairie <NOUVELLE_VERSION>.
Ensuite il faut changer les EXTERNALS.txt. On remplace dans le fichier php/EXTERNALS.txt, le trunk par la
nouvelle version
vim php/EXTERNALS.txt
#
# created by: svn propset svn:externals -F ./EXTERNALS.txt .
#
openmairie svn://scm.adullact.net/svnroot/openmairie/openmairie/tags/<NOUVELLE_VERSION>/
fpdf svn://scm.adullact.net/svnroot/openmairie/externals/fpdf/tags/1.6-min/
pear http://svn.php.net/repository/pear/pear-core/tags/PEAR-1.9.1/
db http://svn.php.net/repository/pear/packages/DB/tags/RELEASE_1_7_13/
Ensuite on applique le nouveau propset externals une fois placé dans le dossier php (Attention de ne pas oublier
le ”.” dans la commande svn propset)
cd php/
svn propset svn:externals -F ./EXTERNALS.txt .
svn up
Ici en faisant un svn info sur le dossier openmairie, nous devons obtenir une URL comme ceci
svn info openmairie/
URL : svn://scm.adullact.net/svnroot/openmairie/openmairie/tags/<NOUVELLE_VERSION>
Si tout est ok nous pouvons valider nos modifications puis passer à la publication de l’application
svn ci
Ici on fait une copie du ‘trunk’ vers le dossier ‘tags’ de l’application openmairie_exemple
svn cp svn+ssh://<NOM_DU_DEVELOPPEUR>@scm.adullact.net/openmairie/openmairie_exemple/trunk
svn+ssh://<NOM_DU_DEVELOPPEUR>@scm.adullact.net/openmairie/openmairie_exemple/tags/<NOUVELL
svn utilisation
il est propose dans ce chapitre de lister quelques commandes utiles en cas de conflit testées en svn
type de fichier
A Ajout de
M éléments
? éléments
U pour les
C pour les
?D fichier
nouveaux éléments à la version locale
modifiés localement (par rapport à la version de SVN) ;
inconnus de SVN (non présents dans la version de SVN) ;
éléments modifiés dans SVN (par rapport à la version locale) ;
éléments différents entre les versions locale et SVN, et qui posent un conflit à règler
supprimés (a verifier)
revert et diff :
svn revert nomfichier
svn diff nomdossier ou nomfichier
// remet dans le dernier etat du svn (soit pas del soi
// affiche les modifications r/r au dernier svn up
resolution de conflit
138
Chapitre 6. Outils
openMairie Framework Documentation, Version 4.5
svn st
!
C openmairie_exemple/trunk/authors.txt
>
local édition, suppression entrante sur mis à jour
svn revert openmairie_exemple/trunk/authors.txt
'openmairie_exemple/trunk/authors.txt' réinitialisé
deplacer un dossier sur le svn -> commande mv
Exemple : on a créé trunk/trunk/dossiers_source
D'abord on renomme le premier dossier trunk en dossier branches
> svn mv svn+ssh://fraynaud@scm.adullact.net/scmrepos/svn/openboisson/trunk
svn+ssh://fraynaud@scm.adullact.net/scmrepos/svn/openboisson/branches
cela fait branches/trunk/dossiers_souce
Ensuite on déplace le dossier trunk qui se trouve maintenant dans branches à la racine du dépôt
> svn mv svn+ssh://fraynaud@scm.adullact.net/scmrepos/svn/openboisson/branches/trunk
svn+ssh://fraynaud@scm.adullact.net/scmrepos/svn/openboisson/trunk
cela fait trunk/dossiers_source
creer - deplacer (autre exemple) - detruire un repertoire sur svn
creer un dossier documentation sur svn depuis une copie loacle
svn import documentation svn+ssh://fraynaud@scm.adullact.net/scmrepos/svn/opencimetiere/documentat
renomer = renommer sur le svn trunk en temp
svn rename svn+ssh://fraynaud@scm.adullact.net/scmrepos/svn/opencimetiere/documentation/trunk
svn+ssh://fraynaud@scm.adullact.net/scmrepos/svn/opencimetiere/documentation/temp
move = deplacer le dossier temp/trunk vers trunk
svn mv svn+ssh://fraynaud@scm.adullact.net/scmrepos/svn/opencimetiere/documentation/temp/trunk
svn+ssh://fraynaud@scm.adullact.net/scmrepos/svn/opencimetiere/documentation/trunk
delete detruire le repertoire temp
svn del svn+ssh://fraynaud@scm.adullact.net/scmrepos/svn/opencimetiere/documentation/temp
Creation d une nouvelle version
Copie en tag de la version
svn cp
svn+ssh://fraynaud@scm.adullact.net/scmrepos/svn/openboisson/trunk
svn+ssh://fraynaud@scm.adullact.net/scmrepos/svn/openboisson/tags/1.0.0beta
export dans un repertoire local openmairie_debitboisson_1.0.0beta sans les repertoires .svn
svn export svn+ssh://fraynaud@scm.adullact.net/scmrepos/svn/openboisson/tags/1.0.0beta
openmairie_debitboisson_1.0.0beta
6.1.2 Concurrent versions system (CVS)
Site officiel du projet CVS
Il est noté dans ce chapitre les commandes de bases de cvs à titre d’indicatif. Les développeurs d openMairie
souhaitent s’orienter sur SVN qui est plus facile dans la gestion des répertoires (notament la suppression) et dans
la mise en place de composants externes (externals)
6.1. Outils
139
openMairie Framework Documentation, Version 4.5
6.1.2.1 forge > local
update
$
$
$
$
$
$
cvs
cvs
cvs
cvs
cvs
cvs
up
up
up
up
up
up
-A // depuis la branche principale
-r branch_name // depuis une branche
-r tag_name // depuis un tag
-d //creer sur le poste local les nouveaux repertoires
-C //Annulation des modifications locales -> les fichiers remplacés sont sauvés en .#fil
message
A
M
?
U
C
D
Ajout de nouveaux
éléments modifiés
éléments inconnus
pour les éléments
pour les éléments
fichier supprimés
éléments à la version locale
localement (par rapport à la version de CVS) ;
de CVS (non présents dans la version de CVS) ;
modifiés dans CVS (par rapport à la version locale) ;
différents entre les versions locale et CVS, et qui posent un conflit à règler
6.1.2.2 local -> forge
commit
$
$
$
$
$
$
$
cd <répertoire désiré>
cvs commit [-m "message explicite de la modification"] [<arborescence>]
cvs ci -m "ajout des fichiers" // avec message
cvs ci module_name // dans la branche principale
cvs ci -d branch_name module_name // dans une branche
cvs ci -r tag module_name // depuis un tag
cvs ci -r 3.0 //changer la révision (doit être plus grand que tous les numéros existants)
Add
$ cd <répertoire désiré>
$ cvs add [-m "message explicite de l'ajout"] <arborescence>
$ cvs add file1 file2 ...
cvs add /data/pgsql* // * tous les fichiers du repertoire ...
L'ajout d'un fichier n'est possible que depuis le répertoire le contenant ;
Les fichiers d'un répertoire non ajouté ne sont pas visibles par CVS (lors de l'affichage des diff
L'ajout d'éléments est effectif dans CVSROOT uniquement après la mise à jour de la version de CVS.
rm
Pour supprimer des éléments à la version locale, afin de les supprimer ensuite définitivement de l
$ cd <répertoire désiré>
$ cvs remove [-f] <arborescence>
* -f : pour effacer le fichier avant de le supprimer.
Il faut d'abord supprimer le fichier du répertoire
$ rm file1 file2 ...
$ cvs rm file1 file2 ...
$ cvs ci -m "suppression des fichiers
Supprimer un répertoire n est pas possible directement, il faut aller le supprimer dans le serveur
6.1.2.3 local
Suppression d’une copie locale
140
Chapitre 6. Outils
openMairie Framework Documentation, Version 4.5
// pour éviter d'effacer un checkout en oubliant nos modifications
Pour effacer les sources présentes sur le poste local et faire confiance au repository :
$ cd <répertoire désiré>
$ cvs release [-d] <arborescence>
* -d : pour effacer définitivement l'arborescence.
$ cvs release -d module
status
Pour obtenir le détail (statut) de la version locale d'une arborescence :
$ [ cd <répertoire désiré> ]
$ cvs status <arborescence>
cvs st -> status
diff/log
cvs
cvs
cvs
cvs
diff
log <nomfichier>
diff <nomfichier>
[local /differentiel]
diff -r 1.5 -r 1.6 nomfichier [entre 2 versions]
6.1.2.4 export
exemple opencimetiere_facture
— se mettre dans le repertoire : openmairie_cimetiere_facture
— taguer la version
$ cvs tag version_2_03 (commence par une lettre / pas de point)
— faire l export
$ cvs export - r version_2_03 -d version/opencimetiere_facture_2.03 openmairie_cimetiere_fac
[
version
]
[repertoire export ] [module]
6.1.2.5 tag
Les identifiants logiques (noms donnés à une version par un utilisateur) sont différents des identifiants CVS (du
type 1.1.2.1). La gestion d’identifiant (ou tag) d’une arborescence se fait ainsi
$
$
$
*
*
[ cd <répertoire désiré> ]
cvs tag [-R] [-d -r] <nom de l'identifiant> [<arborescence>]
cvs tag tag_name // creer un tag
-R : commande appliquée récursivement sur les sous-répertoires ;
-d -r : suppression de l'identifiant existant.
Exportation (mêmes options que cvs check out)
Pour exporter les sources du projet en vue d’une livraison (pas de répertoires CVS dans l’arborescence)
$ cd <répertoire désiré>
$ cvs export (-r <nom du tag> | -D <date désirée>) <arborescence>
$ cvs export
Les fichiers .cvsignore sont exportés et apparaissent dans l’arborescence contrairement aux répertoires CVS ; Des
problèmes apparaissent lors d’export de fichiers binaires sur plateformes hétérogènes. Par exemple, un export sur
PC transforme les retours chariots (n -> r n)
6.1. Outils
141
openMairie Framework Documentation, Version 4.5
6.1.2.6 Import
requete cvs
cvs -d :pserver:user@cvs.mpl.ird.fr:/projet login
(1)
(2)
(3)
(4)
|
|
|
|
|
|
|
+- Répertoire du
|
|
|
SERVEUR contenant les sources
|
|
|
(racine)
|
|
|
|
|
|
|
|
+-------- adresse du SERVEUR CVS
|
|
|
+------ Votre login à vous sur le SERVEUR
|
+----- le type d'authentification
6.1.2.7 checkout
Pour récupérer les sources du projet en local
$ cd <répertoire désiré>
$ cvs checkout <arborescence>
6.1.2.8 Divers
aide
$ cvs -H nomdecommande
log des commit : Pour obtenir l’historique d’une arborescence
$ [ cd <répertoire désiré> ]
$ cvs log <arborescence>
L’historique affiche les différents identifiants (ou tag) et les différentes versions de l’arborescence concernée sous
CVS ;
L’historique sur un répertoire affiche récursivement les historiques des fichiers le composant.
.cvsignore
La présence de fichier(s) .cvsignore dans un répertoire permet de dire à CVS d’ignorer certains types de fichiers
$ cd <répertoire désiré>
$ cat .cvsignore
*.jpg *.htm
6.1.2.9 Changer le système de gestion des version de CVS vers SVN sur la forge de l’adullact
Le but de ce tutorial est de changer le système de gestion de version sur un projet existant sur la forge de l’adullact.
Pré-requis
— Le projet sur l’adullact en CVS <NOM_DU_PROJET>
— Le nom du module à récupérer <NOM_DU_MODULE>
— Les droits d’administration sur le projet <NOM_DU_DEVELOPPEUR>
142
Chapitre 6. Outils
openMairie Framework Documentation, Version 4.5
Etape 1 - Récupérer le code du CVS
cvs -d :pserver:anonymous@scm.adullact.net:/cvsroot/<NOM_DU_PROJET> login
cvs -d :pserver:anonymous@scm.adullact.net:/cvsroot/<NOM_DU_PROJET> export -DNOW <NOM_DU_MODULE>
Important : si un mot de passe est demandé, un mot de passe vide fera l’affaire.
A cette étape, il est recommandé de faire une archive du dossier ‘<NOM_DU_MODULE>’ qui vient d’être exporté
pour le sauvegarder.
Etape 2 - Changer le type de dépôt
En tant qu’administrateur, aller dans l’onglet ‘Sources’ puis cliquer sur le lien ‘Administration’. Choisir alors SVN
puis cliquer sur le bouton ‘Mettre à jour’.
Il faut ensuite attendre (le temps d’attente est variable entre 30 minutes et plusieurs heures) que le dépôt subversion
soit activé.
Etape 3 - Créer la structure du dépôt
Ici nous allons créer la structure standard d’un dépôt Subversion :
— trunk
— tags
— branches
svn mkdir svn+ssh://<NOM_DU_DEVELOPPEUR>@scm.adullact.net/svnroot/<NOM_DU_PROJET>/trunk svn+ssh://
Etape 4 - Importer le code sur le nouveau dépôt Subversion
6.1.2.9.5.1 Cas 1 Si l’application doit être utilisée telle qu’elle a été récupérée sur le CVS, alors nous allons
l’importer directement dans le dossier ‘trunk’.
svn import <NOM_DU_MODULE> svn+ssh://<NOM_DU_DEVELOPPEUR>@scm.adullact.net/svnroot/<NOM_DU_PROJET>
6.1.2.9.5.2 Cas 2 Dans le cas de figure où l’application va être migrée vers OM4, nous allons placer le code
récupéré sur le CVS dans une branche du dépôt correspondant à sa version.
svn import <NOM_DU_MODULE> svn+ssh://<NOM_DU_DEVELOPPEUR>@scm.adullact.net/svnroot/<NOM_DU_PROJET>
Dans ce cas, il faut donc importer le nouveau code dans le dossier ‘trunk’ :
— Soit le développement du projet n’a pas encore commencé et il suffit de suivre le tutorial “versions/svn/Importer un nouveau projet”.
— Soit le développement du projet a déjà commencé et il suffit d’importer le dossier en cours de développement (attention : il ne faut pas que des dossiers .svn soient présents dans ce dossier et il faut prendre soin
de supprimer les dossiers récupérés depuis les EXTERNALS avant l’import) :
svn import <NOM_DU_DOSSIER> svn+ssh://<NOM_DU_DEVELOPPEUR>@scm.adullact.net/svnroot/<NOM_DU_
Il faut bien sur valider les EXTERNALS pour récupérer les librairies externes.
6.1.3 GIT
Site officiel du projet GIT
6.1. Outils
143
openMairie Framework Documentation, Version 4.5
6.1.4 Meld
Site officiel du projet Meld
exemple d utilisation :
meld openmairie_recensement/ svn.openmairtrunck/trunk
6.1.5 POEdit
POEdit est un éditeur de traductions de chaînes en plusieurs langues. Les chaînes présentes dans l’interface des
applications openMairie sont celles présentes dans le code. Elles ne peuvent pas comporter d’accent.
Les étapes sont les suivantes :
1 - avoir dans le code .php les chaînes à traduire, en texte sans accent ni caractères spéciaux
2 - préparer les dossiers de traductions dans le dossier de locales
3 - avoir préalablement installé et configuré POEdit
4 - configurer le projet dans POEdit et effectuer scan du code afin de détecter les chaînes à traduire
5 - traduire les chaînes dans POEdit et sauvegarder
6.1.5.1 Spécification dans le code des chaînes à traduire
Les chaînes peuvent être traduites, soit en français accentué, soit dans d’autres langues. Pour cela il est nécessaires
qu’elles soient présentes dans les fichiers.php en respectant la syntaxe suivante
``_('Ma chaine a traduire, sans accent')``
Toutes les chaînes de caractères correspondant aux noms de tables et de champs sont générées par le générateur et
sont ainsi directement disponibles.
6.1.5.2 Préparation des dossiers de locales
Chaque application openMairie comporte, à la racine, un dossier appelé locales. Ce dossier comporte une
structure de type
locales/
fr_FR/
LC_MESSAGES/
openmairie.po
openmairie.mo
Il est nécessaire de créer un dossier de langue (par exemple en_US) avec son sous-dossier LC_MESSAGES pour
chaque langue supplémentaire.
Le fichier .po contient les définitions de traductions ; il peut être modifié au moyen de POEdit ou directement
depuis un éditeur de texte simple.
Le fichier .mo contient les traductions sous une forme compilée. Il est généré par POEdit automatiquement lors
de chaque sauvegarde des traductions.
144
Chapitre 6. Outils
openMairie Framework Documentation, Version 4.5
6.1.5.3 Installation et configuration de POEdit
Installation
POEdit est disponible nativement dans la plupart des systèmes linux. Il est possible de le télécharger depuis le site
officiel pour tous Linux, Windows et Mac OSX.
http://www.poedit.net/download.php
Sous Linux Ubuntu ou Debian, il faut, en root, exécuter la commande apt-get install poedit
Gestion de plusieurs langues
Une fois installé, il faut s’assurer que les locales (fichiers de définition de langues) sont correctement installés
sur le système.
Sous Linux Ubuntu, pour ajouter une locale, il faut ajouter sa définition dans le fichier de pays correspondant (exemple : /var/lib/locales/supported.d/fr) puis lancer la commande, en root,
dpkg-reconfigure locales. Cela ne sera nécessaire que pour ajouter la prise en charge d’une nouvelle
langue.
6.1.5.4 Configuration d’un projet dans POEdit
— Cliquer sur le bouton ‘Créer un nouveau projet de traduction’, même si le projet comporte déjà une traduction,
— Saisir le nom du projet et le chemin complet du dossier contenant le projet (chemin complet permettant
d’aller à la racine du logiciel openMairie)
— Valider. Cela crée le projet. Les fichiers .po existants sont automatiquement détectés.
— Cliquer alors sur le bouton ‘Mettre à jour tous les catalogues du projet’. Un scan de code est alors effectué
par POEdit. Cela va parcourir tous les fichiers .php du dossier afin de détecter toutes les chaînes encadrées
par _().
Le scan peut comporter des erreurs (en général des accents dans les chaînes à traduire, des accents dans les
commentaires du code, des chaînes à traduire vides etc.). Dans ce cas le fichier et la ligne concernée sont
indiqués dans le rapport d’erreur. Il est recommandé de corriger l’erreur et recommencer la mise à jour.
Le rapport affiche les chaînes désuètes (celles qui ne figurent plus dans le code) et les nouvelles chaînes.
Les chaînes désuètes sont alors commentées dans le fichier .po et n’apparaissent plus dans l’interface de
traduction.
6.1.5.5 Traduction des chaînes
Depuis l’écran du projet dans POEdit, double-cliquer sur le fichier de la langue concernée. La liste des chaînes à
traduire apparaît alors. Les nouvelles chaînes sont en premier, les chaînes modifiées en second et les autres chaînes
ensuite. Il suffit de cliquer sur une chaîne et entrer la traduction dans le bloc de texte inférieur.
A chaque sauvegarde, le fichier est compilé en un fichier .mo.
L’affichage de l’application affiche alors les chaînes traduites à la place des libellés originaux.
Attention, sur certaines configurations, un redémarrage du serveur web peut être nécessaire pour que les traductions soient mises à jour.
6.1.6 Sphinx
Site officiel du projet Sphinx
6.1. Outils
145
openMairie Framework Documentation, Version 4.5
6.1.7 Github.com
Pour pouvoir gérer un projet sur ce site, il faut avoir un utilisateur (le bouton “Sign up” de la page d’acucueil
permet d’obtenir un compte utilisateur très facilement).
L’objectif d’utiliser ce site est donc de faciliter la contribution à la documentation grâce à l’éditeur en ligne et
au système de “Pull Request” et de déclencher simplement la regénération des documentations grâce au lien
automatique avec readthedocs.org.
6.1.7.1 Créer un projet
Public(s) concerné(s) : Administrateur de projet openMairie.
Il s’agit ici, de créer un nouveau repository sur github.com dans l’organisation openmairie. Le projet doit s’appeler
openlogiciel-documentation (par exemple pour le logiciel openElec “openelec-documentation” et pour le logiciel
openRésultat “openresultat-documentation”). Ne rien faire d’autre dans ce repository.
Depuis le tableau de bord de github.com, un clic sur le bouton “+” puis “New repository” en haut à droite de
l’écran, à côté du login de l’utilisateur, permet d’accéder au formulaire de création d’un dépôt.
Voici les informations à saisir :
— Owner : sélectionner “openmairie”, pour une meilleure lisibilité du projet tous les dépôts doivent être créés
dans cette organisation.
— Repository name : le nom doit être logiciel-documentation sans accents sans espaces en minuscules
(par exemple pour le logiciel openElec “openelec-documentation” et pour le logiciel openRésultat
“openresultat-documentation”).
— Description : pour que le dépôt sorte correctement dans les recherches, il faut saisir “Documentation Logiciel Sphinx” (par exemple pour openCimetière “Documentation openCimetière Sphinx”).
— Public ou Private : sélectionner “Public” puisque les projets openMairie sont publics.
— Initialize this repository with a README : ne pas cocher la case.
Puis il suffit de cliquer sur le bouton “Create repository”.
6.1.7.2 Importer la documentation depuis un projet subversion de l’adullact
Public(s) concerné(s) : Administrateur de projet openMairie.
Les pré-requis sont :
— le projet doit déjà être créé sur github.com
— être dans un terminal pour saisir les commandes suivantes
— les commandes : svn, svn2git et git doivent être installées
Étape 0 : Modifier et définir les variables utilisées dans les commandes suivantes
export OLDPRODUCTNAME="openfoncier"
export NEWPRODUCTNAME="openads"
export ADULLACTUSER="fmichon"
Étape 1 : Récupération des logs
mkdir -p ${NEWPRODUCTNAME}-documentation/${NEWPRODUCTNAME}-documentation && cd ${NEWPRODUCTNAME}-d
svn log -q svn://scm.adullact.net/scmrepos/svn/${OLDPRODUCTNAME}/documentation > ../LOG
cat ../LOG | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' |
cat ../authors-transform.txt
Étape 2 : MANUEL - Modification des auteurs
=> Il faut faire la correspondance entre les utilisateurs de l'adullact et ceux de github
=> exemple : fmichon = Florent Michon <fmichon@atreal.fr>
=> fmichon = login de l'addulact
=> Florent Michon = nom complet du contributeur
=> fmichon@atreal.fr = mail référencé dans github
vim ../authors-transform.txt
146
Chapitre 6. Outils
openMairie Framework Documentation, Version 4.5
Étape 3 : Vérification de l’intervalle
export REVS="$(tail -n2 ../LOG|head -n1|awk '{print $1}'|sed "s/r//"):$(head -n2 ../LOG|tail -n1|a
echo $REVS
Étape 4 : Récupération de tous les commits (très long)
svn2git --authors ../authors-transform.txt --revision $REVS -v svn://scm.adullact.net/scmrepos/svn
Étape 5 : Import du code sur github
git remote add origin git@github.com:openmairie/${NEWPRODUCTNAME}-documentation.git
git push -u --all
git push --tags
Étape 6 : Suppression de l’ancien dépôt de documentation sur l’adullact pour que personne ne committe dessus
svn del -m "Déplacement de la documentation vers Github" svn+ssh://${ADULLACTUSER}@scm.adullact.ne
echo "Documentation déplacée vers https://github.com/openmairie/${NEWPRODUCTNAME}-documentation" >
svn import -m "Déplacement de la documentation vers Github" ../MOVED-TO-GITHUB.txt svn+ssh://${ADU
6.1.7.3 Faire l’import initial d’un projet sphinx
Public(s) concerné(s) : Administrateur de projet openMairie.
6.1.7.4 Contribuer à une documentation
Public(s) concerné(s) : Contributeur membre du projet openMairie.
6.1.8 readthedocs.org
readthedocs.org est un site qui héberge de la documentation, la rendant accessible et facile à trouver. Il est possible d’importer les documentations sur ce site depuis les système de gestion de version tel que Subversion, Git
ou d’autres. Ce site permet de gérer la mise à jour automatique des documentations à chaque commit dans ces
systèmes de gestion de version. Le site supporte également le support des versions mais seulement pour Git et non
pas pour Subversion à l’heure où cette documentation est rédigée.
L’objectif d’utiliser ce site est donc de ne pas avoir à se soucier de la génération des documentations. C’est
ReadTheDcs.org qui s’en occupe et dans tous les formats html, pdf, epub, ...
Pour pouvoir gérer un projet sur ce site, il faut avoir un utilisateur (le bouton “Inscription” en haut à droite de la
page d’acucueil permet d’obtenir un compte utilisateur très facilement).
6.1.8.1 Importer un nouveau projet sur RTD
Public(s) concerné(s) : Administrateur de projet openMairie.
Depuis le tableau de bord de readthedocs.org, un clic sur le bouton “Importer”, permet d’accéder au formulaire de
création d’un projet sphinx existant.
Voici les informations à saisir :
— Nom : le nom du logiciel sans accents sans espaces en minuscules (par exemple : openelec ou openresultat).
— Repo : l’URL de github.com où est stockée le code de la documentation (par
exemple
:
https://github.com/openmairie/openelec-documentation.git
pour
openelec
ou
https://github.com/openmairie/openresultat-documentation.git pour openresultat).
— Type de dépôt : “Git” puisque le dépôt est sur github.com.
— Description : Le nom du logiciel avec accents avec espaces et avec la casse (par exemple : openElec ou
openRésultat).
— Language : “French” puisque la documentation est francophone.
6.1. Outils
147
openMairie Framework Documentation, Version 4.5
— URL Projet : “http://www.openmairie.org/”.
— Canonical URL : laissons vide pour le moment.
— Single version : ne pas cocher la case.
— Etiquettes : “openmairie”.
Puis il suffit de cliquer sur le bouton “Créer”.
Si la création du projet s’est bien passée une version de la documentation a du être générée, celle-ci est disponible
en cliquant sur le bouton “Afficher les docs” sur la page du projet nouvellement créé.
6.1.8.2 Paramétrer une nouvelle version d’un projet existant
Public(s) concerné(s) : Administrateur de projet openMairie.
Par défaut un projet sur readthedocs.org gère uniquement la dernière version de la documentation ‘latest’ en
récupérant la branche par défaut de la documentation sur github.com ‘master’.
Il est possible de gérer plusieurs versions de la documentation pour obtenir des URL du style :
— http://omframework.readthedocs.org/fr/4.2/
— http://omframework.readthedocs.org/fr/4.4/
— http://omframework.readthedocs.org/fr/latest/
Chaque version dans readthedocs.org, correspond à une branche dans le dépôt du projet sur github.com.
...
148
Chapitre 6. Outils
CHAPITRE 7
Contributeurs
(par ordre alphabétique)
— atReal
— Thierry Benita
— Romain Beylerian
— Matthias Broquet
— Nicolas Haye
— Nicolas Meucci
— Florent Michon
— Virginie Pihour
— Francois Raynaud
— Sofien Timezouaght
149
openMairie Framework Documentation, Version 4.5
150
Chapitre 7. Contributeurs
Index
A
H
affichepdf() (méthode formulaire), 74
afficher() (méthode formulaire), 76
afficherChamp() (méthode formulaire), 76
ajouter() (méthode dbform), 73
hidden() (méthode formulaire), 74
hiddenstatic() (méthode formulaire), 74
hiddenstaticdate() (méthode formulaire), 74
hiddenstaticnum() (méthode formulaire), 74
http() (méthode formulaire), 74
httpclick() (méthode formulaire), 74
C
checkbox() (méthode formulaire), 74
checkboxnum() (méthode formulaire), 74
checkboxstatic() (méthode formulaire), 74
cleSecondaire() (méthode dbform), 73
comboD() (méthode formulaire), 75
comboD2() (méthode formulaire), 75
comboG() (méthode formulaire), 75
comboG2() (méthode formulaire), 75
create() (méthode filestorage), 111
create_temporary() (méthode filestorage), 111
I
init_select() (méthode dbform), 70
L
localisation() (méthode formulaire), 75
localisation2() (méthode formulaire), 75
M
modifier() (méthode dbform), 73
D
P
date() (méthode formulaire), 74
date2() (méthode formulaire), 74
datestatic() (méthode formulaire), 74
dbform (classe de base), 70
debutBloc() (méthode formulaire), 76
debutFieldset() (méthode formulaire), 76
delete() (méthode filestorage), 111
delete_temporary() (méthode filestorage), 112
pagehtml() (méthode formulaire), 75
password() (méthode formulaire), 74
E
select() (méthode formulaire), 75
select_multiple() (méthode formulaire), 75
select_multiple_static() (méthode formulaire), 75
selectdisabled() (méthode formulaire), 75
selecthiddenstatic() (méthode formulaire), 75
selectstatic() (méthode formulaire), 75
set_form_default_values() (méthode dbform), 70
setBloc() (méthode dbform.formulaire), 71
setBloc() (méthode formulaire), 77
setFieldset() (méthode dbform.formulaire), 71
setFieldset() (méthode formulaire), 77
setGroupe() (méthode dbform), 71
setGroupe() (méthode formulaire), 77
setId() (méthode dbform), 73
setKeyup() (méthode formulaire), 77
setLayout() (méthode dbform), 71
setLib() (méthode dbform), 70
enpied() (méthode formulaire), 76
entete() (méthode formulaire), 76
F
finBloc() (méthode formulaire), 76
finFieldset() (méthode formulaire), 76
formulaire (classe de base), 74
formulaire() (méthode dbform), 70
G
geom() (méthode formulaire), 75
get() (méthode filestorage), 111
get_temporary() (méthode filestorage), 112
R
rvb() (méthode formulaire), 75
rvb2() (méthode formulaire), 75
S
151
openMairie Framework Documentation, Version 4.5
setLib() (méthode formulaire), 76
setMax() (méthode dbform), 70
setMax() (méthode formulaire), 77
setOnchange() (méthode dbform), 70
setOnchange() (méthode formulaire), 77
setOnclick() (méthode dbform), 71
setOnclick() (méthode formulaire), 77
setOnkeyup() (méthode dbform), 70
setRegroupe() (méthode dbform), 71
setRegroupe() (méthode formulaire), 77
setSelect() (méthode dbform), 70
setSelect() (méthode formulaire), 76
setTaille() (méthode dbform), 70
setTaille() (méthode formulaire), 77
setType() (méthode dbform), 70
setType() (méthode formulaire), 76
setVal() (méthode dbform), 70
setVal() (méthode formulaire), 76
setvalF() (méthode dbform), 73
setvalF() (méthode formulaire), 77
setValFAjout() (méthode dbform), 73
setValsousformulaire() (méthode dbform), 70
sousformulaire() (méthode dbform), 70
statiq() (méthode formulaire), 74
supprimer() (méthode dbform), 73
T
text() (méthode formulaire), 74
textarea() (méthode formulaire), 74
textareahiddenstatic() (méthode formulaire), 75
textareamulti() (méthode formulaire), 74
textdisabled() (méthode formulaire), 74
textreadonly() (méthode formulaire), 74
triggerajouter() (méthode dbform), 73
triggerajouterapres() (méthode dbform), 73
triggermodifier() (méthode dbform), 73
triggermodifierapres() (méthode dbform), 73
triggersupprimer() (méthode dbform), 73
triggersupprimerapres() (méthode dbform), 73
U
update() (méthode filestorage), 111
upload() (méthode formulaire), 75
upload2() (méthode formulaire), 75
V
verifier() (méthode dbform), 73
verifierAjout() (méthode dbform), 73
voir() (méthode formulaire), 75
voir2() (méthode formulaire), 75
152
Index
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertising