Subversion Repositories eFlore/Applications.cel

Rev

Rev 1179 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1179 Rev 1182
Line 8... Line 8...
8
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
8
 * @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
9
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
9
 * @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
10
 * @version $Id$
10
 * @version $Id$
11
 */
11
 */
12
class InventoryImage extends Cel {
12
class InventoryImage extends Cel {
13
	
13
 
14
	const ARRET_SERVICE = false;
14
	const ARRET_SERVICE = false;
15
	
15
 
16
	/**
16
	/**
17
	 * Méthode appelée avec une requête de type GET.
17
	 * Méthode appelée avec une requête de type GET.
18
	 * Renvoie les infos sur l'image correspondant à l'id passé en parametre
18
	 * Renvoie les infos sur l'image correspondant à l'id passé en parametre
19
	*/
19
	*/
20
	public function getElement($uid)
20
	public function getElement($uid)
21
	{	
21
	{
22
		// uid[0] : utilisateur obligatoire
22
		// uid[0] : utilisateur obligatoire
23
		// uid[1] : identifiant image obligatoire
23
		// uid[1] : identifiant image obligatoire
Line 24... Line 24...
24
 
24
 
25
		// Controle detournement utilisateur
25
		// Controle detournement utilisateur
26
		if(!isset($_SESSION)) {session_start();}
26
		if(!isset($_SESSION)) {session_start();}
Line 27... Line 27...
27
	   	$this->controleUtilisateur($uid[0]);
27
	   	$this->controleUtilisateur($uid[0]);
28
 
28
 
Line 29... Line 29...
29
		$id_image_protegee = $this->proteger($uid[1]); 
29
		$id_image_protegee = $this->proteger($uid[1]);
30
		$requete_selection_image = "SELECT * FROM cel_images WHERE ci_id_image = ".$id_image_protegee;
30
		$requete_selection_image = "SELECT * FROM cel_images WHERE ci_id_image = ".$id_image_protegee;
31
 
31
 
32
		$resultat_selection = $this->executerRequete($requete_selection_image);
32
		$resultat_selection = $this->executerRequete($requete_selection_image);
33
		
33
 
34
		$image = false;
34
		$image = false;
35
		
35
 
Line 36... Line 36...
36
		if (count($resultat_selection) > 0) {
36
		if (count($resultat_selection) > 0) {
Line 46... Line 46...
46
	*/
46
	*/
47
	public function updateElement($uid,$pairs)
47
	public function updateElement($uid,$pairs)
48
	{
48
	{
49
		// Controle detournement utilisateur
49
		// Controle detournement utilisateur
50
		$this->controleUtilisateur($uid[0]);
50
		$this->controleUtilisateur($uid[0]);
51
		
51
 
52
		$requete_mise_a_jour_image = 'UPDATE cel_images SET ' ;
52
		$requete_mise_a_jour_image = 'UPDATE cel_images SET ' ;
53
		
53
 
54
		$champs_a_mettre_a_jour = $this->construireRequeteMajMetaDonnees($pairs);
54
		$champs_a_mettre_a_jour = $this->construireRequeteMajMetaDonnees($pairs);
55
		$requete_mise_a_jour_image .= $champs_a_mettre_a_jour;
55
		$requete_mise_a_jour_image .= $champs_a_mettre_a_jour;
Line 56... Line 56...
56
 
56
 
Line 57... Line 57...
57
		$requete_mise_a_jour_image .= ' WHERE ci_id_image = '.$this->proteger($pairs['ci_id_image']) ;
57
		$requete_mise_a_jour_image .= ' WHERE ci_id_image = '.$this->proteger($pairs['ci_id_image']) ;
58
 
58
 
59
		$resultat_mise_a_jour = $this->executerRequeteSimple($requete_mise_a_jour_image);
59
		$resultat_mise_a_jour = $this->executerRequeteSimple($requete_mise_a_jour_image);
60
		
60
 
61
		$retour = false;
61
		$retour = false;
62
		
62
 
63
		if ($resultat_mise_a_jour) {
63
		if ($resultat_mise_a_jour) {
64
			$retour = 'OK';
64
			$retour = 'OK';
65
		}
65
		}
66
		
66
 
67
		$this->envoyer($retour);
67
		$this->envoyer($retour);
68
	}
68
	}
69
	
69
 
70
	/**
70
	/**
71
	 * Assemble la requete de mise à jour des champs de metadonnées
71
	 * Assemble la requete de mise à jour des champs de metadonnées
72
	 * 
72
	 *
73
	*/
73
	*/
74
	private function construireRequeteMajMetaDonnees($valeurs_metadonnees) {
74
	private function construireRequeteMajMetaDonnees($valeurs_metadonnees) {
75
		
75
 
76
		$requete_maj_champs = '';
76
		$requete_maj_champs = '';
77
		
77
 
78
		$champs_a_ignorer = array('ci_ce_observation','ci_id_image');
78
		$champs_a_ignorer = array('ci_ce_observation','ci_id_image');
79
		
79
 
80
		foreach($valeurs_metadonnees as $champ  => $valeur)
80
		foreach($valeurs_metadonnees as $champ  => $valeur)
81
		{
81
		{
82
			
82
 
83
			if (!in_array($champ,$champs_a_ignorer)) {
83
			if (!in_array($champ,$champs_a_ignorer)) {
84
				if ($champ == 'ci_meta_date') {
84
				if ($champ == 'ci_meta_date') {
85
	
85
 
86
					$date_tab = split('/',$valeur) ;
86
					$date_tab = split('/',$valeur) ;
87
					$date = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0] ;
87
					$date = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0] ;
88
	
88
 
89
					$requete_maj_champs .= $champ.' = "'.$date.'" , ' ;
89
					$requete_maj_champs .= $champ.' = "'.$date.'" , ' ;
90
	
90
 
91
				}
91
				}
92
				else {
92
				else {
93
					$requete_maj_champs .= $champ.' = '.$this->proteger($valeur).' , ' ;
93
					$requete_maj_champs .= $champ.' = '.$this->proteger($valeur).' , ' ;
94
				}
94
				}
Line 95... Line 95...
95
			}
95
			}
96
		}
96
		}
97
 
97
 
98
		$requete_maj_champs = rtrim($requete_maj_champs," , ") ;
98
		$requete_maj_champs = rtrim($requete_maj_champs," , ") ;
Line 99... Line 99...
99
		
99
 
100
		return $requete_maj_champs;
100
		return $requete_maj_champs;
101
	}
101
	}
102
 
102
 
103
 
103
 
104
	/**
104
	/**
105
	 * Méthode appelée avec une requête de type PUT.
-
 
106
	 * Stocke une image, crée ses miniatures et enregistre ses informations
-
 
107
	 * Renvoie l'identifiant d'image nouvellement crée en cas de succès
105
	 * Méthode appelée avec une requête de type PUT.
108
	*/
106
	 * Stocke une image, crée ses miniatures et enregistre ses informations
109
	function createElement($pairs)
107
	 * Renvoie l'identifiant d'image nouvellement crée en cas de succès
110
	{
108
	*/
111
		
109
	function createElement($pairs) {
112
		if(self::ARRET_SERVICE) {
110
		if (self::ARRET_SERVICE) {
113
			header('Status: 503 Service Temporarily Unavailable');
111
			header('Status: 503 Service Temporarily Unavailable');
114
			echo "L'envoi d'images au cel est temporairement désactivé";
-
 
115
			exit;
-
 
116
		}
-
 
117
		// Controle detournement utilisateur
112
			echo "L'envoi d'images au cel est temporairement désactivé";
118
		if(!isset($_SESSION)) {session_start();}
113
			exit;
119
		$this->controleUtilisateur($pairs['identifiant']);
-
 
120
				
-
 
121
		foreach ($_FILES as $file) {
-
 
122
			$infos_fichier = $file ;
-
 
123
		}
-
 
124
		
114
		} else {
125
		if ($this->ajouterImageSurDdEtBdd($pairs, $infos_fichier)) {
-
 
126
			
-
 
Line -... Line 115...
-
 
115
			// Controle detournement utilisateur
-
 
116
			if (!isset($_SESSION)) {
-
 
117
				session_start();
-
 
118
			}
-
 
119
			$this->controleUtilisateur($pairs['identifiant']);
-
 
120
 
-
 
121
			foreach ($_FILES as $file) {
-
 
122
				$infos_fichier = $file ;
-
 
123
			}
-
 
124
 
-
 
125
			if ($this->ajouterImageSurDdEtBdd($pairs, $infos_fichier)) {
127
			// l'upload demande de court-circuiter le fonctionnement normal de JREST
126
				// l'upload demande de court-circuiter le fonctionnement normal de JREST
128
			// en quittant directement après l'envoi
127
				// en quittant directement après l'envoi
129
			$this->envoyerMessageCreationEffectuee();
128
				$this->envoyerMessageCreationEffectuee();
130
			exit;
129
				exit;
131
		}
130
			}
132
 
131
		}
133
	}
132
	}
134
	
133
 
135
	/**
134
	/**
136
	 * Ajoute une image dans la base de données et stocke le fichier en fabriquant les miniatures,
135
	 * Ajoute une image dans la base de données et stocke le fichier en fabriquant les miniatures,
137
	 * renvoie le nouvel id d'image en cas de succès
136
	 * renvoie le nouvel id d'image en cas de succès
138
	 * 
137
	 *
139
	 * @param array $pairs le tableau contenant l'identifiant de l'utilisateur
138
	 * @param array $pairs le tableau contenant l'identifiant de l'utilisateur
140
	 * @param array $infos_fichier les infos sur le fichier à traiter, de la même forme que les
139
	 * @param array $infos_fichier les infos sur le fichier à traiter, de la même forme que les
141
	 * élements du tableau $_FILES de php
140
	 * élements du tableau $_FILES de php
142
	*/
141
	*/
143
	public function ajouterImageSurDdEtBdd($pairs, $infos_fichier) {
142
	public function ajouterImageSurDdEtBdd($pairs, $infos_fichier) {
144
		
143
 
145
		$identifiant_utilisateur = $pairs['identifiant'];
144
		$identifiant_utilisateur = $pairs['identifiant'];
146
		$nouvel_ordre = $this->obtenirNouvelOrdrePourUtilisateur($identifiant_utilisateur);
145
		$nouvel_ordre = $this->obtenirNouvelOrdrePourUtilisateur($identifiant_utilisateur);
147
		
146
 
148
		if (!$nouvel_ordre) {
147
		if (!$nouvel_ordre) {
149
			$message = 'Erreur lors du calcul du nouvel ordre de l\'image';
148
			$message = 'Erreur lors du calcul du nouvel ordre de l\'image';
150
			trigger_error($message, E_USER_ERROR);
149
			trigger_error($message, E_USER_ERROR);
151
		}
150
		}
152
		
151
 
153
		$extracteur_metadonnees = new ExtracteurMetadonnees();
152
		$extracteur_metadonnees = new ExtracteurMetadonnees();
154
		$informations_image = $extracteur_metadonnees->extraireMetadonnees($infos_fichier['tmp_name']) ;
153
		$informations_image = $extracteur_metadonnees->extraireMetadonnees($infos_fichier['tmp_name']) ;
155
		
154
 
156
		if(!$informations_image) {
155
		if(!$informations_image) {
157
			$message = 'Erreur lors de l\'extraction des metadonnées';
156
			$message = 'Erreur lors de l\'extraction des metadonnées';
158
			trigger_error($message, E_USER_ERROR);
157
			trigger_error($message, E_USER_ERROR);
159
		}
158
		}
160
		
159
 
161
		// ajout de quelques informations supplémentaire, en sus 
160
		// ajout de quelques informations supplémentaire, en sus
162
		// des metadonnées dejà extraites
161
		// des metadonnées dejà extraites
163
		$informations_image['ci_ordre'] = $nouvel_ordre ;
162
		$informations_image['ci_ordre'] = $nouvel_ordre ;
164
		$informations_image['ci_publiable_eflore'] = 'false' ;
163
		$informations_image['ci_publiable_eflore'] = 'false' ;
165
		$informations_image['ci_nom_original'] = $infos_fichier['name'] ;
164
		$informations_image['ci_nom_original'] = $infos_fichier['name'] ;
166
		
165
 
Line 167... Line 166...
167
		// le md5 du fichier sert à repérer les images en doublons
166
		// le md5 du fichier sert à repérer les images en doublons
168
		$informations_image['ci_md5'] = md5_file($infos_fichier['tmp_name']) ;
167
		$informations_image['ci_md5'] = md5_file($infos_fichier['tmp_name']) ;
169
		$informations_image['ci_ce_utilisateur'] = $identifiant_utilisateur ;
168
		$informations_image['ci_ce_utilisateur'] = $identifiant_utilisateur ;
170
		
169
 
Line 171... Line 170...
171
		$requete_insertion_infos_image = $this->construireRequeteInsertionImage($informations_image);
170
		$requete_insertion_infos_image = $this->construireRequeteInsertionImage($informations_image);
172
		$resultat_insertion_infos_image = $this->executerRequeteSimple($requete_insertion_infos_image);
171
		$resultat_insertion_infos_image = $this->executerRequeteSimple($requete_insertion_infos_image);
173
 
172
 
174
		if (!$resultat_insertion_infos_image) {
173
		if (!$resultat_insertion_infos_image) {
175
			$message = "Echec de l'insertion dans la base de donnees : " ;
174
			$message = "Echec de l'insertion dans la base de donnees : " ;
176
			trigger_error($message, E_USER_ERROR);
175
			trigger_error($message, E_USER_ERROR);
177
        }
176
        }
178
 
177
 
179
		$id_nouvelle_image = $this->obtenirIdImagePourIdentifiantEtOrdre($identifiant_utilisateur, $nouvel_ordre);
178
		$id_nouvelle_image = $this->obtenirIdImagePourIdentifiantEtOrdre($identifiant_utilisateur, $nouvel_ordre);
180
		
179
 
181
		if (!$id_nouvelle_image)
180
		if (!$id_nouvelle_image)
182
		{
181
		{
183
			$message =  'Impossible d\'obtenir le nouvel identifiant de l\'image' ;
182
			$message =  'Impossible d\'obtenir le nouvel identifiant de l\'image' ;
184
			trigger_error($message, E_USER_ERROR);
183
			trigger_error($message, E_USER_ERROR);
185
		}
184
		}
186
		
185
 
187
		$manipulateur_image = new ImageRecreation($this->config);
186
		$manipulateur_image = new ImageRecreation($this->config);
188
		$fichier_stocke = $manipulateur_image->stockerFichierEtCreerMiniatures($infos_fichier,$id_nouvelle_image);
187
		$fichier_stocke = $manipulateur_image->stockerFichierEtCreerMiniatures($infos_fichier,$id_nouvelle_image);
189
		
188
 
190
		if (!$fichier_stocke) {
189
		if (!$fichier_stocke) {
Line 191... Line 190...
191
			$message =  'Erreur lors du stockage du fichier' ;
190
			$message =  'Erreur lors du stockage du fichier' ;
192
			trigger_error($message, E_USER_ERROR);
191
			trigger_error($message, E_USER_ERROR);
193
		}
192
		}
194
		
193
 
195
		return $id_nouvelle_image;
194
		return $id_nouvelle_image;
196
	}
195
	}
197
	
196
 
198
	private function obtenirNouvelOrdrePourUtilisateur($id_utilisateur) {
197
	private function obtenirNouvelOrdrePourUtilisateur($id_utilisateur) {
199
 
198
 
200
		$nouvel_ordre = 0 ;
199
		$nouvel_ordre = 0 ;
201
		
200
 
202
		$requete_selection_ordre_max ='SELECT MAX(ci_ordre) as max_ordre FROM cel_images WHERE ci_ce_utilisateur = '.$this->proteger($id_utilisateur) ;
201
		$requete_selection_ordre_max ='SELECT MAX(ci_ordre) as max_ordre FROM cel_images WHERE ci_ce_utilisateur = '.$this->proteger($id_utilisateur) ;
203
		$resultat_requete_ordre_max = $this->executerRequete($requete_selection_ordre_max);
202
		$resultat_requete_ordre_max = $this->executerRequete($requete_selection_ordre_max);
204
				
203
 
205
		if($resultat_requete_ordre_max) {
204
		if($resultat_requete_ordre_max) {
206
			$nouvel_ordre = $resultat_requete_ordre_max[0]['max_ordre'];
205
			$nouvel_ordre = $resultat_requete_ordre_max[0]['max_ordre'];
207
			$nouvel_ordre++;
206
			$nouvel_ordre++;
208
		}
207
		}
209
		
208
 
Line 210... Line 209...
210
		return $nouvel_ordre;
209
		return $nouvel_ordre;
211
	}
210
	}
212
	
211
 
213
	private function obtenirIdImagePourIdentifiantEtOrdre($id_utilisateur, $ordre) {
212
	private function obtenirIdImagePourIdentifiantEtOrdre($id_utilisateur, $ordre) {
214
		
213
 
215
		$id_image = false;
214
		$id_image = false;
216
		
215
 
217
		$requete_id_image ='SELECT ci_id_image FROM cel_images WHERE ci_ce_utilisateur = '.$this->proteger($id_utilisateur).' AND ci_ordre = '.$ordre ;
216
		$requete_id_image ='SELECT ci_id_image FROM cel_images WHERE ci_ce_utilisateur = '.$this->proteger($id_utilisateur).' AND ci_ordre = '.$ordre ;
218
		$resultat_id_image = $this->executerRequete($requete_id_image);
217
		$resultat_id_image = $this->executerRequete($requete_id_image);
219
 
218
 
220
        if (count($resultat_id_image) > 0)
219
        if (count($resultat_id_image) > 0)
221
		{
220
		{
222
			$id_image = $resultat_id_image[0]['ci_id_image'];
221
			$id_image = $resultat_id_image[0]['ci_id_image'];
223
        }
222
        }
Line 224... Line 223...
224
		
223
 
225
        return $id_image;
224
        return $id_image;
Line 243... Line 242...
243
			else
242
			else
244
			{
243
			{
245
				$valeurs_a_inserer .= $this->proteger($valeur).',' ;
244
				$valeurs_a_inserer .= $this->proteger($valeur).',' ;
246
			}
245
			}
247
		}
246
		}
248
		
247
 
249
		if ($informations_image['ci_meta_date_time'] != 'NULL') {
248
		if ($informations_image['ci_meta_date_time'] != 'NULL') {
250
			$champs_a_inserer .= 'ci_meta_date, ';
249
			$champs_a_inserer .= 'ci_meta_date, ';
251
        	$valeurs_a_inserer .= $this->proteger($informations_image['ci_meta_date_time']).',';
250
        	$valeurs_a_inserer .= $this->proteger($informations_image['ci_meta_date_time']).',';
252
		}
251
		}
Line 253... Line 252...
253
 
252
 
254
        $champs_a_inserer .= 'ci_meta_date_ajout' ;
253
        $champs_a_inserer .= 'ci_meta_date_ajout' ;
Line 255... Line 254...
255
        $valeurs_a_inserer .= 'CURRENT_TIMESTAMP()' ;
254
        $valeurs_a_inserer .= 'CURRENT_TIMESTAMP()' ;
256
 
255
 
257
		$requete_insertion_image .= "(".$champs_a_inserer.") VALUES (".$valeurs_a_inserer.")" ;
256
		$requete_insertion_image .= "(".$champs_a_inserer.") VALUES (".$valeurs_a_inserer.")" ;
258
		
257
 
259
		return $requete_insertion_image;
258
		return $requete_insertion_image;
260
	}
259
	}
261
	
260
 
262
	private function envoyerMessageCreationEffectuee() {
261
	private function envoyerMessageCreationEffectuee() {
263
			
262
 
264
		header('HTTP/1.0 200 Created');
263
		header('HTTP/1.0 200 Created');
265
		echo 'OK';
264
		echo 'OK';
Line 266... Line 265...
266
		exit() ;
265
		exit() ;
267
	}
266
	}
268
 
267
 
269
	/**
268
	/**
270
	 * Méthode appelée avec une requête de type DELETE.
269
	 * Méthode appelée avec une requête de type DELETE.
271
	 * Supprime les infos sur l'image et le fichier correspondant à l'id passé en parametre
270
	 * Supprime les infos sur l'image et le fichier correspondant à l'id passé en parametre
272
	*/
271
	*/
273
	function deleteElement($uid){
272
	function deleteElement($uid){
274
		
273
 
275
		if(self::ARRET_SERVICE) {
274
		if(self::ARRET_SERVICE) {
276
			header('Status: 503 Service Temporarily Unavailable');
275
			header('Status: 503 Service Temporarily Unavailable');
Line 286... Line 285...
286
		$this->controleUtilisateur($uid[0]);
285
		$this->controleUtilisateur($uid[0]);
Line 287... Line 286...
287
 
286
 
288
		if (!isset($uid[1]) || !$this->EstUneSuiteIdentifiantsImage($uid[1])) {
287
		if (!isset($uid[1]) || !$this->EstUneSuiteIdentifiantsImage($uid[1])) {
289
			return;
288
			return;
290
		}
289
		}
291
		
290
 
Line 292... Line 291...
292
		$ids_images = $uid[1];
291
		$ids_images = $uid[1];
293
 
292
 
294
	    $requete_suppression_images = "DELETE FROM cel_images WHERE ci_id_image in (".$ids_images.")";
293
	    $requete_suppression_images = "DELETE FROM cel_images WHERE ci_id_image in (".$ids_images.")";
295
		$requete_suppression_lien_images_obs = "DELETE FROM cel_obs_images WHERE coi_ce_image in (".$ids_images.")";
294
		$requete_suppression_lien_images_obs = "DELETE FROM cel_obs_images WHERE coi_ce_image in (".$ids_images.")";
296
		
295
 
297
		$resultat_suppression_image = $this->executerRequeteSimple($requete_suppression_images);
296
		$resultat_suppression_image = $this->executerRequeteSimple($requete_suppression_images);
298
		$resultat_suppression_lien_images_obs = $this->executerRequeteSimple($requete_suppression_lien_images_obs);
297
		$resultat_suppression_lien_images_obs = $this->executerRequeteSimple($requete_suppression_lien_images_obs);
299
		
298
 
300
		if (!$resultat_suppression_image) {
299
		if (!$resultat_suppression_image) {
301
			$message =  'Erreur lors de la suppression de l\'image' ;
300
			$message =  'Erreur lors de la suppression de l\'image' ;
302
			trigger_error($message, E_USER_ERROR);
301
			trigger_error($message, E_USER_ERROR);
303
		}
302
		}
304
		
303
 
305
		if (!$resultat_suppression_lien_images_obs) {
304
		if (!$resultat_suppression_lien_images_obs) {
306
			$message =  'Erreur lors de la suppression des observations associées à l\'image' ;
305
			$message =  'Erreur lors de la suppression des observations associées à l\'image' ;
Line 307... Line 306...
307
			trigger_error($message, E_USER_ERROR);
306
			trigger_error($message, E_USER_ERROR);
308
		}
307
		}
309
 
308
 
310
		$manipulateur_image = new ImageRecreation($this->config);
309
		$manipulateur_image = new ImageRecreation($this->config);
311
		
310
 
312
		$tableau_ids_image = split(',',$ids_images);
311
		$tableau_ids_image = split(',',$ids_images);
313
		
312
 
Line 314... Line 313...
314
		foreach($tableau_ids_image as $id_image_a_detruire) {
313
		foreach($tableau_ids_image as $id_image_a_detruire) {
315
        	$destruction_fichier_image = $manipulateur_image->detruireImageSurDisque($id_image_a_detruire);
314
        	$destruction_fichier_image = $manipulateur_image->detruireImageSurDisque($id_image_a_detruire);
316
		}
315
		}
317
 
316
 
318
		$this->envoyer('OK');
317
		$this->envoyer('OK');
319
	}
318
	}
320
	
319
 
321
	private function estUneSuiteIdentifiantsImage($chaine) {
320
	private function estUneSuiteIdentifiantsImage($chaine) {
322
		
321
 
323
		// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules
322
		// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules
324
		// sans virgule terminale
323
		// sans virgule terminale
325
		$reg_exp = "/^(([0-9])+,)*([0-9])+$/";
324
		$reg_exp = "/^(([0-9])+,)*([0-9])+$/";
Line 326... Line 325...
326
		
325
 
327
		return preg_match($reg_exp, $chaine);
326
		return preg_match($reg_exp, $chaine);
328
		
327