/[openfoncier]/trunk/services/metier/metiermanager.php
ViewVC logotype

Contents of /trunk/services/metier/metiermanager.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 767 - (show annotations)
Tue Nov 20 11:50:00 2012 UTC (12 years, 2 months ago) by fmichon
File size: 14125 byte(s)
Indentation, Optimisation et Commentaires + suppression de la méthode verifieResultatBD + Utilisation de la méthode addToLog + Ajout de logs sur les requêtes SQL

1 <?php
2 /**
3 * Ce fichier permet de déclarer la classe de base MetierManager qui permet
4 * de fournir des méthodes communes aux classes métiers effectuant les
5 * traitements métiers nécessaires aux différentes ressources exposées.
6 *
7 * @package openfoncier
8 * @version SVN : $Id$
9 */
10
11 //
12 require_once("../obj/utils.class.php");
13
14 /**
15 *
16 */
17 class MetierManager {
18
19 /**
20 * @access protected
21 * @var string
22 */
23 var $KO = 'KO';
24 var $OK = 'OK';
25 var $NA = 'NA'; // not apllicable
26 var $BAD_DATA = 'BAD_DATA';
27 var $DEBUG = 0;
28 /**#@-*/
29
30 /**
31 * Constructeur
32 *
33 * Attribue les valeurs au $_SESSION['collectivite'] et $_SESSION['login']
34 * @todo La valeur stockee dans $_SESSION['collectivite'] doit etre
35 * obtenue plutot que code en dur.
36 * @todo La valeur stockee dans $_SESSION['login'] doit etre
37 * obtenue plutot que code en dur.
38 * @uses utils Utilise obj/utils.class.php pour etablir une connexion BD
39 * @uses application::connectDatabase() Dans cette fonction l'execution
40 * pourrait s'terminer si la connexion avec BD echuait. Pour empecher
41 * que cela se produise, on mit $_SESSION['login'] a une valeur qui est
42 * pas vide est qui donne l'utilisateur tout le droit necessaire.
43 */
44 protected function __construct() {
45
46 // Logger
47 $this->addToLog("__construct(): start", EXTRA_VERBOSE_MODE);
48
49 //
50 session_start();
51 // Setter les variables de $_SESSION pour la connexion avec BD
52 $_SESSION['collectivite'] = 1;
53 // login doit etre mis a une valeur qui n'est pas une chaine vide, et
54 // le $_SESSION['justlogin'] NE DOIT PAS ETRE set pour que l'execution
55 // ne s'arrete pas dans la fonction isAuthenticated() de l'om_application
56 $_SESSION['login'] = "admin";
57
58 // Genere une connexion a la base de donnees
59 $this->f = new utils("nohtml");
60
61 // sauvegarde la reference au BD
62 $this->db = $this->f->db;
63
64 // initialise le msg attribute qui est utilise pour stocker les
65 // messages de retour (reussite ou erreur)
66 $this->msg = '';
67
68 // Logger
69 $this->addToLog("__construct(): end", EXTRA_VERBOSE_MODE);
70
71 }
72
73 /*
74 * Destructeur
75 *
76 * Unsets the instance of the utils class.
77 * Unsets in the $_SESSION the key=>value pairs that were set in
78 * the constructor.
79 */
80 protected function __destruct() {
81
82 // Logger
83 $this->addToLog("__destruct(): start", EXTRA_VERBOSE_MODE);
84
85 //
86 unset($this->f);
87
88 //
89 unset($_SESSION['login']);
90 unset($_SESSION['collectivite']);
91
92 // Logger
93 $this->addToLog("__destruct(): end", EXTRA_VERBOSE_MODE);
94
95 // Mode DEBUG
96 // logger::instance()->writeLogToFile();
97
98 }
99
100 /*
101 * Fait l'insertion d'un redord dans la BD par l'appel de la methode
102 * dbform::ajouter().
103 *
104 * Precondition: $this->metier_instance n'est pas NULL.
105 *
106 * @uses dbform::ajouter() La methode qui fait l'insertion dans la BD.
107 * @param mixed $data Tableau qui contient les donnees a ajouter dans la BD
108 * @param string $msg_OK Le message a retourner en cas de success
109 * @param string $msg_KO Le message a retourner en cas de echec
110 * @return string En cas de success on retourne 'OK'. En cas d'erreur
111 * on retourne le message d'erreur stocke dans l'atribut $msg, si l'atribut
112 * $msg n'est pas vide, ou un message d'erreur generique si $msg est vide.
113 */
114 protected function ajouter(&$data, $msg_OK = null, $msg_KO = null) {
115 // essai d'ajout des donnees dans la base de donnees
116 $this->metier_instance->ajouter($data, $this->db, $this->DEBUG);
117 if ($this->metier_instance->correct == false) {
118 if (isset($this->metier_instance->msg)
119 && !empty($this->metier_instance->msg)) {
120 $this->setMessage($this->filtreBalisesHtml(
121 $this->metier_instance->msg));
122 return $this->KO;
123 }
124 $this->setMessage($msg_KO);
125 return $this->KO;
126 }
127 // now check for any DB errors
128 if (isset($this->metier_instance->errors['db_debuginfo'])) {
129 $this->setMessage($msg_KO);
130 return $this->KO;
131 }
132 // everything went fine, so OK
133 $this->setMessage($msg_OK);
134 return $this->OK;
135 }
136
137
138 /*
139 * Fait l'insertion d'un redord dans la BD par l'appel de la methode
140 * dbform::modifier() method.
141 *
142 * Precondition: $this->metier_instance n'est pas NULL.
143 *
144 * @uses dbform::modifier() La methode qui fait la modification des
145 * donnees dans la BD.
146 * @param mixed $data Tableau qui contient les donnees a modifier dans la BD
147 * @param string $msg_OK Le message a retourner en cas de success
148 * @param string $msg_KO Le message a retourner en cas de echec
149 * @return string Retourne 'OK' en reussite, une message d'erreur en
150 * cas d'echec si le message d'erreur etait stocke dans $this->msg, ou
151 * un message d'erreur generique autrement.
152 */
153 protected function modifier($data, $msg_OK = null, $msg_KO = null) {
154 // essai de la modification des donnees dans la base de donnees
155 $this->metier_instance->modifier($data, $this->db, $this->DEBUG);
156 if ($this->metier_instance->correct == false) {
157 if (isset($this->metier_instance->msg)
158 && !empty($this->metier_instance->msg)) {
159 $this->setMessage($this->filtreBalisesHtml(
160 $this->metier_instance->msg));
161 return $this->KO;
162 }
163 $this->setMessage($msg_KO);
164 return $this->KO;
165 }
166 // now check for any DB errors
167 if (isset($this->metier_instance->errors['db_debuginfo'])) {
168 $this->setMessage($msg_KO);
169 return $this->KO;
170 }
171 $this->setMessage($msg_OK);
172 return $this->OK;
173 }
174
175
176 /*
177 * Fait la suppression d'un redord dans la BD par l'appel de la methode
178 * dbform::supprimer() method.
179 *
180 * Precondition: $this->metier_instance n'est pas NULL.
181 *
182 * @uses dbform::supprimer() La methode qui fait la suppression des
183 * donnees dans la BD.
184 * @param mixed $data Tableau qui contient les donnees a modifier dans la BD
185 * @param string $msg_OK Le message a retourner en cas de success
186 * @param string $msg_KO Le message a retourner en cas de echec *
187 * @return string Retourne 'OK' en reussite, une message d'erreur en
188 * cas d'echec si le message d'erreur etait stocke dans $this->msg, ou
189 * un message d'erreur generique autrement.
190 */
191 protected function supprimer(&$data, $msg_OK, $msg_KO) {
192 // essai de la suppression des donnes dans la base de donnees
193 $this->metier_instance->supprimer($data, $this->db, $this->DEBUG);
194 if ($this->metier_instance->correct == false) {
195 if (isset($this->metier_instance->msg)
196 && !empty($this->metier_instance->msg)) {
197 $this->setMessage($this->filtreBalisesHtml(
198 $this->metier_instance->msg));
199 return $this->KO;
200 }
201 $this->setMessage($msg_KO);
202 return $this->KO;
203 }
204 // verifie que il n'y a pas eu des erreurs de la BD
205 if (isset($this->metier_instance->errors['db_debuginfo'])) {
206 $this->setMessage($msg_KO);
207 return $this->KO;
208 }
209 $this->setMessage($msg_OK);
210 return $this->OK;
211 }
212
213 /*
214 * Attribue une valeur au attribute $msg de la classe. Utilise dans le
215 * retour d'une demande arrive par l'inteface REST
216 * @param string $msg The chaine des caracteres a stocker dans
217 * l'attribute msg.
218 */
219 protected function setMessage($msg) {
220 if ($msg) {
221 $this->msg = $msg;
222 }
223 }
224
225
226 /*
227 * Retourne le chaine des caracteres stocke dans l'attribut $msg
228 * @return string La valeur de $this->msg.
229 */
230 public function getMessage() {
231 return $this->msg;
232 }
233
234 /*
235 * Ajoute une chaine des caracteres dans le log.
236 * @param string $message Le message qui doit etre ajoute dans le log.
237 * @param string $type Le mode de log.
238 * @todo Qu'est ce que on va faire avec des messages d'erreur de la BD si
239 * le traitement etait initie par une demande arrivee par REST ?
240 */
241 function addToLog($message, $type = DEBUG_MODE) {
242 //
243 logger::instance()->log("class ".get_class($this)." - ".$message, $type);
244 }
245
246 // {{{
247
248 /**
249 * Le principe de cette méthode est de récupérer la valeur de la clé
250 * primaire de l'instance de l'objet métier.
251 */
252 protected function getMetierInstanceValForPrimaryKey() {
253
254 //
255 return $this->getMetierInstanceValForField($this->metier_instance->clePrimaire);
256
257 }
258
259 /**
260 * Le principe de cette méthode est de récupérer la valeur du field passé
261 * en paramètre dans l'attribut 'val' de l'instance de l'objet métier.
262 */
263 protected function getMetierInstanceValForField($field) {
264
265 // Si l'objet métier n'a pas été instancié alors on retourne NULL
266 if ($this->metier_instance == NULL) {
267 return NULL;
268 }
269 // On récupère la clé de la valeur '$field' dans l'attribut 'champs' de
270 // l'objet
271 $key = array_search($field,
272 $this->metier_instance->champs);
273 // Si la clé n'est pas présente dans le tableau alors on retourne NULL
274 if (is_null($key) || $key === false) {
275 return NULL;
276 }
277 // Si on ne retrouve pas la clé dans l'attribut 'val' de l'objet alors
278 // on retour NULL
279 if (!isset($this->metier_instance->val[$key])) {
280 return NULL;
281 }
282 // Logger
283 $this->addToLog("getMetierInstanceValForField(): \$field = \"".$field."\" ; return ".$this->metier_instance->val[$key].";", EXTRA_VERBOSE_MODE);
284 // On retourne la valeur du champ représentant la clé primaire
285 return $this->metier_instance->val[$key];
286
287 }
288
289 // }}}
290
291 // {{{ METHODES UTILITAIRES
292
293 /**
294 * Cette méthode permet de supprimer les balises HTML d'une chaîne de
295 * caractères
296 *
297 * Filters out the HTML tags from a string.
298 *
299 * @param string $var The string from which to filter out the HTML tags.
300 * @return string Returns $var without the HTML tags.
301 */
302 private function filtreBalisesHtml($var) {
303 $pattern = '/<[\/]*[\sa-zA-Z0-9="]*[\/]*>/';
304 $replacement = '';
305 return preg_replace($pattern, $replacement, $var);
306 }
307
308 /**
309 * Cette méthode vérifier qu'une date se trouve dans un intervalle
310 *
311 * Verifies that a date falls inside of a date interval
312 * @param string $date_str The string that should fall
313 * within the interval
314 * @param string $date_start_str The begining of the interval
315 * @param string $date_end_str The end of the interval
316 * @return book true if $date_str is found inside of the
317 * interval, false otherwise
318 */
319 protected function dateInsideInterval($date_str, $date_start_str = null,
320 $date_end_str = null) {
321 $dates_str = array($date_start_str, $date_str, $date_end_str);
322 if (count($dates_str) == 1) {
323 return true;
324 }
325 $dates = array();
326 $prev_date = -1;
327 for ($i = 0; $i < 3; $i++) {
328 if ($dates_str[$i] == null) {
329 $dates[] = null;
330 continue;
331 }
332 $d = explode('/', $dates_str[$i]);
333 $date = strtotime($d[2].'-'.$d[1].'-'.$d[0]);
334 if ($i > 0 && $date < $prev_date) {
335 return false;
336 }
337 $prev_date = $date;
338 }
339 return true;
340 }
341
342 /**
343 * Cette méthode vérife la validité d'un timestamp
344 * @param string $date_str Chaine des chracteres contenant le datestamp
345 * dans la forme JJ/MM/YYYY H:MI"
346 * @param string $date_db Parametre de sortie. Il contient la date dans le
347 * format de BD timestamp: 'YYYY-MM-JJ hh:mm'
348 * @param bool $time_search Indicated wheather hours and minutes should be
349 * searched for in the $date_str or not
350 * @return True if the timestamp is valid, false otherwise.
351 */
352 protected function timestampValide($date_str, &$date_db, $time_search = false) {
353 $date_db = null;
354 // check that the date is valid
355 $date_time = explode(" ", $date_str);
356 if (count($date_time) != 2 && $time_search) {
357 return false; // bad date
358 }
359 // first verify that the date is correct
360 $date = explode("/", $date_time[0]);
361 if (count($date) != 3) {
362 return false; // bad date
363 }
364 if (!checkdate($date[1], $date[0], $date[2])) {
365 return false; // bad date
366 }
367
368 if ($time_search && count($date_time) != 2) {
369 return false; // time not present even though searched for
370 }
371 // verify that the time is good
372 if ($time_search) {
373 $time_str = explode(':', $date_time[1]);
374 if (count($time_str) <= 1) {
375 return false; // time in bad format
376 }
377 // only interested in hours and minutes
378 $hours = intval($time_str[0]);
379 $minutes = intval($time_str[1]);
380 if ($hours < 0 || $hours > 23) {
381 return false; // bad hour
382 }
383 if ($minutes < 0 || $minutes > 59) {
384 return false;
385 }
386 }
387 $date_db = $date[2].'-'.$date[1].'-'.$date[0];
388 if ($time_search) {
389 $date_db .= ' '.$hours.':'.$minutes;
390 }
391 return true;
392 }
393
394 // }}}
395
396 }
397
398 ?>

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26