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 |
jymadier |
4132 |
* |
22 |
|
|
*/ |
23 |
|
|
var $template_help = '<div class="widget-help"><span class="info-16" title="%s"></span></div>'; |
24 |
|
|
|
25 |
|
|
/** |
26 |
|
|
* |
27 |
|
|
*/ |
28 |
|
|
var $template_footer = ' |
29 |
|
|
<div class="widget-footer"> |
30 |
|
|
<a href="%s"> |
31 |
|
|
%s |
32 |
|
|
</a> |
33 |
|
|
</div> |
34 |
|
|
'; |
35 |
|
|
|
36 |
|
|
/** |
37 |
fmichon |
3799 |
* Cette méthode retourne un arbre html représentant un raccourci. |
38 |
|
|
* |
39 |
|
|
* Un raccourci est composé d'un lien, d'une image et d'une description. |
40 |
|
|
* Voir les widgets : |
41 |
|
|
* - widget_nouvelle_demande_autre_dossier |
42 |
|
|
* - widget_nouvelle_demande_dossier_encours |
43 |
|
|
* - widget_nouvelle_demande_nouveau_dossier |
44 |
|
|
*/ |
45 |
|
|
function get_display_widget_shortlink($config) { |
46 |
|
|
return sprintf ( |
47 |
|
|
'<a href="%s"><span><img src="%s" align="left" alt="%s" />%s</span></a>', |
48 |
|
|
$config["a_href"], |
49 |
|
|
$config["img_src"], |
50 |
|
|
$config["img_alt"], |
51 |
|
|
$config["a_content"] |
52 |
|
|
); |
53 |
|
|
} |
54 |
|
|
|
55 |
|
|
/** |
56 |
|
|
* WIDGET DASHBOARD - widget_nouvelle_demande_autre_dossier. |
57 |
|
|
*/ |
58 |
|
|
function view_widget_nouvelle_demande_autre_dossier($content = null) { |
59 |
|
|
echo $this->get_display_widget_shortlink(array( |
60 |
|
|
"a_href" => "../scr/tab.php?obj=demande_autre_dossier", |
61 |
|
|
"img_src" => "../app/img/dossier-existant.png", |
62 |
|
|
"img_alt" => _("Autres dossiers"), |
63 |
|
|
"a_content" => _("Cliquer ici pour saisir une nouvelle demande concernant un dossier en cours ou une autorisation existante"), |
64 |
|
|
)); |
65 |
|
|
} |
66 |
|
|
|
67 |
|
|
/** |
68 |
|
|
* WIDGET DASHBOARD - widget_nouvelle_demande_dossier_encours. |
69 |
|
|
*/ |
70 |
|
|
function view_widget_nouvelle_demande_dossier_encours($content = null) { |
71 |
|
|
echo $this->get_display_widget_shortlink(array( |
72 |
|
|
"a_href" => "../scr/tab.php?obj=demande_dossier_encours", |
73 |
|
|
"img_src" => "../app/img/dossier-existant.png", |
74 |
|
|
"img_alt" => _("Dossier en cours"), |
75 |
|
|
"a_content" => _("Cliquer ici pour saisir une nouvelle demande concernant un dossier en cours"), |
76 |
|
|
)); |
77 |
|
|
} |
78 |
|
|
|
79 |
|
|
/** |
80 |
|
|
* WIDGET DASHBOARD - widget_nouvelle_demande_nouveau_dossier. |
81 |
|
|
*/ |
82 |
|
|
function view_widget_nouvelle_demande_nouveau_dossier($content = null) { |
83 |
|
|
echo $this->get_display_widget_shortlink(array( |
84 |
|
|
"a_href" => "../scr/form.php?obj=demande_nouveau_dossier&action=0&advs_id=&tricol=&valide=&retour=tab&new=", |
85 |
|
|
"img_src" => "../app/img/dossier-nouveau.png", |
86 |
|
|
"img_alt" => _("Nouveau dossier"), |
87 |
|
|
"a_content" => _("Cliquer ici pour saisir une nouvelle demande concernant le depot d'un nouveau dossier"), |
88 |
|
|
)); |
89 |
|
|
} |
90 |
|
|
|
91 |
|
|
/** |
92 |
mbroquet |
3730 |
* WIDGET DASHBOARD - widget_recherche_dossier. |
93 |
|
|
* |
94 |
|
|
* Quatre cas d'utilisation : |
95 |
|
|
* - 1 - La valeur recherchée correspond exactement au code d'un DI, |
96 |
|
|
* alors on accède directement à la fiche de visualisation du DI. |
97 |
|
|
* - 2 - La valeur recherchée renvoi plusieurs DI, alors on accède au |
98 |
|
|
* listing des dossiers d'instruction avec le formulaire de |
99 |
|
|
* recherche avancée pré-rempli avec la valeur saisie. |
100 |
|
|
* - 3 - La valeur recherchée renvoi aucun enregistrement, alors on |
101 |
|
|
* affiche un message en ce sens directement dans le widget. |
102 |
|
|
* - 4 - Aucune valeur n'est saisie, alors on affiche un message en ce |
103 |
|
|
* sens directement dans le widget. |
104 |
|
|
* |
105 |
|
|
* @return void |
106 |
|
|
*/ |
107 |
|
|
function view_widget_recherche_dossier($content = null) { |
108 |
|
|
|
109 |
|
|
/** |
110 |
|
|
* Traitement de la validation du formulaire |
111 |
|
|
*/ |
112 |
|
|
// |
113 |
|
|
if ($this->f->get_submitted_post_value("validation") != null |
114 |
|
|
&& $this->f->get_submitted_post_value("dossier") !== null |
115 |
|
|
&& $this->f->get_submitted_post_value("dossier") != "") { |
116 |
|
|
// Mémorisation de la recherche |
117 |
|
|
$search = $this->f->db->escapesimple($this->f->get_submitted_post_value("dossier")); |
118 |
|
|
// Ajout d'une étoile au début s'il n'y en n'a pas. |
119 |
|
|
// Par defaut * est toujours ajouté à la fin des recherches. |
120 |
|
|
if (substr($search, 0, 1) != '*') { |
121 |
|
|
$search = '*'.$search; |
122 |
|
|
} |
123 |
|
|
// Traitement des valeurs postées |
124 |
|
|
$posted_dossiers = $this->f->db->escapesimple(strtolower(str_replace("*", "%", $this->f->get_submitted_post_value("dossier")))); |
125 |
|
|
$posted_dossiers = str_replace(';', ',', $posted_dossiers); |
126 |
|
|
|
127 |
|
|
// |
128 |
|
|
// UNE VALEUR SAISIE |
129 |
|
|
// |
130 |
|
|
|
131 |
|
|
// WHERE - Filtre Collectivité |
132 |
|
|
$where_collectivite = ""; |
133 |
|
|
// Si collectivité utilisateur mono alors filtre sur celle-ci |
134 |
|
|
if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) { |
135 |
|
|
// |
136 |
|
|
$where_collectivite = " |
137 |
|
|
AND dossier.om_collectivite=".$_SESSION['collectivite']." |
138 |
|
|
"; |
139 |
|
|
} |
140 |
|
|
|
141 |
|
|
// Construction de la requête |
142 |
|
|
// Pour chaque dossier on cherche sur les deux champs du code du |
143 |
|
|
// dossier (un avec et un sans espaces) |
144 |
|
|
$posted_dossiers = explode(',', $posted_dossiers); |
145 |
|
|
$liste_dossiers = array(); |
146 |
|
|
foreach ($posted_dossiers as $posted_dossier) { |
147 |
|
|
$sql = " |
148 |
|
|
SELECT |
149 |
|
|
dossier |
150 |
|
|
FROM |
151 |
|
|
".DB_PREFIXE."dossier |
152 |
|
|
WHERE |
153 |
|
|
(LOWER(dossier.dossier) LIKE '%".$posted_dossier."%' |
154 |
|
|
OR LOWER(dossier.dossier_libelle) LIKE '%".$posted_dossier."%' ) |
155 |
|
|
"; |
156 |
|
|
$sql .= $where_collectivite; |
157 |
|
|
// Exécution de la requête |
158 |
|
|
$res = $this->f->db->query($sql); |
159 |
|
|
$this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE); |
160 |
|
|
$this->f->isDatabaseError($res); |
161 |
|
|
// On récupère les numéros de dossier dans les résultats |
162 |
|
|
while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { |
163 |
|
|
$liste_dossiers[] = $row['dossier']; |
164 |
|
|
} |
165 |
|
|
} |
166 |
|
|
$total_dossiers = count($liste_dossiers); |
167 |
|
|
// Si on obtient un seul résultat |
168 |
|
|
if ($total_dossiers == 1) { |
169 |
|
|
// On reformate le dossier |
170 |
|
|
$dossier = strtoupper(str_replace(' ', '', $liste_dossiers[0])); |
171 |
|
|
// On redirige vers le listing des DI |
172 |
|
|
echo ' |
173 |
|
|
<script type="text/javascript" > |
174 |
|
|
widget_recherche_dossier(\''.$dossier.'\', 1); |
175 |
|
|
</script> |
176 |
|
|
'; |
177 |
|
|
// On arrête l'exécution du script car l'utilisateur a été |
178 |
|
|
// redirigé vers un autre script |
179 |
|
|
exit(); |
180 |
|
|
} |
181 |
|
|
// Si on obtient plusieurs résultats |
182 |
|
|
if ($total_dossiers > 1) { |
183 |
|
|
// On redirige vers le listing des DI |
184 |
|
|
echo ' |
185 |
|
|
<script type="text/javascript" > |
186 |
|
|
widget_recherche_dossier(\''.$search.'\', '.$total_dossiers.'); |
187 |
|
|
</script> |
188 |
|
|
'; |
189 |
|
|
// On arrête l'exécution du script car l'utilisateur a été |
190 |
|
|
// redirigé vers un autre script |
191 |
|
|
exit(); |
192 |
|
|
} |
193 |
|
|
// Cas d'utilisation n°3 |
194 |
|
|
// Si aucun dossier trouve |
195 |
|
|
// Affiche un message d'erreur |
196 |
|
|
$erreur = _("Aucun dossier trouve"); |
197 |
|
|
|
198 |
|
|
} elseif ($this->f->get_submitted_post_value("validation") != null |
199 |
|
|
&& $this->f->get_submitted_post_value("dossier") !== null |
200 |
|
|
&& $this->f->get_submitted_post_value("dossier") == '') { |
201 |
|
|
|
202 |
|
|
// |
203 |
|
|
// AUCUNE VALEUR SAISIE |
204 |
|
|
// |
205 |
|
|
|
206 |
|
|
// Cas d'utilisation n°4 |
207 |
|
|
// Affiche un message d'erreur |
208 |
|
|
$erreur = _("Veuillez saisir un No de dossier."); |
209 |
|
|
|
210 |
|
|
} |
211 |
|
|
|
212 |
|
|
/** |
213 |
|
|
* Affichage du widget |
214 |
|
|
*/ |
215 |
|
|
// Affichage du message d'informations |
216 |
|
|
printf( |
217 |
|
|
'<div class="widget-help"><span class="info-16" title="%s"></span></div>', |
218 |
|
|
_("Permet la recherche directe de dossiers d'instruction.\n\n". |
219 |
|
|
"Deux modes de saisie sont possibles :\n". |
220 |
|
|
"- 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". |
221 |
|
|
"- Code de dossier partiel 'DP' ou 'PC*P0' ou '*013055*' pour un accès au formulaire de recherche avancée des dossiers d'instruction.") |
222 |
|
|
); |
223 |
|
|
// Ouverture du form |
224 |
|
|
echo "\t<form method=\"post\" id=\"widget_recherche_dossier_form\" action=\"../scr/dashboard.php\">\n"; |
225 |
|
|
// Affichage d'un éventuel message d'erreur |
226 |
|
|
if (isset($erreur) && $erreur != "") { |
227 |
|
|
$class = "error"; |
228 |
|
|
$this->f->displayMessage($class, $erreur); |
229 |
|
|
} |
230 |
|
|
// Configuration du formulaire de recherche |
231 |
|
|
$champs = array("dossier"); |
232 |
|
|
$form = new $this->om_formulaire(null, 0, 0, $champs); |
233 |
|
|
$form->setLib("dossier", '<span class="om-icon om-icon-16 om-icon-fix loupe-16">Recherche</span>'); |
234 |
|
|
$form->setType("dossier", "text"); |
235 |
|
|
$form->setTaille("dossier", 20); |
236 |
|
|
$form->setMax("dossier", 250); |
237 |
|
|
// Affichage du formulaire |
238 |
|
|
$form->entete(); |
239 |
|
|
$form->afficher($champs, 0, false, false); |
240 |
|
|
$form->enpied(); |
241 |
|
|
// Affichage des contrôles du formulaire |
242 |
|
|
echo "\t<div class=\"formControls\">\n"; |
243 |
|
|
echo "\t\t<input type=\"submit\" class=\"om-button ui-button ui-widget ui-state-default ui-corner-all\" |
244 |
|
|
value=\""._("Valider")."\" name=\"validation\" />\n"; |
245 |
|
|
echo "\t</div>\n"; |
246 |
|
|
// Fermeture du form |
247 |
|
|
echo "\t</form>\n"; |
248 |
|
|
} |
249 |
|
|
|
250 |
|
|
/** |
251 |
|
|
* Cette méthode permet de récupérer la configuration du widget 'Dossiers |
252 |
|
|
* limites'. |
253 |
|
|
* |
254 |
|
|
* @return array |
255 |
|
|
*/ |
256 |
|
|
function get_config_dossiers_limites($arguments) { |
257 |
|
|
// Initialisation du tableau des paramètres avec ses valeur par défaut |
258 |
|
|
$arguments_default = array( |
259 |
|
|
"nombre_de_jours" => 15, |
260 |
|
|
"codes_datd" => null, |
261 |
|
|
"filtre" => "instructeur", |
262 |
|
|
); |
263 |
|
|
// Vérification des arguments |
264 |
|
|
foreach ($arguments_default as $key => $value) { |
265 |
|
|
// |
266 |
|
|
if (isset($arguments[$key])) { |
267 |
|
|
// |
268 |
|
|
$elem = trim($arguments[$key]); |
269 |
|
|
// |
270 |
|
|
if ($key === "nombre_de_jours" |
271 |
|
|
&& intval($elem) > 0) { |
272 |
|
|
// Ce doit être un entier |
273 |
|
|
$arguments[$key] = intval($elem); |
274 |
|
|
continue; |
275 |
|
|
} elseif ($key === "codes_datd" |
276 |
|
|
&& $elem != "") { |
277 |
|
|
// Ce doit être un tableau |
278 |
|
|
$arguments[$key] = explode(";", $elem); |
279 |
|
|
continue; |
280 |
|
|
} elseif ($key === "filtre" |
281 |
|
|
&& in_array($elem, array("instructeur", "division", "aucun"))) { |
282 |
|
|
// La valeur doit être dans cette liste |
283 |
|
|
$arguments[$key] = $elem; |
284 |
|
|
continue; |
285 |
|
|
} |
286 |
|
|
} |
287 |
|
|
// |
288 |
|
|
$arguments[$key] = $value; |
289 |
|
|
} |
290 |
|
|
// |
291 |
|
|
$nombre_de_jours = $arguments["nombre_de_jours"]; |
292 |
|
|
$codes_datd = $arguments["codes_datd"]; |
293 |
|
|
$filtre = $arguments["filtre"]; |
294 |
|
|
|
295 |
|
|
/** |
296 |
|
|
* Construction de la requête |
297 |
|
|
*/ |
298 |
|
|
// SELECT |
299 |
|
|
$query_ct_select = " |
300 |
|
|
dossier.dossier, |
301 |
|
|
dossier.dossier_libelle, |
302 |
|
|
dossier.date_limite, |
303 |
|
|
dossier.date_limite_incompletude, |
304 |
|
|
CASE |
305 |
|
|
WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE |
306 |
|
|
THEN to_char(dossier.date_limite_incompletude, 'DD/MM/YYYY') |
307 |
|
|
ELSE |
308 |
|
|
to_char(dossier.date_limite, 'DD/MM/YYYY') |
309 |
|
|
END as date_limite_na, |
310 |
|
|
COALESCE( |
311 |
|
|
demandeur.particulier_nom, |
312 |
|
|
demandeur.personne_morale_denomination |
313 |
|
|
) AS nom_petitionnaire, |
314 |
|
|
CASE |
315 |
|
|
WHEN dossier.enjeu_erp is TRUE |
316 |
|
|
THEN '<span class=''om-icon om-icon-16 om-icon-fix enjeu_erp-16'' title=''"._('Enjeu ERP')."''>ERP</span>' |
317 |
|
|
ELSE |
318 |
|
|
'' |
319 |
|
|
END |
320 |
|
|
|| |
321 |
|
|
CASE |
322 |
|
|
WHEN dossier.enjeu_urba is TRUE |
323 |
|
|
THEN '<span class=''om-icon om-icon-16 om-icon-fix enjeu_urba-16'' title=''"._('Enjeu Urba')."''>URBA</span>' |
324 |
|
|
ELSE |
325 |
|
|
'' |
326 |
|
|
END AS enjeu |
327 |
|
|
"; |
328 |
|
|
// SELECT - CHAMPAFFICHE |
329 |
|
|
$query_ct_select_champaffiche = array( |
330 |
|
|
'dossier.dossier as "'._("dossier").'"', |
331 |
|
|
'dossier.dossier_libelle as "'._("dossier").'"', |
332 |
|
|
'COALESCE( |
333 |
|
|
demandeur.particulier_nom, |
334 |
|
|
demandeur.personne_morale_denomination |
335 |
|
|
) AS "'._("nom_petitionnaire").'"', |
336 |
|
|
'CASE |
337 |
|
|
WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE |
338 |
|
|
THEN to_char(dossier.date_limite_incompletude, \'DD/MM/YYYY\') |
339 |
|
|
ELSE |
340 |
|
|
to_char(dossier.date_limite, \'DD/MM/YYYY\') |
341 |
|
|
END as "'._("date_limite").'"', |
342 |
|
|
'CASE |
343 |
|
|
WHEN dossier.enjeu_erp is TRUE |
344 |
|
|
THEN \'<span class="om-icon om-icon-16 om-icon-fix enjeu_erp-16" title="'._('Enjeu ERP').'">ERP</span>\' |
345 |
|
|
ELSE |
346 |
|
|
\'\' |
347 |
|
|
END |
348 |
|
|
|| |
349 |
|
|
CASE |
350 |
|
|
WHEN dossier.enjeu_urba is TRUE |
351 |
|
|
THEN \'<span class="om-icon om-icon-16 om-icon-fix enjeu_urba-16" title="'._('Enjeu Urba').'">URBA</span>\' |
352 |
|
|
ELSE |
353 |
|
|
\'\' |
354 |
|
|
END AS "'._("enjeu").'"', |
355 |
|
|
// XXX Attention cette colonne est cachée en css est doit donc restée la dernière du tableau |
356 |
|
|
'CASE WHEN incomplet_notifie IS TRUE AND incompletude IS TRUE THEN |
357 |
|
|
dossier.date_limite_incompletude ELSE |
358 |
|
|
dossier.date_limite END as date_limite_na', |
359 |
|
|
); |
360 |
|
|
// FROM |
361 |
|
|
$query_ct_from = " |
362 |
|
|
".DB_PREFIXE."dossier |
363 |
fmichon |
3890 |
LEFT JOIN ".DB_PREFIXE."etat |
364 |
|
|
ON dossier.etat = etat.etat |
365 |
mbroquet |
3730 |
LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur |
366 |
|
|
ON dossier.dossier = lien_dossier_demandeur.dossier AND lien_dossier_demandeur.petitionnaire_principal IS TRUE |
367 |
|
|
LEFT JOIN ".DB_PREFIXE."demandeur |
368 |
|
|
ON lien_dossier_demandeur.demandeur = demandeur.demandeur |
369 |
|
|
LEFT JOIN ".DB_PREFIXE."dossier_autorisation |
370 |
|
|
ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation |
371 |
|
|
LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille |
372 |
|
|
ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille |
373 |
|
|
LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type |
374 |
|
|
ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type |
375 |
|
|
LEFT JOIN ".DB_PREFIXE."instructeur |
376 |
|
|
ON dossier.instructeur=instructeur.instructeur |
377 |
|
|
LEFT JOIN ".DB_PREFIXE."om_utilisateur |
378 |
|
|
ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur |
379 |
|
|
"; |
380 |
|
|
// WHERE - COMMON |
381 |
|
|
$query_ct_where_common = " |
382 |
|
|
( |
383 |
|
|
( |
384 |
|
|
dossier.incomplet_notifie IS FALSE |
385 |
|
|
AND date_limite <= CURRENT_TIMESTAMP + ".$nombre_de_jours." * interval '1 day' |
386 |
|
|
) |
387 |
|
|
OR |
388 |
|
|
( |
389 |
|
|
dossier.incomplet_notifie IS TRUE |
390 |
|
|
AND dossier.incompletude IS TRUE |
391 |
|
|
AND date_limite_incompletude <= CURRENT_TIMESTAMP + ".$nombre_de_jours." * interval '1 day' |
392 |
|
|
) |
393 |
|
|
) |
394 |
fmichon |
3890 |
AND etat.statut != 'cloture' |
395 |
mbroquet |
3730 |
AND dossier.avis_decision IS NULL |
396 |
|
|
AND LOWER(dossier.accord_tacite) = 'oui' |
397 |
|
|
"; |
398 |
|
|
// WHERE - DATD |
399 |
|
|
// Filtre sur le type détaillé des dossiers |
400 |
|
|
$query_ct_where_datd_filter = ""; |
401 |
|
|
if (!is_null($codes_datd) |
402 |
|
|
&& is_array($codes_datd) |
403 |
|
|
&& count($codes_datd) != 0) { |
404 |
|
|
// |
405 |
|
|
$sql_codes = ""; |
406 |
|
|
// |
407 |
|
|
foreach ($codes_datd as $code) { |
408 |
|
|
$sql_codes .= " LOWER(dossier_autorisation_type_detaille.code) = '".$this->f->db->escapesimple(strtolower($code))."' OR "; |
409 |
|
|
} |
410 |
|
|
$sql_codes = substr($sql_codes, 0, count($sql_codes) - 4); |
411 |
|
|
// |
412 |
|
|
$query_ct_where_datd_filter = " AND ( ".$sql_codes." ) "; |
413 |
|
|
} |
414 |
|
|
// WHERE - USER |
415 |
|
|
// Filtre sur les dossiers qui concernent l'utilisateur |
416 |
|
|
$query_ct_where_user_filter = ""; |
417 |
|
|
// |
418 |
|
|
if ($filtre == "instructeur") { |
419 |
|
|
// |
420 |
|
|
$query_ct_where_user_filter = " |
421 |
|
|
AND om_utilisateur.login='".$_SESSION['login']."' |
422 |
|
|
"; |
423 |
|
|
} elseif ($filtre == "division") { |
424 |
|
|
// |
425 |
|
|
$query_ct_where_user_filter .= " |
426 |
|
|
AND dossier.division = ".$_SESSION['division']." |
427 |
|
|
"; |
428 |
|
|
} elseif ($filtre == "aucun") { |
429 |
|
|
// |
430 |
|
|
if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) { |
431 |
|
|
$query_ct_where_user_filter = " |
432 |
|
|
AND dossier.om_collectivite=".$_SESSION['collectivite']." |
433 |
|
|
"; |
434 |
|
|
} |
435 |
|
|
} |
436 |
|
|
// ORDER BY |
437 |
|
|
$query_ct_orderby = " |
438 |
|
|
date_limite_na |
439 |
|
|
"; |
440 |
|
|
|
441 |
|
|
/** |
442 |
|
|
* Message d'aide |
443 |
|
|
*/ |
444 |
|
|
// |
445 |
|
|
$message_filtre = ""; |
446 |
|
|
// |
447 |
|
|
switch($filtre) { |
448 |
|
|
case "instructeur" : |
449 |
|
|
$message_filtre = " "._("(filtrés par instructeur)"); |
450 |
|
|
break; |
451 |
|
|
case "division" : |
452 |
|
|
$message_filtre = " "._("(filtrés par division)"); |
453 |
|
|
break; |
454 |
|
|
} |
455 |
|
|
// |
456 |
|
|
$message_help = sprintf( |
457 |
|
|
_("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."), |
458 |
|
|
(is_null($codes_datd) ? "": " (".implode(";",$codes_datd).")"), |
459 |
|
|
$nombre_de_jours, |
460 |
|
|
$message_filtre |
461 |
|
|
); |
462 |
|
|
|
463 |
|
|
/** |
464 |
|
|
* Return |
465 |
|
|
*/ |
466 |
|
|
// |
467 |
|
|
return array( |
468 |
|
|
"arguments" => $arguments, |
469 |
|
|
"message_help" => $message_help, |
470 |
|
|
"query_ct_select" => $query_ct_select, |
471 |
|
|
"query_ct_select_champaffiche" => $query_ct_select_champaffiche, |
472 |
|
|
"query_ct_from" => $query_ct_from, |
473 |
|
|
"query_ct_where_common" => $query_ct_where_common, |
474 |
|
|
"query_ct_where_datd_filter" => $query_ct_where_datd_filter, |
475 |
|
|
"query_ct_where_user_filter" => $query_ct_where_user_filter, |
476 |
|
|
"query_ct_orderby" => $query_ct_orderby, |
477 |
|
|
); |
478 |
|
|
} |
479 |
|
|
|
480 |
|
|
/** |
481 |
|
|
* WIDGET DASHBOARD - Dossiers limites |
482 |
|
|
* |
483 |
|
|
* @return void |
484 |
|
|
*/ |
485 |
|
|
function view_widget_dossiers_limites($content = null) { |
486 |
|
|
|
487 |
|
|
/** |
488 |
|
|
* Ce widget est configurable via l'interface Web. Lors de la création |
489 |
|
|
* du widget dans le paramétrage il est possible de spécifier la ou les |
490 |
|
|
* options suivantes : |
491 |
|
|
* |
492 |
|
|
* - nombre_de_jours : c'est le délai en jours avant la date limite à |
493 |
|
|
* partir duquel on souhaite voir apparaître les dossiers dans le |
494 |
|
|
* widget. |
495 |
|
|
* (default) Par défaut la valeur est 15 jours. |
496 |
|
|
* |
497 |
|
|
* - codes_datd : la liste des types de dossiers à afficher. exemple : |
498 |
|
|
* "PCI;PCA;DPS;CUa;CUb". |
499 |
|
|
* (default) Par défaut tous les types sont affichés. [null] |
500 |
|
|
* |
501 |
|
|
* - filtre : |
502 |
|
|
* = instructeur |
503 |
|
|
* = division |
504 |
|
|
* = aucun |
505 |
|
|
* (default) Par défaut les dossiers sont filtrés sur l'instructeur. |
506 |
|
|
*/ |
507 |
|
|
// Liste des paramètres |
508 |
|
|
$params = array("nombre_de_jours", "codes_datd", "filtre", ); |
509 |
|
|
// Formatage des arguments reçus en paramètres |
510 |
|
|
$arguments = $this->get_arguments($content, $params); |
511 |
|
|
// Récupération de la configuration du widget |
512 |
|
|
$conf = $this->get_config_dossiers_limites($arguments); |
513 |
|
|
// |
514 |
|
|
$nombre_de_jours = $conf["arguments"]["nombre_de_jours"]; |
515 |
|
|
$codes_datd = $conf["arguments"]["codes_datd"]; |
516 |
|
|
$filtre = $conf["arguments"]["filtre"]; |
517 |
|
|
|
518 |
|
|
/** |
519 |
|
|
* Composition de la requête |
520 |
|
|
*/ |
521 |
|
|
// |
522 |
|
|
$query = sprintf(" |
523 |
|
|
SELECT |
524 |
|
|
%s |
525 |
|
|
FROM |
526 |
|
|
%s |
527 |
|
|
WHERE |
528 |
|
|
%s |
529 |
|
|
%s |
530 |
|
|
%s |
531 |
|
|
ORDER BY |
532 |
|
|
%s |
533 |
|
|
LIMIT 10", |
534 |
|
|
$conf["query_ct_select"], |
535 |
|
|
$conf["query_ct_from"], |
536 |
|
|
$conf["query_ct_where_common"], |
537 |
|
|
$conf["query_ct_where_datd_filter"], |
538 |
|
|
$conf["query_ct_where_user_filter"], |
539 |
|
|
$conf["query_ct_orderby"] |
540 |
|
|
); |
541 |
|
|
|
542 |
|
|
/** |
543 |
|
|
* Exécution de la requête |
544 |
|
|
*/ |
545 |
|
|
// |
546 |
|
|
$res = $this->f->db->query($query); |
547 |
|
|
$this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE); |
548 |
|
|
$this->f->isDatabaseError($res); |
549 |
|
|
|
550 |
|
|
// Affichage du message d'informations |
551 |
|
|
printf( |
552 |
jymadier |
4132 |
$this->template_help, |
553 |
mbroquet |
3730 |
$conf["message_help"] |
554 |
|
|
); |
555 |
|
|
|
556 |
|
|
/** |
557 |
|
|
* Si il n'y a aucun dossier à afficher, alors on affiche un message |
558 |
|
|
* clair à l'utilisateur et on sort de la vue. |
559 |
|
|
*/ |
560 |
|
|
// Si il n'y a aucun dossier à afficher |
561 |
|
|
if ($res->numrows() == 0) { |
562 |
|
|
// Affichage du message d'informations |
563 |
|
|
echo _("Vous n'avez pas de dossiers limites pour le moment."); |
564 |
|
|
// Exit |
565 |
|
|
return; |
566 |
|
|
} |
567 |
|
|
|
568 |
|
|
/** |
569 |
|
|
* Template nécessaires à l'affichage du widget |
570 |
|
|
*/ |
571 |
|
|
// |
572 |
|
|
$template_table = ' |
573 |
|
|
<table class="tab-tab"> |
574 |
|
|
<thead> |
575 |
|
|
<tr class="ui-tabs-nav ui-accordion ui-state-default tab-title"> |
576 |
|
|
<th class="title col-0 firstcol"> |
577 |
|
|
<span class="name"> |
578 |
|
|
%s |
579 |
|
|
</span> |
580 |
|
|
</th> |
581 |
|
|
<th class="title col-1"> |
582 |
|
|
<span class="name"> |
583 |
|
|
%s |
584 |
|
|
</span> |
585 |
|
|
</th> |
586 |
|
|
<th class="title col-2"> |
587 |
|
|
<span class="name"> |
588 |
|
|
%s |
589 |
|
|
</span> |
590 |
|
|
</th> |
591 |
|
|
<th class="title col-3 lastcol"> |
592 |
|
|
<span class="name"> |
593 |
|
|
%s |
594 |
|
|
</span> |
595 |
|
|
</th> |
596 |
|
|
</tr> |
597 |
|
|
</thead> |
598 |
|
|
<tbody> |
599 |
|
|
%s |
600 |
|
|
</tbody> |
601 |
|
|
</table> |
602 |
|
|
'; |
603 |
|
|
// |
604 |
|
|
$template_line = ' |
605 |
|
|
<tr class="tab-data odd"> |
606 |
|
|
<td class="col-1 firstcol"> |
607 |
|
|
%s |
608 |
|
|
</td> |
609 |
|
|
<td class="col-1"> |
610 |
|
|
%s |
611 |
|
|
</td> |
612 |
|
|
<td class="col-2"> |
613 |
|
|
%s |
614 |
|
|
</td> |
615 |
|
|
<td class="col-3 lastcol"> |
616 |
|
|
%s |
617 |
|
|
</td> |
618 |
|
|
</tr> |
619 |
|
|
'; |
620 |
|
|
// |
621 |
|
|
$template_href = '../scr/form.php?obj=dossier_instruction&action=3&idx=%s'; |
622 |
|
|
// |
623 |
|
|
$template_link = ' |
624 |
|
|
<a class="lienTable" href="%s"> |
625 |
|
|
%s |
626 |
|
|
</a> |
627 |
|
|
'; |
628 |
|
|
|
629 |
|
|
/** |
630 |
|
|
* Si il y a des dossiers à afficher, alors on affiche le widget. |
631 |
|
|
*/ |
632 |
|
|
// On construit le contenu du tableau |
633 |
|
|
$ct_tbody = ''; |
634 |
|
|
while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { |
635 |
|
|
// On construit l'attribut href du lien |
636 |
|
|
$ct_href = sprintf( |
637 |
|
|
$template_href, |
638 |
|
|
// idx |
639 |
|
|
$row["dossier"] |
640 |
|
|
); |
641 |
|
|
// On construit la ligne |
642 |
|
|
$ct_tbody .= sprintf( |
643 |
|
|
$template_line, |
644 |
|
|
// Colonne 1 - Numéro de dossier |
645 |
|
|
sprintf( |
646 |
|
|
$template_link, |
647 |
|
|
$ct_href, |
648 |
|
|
$row["dossier_libelle"] |
649 |
|
|
), |
650 |
|
|
// Colonne 2 - Nom du pétitionnaire |
651 |
|
|
sprintf( |
652 |
|
|
$template_link, |
653 |
|
|
$ct_href, |
654 |
|
|
$row["nom_petitionnaire"] |
655 |
|
|
), |
656 |
|
|
// Colonne 3 - Date limite |
657 |
|
|
sprintf( |
658 |
|
|
$template_link, |
659 |
|
|
$ct_href, |
660 |
|
|
$this->f->formatDate($row["date_limite_na"]) |
661 |
|
|
), |
662 |
|
|
// Colonne 4 - Enjeu |
663 |
|
|
sprintf( |
664 |
|
|
$template_link, |
665 |
|
|
$ct_href, |
666 |
|
|
$row["enjeu"] |
667 |
|
|
) |
668 |
|
|
); |
669 |
|
|
} |
670 |
|
|
// Affichage du tableau listant les dossiers |
671 |
|
|
printf( |
672 |
|
|
$template_table, |
673 |
|
|
// Colonne 1 - Numéro de dossier |
674 |
|
|
_('dossier'), |
675 |
|
|
// Colonne 2 - Nom du pétitionnaire |
676 |
|
|
_('nom_petitionnaire'), |
677 |
|
|
// Colonne 3 - Date limite |
678 |
|
|
_('date_limite'), |
679 |
|
|
// Colonne 4 - Enjeu |
680 |
|
|
_('enjeu'), |
681 |
|
|
// Contenu du tableau |
682 |
|
|
$ct_tbody |
683 |
|
|
); |
684 |
|
|
// Affichage du footer |
685 |
|
|
printf( |
686 |
jymadier |
4132 |
$this->template_footer, |
687 |
mbroquet |
3730 |
// href (avec les paramètres du widget) |
688 |
|
|
sprintf( |
689 |
|
|
"../scr/tab.php?obj=dossiers_limites&nombre_de_jours=%s&codes_datd=%s&filtre=%s", |
690 |
|
|
$nombre_de_jours, |
691 |
|
|
(is_null($codes_datd) ? "" : implode(";",$codes_datd)), |
692 |
|
|
$filtre |
693 |
|
|
), |
694 |
|
|
// titre |
695 |
|
|
_("Voir +") |
696 |
|
|
); |
697 |
|
|
} |
698 |
|
|
|
699 |
|
|
/** |
700 |
|
|
* Cet méthode permet de formater, la chaîne de caractères reçue du |
701 |
|
|
* paramétrage du widget en un tableau de valeurs dont les clés |
702 |
|
|
* correspondent aux clés passées en paramètre. |
703 |
|
|
* |
704 |
|
|
* @param string $content |
705 |
|
|
* @param array $params |
706 |
|
|
* |
707 |
|
|
* @return array |
708 |
|
|
*/ |
709 |
|
|
function get_arguments($content = null, $params = array()) { |
710 |
|
|
// |
711 |
|
|
$arguments = array(); |
712 |
|
|
// On explose les paramètres reçus avec un élément par ligne |
713 |
|
|
$params_tmp1 = explode("\n", $content); |
714 |
|
|
// On boucle sur chaque ligne de paramètre |
715 |
|
|
foreach ($params_tmp1 as $key => $value) { |
716 |
|
|
// On explose le paramètre de sa valeur avec le séparateur '=' |
717 |
|
|
$params_tmp2[] = explode("=", $value); |
718 |
|
|
} |
719 |
|
|
// On boucle sur chaque paramètre reçu pour vérifier si la valeur reçue |
720 |
|
|
// est acceptable ou non |
721 |
|
|
foreach ($params_tmp2 as $key => $value) { |
722 |
|
|
// |
723 |
|
|
if (!isset($value[0]) || !isset($value[1])) { |
724 |
|
|
continue; |
725 |
|
|
} |
726 |
|
|
// |
727 |
|
|
if (in_array(trim($value[0]), $params)) { |
728 |
|
|
$arguments[trim($value[0])] = trim($value[1]); |
729 |
|
|
} |
730 |
|
|
} |
731 |
|
|
// |
732 |
|
|
return $arguments; |
733 |
|
|
} |
734 |
|
|
|
735 |
jymadier |
4132 |
/** |
736 |
fmichon |
4138 |
* WIDGET DASHBOARD - Retours de messages |
737 |
|
|
* |
738 |
|
|
* @return void |
739 |
|
|
*/ |
740 |
|
|
function view_widget_messages_retours($content = null) { |
741 |
|
|
|
742 |
|
|
/** |
743 |
|
|
* Ce widget est configurable via l'interface Web. Lors de la création |
744 |
|
|
* du widget dans le paramétrage il est possible de spécifier la ou les |
745 |
|
|
* options suivantes : |
746 |
|
|
* |
747 |
|
|
* - filtre : |
748 |
|
|
* = instructeur |
749 |
|
|
* = division |
750 |
|
|
* = aucun |
751 |
|
|
* (default) Par défaut les dossiers sont filtrés sur l'instructeur. |
752 |
|
|
*/ |
753 |
|
|
// Liste des paramètres |
754 |
|
|
$params = array("filtre", ); |
755 |
|
|
// Formatage des arguments reçus en paramètres |
756 |
|
|
$arguments = $this->get_arguments($content, $params); |
757 |
|
|
// Récupération de la configuration du widget |
758 |
|
|
$conf = $this->get_config_messages_retours($arguments); |
759 |
|
|
// |
760 |
|
|
$filtre = $conf["arguments"]["filtre"]; |
761 |
|
|
|
762 |
|
|
/** |
763 |
|
|
* Composition de la requête |
764 |
|
|
*/ |
765 |
|
|
// |
766 |
|
|
$query = sprintf( |
767 |
|
|
"SELECT |
768 |
|
|
count(*) |
769 |
|
|
FROM |
770 |
|
|
%s |
771 |
|
|
WHERE |
772 |
|
|
%s |
773 |
|
|
%s", |
774 |
|
|
$conf["query_ct_from"], |
775 |
|
|
$conf["query_ct_where_common"], |
776 |
|
|
$conf["query_ct_where_user_filter"] |
777 |
|
|
); |
778 |
|
|
|
779 |
|
|
/** |
780 |
|
|
* Exécution de la requête |
781 |
|
|
*/ |
782 |
|
|
// |
783 |
|
|
$res = $this->f->db->getone($query); |
784 |
|
|
$this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE); |
785 |
|
|
$this->f->isDatabaseError($res); |
786 |
|
|
|
787 |
|
|
// Affichage du message d'informations |
788 |
|
|
printf( |
789 |
|
|
$this->template_help, |
790 |
|
|
$conf["message_help"] |
791 |
|
|
); |
792 |
|
|
|
793 |
|
|
// |
794 |
|
|
if (intval($res) === 0) { |
795 |
|
|
// |
796 |
|
|
echo _("Aucun message non lu."); |
797 |
|
|
return; |
798 |
|
|
} |
799 |
|
|
|
800 |
|
|
|
801 |
|
|
/** |
802 |
|
|
* |
803 |
|
|
*/ |
804 |
|
|
$template_panel = ' |
805 |
|
|
<div class="panel panel-box"> |
806 |
|
|
<div class="list-justified-container"> |
807 |
|
|
<ul class="list-justified text-center"> |
808 |
|
|
%s |
809 |
|
|
</ul> |
810 |
|
|
</div> |
811 |
|
|
</div>'; |
812 |
|
|
/** |
813 |
|
|
* |
814 |
|
|
*/ |
815 |
|
|
// |
816 |
|
|
$panel = ""; |
817 |
|
|
// |
818 |
|
|
$template_elem = ' |
819 |
|
|
<li> |
820 |
|
|
<span class="size-h3 box-icon rounded %s">%s</span> |
821 |
|
|
<p class="text-muted">%s %s</p> |
822 |
|
|
</li> |
823 |
|
|
'; |
824 |
|
|
$panel_elem = sprintf( |
825 |
|
|
$template_elem, |
826 |
|
|
"bg-info", |
827 |
|
|
intval($res), |
828 |
|
|
_("Non lu"), |
829 |
|
|
"" |
830 |
|
|
); |
831 |
|
|
// |
832 |
|
|
$panel .= sprintf( |
833 |
|
|
$template_panel, |
834 |
|
|
$panel_elem |
835 |
|
|
); |
836 |
|
|
echo $panel; |
837 |
|
|
|
838 |
|
|
/** |
839 |
|
|
* |
840 |
|
|
*/ |
841 |
|
|
if ($filtre === "aucun") { |
842 |
|
|
$obj_href_more_link = "messages_tous_retours"; |
843 |
|
|
} elseif ($filtre === "division") { |
844 |
|
|
$obj_href_more_link = "messages_retours_ma_division"; |
845 |
|
|
} else { |
846 |
|
|
$obj_href_more_link = "messages_mes_retours"; |
847 |
|
|
} |
848 |
|
|
|
849 |
|
|
// |
850 |
|
|
if (!$this->f->isAccredited(array($obj_href_more_link, $obj_href_more_link."_tab"), "OR")) { |
851 |
|
|
return; |
852 |
|
|
} |
853 |
|
|
// Affichage du footer |
854 |
|
|
printf( |
855 |
|
|
$this->template_footer, |
856 |
|
|
// href |
857 |
|
|
sprintf( |
858 |
|
|
'../scr/tab.php?obj=%s', |
859 |
|
|
$obj_href_more_link |
860 |
|
|
), |
861 |
|
|
// titre |
862 |
|
|
_("Voir +") |
863 |
|
|
); |
864 |
|
|
|
865 |
|
|
} |
866 |
|
|
|
867 |
|
|
|
868 |
|
|
/** |
869 |
|
|
* Cette méthode permet de récupérer la configuration du widget 'Retours de |
870 |
|
|
* messages'. |
871 |
|
|
* |
872 |
|
|
* @return array |
873 |
|
|
*/ |
874 |
|
|
function get_config_messages_retours($arguments) { |
875 |
|
|
// Initialisation du tableau des paramètres avec ses valeur par défaut |
876 |
|
|
$arguments_default = array( |
877 |
|
|
"filtre" => "instructeur", |
878 |
|
|
); |
879 |
|
|
// Vérification des arguments |
880 |
|
|
foreach ($arguments_default as $key => $value) { |
881 |
|
|
// |
882 |
|
|
if (isset($arguments[$key])) { |
883 |
|
|
// |
884 |
|
|
$elem = trim($arguments[$key]); |
885 |
|
|
// |
886 |
|
|
if ($key === "filtre" |
887 |
|
|
&& in_array($elem, array("instructeur", "division", "aucun"))) { |
888 |
|
|
// La valeur doit être dans cette liste |
889 |
|
|
$arguments[$key] = $elem; |
890 |
|
|
continue; |
891 |
|
|
} |
892 |
|
|
} |
893 |
|
|
// |
894 |
|
|
$arguments[$key] = $value; |
895 |
|
|
} |
896 |
|
|
// |
897 |
|
|
$filtre = $arguments["filtre"]; |
898 |
|
|
|
899 |
|
|
/** |
900 |
|
|
* Construction de la requête |
901 |
|
|
*/ |
902 |
|
|
// FROM |
903 |
|
|
$query_ct_from = " |
904 |
|
|
".DB_PREFIXE."dossier_message |
905 |
|
|
LEFT JOIN ".DB_PREFIXE."dossier |
906 |
|
|
ON dossier_message.dossier=dossier.dossier |
907 |
|
|
INNER JOIN ".DB_PREFIXE."instructeur |
908 |
|
|
ON instructeur.instructeur=dossier.instructeur |
909 |
|
|
INNER JOIN ".DB_PREFIXE."om_utilisateur |
910 |
|
|
ON instructeur.om_utilisateur = om_utilisateur.om_utilisateur |
911 |
|
|
LEFT JOIN ".DB_PREFIXE."division |
912 |
|
|
ON dossier.division=division.division |
913 |
|
|
LEFT JOIN ".DB_PREFIXE."om_collectivite |
914 |
|
|
ON dossier.om_collectivite=om_collectivite.om_collectivite"; |
915 |
|
|
// WHERE - COMMON |
916 |
|
|
$query_ct_where_common = " |
917 |
|
|
dossier_message.lu IS FALSE |
918 |
|
|
"; |
919 |
|
|
// WHERE - USER |
920 |
|
|
// Filtre sur les dossiers qui concernent l'utilisateur |
921 |
|
|
$query_ct_where_user_filter = ""; |
922 |
|
|
// |
923 |
|
|
if ($filtre == "instructeur") { |
924 |
|
|
// |
925 |
|
|
$query_ct_where_user_filter .= " |
926 |
|
|
AND om_utilisateur.login='".$_SESSION['login']."' |
927 |
|
|
"; |
928 |
|
|
} elseif ($filtre == "division") { |
929 |
|
|
// |
930 |
|
|
$query_ct_where_user_filter .= " |
931 |
|
|
AND dossier.division = ".$_SESSION['division']." |
932 |
|
|
"; |
933 |
|
|
} |
934 |
|
|
// Dans tous les cas si l'utilisateur fait partie d'une collectivité |
935 |
|
|
// de niveau 1 (mono), on restreint le listing sur les dossiers de sa |
936 |
|
|
// collectivité |
937 |
|
|
if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) { |
938 |
|
|
$query_ct_where_user_filter .= " |
939 |
|
|
AND dossier.om_collectivite=".$_SESSION['collectivite']." |
940 |
|
|
"; |
941 |
|
|
} |
942 |
|
|
|
943 |
|
|
/** |
944 |
|
|
* Message d'aide |
945 |
|
|
*/ |
946 |
|
|
// |
947 |
|
|
$message_filtre = ""; |
948 |
|
|
// |
949 |
|
|
switch ($filtre) { |
950 |
|
|
case "instructeur": |
951 |
|
|
$message_filtre = " "._("dont je suis l'instructeur"); |
952 |
|
|
break; |
953 |
|
|
case "division": |
954 |
|
|
$message_filtre = " "._("situés dans ma division"); |
955 |
|
|
break; |
956 |
|
|
case "aucun": |
957 |
|
|
if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) { |
958 |
|
|
$message_filtre = " "._("situés dans ma collectivité"); |
959 |
|
|
} else { |
960 |
|
|
$message_filtre = " "._("situés dans toutes les collectivités"); |
961 |
|
|
} |
962 |
|
|
break; |
963 |
|
|
} |
964 |
|
|
// |
965 |
|
|
$message_help = sprintf( |
966 |
|
|
_("Les messages marqués comme 'non lu' qui concernent des ". |
967 |
|
|
"dossiers d'instruction%s."), |
968 |
|
|
$message_filtre |
969 |
|
|
); |
970 |
|
|
|
971 |
|
|
/** |
972 |
|
|
* Return |
973 |
|
|
*/ |
974 |
|
|
// |
975 |
|
|
return array( |
976 |
|
|
"arguments" => $arguments, |
977 |
|
|
"message_help" => $message_help, |
978 |
|
|
"query_ct_from" => $query_ct_from, |
979 |
|
|
"query_ct_where_common" => $query_ct_where_common, |
980 |
|
|
"query_ct_where_user_filter" => $query_ct_where_user_filter, |
981 |
|
|
); |
982 |
|
|
} |
983 |
|
|
|
984 |
|
|
/** |
985 |
jymadier |
4132 |
* WIDGET DASHBOARD - Retours de consultation |
986 |
|
|
* |
987 |
|
|
* @return void |
988 |
|
|
*/ |
989 |
|
|
function view_widget_consultation_retours($content = null) { |
990 |
|
|
|
991 |
|
|
/** |
992 |
|
|
* Ce widget est configurable via l'interface Web. Lors de la création |
993 |
|
|
* du widget dans le paramétrage il est possible de spécifier la ou les |
994 |
|
|
* options suivantes : |
995 |
|
|
* |
996 |
|
|
* - filtre : |
997 |
|
|
* = instructeur |
998 |
|
|
* = division |
999 |
|
|
* = aucun |
1000 |
|
|
* (default) Par défaut les dossiers sont filtrés sur l'instructeur. |
1001 |
|
|
*/ |
1002 |
|
|
// Liste des paramètres |
1003 |
|
|
$params = array("filtre", ); |
1004 |
|
|
// Formatage des arguments reçus en paramètres |
1005 |
|
|
$arguments = $this->get_arguments($content, $params); |
1006 |
|
|
// Récupération de la configuration du widget |
1007 |
|
|
$conf = $this->get_config_consultation_retours($arguments); |
1008 |
|
|
// |
1009 |
|
|
$filtre = $conf["arguments"]["filtre"]; |
1010 |
|
|
|
1011 |
|
|
/** |
1012 |
|
|
* Composition de la requête |
1013 |
|
|
*/ |
1014 |
|
|
// |
1015 |
|
|
$query = sprintf( |
1016 |
|
|
"SELECT |
1017 |
|
|
count(*) |
1018 |
|
|
FROM |
1019 |
|
|
%s |
1020 |
|
|
WHERE |
1021 |
|
|
%s |
1022 |
|
|
%s", |
1023 |
|
|
$conf["query_ct_from"], |
1024 |
|
|
$conf["query_ct_where_common"], |
1025 |
|
|
$conf["query_ct_where_user_filter"] |
1026 |
|
|
); |
1027 |
|
|
|
1028 |
|
|
/** |
1029 |
|
|
* Exécution de la requête |
1030 |
|
|
*/ |
1031 |
|
|
// |
1032 |
|
|
$res = $this->f->db->getone($query); |
1033 |
|
|
$this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE); |
1034 |
|
|
$this->f->isDatabaseError($res); |
1035 |
|
|
|
1036 |
|
|
// Affichage du message d'informations |
1037 |
|
|
printf( |
1038 |
|
|
$this->template_help, |
1039 |
|
|
$conf["message_help"] |
1040 |
|
|
); |
1041 |
|
|
|
1042 |
|
|
// |
1043 |
|
|
if (intval($res) === 0) { |
1044 |
|
|
// |
1045 |
|
|
echo _("Aucun retour de consultation non lu."); |
1046 |
|
|
return; |
1047 |
|
|
} |
1048 |
|
|
|
1049 |
|
|
|
1050 |
|
|
/** |
1051 |
|
|
* |
1052 |
|
|
*/ |
1053 |
|
|
$template_panel = ' |
1054 |
|
|
<div class="panel panel-box"> |
1055 |
|
|
<div class="list-justified-container"> |
1056 |
|
|
<ul class="list-justified text-center"> |
1057 |
|
|
%s |
1058 |
|
|
</ul> |
1059 |
|
|
</div> |
1060 |
|
|
</div>'; |
1061 |
|
|
/** |
1062 |
|
|
* |
1063 |
|
|
*/ |
1064 |
|
|
// |
1065 |
|
|
$panel = ""; |
1066 |
|
|
// |
1067 |
|
|
$template_elem = ' |
1068 |
|
|
<li> |
1069 |
|
|
<span class="size-h3 box-icon rounded %s">%s</span> |
1070 |
|
|
<p class="text-muted">%s %s</p> |
1071 |
|
|
</li> |
1072 |
|
|
'; |
1073 |
|
|
$panel_elem = sprintf( |
1074 |
|
|
$template_elem, |
1075 |
|
|
"bg-info", |
1076 |
|
|
intval($res), |
1077 |
|
|
_("Non lu"), |
1078 |
|
|
"" |
1079 |
|
|
); |
1080 |
|
|
// |
1081 |
|
|
$panel .= sprintf( |
1082 |
|
|
$template_panel, |
1083 |
|
|
$panel_elem |
1084 |
|
|
); |
1085 |
|
|
echo $panel; |
1086 |
|
|
|
1087 |
|
|
/** |
1088 |
|
|
* |
1089 |
|
|
*/ |
1090 |
|
|
if ($filtre === "aucun") { |
1091 |
|
|
$obj_href_more_link = "consultation_tous_retours"; |
1092 |
|
|
} elseif ($filtre === "division") { |
1093 |
|
|
$obj_href_more_link = "consultation_retours_ma_division"; |
1094 |
|
|
} else { |
1095 |
|
|
$obj_href_more_link = "consultation_mes_retours"; |
1096 |
|
|
} |
1097 |
|
|
|
1098 |
|
|
// |
1099 |
|
|
if (!$this->f->isAccredited(array($obj_href_more_link, $obj_href_more_link."_tab"), "OR")) { |
1100 |
|
|
return; |
1101 |
|
|
} |
1102 |
|
|
// Affichage du footer |
1103 |
|
|
printf( |
1104 |
|
|
$this->template_footer, |
1105 |
|
|
// href |
1106 |
|
|
sprintf( |
1107 |
|
|
'../scr/tab.php?obj=%s', |
1108 |
|
|
$obj_href_more_link |
1109 |
|
|
), |
1110 |
|
|
// titre |
1111 |
|
|
_("Voir +") |
1112 |
|
|
); |
1113 |
|
|
|
1114 |
|
|
} |
1115 |
|
|
|
1116 |
|
|
|
1117 |
|
|
/** |
1118 |
|
|
* Cette méthode permet de récupérer la configuration du widget 'Retours de |
1119 |
|
|
* consultation'. |
1120 |
|
|
* |
1121 |
|
|
* @return array |
1122 |
|
|
*/ |
1123 |
|
|
function get_config_consultation_retours($arguments) { |
1124 |
|
|
// Initialisation du tableau des paramètres avec ses valeur par défaut |
1125 |
|
|
$arguments_default = array( |
1126 |
|
|
"filtre" => "instructeur", |
1127 |
|
|
); |
1128 |
|
|
// Vérification des arguments |
1129 |
|
|
foreach ($arguments_default as $key => $value) { |
1130 |
|
|
// |
1131 |
|
|
if (isset($arguments[$key])) { |
1132 |
|
|
// |
1133 |
|
|
$elem = trim($arguments[$key]); |
1134 |
|
|
// |
1135 |
|
|
if ($key === "filtre" |
1136 |
|
|
&& in_array($elem, array("instructeur", "division", "aucun"))) { |
1137 |
|
|
// La valeur doit être dans cette liste |
1138 |
|
|
$arguments[$key] = $elem; |
1139 |
|
|
continue; |
1140 |
|
|
} |
1141 |
|
|
} |
1142 |
|
|
// |
1143 |
|
|
$arguments[$key] = $value; |
1144 |
|
|
} |
1145 |
|
|
// |
1146 |
|
|
$filtre = $arguments["filtre"]; |
1147 |
|
|
|
1148 |
|
|
/** |
1149 |
|
|
* Construction de la requête |
1150 |
|
|
*/ |
1151 |
|
|
// FROM |
1152 |
|
|
$query_ct_from = " |
1153 |
|
|
".DB_PREFIXE."consultation |
1154 |
|
|
LEFT JOIN ".DB_PREFIXE."avis_consultation |
1155 |
|
|
ON consultation.avis_consultation=avis_consultation.avis_consultation |
1156 |
|
|
LEFT JOIN ".DB_PREFIXE."dossier |
1157 |
|
|
ON consultation.dossier=dossier.dossier |
1158 |
|
|
LEFT JOIN ".DB_PREFIXE."service |
1159 |
|
|
ON consultation.service=service.service |
1160 |
|
|
INNER JOIN ".DB_PREFIXE."instructeur |
1161 |
|
|
ON instructeur.instructeur=dossier.instructeur |
1162 |
|
|
INNER JOIN ".DB_PREFIXE."om_utilisateur |
1163 |
|
|
ON instructeur.om_utilisateur = om_utilisateur.om_utilisateur |
1164 |
|
|
LEFT JOIN ".DB_PREFIXE."division |
1165 |
|
|
ON dossier.division=division.division |
1166 |
|
|
LEFT JOIN ".DB_PREFIXE."om_collectivite |
1167 |
|
|
ON dossier.om_collectivite=om_collectivite.om_collectivite"; |
1168 |
|
|
// WHERE - COMMON |
1169 |
|
|
$query_ct_where_common = " |
1170 |
|
|
consultation.lu IS FALSE |
1171 |
|
|
"; |
1172 |
|
|
// WHERE - USER |
1173 |
|
|
// Filtre sur les dossiers qui concernent l'utilisateur |
1174 |
|
|
$query_ct_where_user_filter = ""; |
1175 |
|
|
// |
1176 |
|
|
if ($filtre == "instructeur") { |
1177 |
|
|
// |
1178 |
|
|
$query_ct_where_user_filter .= " |
1179 |
|
|
AND om_utilisateur.login='".$_SESSION['login']."' |
1180 |
|
|
"; |
1181 |
|
|
} elseif ($filtre == "division") { |
1182 |
|
|
// |
1183 |
|
|
$query_ct_where_user_filter .= " |
1184 |
|
|
AND dossier.division = ".$_SESSION['division']." |
1185 |
|
|
"; |
1186 |
|
|
} |
1187 |
|
|
// Dans tous les cas si l'utilisateur fait partie d'une collectivité |
1188 |
|
|
// de niveau 1 (mono), on restreint le listing sur les dossiers de sa |
1189 |
|
|
// collectivité |
1190 |
|
|
if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) { |
1191 |
|
|
$query_ct_where_user_filter .= " |
1192 |
|
|
AND dossier.om_collectivite=".$_SESSION['collectivite']." |
1193 |
|
|
"; |
1194 |
|
|
} |
1195 |
|
|
|
1196 |
|
|
/** |
1197 |
|
|
* Message d'aide |
1198 |
|
|
*/ |
1199 |
|
|
// |
1200 |
|
|
$message_filtre = ""; |
1201 |
|
|
// |
1202 |
|
|
switch ($filtre) { |
1203 |
|
|
case "instructeur": |
1204 |
|
|
$message_filtre = " "._("dont je suis l'instructeur"); |
1205 |
|
|
break; |
1206 |
|
|
case "division": |
1207 |
|
|
$message_filtre = " "._("situés dans ma division"); |
1208 |
|
|
break; |
1209 |
|
|
case "aucun": |
1210 |
|
|
if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) { |
1211 |
|
|
$message_filtre = " "._("situés dans ma collectivité"); |
1212 |
|
|
} else { |
1213 |
|
|
$message_filtre = " "._("situés dans toutes les collectivités"); |
1214 |
|
|
} |
1215 |
|
|
break; |
1216 |
|
|
} |
1217 |
|
|
// |
1218 |
|
|
$message_help = sprintf( |
1219 |
|
|
_("Les consultations marquées comme 'non lu' qui concernent des ". |
1220 |
|
|
"dossiers d'instruction%s."), |
1221 |
|
|
$message_filtre |
1222 |
|
|
); |
1223 |
|
|
|
1224 |
|
|
/** |
1225 |
|
|
* Return |
1226 |
|
|
*/ |
1227 |
|
|
// |
1228 |
|
|
return array( |
1229 |
|
|
"arguments" => $arguments, |
1230 |
|
|
"message_help" => $message_help, |
1231 |
|
|
"query_ct_from" => $query_ct_from, |
1232 |
|
|
"query_ct_where_common" => $query_ct_where_common, |
1233 |
|
|
"query_ct_where_user_filter" => $query_ct_where_user_filter, |
1234 |
|
|
); |
1235 |
|
|
} |
1236 |
|
|
|
1237 |
mbroquet |
3730 |
} |
1238 |
|
|
|
1239 |
|
|
?> |