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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 758 - (show annotations)
Mon Nov 19 17:12:09 2012 UTC (12 years, 2 months ago) by mlimic
File size: 13462 byte(s)
Ajout des commentaires.

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

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26