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 |
?> |