733 |
} |
} |
734 |
|
|
735 |
/** |
/** |
736 |
|
* 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 |
* WIDGET DASHBOARD - Retours de consultation |
* WIDGET DASHBOARD - Retours de consultation |
986 |
* |
* |
987 |
* @return void |
* @return void |