security_check();
if ($resultat_session == 'c') {
header("Location: ../utilisateurs/mon_compte.php?change_mdp=yes");
die();
} else if ($resultat_session == '0') {
if(!isset($_GET['mode_js'])) {
header("Location: ../logout.php?auto=1");
}
die();
}
if (($_SESSION['statut']=='eleve')||($_SESSION['statut']=='responsable')) {
// Précaution pour éviter une désactivation de compte.
// Cas vécu: Un professeur fait une démonstration à un élève qui dit "Gepi, ça ne marche pas".
// il ouvre une session dans un onglet, mais sans refermer un onglet prof
// Les tests de présence de nouveau message dans l'onglet prof finissent par désactiver le compte élève
die();
}
$sql="SELECT 1=1 FROM droits WHERE id='/mod_alerte/form_message.php';";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)==0) {
$sql="INSERT INTO droits SET id='/mod_alerte/form_message.php',
administrateur='V',
professeur='V',
cpe='V',
scolarite='V',
eleve='F',
responsable='F',
secours='V',
autre='F',
description='Dispositif d alerte',
statut='';";
$insert=mysqli_query($GLOBALS["mysqli"], $sql);
}
// Pour éviter des blagues avec le plugin change_compte (sinon les comptes 'autre' sont désactivés en quelques secondes)
//if (!checkAccess()) {
//if ((!checkAccess())&&($_SESSION['statut']!='autre')) {
if (($_SESSION['statut']!='autre')&&(!checkAccess())) {
// Si on reste sur une page sans se déconnecter, on n'envoie pas, en fin de session, de redir, ni de message par mail du type:
/*
** Alerte automatique sécurité Gepi **
Une nouvelle tentative d'intrusion a été détectée par Gepi. Les détails suivants ont été enregistrés dans la base de données :
Date : 2013-05-12 17:15:24
Fichier visé : /mod_alerte/form_message.php
Url d'origine : https://XXX/*.php
Niveau de gravité : 1
Description : Accès à une page sans être logué (peut provenir d'un timeout de session).
La tentative d'intrusion a été effectuée par un utilisateur non connecté à Gepi.
Adresse IP : 127.0.0.1
*/
// En fait, on n'arrive même pas jusque là si la session est terminée.
//header("Location: ../logout.php?auto=1");
die();
}
if(!getSettingAOui('active_mod_alerte')) {
$active_messagerie=getSettingValue('active_messagerie');
if($active_messagerie!="") {
saveSetting('active_mod_alerte', $active_messagerie);
}
if(!getSettingAOui('active_mod_alerte')) {
$mess=rawurlencode("Vous tentez d accéder au dispositif d'alerte qui est désactivé !");
tentative_intrusion(1, "Tentative d'accès au dispositif d'alerte qui est désactivé.");
header("Location: ../accueil.php?msg=$mess");
die();
}
}
$mode=isset($_POST['mode']) ? $_POST['mode'] : (isset($_GET['mode']) ? $_GET['mode'] : NULL);
if((isset($mode))&&($mode=='maj_span_nom_jour_semaine')) {
header('Content-Type: text/html; charset=utf-8');
$jour=isset($_GET['jour']) ? $_GET['jour'] : NULL;
//if(isset($jour)) {
if((isset($jour))&&(preg_match("|[0-9]{2}/[0-9]{2}/[0-9]{4}|", $jour))) {
$tmp_tab=explode("/", $jour);
if(checkdate($tmp_tab[1],$tmp_tab[0],$tmp_tab[2])) {
echo strftime("%A", mktime ("12", "59" , "00" , $tmp_tab[1], $tmp_tab[0], $tmp_tab[2]));
}
}
die();
}
// Test de la présence de messages non lus et mise à jour du témoin en barre d'entête
if((isset($mode))&&($mode=='check')) {
$messages_non_lus=check_messages_recus($_SESSION['login']);
if($messages_non_lus!="") {
echo " Refermer cette page | Retour à l'accueil ";
if(((!isset($mode))||($mode!='rediger_message'))&&(peut_poster_message($_SESSION['statut']))) {
echo " | Rédiger un message";
}
$sql="SELECT 1=1 FROM messagerie WHERE login_src='".$_SESSION['login']."';";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)>0) {
echo " | Tous mes envois";
}
$sql="SELECT 1=1 FROM messagerie WHERE login_dest='".$_SESSION['login']."';";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)>0) {
echo " | Tous mes messages reçus";
}
echo " Vous avez $messages_non_lus Vous avez $messages_non_lus NOTE : Pour faire cesser l'alerte, il faut cliquer sur les croix rouges.
";
if((getSettingAOui('MessagerieAvecSon'))&&(!isset($_GET['sound']))) {
$AlertesAvecSon=getPref($_SESSION['login'], "AlertesAvecSon","y");
if((!getSettingAOui("PeutChoisirAlerteSansSon".ucfirst($_SESSION['statut'])))||
((getSettingAOui("PeutChoisirAlerteSansSon".ucfirst($_SESSION['statut'])))&&($AlertesAvecSon=="y"))) {
//echo joueSon('pluck.wav',"","1");
echo joueSon('pluck.wav',"");
}
}
}
else {
$sql="SELECT 1=1 FROM messagerie WHERE login_dest='".$_SESSION['login']."' OR login_src='".$_SESSION['login']."' ;";
$test=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($test)>0) {
echo "
";
}
else {
echo "
";
}
}
die();
}
if((isset($mode))&&($mode=='check2')) {
$messages_non_lus=check_messages_recus($_SESSION['login']);
if($messages_non_lus!="") {
$MessagerieLargeurImg=getSettingValue('MessagerieLargeurImg');
echo "
";
}
else {
echo "";
}
die();
}
// Marquer un message comme lu
if((isset($mode))&&($mode=='marquer_lu')) {
check_token();
$id_msg=$_GET['id_msg'];
if(is_numeric($id_msg)) {
$retour=marquer_message_lu($id_msg);
if(!isset($_GET['mode_no_js'])) {
if($retour=="Erreur") {
//echo "
";
echo "Erreur";
}
else {
echo "
";
}
}
else {
if($retour=="Erreur") {
echo "Erreur";
}
else {
echo "Message marqué comme lu.
Vous pouvez refermer cette page.";
// Il faudrait trouver une meilleure façon de gérer le marquage quand JS est inactif.
}
}
}
die();
}
if((isset($mode))&&($mode=='marquer_tous_lus')) {
check_token();
$sql="UPDATE messagerie SET vu='1', date_vu='".strftime("%Y-%m-%d %H:%M:%S")."' WHERE login_dest='".$_SESSION['login']."' AND date_visibilite<='".strftime("%Y-%m-%d %H:%M:%S", time()-10)."' AND vu='0'";
$update=mysqli_query($GLOBALS['mysqli'], $sql);
if(!$update) {
$msg="Erreur lors du marquage de tous les messages comme lus (".strftime("%d/%m/%Y à %H:%M:%S").").
";
}
else {
$msg="Marquage de tous les messages comme lus effectué (".strftime("%d/%m/%Y à %H:%M:%S").").
";
}
}
$envoi_mail_actif=getSettingValue('envoi_mail_actif');
if(($envoi_mail_actif!='n')&&($envoi_mail_actif!='y')) {
$envoi_mail_actif='y'; // Passer à 'n' pour faire des tests hors ligne... la phase d'envoi de mail peut sinon ensabler.
}
// Relancer un message : le marquer comme non-lu
if((isset($mode))&&($mode=='relancer')) {
check_token();
$id_msg=$_GET['id_msg'];
if(is_numeric($id_msg)) {
$retour=marquer_message_lu($id_msg, false);
if(!isset($_GET['mode_no_js'])) {
if($retour=="Erreur") {
//echo "
";
echo "Erreur";
}
else {
echo "
";
}
}
else {
if($retour=="Erreur") {
echo "Erreur";
}
else {
echo "Message marqué comme non lu.
Vous pouvez refermer cette page.";
// Il faudrait trouver une meilleure façon de gérer le marquage quand JS est inactif.
}
}
}
die();
}
// Clore un message
if((isset($mode))&&($mode=='clore')) {
check_token();
$id_msg=$_GET['id_msg'];
if(is_numeric($id_msg)) {
$retour=clore_declore_message($id_msg);
if(!isset($_GET['mode_no_js'])) {
if($retour=="Erreur") {
//echo "
";
echo "Erreur";
}
elseif($retour==2) {
echo "
";
}
else {
echo "
";
}
}
else {
if($retour=="Erreur") {
echo "Erreur";
}
else {
echo "Message marqué comme non lu.
Vous pouvez refermer cette page.";
// Il faudrait trouver une meilleure façon de gérer le marquage quand JS est inactif.
}
}
}
die();
}
if((isset($mode))&&($mode=='affiche_messages_recus')) {
$tri=isset($_GET['tri']) ? $_GET['tri'] : "date";
if(!in_array($tri, array("date", "source", "sujet", "vu"))) {$tri="date";}
$mode_affiche_historique_messages_recus=isset($_GET['mode_affiche_historique_messages_recus']) ? $_GET['mode_affiche_historique_messages_recus'] : "tous";
if(!in_array($mode_affiche_historique_messages_recus, array("tous", "non_lus"))) {$mode_affiche_historique_messages_recus="tous";}
echo affiche_historique_messages_recus($_SESSION['login'], $mode_affiche_historique_messages_recus, $tri);
die;
}
if((isset($mode))&&($mode=='affiche_messages')) {
$tri=isset($_GET['tri']) ? $_GET['tri'] : "date";
if(!in_array($tri, array("date", "source", "sujet", "vu"))) {$tri="date";}
$mode_affiche_historique_messages=isset($_GET['mode_affiche_historique_messages']) ? $_GET['mode_affiche_historique_messages'] : "tous";
if(!in_array($mode_affiche_historique_messages, array("tous", "non_lus"))) {$mode_affiche_historique_messages="tous";}
echo affiche_historique_messages($_SESSION['login'], $mode_affiche_historique_messages, $tri);
die;
}
// Envoi de message
$message_envoye=isset($_POST['message_envoye']) ? $_POST['message_envoye'] : (isset($_GET['message_envoye']) ? $_GET['message_envoye'] : "n");
$sujet=isset($_POST['sujet']) ? $_POST['sujet'] : (isset($_GET['sujet']) ? $_GET['sujet'] : NULL);
$message=isset($_POST['message']) ? $_POST['message'] : (isset($_GET['message']) ? $_GET['message'] : NULL);
$date_visibilite=isset($_POST['date_visibilite']) ? $_POST['date_visibilite'] : (isset($_GET['date_visibilite']) ? $_GET['date_visibilite'] : NULL);
$heure_visibilite=isset($_POST['heure_visibilite']) ? $_POST['heure_visibilite'] : (isset($_GET['heure_visibilite']) ? $_GET['heure_visibilite'] : NULL);
$login_dest=isset($_POST['login_dest']) ? $_POST['login_dest'] : (isset($_GET['login_dest']) ? $_GET['login_dest'] : NULL);
$equipe_dest=isset($_POST['equipe_dest']) ? $_POST['equipe_dest'] : (isset($_GET['equipe_dest']) ? $_GET['equipe_dest'] : NULL);
if(isset($equipe_dest)) {
if(!isset($login_dest)) {
$login_dest=array();
}
elseif(!is_array($login_dest)) {
$tmp_login_dest=$login_dest;
$login_dest=array();
$login_dest[]=$tmp_login_dest;
unset($tmp_login_dest);
}
if(is_array($equipe_dest)) {
foreach($equipe_dest as $key => $value) {
$sql="SELECT DISTINCT login FROM j_groupes_professeurs jgp, j_groupes_classes jgc WHERE jgp.id_groupe=jgc.id_groupe AND jgc.id_classe='".$value."';";
$res_prof_equip=mysqli_query($GLOBALS['mysqli'], $sql);
if(mysqli_num_rows($res_prof_equip)>0) {
while($lig_prof_equip=mysqli_fetch_object($res_prof_equip)) {
if(!in_array($lig_prof_equip->login, $login_dest)) {
$login_dest[]=$lig_prof_equip->login;
}
}
}
}
}
else {
$sql="SELECT DISTINCT login FROM j_groupes_professeurs jgp, j_groupes_classes jgc WHERE jgp.id_groupe=jgc.id_groupe AND jgc.id_classe='".$equipe_dest."';";
$res_prof_equip=mysqli_query($GLOBALS['mysqli'], $sql);
if(mysqli_num_rows($res_prof_equip)>0) {
while($lig_prof_equip=mysqli_fetch_object($res_prof_equip)) {
if(!in_array($lig_prof_equip->login, $login_dest)) {
$login_dest[]=$lig_prof_equip->login;
}
}
}
}
}
if((isset($_GET['id_incident']))&&(!isset($message))) {
$sql="SELECT * FROM s_incidents WHERE id_incident='".$_GET['id_incident']."';";
$res_incident=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res_incident)>0) {
$lig_incident=mysqli_fetch_object($res_incident);
//A propos de l'incident n° du ".formate_date
$message="Bonjour,
A propos de l'incident n°".$_GET['id_incident']." du ".formate_date($lig_incident->date)."
================================================
".$lig_incident->description."
================================================
Cordialement.
--
".civ_nom_prenom($_SESSION['login']);
}
}
if (($message_envoye=='y')&&(peut_poster_message($_SESSION['statut']))) {
check_token();
$msg="";
$date_heure_visibilite="";
if(isset($date_visibilite)) {
$tmp_tab=explode("/", $date_visibilite);
if(!checkdate($tmp_tab[1],$tmp_tab[0],$tmp_tab[2])) {
$msg.="Erreur sur la date de visibilité proposée $date_visibilite
";
}
else {
// On teste maintenant l'heure
if((!preg_match("/^[0-9]{1,2}:[0-9]{1,2}$/", $heure_visibilite))&&(!preg_match("/^[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}$/", $heure_visibilite))) {
if((!preg_match("/[0-9]{1,2}", $heure_visibilite))||($heure_visibilite<0)||($heure_visibilite>23)) {
$msg.="Erreur sur l'heure de visibilité proposée $heure_visibilite
";
}
else {
$date_heure_visibilite=$tmp_tab[2].":".$tmp_tab[1].":".$tmp_tab[0]." ".$heure_visibilite.":00:00";
}
}
else {
$tmp_tab2=explode(":", $heure_visibilite);
if(($tmp_tab2[0]<0)||($tmp_tab2[0]>23)||($tmp_tab2[1]<0)||($tmp_tab2[1]>59)) {
$msg.="Erreur sur l'heure de visibilité proposée $heure_visibilite
";
}
else {
$date_heure_visibilite=$tmp_tab[2].":".$tmp_tab[1].":".$tmp_tab[0]." ".$tmp_tab2[0].":".$tmp_tab2[1].":00";
}
}
}
}
if((isset($login_dest))&&(isset($sujet))&&(isset($message))) {
unset($in_reply_to);
if((isset($_POST['in_reply_to']))&&(is_numeric($_POST['in_reply_to']))) {
$sql="SELECT 1=1 FROM messagerie WHERE id='".$_POST['in_reply_to']."' AND login_dest='".$_SESSION['login']."';";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)>0) {
$in_reply_to=$_POST['in_reply_to'];
}
}
if(is_array($login_dest)) {
$tmp_login_dest=$login_dest;
$login_dest=array_unique($tmp_login_dest);
$nb_reg=0;
//for($loop=0;$loop
";
}
}
}
}
}
else {
//$msg.="Erreur lors de l'enregistrement du message pour ".civ_nom_prenom($login_dest[$loop]).".
";
$msg.="Erreur lors de l'enregistrement du message pour ".civ_nom_prenom($value).".
";
}
}
$msg.="Message enregistré pour $nb_reg destinataire(s) : ".strftime("%d/%m/%Y à %H:%M:%S")."
";
}
elseif(($login_dest!='')&&($sujet!='')&&($message!='')) {
if(isset($in_reply_to)) {
$retour=enregistre_message($sujet, $message, $_SESSION['login'], $login_dest, $date_heure_visibilite,$in_reply_to);
}
else {
$retour=enregistre_message($sujet, $message, $_SESSION['login'], $login_dest, $date_heure_visibilite);
}
if($retour!="") {
$msg.="Message pour ".civ_nom_prenom($login_dest)." enregistré.
";
// 20141125
if($envoi_mail_actif=="y") {
if(isset($_POST['doubler_par_envoi_mail'])) {
$mail_dest=get_mail_user($login_dest);
if(check_mail($mail_dest)) {
$tab_param_mail['destinataire']=$mail_dest;
$subject = "[GEPI]: $sujet";
$texte_mail=preg_replace('/(\\\n)+/',"\n",$message);
$texte_mail=preg_replace('/(\\\')+/',"'",$texte_mail);
$texte_mail.="
--
".civ_nom_prenom($_SESSION['login']);
$headers = "";
if((isset($_SESSION['email']))&&(check_mail($_SESSION['email']))) {
$headers.="Reply-to:".$_SESSION['email']."\r\n";
$tab_param_mail['replyto']=$_SESSION['email'];
}
// On envoie le mail
$envoi = envoi_mail($subject, $texte_mail, $mail_dest, $headers, "plain", $tab_param_mail);
if($envoi) {
$msg.="Mail envoyé.
";
}
}
}
}
if(isset($_GET['envoi_js'])) {
echo "
";
die();
}
}
else {
$msg.="Erreur lors de l'enregistrement du message pour ".civ_nom_prenom($login_dest).".
";
if(isset($_GET['envoi_js'])) {
echo "
";
die();
}
}
}
unset($in_reply_to);
}
}
if((isset($mode))&&($mode=='repondre')) {
check_token();
$id_msg=$_GET['id_msg'];
if(is_numeric($id_msg)) {
$sql="SELECT * FROM messagerie WHERE id='$id_msg' AND login_dest='".$_SESSION['login']."';";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)==0) {
$msg.="Le message n°$id_msg s'il existe ne vous était pas destiné.
";
}
else {
$retour=marquer_message_lu($id_msg);
$login_dest=old_mysql_result($res,0,"login_src");
$sujet="Re: ".old_mysql_result($res,0,"sujet");
//$date_visibilite=old_mysql_result($res,0,"date_visibilite");
$date_msg=old_mysql_result($res,0,"date_msg");
$message="Le ".formate_date($date_msg, 'y').", vous avez écrit:\n================================\n".old_mysql_result($res,0,"message")."\n================================\n";
$in_reply_to=$id_msg;
}
}
}
$avec_js_et_css_edt="n";
if((getSettingAOui('autorise_edt_tous'))||
((getSettingAOui('autorise_edt_admin'))&&($_SESSION['statut']=='administrateur'))) {
$avec_js_et_css_edt="y";
}
$themessage = 'Un message est en cours de rédaction. Voulez-vous vraiment quitter sans enregistrer ?';
$message_enregistrement = "Les modifications ont été enregistrées !";
$utilisation_prototype = "ok";
//**************** EN-TETE *****************
$titre_page = "Alertes";
require_once("../lib/header.inc.php");
//**************** FIN EN-TETE *****************
echo "
Le test de présence de messages non lus n'est effectué que toutes les ".getSettingValue('MessagerieDelaisTest')."min.
".getSettingValue('MessagerieDelaisTest')."min après que vous ayez cliqué, l'alerte disparaitra donc.
".ucfirst($tab_statut[$loop])."";
if($tab_statut[$loop]=='professeur') {
//$chaine_prof_classe="";
$sql="SELECT c.id, c.classe FROM classes c ORDER BY classe;";
$res_classe=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res_classe)>0) {
$texte_infobulle.=" de ";
}
$sql="SELECT c.id, c.classe FROM classes c ORDER BY classe;";
$res_classe=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res_classe)>0) {
$texte_infobulle.=" - ";
}
$sql="SELECT DISTINCT m.matiere, m.nom_complet FROM matieres m, j_groupes_matieres jgm WHERE jgm.id_matiere=m.matiere AND
jgm.id_matiere NOT IN (SELECT value FROM mod_alerte_divers WHERE name='matieres_exclues') ORDER BY matiere;";
$res_matiere=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res_matiere)>0) {
$texte_infobulle.=" - ";
}
$chaine_pp_classe="";
if($chaine_prof_principal!="") {
$texte_infobulle.="
Tous les ".getSettingValue('gepi_prof_suivi')." ou seulement de ";
$texte_infobulle.=" ";
}
}
$texte_infobulle.="
Historique de vos messages envoyés :
\n"; } elseif(mysqli_num_rows($test)<=4) { echo "