Subversion Repositories Applications.annuaire

Rev

Rev 144 | Rev 164 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
144 aurelien 1
<?php
161 aurelien 2
/**
3
* PHP Version 5
4
*
5
* @category  PHP
6
* @package   annuaire
7
* @author    aurelien <aurelien@tela-botanica.org>
8
* @copyright 2010 Tela-Botanica
9
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
10
* @version   SVN: <svn_id>
11
* @link      /doc/annuaire/
12
*/
13
 
14
class GestionAnnuaireControleur extends AppControleur {
15
 
16
	private $id_liste_champs = 30768;
17
 
18
/**--------Fonctions d'ajout et de modification des annuaires --------*/
19
 
20
	/**
21
	 * Affiche le formulaire d'ajout d'un annuaire
22
	 * @param Array $valeurs les valeurs à inclure dans le formulaire (dans le cas du retour erreur)
23
	 * @return string la vue contenant le formulaire
24
	 */
25
	public function afficherFormulaireAjoutAnnuaire($donnees) {
26
 
27
		$champs = array(
28
			"aa_nom" => '',
29
			"aa_description" => '',
30
			"aa_bdd" => '',
31
			"aa_table" => '',
32
			"aa_code" => '',
33
			"aa_champ_id" => '',
34
			"aa_champ_nom" => '',
35
			"aa_champ_mail" => '',
36
			"aa_champ_pass" => ''
37
		);
38
		$donnees = $donnees;
39
 
40
		$formulaire_ajout_annuaire = $this->getVue(Config::get('dossier_squelettes_gestion_annuaires').'annuaire_ajout',$donnees);
41
 
42
		return $formulaire_ajout_annuaire;
43
	}
44
 
45
	public function ajouterAnnuaire($valeurs) {
46
 
47
		$champs = array(
48
			"aa_nom" => '',
49
			"aa_description" => '',
50
			"aa_bdd" => '',
51
			"aa_table" => '',
52
			"aa_code" => '',
53
			"aa_champ_id" => '',
54
			"aa_champ_nom" => '',
55
			"aa_champ_mail" => '',
56
			"aa_champ_pass" => ''
57
		);
58
 
59
		$donnees = array('erreurs_champs' => array());
60
 
61
		// vérification de la présence de tous les champs
62
		foreach($champs as $nom_champ => $valeur) {
63
			if(!isset($valeurs[$nom_champ]) || $valeurs[$nom_champ] == '') {
64
				$donnees['erreurs_champs'][$nom_champ] = 'Ce champ est obligatoire';
65
			}
66
		}
67
 
68
		// si il y a une erreur on réaffiche le formulaire
69
		if(!empty($donnees['erreurs_champs'])) {
70
			return $this->afficherFormulaireAjoutAnnuaire($donnees);
71
		}
72
 
73
		$champs_a_verifier = array($valeurs[aa_champ_id],$valeurs[aa_champ_nom],$valeurs[aa_champ_mail],$valeurs[aa_champ_pass]);
74
 
75
		$informations_annuaire = array(
76
			"aa_nom" => $valeurs['aa_nom'],
77
			"aa_description" => $valeurs['aa_description'],
78
			"aa_bdd" => $valeurs['aa_bdd'],
79
			"aa_table" => $valeurs['aa_table'],
80
			"aa_code" => $valeurs['aa_code'],
81
		);
82
 
83
		$informations_champs = array(
84
			"aa_champ_id" => $valeurs['aa_champ_id'],
85
			"aa_champ_nom" => $valeurs['aa_champ_nom'],
86
			"aa_champ_mail" => $valeurs['aa_champ_mail'],
87
			"aa_champ_pass" => $valeurs['aa_champ_pass']
88
		);
89
 
90
		$this->chargerModele('GestionAnnuaireModele');
91
		$annuaire_existe = $this->GestionAnnuaireModele->verifierPresenceTable($valeurs['aa_bdd'], $valeurs['aa_table']);
92
 
93
		// si l'annuaire existe déjà
94
		if($annuaire_existe) {
95
			$champs_existent = $this->GestionAnnuaireModele->verifierPresenceChamps($valeurs['aa_bdd'], $valeurs['aa_table'], $champs_a_verifier);
96
			// si l'annuaire existe déjà
97
			if($champs_existent) {
98
				// tout existe déjà, rien à créer
99
			}
100
		} else {
101
 
102
			$creation_table = $this->creerTableAnnuaire($informations_annuaire, $informations_champs);
103
			if(!$creation_table) {
104
				$donnees['erreurs'] = 'Impossible de créer la table '.$informations_annuaire['aa_table'].' dans la base '.$informations_annuaire['aa_bdd'];
105
			}
106
		}
107
 
108
		// on insere un nouvel enregistrement dans la table des annuaire
109
		$id_annuaire = $this->GestionAnnuaireModele->AjouterAnnuaire($informations_annuaire);
110
 
111
		if(!$id_annuaire) {
112
			$donnees['erreurs_champs'][$nom_champ] = 'Impossible d\'ajouter les infos de la table '.$valeurs['aa_table'].' dans la base de données '.$valeurs['aa_bdd'] ;
113
		}
114
 
115
		// on cree un set de métadonnées minimal
116
		$this->creerEtMapperChampsMetadonneeMinimaux($id_annuaire, $informations_champs);
117
 
118
		return $this->chargerAnnuaire($id_annuaire);
119
 
120
	}
121
 
122
	private function creerTableAnnuaire($informations_annuaire,  $information_champs) {
123
		$this->chargerModele('GestionAnnuaireModele');
124
 
125
		$this->GestionAnnuaireModele->creerTableAnnuaire($informations_annuaire, $information_champs);
126
	}
127
 
128
	private function creerEtMapperChampsMetadonneeMinimaux($id_annuaire, $informations_champs) {
129
 
130
		$metadonnee_controleur = new MetadonneeControleur();
131
		$this->chargerModele('MappageModele');
132
		$this->chargerModele('MetadonneeModele');
133
 
134
		foreach($informations_champs as $type_champ => $nom) {
135
 
136
			$role = str_replace('aa_','',$type_champ);
137
 
138
			if($role == 'champ_id') {
139
				$valeurs_mappage = array(
140
					'id_annuaire' => $id_annuaire,
141
					'id_champ_annuaire' => $nom,
142
					'role' => 'champ_id',
143
					'id_champ_metadonnee' => ''
144
				);
145
				$creation = $this->MappageModele->ajouterNouveauMappage($id_annuaire, $nom, 'champ_id', '0');
146
 
147
			} else {
148
 
149
				$valeurs_insertion = $this->renvoyerInformationChampPourType($id_annuaire, $role, $nom);
150
 
151
				$metadonnee_controleur->ajouterNouvelleMetadonnee($valeurs_insertion);
152
 
153
				$id_champ_metadonnee = $this->MetadonneeModele->renvoyerIdChampMetadonneeParAbreviation($id_annuaire, $valeurs_insertion['amc_abreviation']);
154
 
155
				// on affecte à chaque champ son role
156
				$this->MappageModele->ajouterNouveauMappage($id_annuaire, $nom, $role, $id_champ_metadonnee);
157
				// et on le rend obligatoire
158
				$this->MappageModele->ajouterNouveauMappage($id_annuaire, $nom, 'champ_obligatoire', $id_champ_metadonnee);
159
 
160
			}
161
		}
162
 
163
		return true;
164
	}
165
 
166
	private function renvoyerInformationChampPourType($id_annuaire, $type, $nom) {
167
 
168
		$valeurs = array();
169
		$this->chargerModele('MetadonneeModele');
170
 
171
		$id_liste_champs = $this->id_liste_champs;
172
 
173
		switch($type) {
174
			case 'champ_nom':
175
 
176
				$affichage = $this->MetadonneeModele->renvoyerCorrespondanceIdParAbreviation('text',$id_liste_champs);
177
 
178
				$valeurs = array('amc_nom' => $nom,
179
				'amc_abreviation' => 'nom' ,
180
				'amc_description' => 'Nom',
181
				'amc_ce_annuaire' => $id_annuaire,
182
				'amc_ce_type_affichage' => $affichage,
183
				'amc_ce_ontologie' => '0'
184
				);
185
			break;
186
 
187
			case 'champ_mail':
188
 
189
				$affichage = $this->MetadonneeModele->renvoyerCorrespondanceIdParAbreviation('mail',$id_liste_champs);
190
				$valeurs = array('amc_nom' => $nom,
191
				'amc_abreviation' => 'mail',
192
				'amc_description' => 'Adresse electronique',
193
				'amc_ce_annuaire' => $id_annuaire,
194
				'amc_ce_type_affichage' => $affichage,
195
				'amc_ce_ontologie' => '0'
196
				);
197
			break;
198
 
199
			case 'champ_pass':
200
 
201
				$affichage = $this->MetadonneeModele->renvoyerCorrespondanceIdParAbreviation('password',$id_liste_champs);
202
				$valeurs = array('amc_nom' => $nom,
203
				'amc_abreviation' => 'pass',
204
				'amc_description' => 'Mot de passe',
205
				'amc_ce_annuaire' => $id_annuaire,
206
				'amc_ce_type_affichage' => $affichage,
207
				'amc_ce_ontologie' => '0'
208
				);
209
			break;
210
		}
211
 
212
		return $valeurs;
213
	}
214
}