1 |
mbroquet |
3730 |
<?php |
2 |
|
|
/** |
3 |
|
|
* OM_WIDGET - Surcharge du core |
4 |
|
|
* |
5 |
|
|
* L'objectif de la surcharge est de coder les vues spécifiques des widgets |
6 |
|
|
* de type 'file'. |
7 |
|
|
* |
8 |
|
|
* @package openads |
9 |
|
|
* @version SVN : $Id: om_widget.class.php 5673 2015-12-21 19:35:24Z nmeucci $ |
10 |
|
|
*/ |
11 |
|
|
|
12 |
|
|
require_once "../core/obj/om_widget.class.php"; |
13 |
|
|
|
14 |
|
|
class om_widget extends om_widget_core { |
15 |
|
|
|
16 |
|
|
function __construct($id, &$dnu1 = null, $dnu2 = null) { |
17 |
|
|
$this->constructeur($id); |
18 |
|
|
} |
19 |
|
|
|
20 |
|
|
/** |
21 |
|
|
* WIDGET DASHBOARD - widget_recherche_dossier. |
22 |
|
|
* |
23 |
|
|
* Quatre cas d'utilisation : |
24 |
|
|
* - 1 - La valeur recherchée correspond exactement au code d'un DI, |
25 |
|
|
* alors on accède directement à la fiche de visualisation du DI. |
26 |
|
|
* - 2 - La valeur recherchée renvoi plusieurs DI, alors on accède au |
27 |
|
|
* listing des dossiers d'instruction avec le formulaire de |
28 |
|
|
* recherche avancée pré-rempli avec la valeur saisie. |
29 |
|
|
* - 3 - La valeur recherchée renvoi aucun enregistrement, alors on |
30 |
|
|
* affiche un message en ce sens directement dans le widget. |
31 |
|
|
* - 4 - Aucune valeur n'est saisie, alors on affiche un message en ce |
32 |
|
|
* sens directement dans le widget. |
33 |
|
|
* |
34 |
|
|
* @return void |
35 |
|
|
*/ |
36 |
|
|
function view_widget_recherche_dossier($content = null) { |
37 |
|
|
|
38 |
|
|
/** |
39 |
|
|
* Traitement de la validation du formulaire |
40 |
|
|
*/ |
41 |
|
|
// |
42 |
|
|
if ($this->f->get_submitted_post_value("validation") != null |
43 |
|
|
&& $this->f->get_submitted_post_value("dossier") !== null |
44 |
|
|
&& $this->f->get_submitted_post_value("dossier") != "") { |
45 |
|
|
// Mémorisation de la recherche |
46 |
|
|
$search = $this->f->db->escapesimple($this->f->get_submitted_post_value("dossier")); |
47 |
|
|
// Ajout d'une étoile au début s'il n'y en n'a pas. |
48 |
|
|
// Par defaut * est toujours ajouté à la fin des recherches. |
49 |
|
|
if (substr($search, 0, 1) != '*') { |
50 |
|
|
$search = '*'.$search; |
51 |
|
|
} |
52 |
|
|
// Traitement des valeurs postées |
53 |
|
|
$posted_dossiers = $this->f->db->escapesimple(strtolower(str_replace("*", "%", $this->f->get_submitted_post_value("dossier")))); |
54 |
|
|
$posted_dossiers = str_replace(';', ',', $posted_dossiers); |
55 |
|
|
|
56 |
|
|
// |
57 |
|
|
// UNE VALEUR SAISIE |
58 |
|
|
// |
59 |
|
|
|
60 |
|
|
// WHERE - Filtre Collectivité |
61 |
|
|
$where_collectivite = ""; |
62 |
|
|
// Si collectivité utilisateur mono alors filtre sur celle-ci |
63 |
|
|
if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) { |
64 |
|
|
// |
65 |
|
|
$where_collectivite = " |
66 |
|
|
AND dossier.om_collectivite=".$_SESSION['collectivite']." |
67 |
|
|
"; |
68 |
|
|
} |
69 |
|
|
|
70 |
|
|
// Construction de la requête |
71 |
|
|
// Pour chaque dossier on cherche sur les deux champs du code du |
72 |
|
|
// dossier (un avec et un sans espaces) |
73 |
|
|
$posted_dossiers = explode(',', $posted_dossiers); |
74 |
|
|
$liste_dossiers = array(); |
75 |
|
|
foreach ($posted_dossiers as $posted_dossier) { |
76 |
|
|
$sql = " |
77 |
|
|
SELECT |
78 |
|
|
dossier |
79 |
|
|
FROM |
80 |
|
|
".DB_PREFIXE."dossier |
81 |
|
|
WHERE |
82 |
|
|
(LOWER(dossier.dossier) LIKE '%".$posted_dossier."%' |
83 |
|
|
OR LOWER(dossier.dossier_libelle) LIKE '%".$posted_dossier."%' ) |
84 |
|
|
"; |
85 |
|
|
$sql .= $where_collectivite; |
86 |
|
|
// Exécution de la requête |
87 |
|
|
$res = $this->f->db->query($sql); |
88 |
|
|
$this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE); |
89 |
|
|
$this->f->isDatabaseError($res); |
90 |
|
|
// On récupère les numéros de dossier dans les résultats |
91 |
|
|
while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { |
92 |
|
|
$liste_dossiers[] = $row['dossier']; |
93 |
|
|
} |
94 |
|
|
} |
95 |
|
|
$total_dossiers = count($liste_dossiers); |
96 |
|
|
// Si on obtient un seul résultat |
97 |
|
|
if ($total_dossiers == 1) { |
98 |
|
|
// On reformate le dossier |
99 |
|
|
$dossier = strtoupper(str_replace(' ', '', $liste_dossiers[0])); |
100 |
|
|
// On redirige vers le listing des DI |
101 |
|
|
echo ' |
102 |
|
|
<script type="text/javascript" > |
103 |
|
|
widget_recherche_dossier(\''.$dossier.'\', 1); |
104 |
|
|
</script> |
105 |
|
|
'; |
106 |
|
|
// On arrête l'exécution du script car l'utilisateur a été |
107 |
|
|
// redirigé vers un autre script |
108 |
|
|
exit(); |
109 |
|
|
} |
110 |
|
|
// Si on obtient plusieurs résultats |
111 |
|
|
if ($total_dossiers > 1) { |
112 |
|
|
// On redirige vers le listing des DI |
113 |
|
|
echo ' |
114 |
|
|
<script type="text/javascript" > |
115 |
|
|
widget_recherche_dossier(\''.$search.'\', '.$total_dossiers.'); |
116 |
|
|
</script> |
117 |
|
|
'; |
118 |
|
|
// On arrête l'exécution du script car l'utilisateur a été |
119 |
|
|
// redirigé vers un autre script |
120 |
|
|
exit(); |
121 |
|
|
} |
122 |
|
|
// Cas d'utilisation n°3 |
123 |
|
|
// Si aucun dossier trouve |
124 |
|
|
// Affiche un message d'erreur |
125 |
|
|
$erreur = _("Aucun dossier trouve"); |
126 |
|
|
|
127 |
|
|
} elseif ($this->f->get_submitted_post_value("validation") != null |
128 |
|
|
&& $this->f->get_submitted_post_value("dossier") !== null |
129 |
|
|
&& $this->f->get_submitted_post_value("dossier") == '') { |
130 |
|
|
|
131 |
|
|
// |
132 |
|
|
// AUCUNE VALEUR SAISIE |
133 |
|
|
// |
134 |
|
|
|
135 |
|
|
// Cas d'utilisation n°4 |
136 |
|
|
// Affiche un message d'erreur |
137 |
|
|
$erreur = _("Veuillez saisir un No de dossier."); |
138 |
|
|
|
139 |
|
|
} |
140 |
|
|
|
141 |
|
|
/** |
142 |
|
|
* Affichage du widget |
143 |
|
|
*/ |
144 |
|
|
// Affichage du message d'informations |
145 |
|
|
printf( |
146 |
|
|
'<div class="widget-help"><span class="info-16" title="%s"></span></div>', |
147 |
|
|
_("Permet la recherche directe de dossiers d'instruction.\n\n". |
148 |
|
|
"Deux modes de saisie sont possibles :\n". |
149 |
|
|
"- Code de dossier intégral 'PC0130551300027P0' ou 'PC 013055 13 00027P0' pour un accès direct à la fiche de visualisation du dossier d'instruction,\n". |
150 |
|
|
"- Code de dossier partiel 'DP' ou 'PC*P0' ou '*013055*' pour un accès au formulaire de recherche avancée des dossiers d'instruction.") |
151 |
|
|
); |
152 |
|
|
// Ouverture du form |
153 |
|
|
echo "\t<form method=\"post\" id=\"widget_recherche_dossier_form\" action=\"../scr/dashboard.php\">\n"; |
154 |
|
|
// Affichage d'un éventuel message d'erreur |
155 |
|
|
if (isset($erreur) && $erreur != "") { |
156 |
|
|
$class = "error"; |
157 |
|
|
$this->f->displayMessage($class, $erreur); |
158 |
|
|
} |
159 |
|
|
// Configuration du formulaire de recherche |
160 |
|
|
$champs = array("dossier"); |
161 |
|
|
$form = new $this->om_formulaire(null, 0, 0, $champs); |
162 |
|
|
$form->setLib("dossier", '<span class="om-icon om-icon-16 om-icon-fix loupe-16">Recherche</span>'); |
163 |
|
|
$form->setType("dossier", "text"); |
164 |
|
|
$form->setTaille("dossier", 20); |
165 |
|
|
$form->setMax("dossier", 250); |
166 |
|
|
// Affichage du formulaire |
167 |
|
|
$form->entete(); |
168 |
|
|
$form->afficher($champs, 0, false, false); |
169 |
|
|
$form->enpied(); |
170 |
|
|
// Affichage des contrôles du formulaire |
171 |
|
|
echo "\t<div class=\"formControls\">\n"; |
172 |
|
|
echo "\t\t<input type=\"submit\" class=\"om-button ui-button ui-widget ui-state-default ui-corner-all\" |
173 |
|
|
value=\""._("Valider")."\" name=\"validation\" />\n"; |
174 |
|
|
echo "\t</div>\n"; |
175 |
|
|
// Fermeture du form |
176 |
|
|
echo "\t</form>\n"; |
177 |
|
|
} |
178 |
|
|
|
179 |
|
|
/** |
180 |
|
|
* Cette méthode permet de récupérer la configuration du widget 'Dossiers |
181 |
|
|
* limites'. |
182 |
|
|
* |
183 |
|
|
* @return array |
184 |
|
|
*/ |
185 |
|
|
function get_config_dossiers_limites($arguments) { |
186 |
|
|
// Initialisation du tableau des paramètres avec ses valeur par défaut |
187 |
|
|
$arguments_default = array( |
188 |
|
|
"nombre_de_jours" => 15, |
189 |
|
|
"codes_datd" => null, |
190 |
|
|
"filtre" => "instructeur", |
191 |
|
|
); |
192 |
|
|
// Vérification des arguments |
193 |
|
|
foreach ($arguments_default as $key => $value) { |
194 |
|
|
// |
195 |
|
|
if (isset($arguments[$key])) { |
196 |
|
|
// |
197 |
|
|
$elem = trim($arguments[$key]); |
198 |
|
|
// |
199 |
|
|
if ($key === "nombre_de_jours" |
200 |
|
|
&& intval($elem) > 0) { |
201 |
|
|
// Ce doit être un entier |
202 |
|
|
$arguments[$key] = intval($elem); |
203 |
|
|
continue; |
204 |
|
|
} elseif ($key === "codes_datd" |
205 |
|
|
&& $elem != "") { |
206 |
|
|
// Ce doit être un tableau |
207 |
|
|
$arguments[$key] = explode(";", $elem); |
208 |
|
|
continue; |
209 |
|
|
} elseif ($key === "filtre" |
210 |
|
|
&& in_array($elem, array("instructeur", "division", "aucun"))) { |
211 |
|
|
// La valeur doit être dans cette liste |
212 |
|
|
$arguments[$key] = $elem; |
213 |
|
|
continue; |
214 |
|
|
} |
215 |
|
|
} |
216 |
|
|
// |
217 |
|
|
$arguments[$key] = $value; |
218 |
|
|
} |
219 |
|
|
// |
220 |
|
|
$nombre_de_jours = $arguments["nombre_de_jours"]; |
221 |
|
|
$codes_datd = $arguments["codes_datd"]; |
222 |
|
|
$filtre = $arguments["filtre"]; |
223 |
|
|
|
224 |
|
|
/** |
225 |
|
|
* Construction de la requête |
226 |
|
|
*/ |
227 |
|
|
// SELECT |
228 |
|
|
$query_ct_select = " |
229 |
|
|
dossier.dossier, |
230 |
|
|
dossier.dossier_libelle, |
231 |
|
|
dossier.date_limite, |
232 |
|
|
dossier.date_limite_incompletude, |
233 |
|
|
CASE |
234 |
|
|
WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE |
235 |
|
|
THEN to_char(dossier.date_limite_incompletude, 'DD/MM/YYYY') |
236 |
|
|
ELSE |
237 |
|
|
to_char(dossier.date_limite, 'DD/MM/YYYY') |
238 |
|
|
END as date_limite_na, |
239 |
|
|
COALESCE( |
240 |
|
|
demandeur.particulier_nom, |
241 |
|
|
demandeur.personne_morale_denomination |
242 |
|
|
) AS nom_petitionnaire, |
243 |
|
|
CASE |
244 |
|
|
WHEN dossier.enjeu_erp is TRUE |
245 |
|
|
THEN '<span class=''om-icon om-icon-16 om-icon-fix enjeu_erp-16'' title=''"._('Enjeu ERP')."''>ERP</span>' |
246 |
|
|
ELSE |
247 |
|
|
'' |
248 |
|
|
END |
249 |
|
|
|| |
250 |
|
|
CASE |
251 |
|
|
WHEN dossier.enjeu_urba is TRUE |
252 |
|
|
THEN '<span class=''om-icon om-icon-16 om-icon-fix enjeu_urba-16'' title=''"._('Enjeu Urba')."''>URBA</span>' |
253 |
|
|
ELSE |
254 |
|
|
'' |
255 |
|
|
END AS enjeu |
256 |
|
|
"; |
257 |
|
|
// SELECT - CHAMPAFFICHE |
258 |
|
|
$query_ct_select_champaffiche = array( |
259 |
|
|
'dossier.dossier as "'._("dossier").'"', |
260 |
|
|
'dossier.dossier_libelle as "'._("dossier").'"', |
261 |
|
|
'COALESCE( |
262 |
|
|
demandeur.particulier_nom, |
263 |
|
|
demandeur.personne_morale_denomination |
264 |
|
|
) AS "'._("nom_petitionnaire").'"', |
265 |
|
|
'CASE |
266 |
|
|
WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE |
267 |
|
|
THEN to_char(dossier.date_limite_incompletude, \'DD/MM/YYYY\') |
268 |
|
|
ELSE |
269 |
|
|
to_char(dossier.date_limite, \'DD/MM/YYYY\') |
270 |
|
|
END as "'._("date_limite").'"', |
271 |
|
|
'CASE |
272 |
|
|
WHEN dossier.enjeu_erp is TRUE |
273 |
|
|
THEN \'<span class="om-icon om-icon-16 om-icon-fix enjeu_erp-16" title="'._('Enjeu ERP').'">ERP</span>\' |
274 |
|
|
ELSE |
275 |
|
|
\'\' |
276 |
|
|
END |
277 |
|
|
|| |
278 |
|
|
CASE |
279 |
|
|
WHEN dossier.enjeu_urba is TRUE |
280 |
|
|
THEN \'<span class="om-icon om-icon-16 om-icon-fix enjeu_urba-16" title="'._('Enjeu Urba').'">URBA</span>\' |
281 |
|
|
ELSE |
282 |
|
|
\'\' |
283 |
|
|
END AS "'._("enjeu").'"', |
284 |
|
|
// XXX Attention cette colonne est cachée en css est doit donc restée la dernière du tableau |
285 |
|
|
'CASE WHEN incomplet_notifie IS TRUE AND incompletude IS TRUE THEN |
286 |
|
|
dossier.date_limite_incompletude ELSE |
287 |
|
|
dossier.date_limite END as date_limite_na', |
288 |
|
|
); |
289 |
|
|
// FROM |
290 |
|
|
$query_ct_from = " |
291 |
|
|
".DB_PREFIXE."dossier |
292 |
|
|
LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur |
293 |
|
|
ON dossier.dossier = lien_dossier_demandeur.dossier AND lien_dossier_demandeur.petitionnaire_principal IS TRUE |
294 |
|
|
LEFT JOIN ".DB_PREFIXE."demandeur |
295 |
|
|
ON lien_dossier_demandeur.demandeur = demandeur.demandeur |
296 |
|
|
LEFT JOIN ".DB_PREFIXE."dossier_autorisation |
297 |
|
|
ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation |
298 |
|
|
LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille |
299 |
|
|
ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille |
300 |
|
|
LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type |
301 |
|
|
ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type |
302 |
|
|
LEFT JOIN ".DB_PREFIXE."instructeur |
303 |
|
|
ON dossier.instructeur=instructeur.instructeur |
304 |
|
|
LEFT JOIN ".DB_PREFIXE."om_utilisateur |
305 |
|
|
ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur |
306 |
|
|
"; |
307 |
|
|
// WHERE - COMMON |
308 |
|
|
$query_ct_where_common = " |
309 |
|
|
( |
310 |
|
|
( |
311 |
|
|
dossier.incomplet_notifie IS FALSE |
312 |
|
|
AND date_limite <= CURRENT_TIMESTAMP + ".$nombre_de_jours." * interval '1 day' |
313 |
|
|
) |
314 |
|
|
OR |
315 |
|
|
( |
316 |
|
|
dossier.incomplet_notifie IS TRUE |
317 |
|
|
AND dossier.incompletude IS TRUE |
318 |
|
|
AND date_limite_incompletude <= CURRENT_TIMESTAMP + ".$nombre_de_jours." * interval '1 day' |
319 |
|
|
) |
320 |
|
|
) |
321 |
|
|
AND dossier.avis_decision IS NULL |
322 |
|
|
AND LOWER(dossier.accord_tacite) = 'oui' |
323 |
|
|
"; |
324 |
|
|
// WHERE - DATD |
325 |
|
|
// Filtre sur le type détaillé des dossiers |
326 |
|
|
$query_ct_where_datd_filter = ""; |
327 |
|
|
if (!is_null($codes_datd) |
328 |
|
|
&& is_array($codes_datd) |
329 |
|
|
&& count($codes_datd) != 0) { |
330 |
|
|
// |
331 |
|
|
$sql_codes = ""; |
332 |
|
|
// |
333 |
|
|
foreach ($codes_datd as $code) { |
334 |
|
|
$sql_codes .= " LOWER(dossier_autorisation_type_detaille.code) = '".$this->f->db->escapesimple(strtolower($code))."' OR "; |
335 |
|
|
} |
336 |
|
|
$sql_codes = substr($sql_codes, 0, count($sql_codes) - 4); |
337 |
|
|
// |
338 |
|
|
$query_ct_where_datd_filter = " AND ( ".$sql_codes." ) "; |
339 |
|
|
} |
340 |
|
|
// WHERE - USER |
341 |
|
|
// Filtre sur les dossiers qui concernent l'utilisateur |
342 |
|
|
$query_ct_where_user_filter = ""; |
343 |
|
|
// |
344 |
|
|
if ($filtre == "instructeur") { |
345 |
|
|
// |
346 |
|
|
$query_ct_where_user_filter = " |
347 |
|
|
AND om_utilisateur.login='".$_SESSION['login']."' |
348 |
|
|
"; |
349 |
|
|
} elseif ($filtre == "division") { |
350 |
|
|
// |
351 |
|
|
$query_ct_where_user_filter .= " |
352 |
|
|
AND dossier.division = ".$_SESSION['division']." |
353 |
|
|
"; |
354 |
|
|
} elseif ($filtre == "aucun") { |
355 |
|
|
// |
356 |
|
|
if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) { |
357 |
|
|
$query_ct_where_user_filter = " |
358 |
|
|
AND dossier.om_collectivite=".$_SESSION['collectivite']." |
359 |
|
|
"; |
360 |
|
|
} |
361 |
|
|
} |
362 |
|
|
// ORDER BY |
363 |
|
|
$query_ct_orderby = " |
364 |
|
|
date_limite_na |
365 |
|
|
"; |
366 |
|
|
|
367 |
|
|
/** |
368 |
|
|
* Message d'aide |
369 |
|
|
*/ |
370 |
|
|
// |
371 |
|
|
$message_filtre = ""; |
372 |
|
|
// |
373 |
|
|
switch($filtre) { |
374 |
|
|
case "instructeur" : |
375 |
|
|
$message_filtre = " "._("(filtrés par instructeur)"); |
376 |
|
|
break; |
377 |
|
|
case "division" : |
378 |
|
|
$message_filtre = " "._("(filtrés par division)"); |
379 |
|
|
break; |
380 |
|
|
} |
381 |
|
|
// |
382 |
|
|
$message_help = sprintf( |
383 |
|
|
_("Les dossiers%s avec acceptation tacite sur lesquels aucune décision n'a été prise et dont la date limite est dans moins de %s jours%s."), |
384 |
|
|
(is_null($codes_datd) ? "": " (".implode(";",$codes_datd).")"), |
385 |
|
|
$nombre_de_jours, |
386 |
|
|
$message_filtre |
387 |
|
|
); |
388 |
|
|
|
389 |
|
|
/** |
390 |
|
|
* Return |
391 |
|
|
*/ |
392 |
|
|
// |
393 |
|
|
return array( |
394 |
|
|
"arguments" => $arguments, |
395 |
|
|
"message_help" => $message_help, |
396 |
|
|
"query_ct_select" => $query_ct_select, |
397 |
|
|
"query_ct_select_champaffiche" => $query_ct_select_champaffiche, |
398 |
|
|
"query_ct_from" => $query_ct_from, |
399 |
|
|
"query_ct_where_common" => $query_ct_where_common, |
400 |
|
|
"query_ct_where_datd_filter" => $query_ct_where_datd_filter, |
401 |
|
|
"query_ct_where_user_filter" => $query_ct_where_user_filter, |
402 |
|
|
"query_ct_orderby" => $query_ct_orderby, |
403 |
|
|
); |
404 |
|
|
} |
405 |
|
|
|
406 |
|
|
/** |
407 |
|
|
* WIDGET DASHBOARD - Dossiers limites |
408 |
|
|
* |
409 |
|
|
* @return void |
410 |
|
|
*/ |
411 |
|
|
function view_widget_dossiers_limites($content = null) { |
412 |
|
|
|
413 |
|
|
/** |
414 |
|
|
* Ce widget est configurable via l'interface Web. Lors de la création |
415 |
|
|
* du widget dans le paramétrage il est possible de spécifier la ou les |
416 |
|
|
* options suivantes : |
417 |
|
|
* |
418 |
|
|
* - nombre_de_jours : c'est le délai en jours avant la date limite à |
419 |
|
|
* partir duquel on souhaite voir apparaître les dossiers dans le |
420 |
|
|
* widget. |
421 |
|
|
* (default) Par défaut la valeur est 15 jours. |
422 |
|
|
* |
423 |
|
|
* - codes_datd : la liste des types de dossiers à afficher. exemple : |
424 |
|
|
* "PCI;PCA;DPS;CUa;CUb". |
425 |
|
|
* (default) Par défaut tous les types sont affichés. [null] |
426 |
|
|
* |
427 |
|
|
* - filtre : |
428 |
|
|
* = instructeur |
429 |
|
|
* = division |
430 |
|
|
* = aucun |
431 |
|
|
* (default) Par défaut les dossiers sont filtrés sur l'instructeur. |
432 |
|
|
*/ |
433 |
|
|
// Liste des paramètres |
434 |
|
|
$params = array("nombre_de_jours", "codes_datd", "filtre", ); |
435 |
|
|
// Formatage des arguments reçus en paramètres |
436 |
|
|
$arguments = $this->get_arguments($content, $params); |
437 |
|
|
// Récupération de la configuration du widget |
438 |
|
|
$conf = $this->get_config_dossiers_limites($arguments); |
439 |
|
|
// |
440 |
|
|
$nombre_de_jours = $conf["arguments"]["nombre_de_jours"]; |
441 |
|
|
$codes_datd = $conf["arguments"]["codes_datd"]; |
442 |
|
|
$filtre = $conf["arguments"]["filtre"]; |
443 |
|
|
|
444 |
|
|
/** |
445 |
|
|
* Composition de la requête |
446 |
|
|
*/ |
447 |
|
|
// |
448 |
|
|
$query = sprintf(" |
449 |
|
|
SELECT |
450 |
|
|
%s |
451 |
|
|
FROM |
452 |
|
|
%s |
453 |
|
|
WHERE |
454 |
|
|
%s |
455 |
|
|
%s |
456 |
|
|
%s |
457 |
|
|
ORDER BY |
458 |
|
|
%s |
459 |
|
|
LIMIT 10", |
460 |
|
|
$conf["query_ct_select"], |
461 |
|
|
$conf["query_ct_from"], |
462 |
|
|
$conf["query_ct_where_common"], |
463 |
|
|
$conf["query_ct_where_datd_filter"], |
464 |
|
|
$conf["query_ct_where_user_filter"], |
465 |
|
|
$conf["query_ct_orderby"] |
466 |
|
|
); |
467 |
|
|
|
468 |
|
|
/** |
469 |
|
|
* Exécution de la requête |
470 |
|
|
*/ |
471 |
|
|
// |
472 |
|
|
$res = $this->f->db->query($query); |
473 |
|
|
$this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE); |
474 |
|
|
$this->f->isDatabaseError($res); |
475 |
|
|
|
476 |
|
|
// Affichage du message d'informations |
477 |
|
|
printf( |
478 |
|
|
'<div class="widget-help"><span class="info-16" title="%s"></span></div>', |
479 |
|
|
$conf["message_help"] |
480 |
|
|
); |
481 |
|
|
|
482 |
|
|
/** |
483 |
|
|
* Si il n'y a aucun dossier à afficher, alors on affiche un message |
484 |
|
|
* clair à l'utilisateur et on sort de la vue. |
485 |
|
|
*/ |
486 |
|
|
// Si il n'y a aucun dossier à afficher |
487 |
|
|
if ($res->numrows() == 0) { |
488 |
|
|
// Affichage du message d'informations |
489 |
|
|
echo _("Vous n'avez pas de dossiers limites pour le moment."); |
490 |
|
|
// Exit |
491 |
|
|
return; |
492 |
|
|
} |
493 |
|
|
|
494 |
|
|
/** |
495 |
|
|
* Template nécessaires à l'affichage du widget |
496 |
|
|
*/ |
497 |
|
|
// |
498 |
|
|
$template_table = ' |
499 |
|
|
<table class="tab-tab"> |
500 |
|
|
<thead> |
501 |
|
|
<tr class="ui-tabs-nav ui-accordion ui-state-default tab-title"> |
502 |
|
|
<th class="title col-0 firstcol"> |
503 |
|
|
<span class="name"> |
504 |
|
|
%s |
505 |
|
|
</span> |
506 |
|
|
</th> |
507 |
|
|
<th class="title col-1"> |
508 |
|
|
<span class="name"> |
509 |
|
|
%s |
510 |
|
|
</span> |
511 |
|
|
</th> |
512 |
|
|
<th class="title col-2"> |
513 |
|
|
<span class="name"> |
514 |
|
|
%s |
515 |
|
|
</span> |
516 |
|
|
</th> |
517 |
|
|
<th class="title col-3 lastcol"> |
518 |
|
|
<span class="name"> |
519 |
|
|
%s |
520 |
|
|
</span> |
521 |
|
|
</th> |
522 |
|
|
</tr> |
523 |
|
|
</thead> |
524 |
|
|
<tbody> |
525 |
|
|
%s |
526 |
|
|
</tbody> |
527 |
|
|
</table> |
528 |
|
|
'; |
529 |
|
|
// |
530 |
|
|
$template_line = ' |
531 |
|
|
<tr class="tab-data odd"> |
532 |
|
|
<td class="col-1 firstcol"> |
533 |
|
|
%s |
534 |
|
|
</td> |
535 |
|
|
<td class="col-1"> |
536 |
|
|
%s |
537 |
|
|
</td> |
538 |
|
|
<td class="col-2"> |
539 |
|
|
%s |
540 |
|
|
</td> |
541 |
|
|
<td class="col-3 lastcol"> |
542 |
|
|
%s |
543 |
|
|
</td> |
544 |
|
|
</tr> |
545 |
|
|
'; |
546 |
|
|
// |
547 |
|
|
$template_href = '../scr/form.php?obj=dossier_instruction&action=3&idx=%s'; |
548 |
|
|
// |
549 |
|
|
$template_link = ' |
550 |
|
|
<a class="lienTable" href="%s"> |
551 |
|
|
%s |
552 |
|
|
</a> |
553 |
|
|
'; |
554 |
|
|
// |
555 |
|
|
$template_footer = ' |
556 |
|
|
<div class="widget-footer"> |
557 |
|
|
<a href="%s"> |
558 |
|
|
%s |
559 |
|
|
</a> |
560 |
|
|
</div> |
561 |
|
|
'; |
562 |
|
|
|
563 |
|
|
/** |
564 |
|
|
* Si il y a des dossiers à afficher, alors on affiche le widget. |
565 |
|
|
*/ |
566 |
|
|
// On construit le contenu du tableau |
567 |
|
|
$ct_tbody = ''; |
568 |
|
|
while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { |
569 |
|
|
// On construit l'attribut href du lien |
570 |
|
|
$ct_href = sprintf( |
571 |
|
|
$template_href, |
572 |
|
|
// idx |
573 |
|
|
$row["dossier"] |
574 |
|
|
); |
575 |
|
|
// On construit la ligne |
576 |
|
|
$ct_tbody .= sprintf( |
577 |
|
|
$template_line, |
578 |
|
|
// Colonne 1 - Numéro de dossier |
579 |
|
|
sprintf( |
580 |
|
|
$template_link, |
581 |
|
|
$ct_href, |
582 |
|
|
$row["dossier_libelle"] |
583 |
|
|
), |
584 |
|
|
// Colonne 2 - Nom du pétitionnaire |
585 |
|
|
sprintf( |
586 |
|
|
$template_link, |
587 |
|
|
$ct_href, |
588 |
|
|
$row["nom_petitionnaire"] |
589 |
|
|
), |
590 |
|
|
// Colonne 3 - Date limite |
591 |
|
|
sprintf( |
592 |
|
|
$template_link, |
593 |
|
|
$ct_href, |
594 |
|
|
$this->f->formatDate($row["date_limite_na"]) |
595 |
|
|
), |
596 |
|
|
// Colonne 4 - Enjeu |
597 |
|
|
sprintf( |
598 |
|
|
$template_link, |
599 |
|
|
$ct_href, |
600 |
|
|
$row["enjeu"] |
601 |
|
|
) |
602 |
|
|
); |
603 |
|
|
} |
604 |
|
|
// Affichage du tableau listant les dossiers |
605 |
|
|
printf( |
606 |
|
|
$template_table, |
607 |
|
|
// Colonne 1 - Numéro de dossier |
608 |
|
|
_('dossier'), |
609 |
|
|
// Colonne 2 - Nom du pétitionnaire |
610 |
|
|
_('nom_petitionnaire'), |
611 |
|
|
// Colonne 3 - Date limite |
612 |
|
|
_('date_limite'), |
613 |
|
|
// Colonne 4 - Enjeu |
614 |
|
|
_('enjeu'), |
615 |
|
|
// Contenu du tableau |
616 |
|
|
$ct_tbody |
617 |
|
|
); |
618 |
|
|
// Affichage du footer |
619 |
|
|
printf( |
620 |
|
|
$template_footer, |
621 |
|
|
// href (avec les paramètres du widget) |
622 |
|
|
sprintf( |
623 |
|
|
"../scr/tab.php?obj=dossiers_limites&nombre_de_jours=%s&codes_datd=%s&filtre=%s", |
624 |
|
|
$nombre_de_jours, |
625 |
|
|
(is_null($codes_datd) ? "" : implode(";",$codes_datd)), |
626 |
|
|
$filtre |
627 |
|
|
), |
628 |
|
|
// titre |
629 |
|
|
_("Voir +") |
630 |
|
|
); |
631 |
|
|
} |
632 |
|
|
|
633 |
|
|
/** |
634 |
|
|
* Cet méthode permet de formater, la chaîne de caractères reçue du |
635 |
|
|
* paramétrage du widget en un tableau de valeurs dont les clés |
636 |
|
|
* correspondent aux clés passées en paramètre. |
637 |
|
|
* |
638 |
|
|
* @param string $content |
639 |
|
|
* @param array $params |
640 |
|
|
* |
641 |
|
|
* @return array |
642 |
|
|
*/ |
643 |
|
|
function get_arguments($content = null, $params = array()) { |
644 |
|
|
// |
645 |
|
|
$arguments = array(); |
646 |
|
|
// On explose les paramètres reçus avec un élément par ligne |
647 |
|
|
$params_tmp1 = explode("\n", $content); |
648 |
|
|
// On boucle sur chaque ligne de paramètre |
649 |
|
|
foreach ($params_tmp1 as $key => $value) { |
650 |
|
|
// On explose le paramètre de sa valeur avec le séparateur '=' |
651 |
|
|
$params_tmp2[] = explode("=", $value); |
652 |
|
|
} |
653 |
|
|
// On boucle sur chaque paramètre reçu pour vérifier si la valeur reçue |
654 |
|
|
// est acceptable ou non |
655 |
|
|
foreach ($params_tmp2 as $key => $value) { |
656 |
|
|
// |
657 |
|
|
if (!isset($value[0]) || !isset($value[1])) { |
658 |
|
|
continue; |
659 |
|
|
} |
660 |
|
|
// |
661 |
|
|
if (in_array(trim($value[0]), $params)) { |
662 |
|
|
$arguments[trim($value[0])] = trim($value[1]); |
663 |
|
|
} |
664 |
|
|
} |
665 |
|
|
// |
666 |
|
|
return $arguments; |
667 |
|
|
} |
668 |
|
|
|
669 |
|
|
} |
670 |
|
|
|
671 |
|
|
?> |