/[openfoncier]/branches/lien-openaria/obj/om_widget.class.php
ViewVC logotype

Annotation of /branches/lien-openaria/obj/om_widget.class.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4161 - (hide annotations)
Fri May 13 14:41:58 2016 UTC (8 years, 8 months ago) by fmichon
File size: 42515 byte(s)
* Création d'une branche pour développer le lien avec l'application openARIA.

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&amp;action=0&amp;advs_id=&amp;tricol=&amp;valide=&amp;retour=tab&amp;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&amp;action=3&amp;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     ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26