diff -urN /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.0/ajax.php /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.1/ajax.php
--- /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.0/ajax.php 2015-09-20 21:45:42.138241645 +0200
+++ /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.1/ajax.php 2015-10-24 02:45:24.000000000 +0200
@@ -27,7 +27,7 @@
$_SESSION['autorisation'] = $autorisation = $r['autorisation'];
$_SESSION['matieres'] = $r['matieres'];
$_SESSION['timeout'] = $r['timeout'];
- $_SESSION['time'] = time()+$_SESSION['timeout'];
+ $_SESSION['time'] = time()+$_SESSION['timeout']+14400*($_SESSION['timeout'] == 0);
// Pour sécurisation des requêtes AJAX
$_SESSION['csrf-token'] = ( isset($_REQUEST['csrf-token']) ) ? $_REQUEST['csrf-token'] : md5(uniqid(rand(), true));
break;
@@ -51,7 +51,7 @@
exit($_SESSION['message'] = '{"etat":"ok","message":"Déconnexion réussie"}');
}
// Vérification du token CSRF
-if ( !isset($_REQUEST['csrf-token']) || ( $_REQUEST['csrf-token'] != $_SESSION['csrf-token'] ) )
+if ( !isset($_REQUEST['csrf-token']) || isset($_SESSION['csrf-token']) && ( $_REQUEST['csrf-token'] != $_SESSION['csrf-token'] ) )
exit('{"etat":"nok","message":"Accès non autorisé"}');
// Si non autorisé, la session a dû expirer : il faut se reconnecter
if ( !$autorisation )
@@ -130,75 +130,127 @@
}
}
+if ( $autorisation > 2 ) {
/////////////////////////////////////////
// Accès colleur et professeur : notes //
/////////////////////////////////////////
-elseif ( ( $autorisation > 2 ) and ( isset($_REQUEST['notes']) or isset($_REQUEST['supprime']) and ( $_REQUEST['table'] == 'notes' ) ) and isset($_REQUEST['id']) and preg_match('/\d*-\d*/',$_REQUEST['id']) ) {
- // id : semaine-matiere
- list($semaine,$matiere) = explode('-',$_REQUEST['id']);
-
- // Vérification que l'identifiant est valide
- $resultat = $mysqli->query("SELECT SUM(colleur = ${_SESSION['id']}) AS n, GROUP_CONCAT(IF(colleur != ${_SESSION['id']},n.eleve,NULL)) AS eleves
- FROM semaines AS s LEFT JOIN (SELECT * FROM notes WHERE matiere = ${matiere['id']}) AS n ON n.semaine = s.id
- WHERE s.id = $semaine AND s.colle GROUP BY s.id");
- if ( in_array($matiere,explode(',',$_SESSION['matieres'])) && ( $resultat->num_rows ) ) {
- $r = $resultat->fetch_assoc();
- $resultat->free();
- // Suppression
- if ( isset($_REQUEST['supprime']) )
- $message = ( requete('notes',"DELETE FROM notes WHERE semaine = $semaine AND colleur = ${_SESSION['id']} AND matiere = $matiere",$mysqli) ) ? "{\"etat\":\"ok\",\"message\":\"${r['n']} notes supprimées\"}" : '{"etat":"nok","message":"Les notes à supprimer n\'ont pas pu l\'être. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'»."}';
+ if ( ( isset($_REQUEST['notes']) or isset($_REQUEST['supprime']) and ( $_REQUEST['table'] == 'notes' ) ) and isset($_REQUEST['id']) and preg_match('/\d*-\d*/',$_REQUEST['id']) ) {
+ // id : semaine-matiere
+ list($semaine,$matiere) = explode('-',$_REQUEST['id']);
- // Ajout/Modification
- else {
- $dejanotes = explode(',',$r['eleves']);
- $effacer = $r['n'];
- // Récupération des élèves associés à la matière
- $resultat = $mysqli->query("SELECT GROUP_CONCAT(id) FROM utilisateurs WHERE autorisation = 2 AND FIND_IN_SET($matiere,matieres)");
- $r = $resultat->fetch_row();
+ // Vérification que l'identifiant est valide
+ $resultat = $mysqli->query("SELECT SUM(colleur = ${_SESSION['id']}) AS n, GROUP_CONCAT(IF(colleur != ${_SESSION['id']},n.eleve,NULL)) AS eleves
+ FROM semaines AS s LEFT JOIN (SELECT * FROM notes WHERE matiere = $matiere) AS n ON n.semaine = s.id
+ WHERE s.id = $semaine AND s.colle GROUP BY s.id");
+ if ( in_array($matiere,explode(',',$_SESSION['matieres'])) && ( $resultat->num_rows ) ) {
+ $r = $resultat->fetch_assoc();
$resultat->free();
- $eleves = explode(',',$r[0]);
- // Remarque : le zéro dans la liste cause un bug, car 0=="str" est vrai
- $notes = array("1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","0,5","1,5","2,5","3,5","4,5","5,5","6,5","7,5","8,5","9,5","10,5","11,5","12,5","13,5","14,5","15,5","16,5","17,5","18,5","19,5","abs");
- $requete = array();
- // Vérification des notes envoyées et préparation de la requête
- foreach ( $_REQUEST AS $eleve => $note )
- if ( in_array($eleve=substr($eleve,1),$eleves) && in_array($note, $notes,true) && !in_array($eleve,$dejanotes) )
- $requete[] = "($semaine,$eleve,${_SESSION['id']},$matiere,'$note')";
- // Suppression des notes de la semaine à modifier
- if ( $effacer )
- requete('notes',"DELETE FROM notes WHERE semaine = $semaine AND colleur = ${_SESSION['id']} AND matiere = $matiere",$mysqli);
- // Ajout
- $message = $_SESSION['message'] = requete('notes','INSERT INTO notes (semaine,eleve,colleur,matiere,note) VALUES '.implode(',',$requete),$mysqli) ? '{"etat":"ok","message":"'.count($requete).' notes '.(($effacer)?'modifiées':'ajoutées').'"}' : '{"etat":"nok","message":"Aucune note n\'a pu être ajoutée. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'»."}';
+ // Suppression
+ if ( isset($_REQUEST['supprime']) )
+ $message = ( requete('notes',"DELETE FROM notes WHERE semaine = $semaine AND colleur = ${_SESSION['id']} AND matiere = $matiere",$mysqli) ) ? "{\"etat\":\"ok\",\"message\":\"${r['n']} notes supprimées\"}" : '{"etat":"nok","message":"Les notes à supprimer n\'ont pas pu l\'être. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'»."}';
+
+ // Ajout/Modification
+ else {
+ $dejanotes = explode(',',$r['eleves']);
+ $effacer = $r['n'];
+ // Récupération des élèves associés à la matière
+ $resultat = $mysqli->query("SELECT GROUP_CONCAT(id) FROM utilisateurs WHERE autorisation = 2 AND FIND_IN_SET($matiere,matieres)");
+ $r = $resultat->fetch_row();
+ $resultat->free();
+ $eleves = explode(',',$r[0]);
+ $notes = array('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','0,5','1,5','2,5','3,5','4,5','5,5','6,5','7,5','8,5','9,5','10,5','11,5','12,5','13,5','14,5','15,5','16,5','17,5','18,5','19,5','abs');
+ $requete = array();
+ // Vérification des notes envoyées et préparation de la requête
+ foreach ( $_REQUEST AS $eleve => $note )
+ if ( in_array($eleve=substr($eleve,1),$eleves) && in_array($note, $notes,true) && !in_array($eleve,$dejanotes) )
+ $requete[] = "($semaine,$eleve,${_SESSION['id']},$matiere,'$note')";
+ // Suppression des notes de la semaine à modifier
+ if ( $effacer )
+ requete('notes',"DELETE FROM notes WHERE semaine = $semaine AND colleur = ${_SESSION['id']} AND matiere = $matiere",$mysqli);
+ // Ajout
+ $message = $_SESSION['message'] = requete('notes','INSERT INTO notes (semaine,eleve,colleur,matiere,note) VALUES '.implode(',',$requete),$mysqli) ? '{"etat":"ok","message":"'.count($requete).' notes '.(($effacer)?'modifiées':'ajoutées').'"}' : '{"etat":"nok","message":"Aucune note n\'a pu être ajoutée. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'»."}';
+ }
+ // Mise à jour des champs 'notes' dans la table 'matieres' (pour le menu)
+ $mysqli->query('UPDATE matieres SET notes = IF((SELECT id FROM notes WHERE matiere = matieres.id LIMIT 1),1,0)');
}
- // Mise à jour des champs 'notes' dans la table 'matieres' (pour le menu)
- $mysqli->query('UPDATE matieres SET notes = IF((SELECT id FROM notes WHERE matiere = matieres.id LIMIT 1),1,0)');
+ else
+ $message = '{"etat":"nok","message":"Identifiant non valide"}';
}
- else
- $message = '{"etat":"nok","message":"Identifiant non valide"}';
-}
//////////////////////////////////////////////////////////////////
// Accès colleur et professeur : mailexp, mail (depuis mail.php)//
//////////////////////////////////////////////////////////////////
-elseif ( ( $autorisation > 2 ) and isset($_REQUEST['table']) and ( $_REQUEST['table'] == 'mailprefs' ) && isset($_REQUEST['champ']) && isset($_REQUEST['val']) ) {
- if ( !strlen($val = $_REQUEST['val']) )
- $message = '{"etat":"nok","message":"Cette valeur ne peut pas être vide."}';
- elseif ( $_REQUEST['champ'] == 'mailexp' )
- $message = ( requete('utilisateurs','UPDATE utilisateurs SET mailexp = "'.$mysqli->real_escape_string($val)."\" WHERE id = ${_SESSION['id']}",$mysqli) ) ? '{"etat":"ok","message":"Nom d\'expéditeur modifié"}' : '{"etat":"nok","message":"Le nom d\'expéditeur n\'a pas pu être modifié. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'»."}';
- elseif ( ( $_REQUEST['champ'] == 'mailcopy' ) && in_array($val,array(0,1)) )
- $message = ( requete('utilisateurs',"UPDATE utilisateurs SET mailcopy = $val WHERE id = ${_SESSION['id']}",$mysqli) ) ? '{"etat":"ok","message":"Mise en copie modifiée"}' : '{"etat":"nok","message":"La mise en copie n\'a pas pu être modifiée. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'»."}';
- else {
- if ( !filter_var($val,FILTER_VALIDATE_EMAIL) )
- $message = '{"etat":"nok","message":"Adresse mail non valide"}';
+ elseif ( isset($_REQUEST['table']) and ( $_REQUEST['table'] == 'mailprefs' ) && isset($_REQUEST['champ']) && isset($_REQUEST['val']) ) {
+ if ( !strlen($val = $_REQUEST['val']) )
+ $message = '{"etat":"nok","message":"Cette valeur ne peut pas être vide."}';
+ elseif ( $_REQUEST['champ'] == 'mailexp' )
+ $message = ( requete('utilisateurs','UPDATE utilisateurs SET mailexp = "'.$mysqli->real_escape_string($val)."\" WHERE id = ${_SESSION['id']}",$mysqli) ) ? '{"etat":"ok","message":"Nom d\'expéditeur modifié"}' : '{"etat":"nok","message":"Le nom d\'expéditeur n\'a pas pu être modifié. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'»."}';
+ elseif ( ( $_REQUEST['champ'] == 'mailcopy' ) && in_array($val,array(0,1)) )
+ $message = ( requete('utilisateurs',"UPDATE utilisateurs SET mailcopy = $val WHERE id = ${_SESSION['id']}",$mysqli) ) ? '{"etat":"ok","message":"Mise en copie modifiée"}' : '{"etat":"nok","message":"La mise en copie n\'a pas pu être modifiée. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'»."}';
else {
- // Mail : vérification qu'il n'existe pas déjà
- $resultat = $mysqli->query("SELECT GROUP_CONCAT(mail) AS mails FROM utilisateurs WHERE id != ${_SESSION['id']} AND LENGTH(mail)");
- $s = $resultat->fetch_assoc();
- $resultat->free();
- if ( in_array($mail = strtolower($mysqli->real_escape_string($val)),explode(',',$s['mails'])) )
- $message = '{"etat":"nok","message":"Adresse mail déjà prise"}';
- elseif ( requete('utilisateurs',"UPDATE utilisateurs SET mail = '$mail' WHERE id = ${_SESSION['id']}",$mysqli) )
- $message = '{"etat":"ok","message":"Adresse mail modifiée"}';
+ if ( !filter_var($val,FILTER_VALIDATE_EMAIL) )
+ $message = '{"etat":"nok","message":"Adresse mail non valide"}';
+ else {
+ // Mail : vérification qu'il n'existe pas déjà
+ $resultat = $mysqli->query("SELECT GROUP_CONCAT(mail) AS mails FROM utilisateurs WHERE id != ${_SESSION['id']} AND LENGTH(mail)");
+ $s = $resultat->fetch_assoc();
+ $resultat->free();
+ if ( in_array($mail = strtolower($mysqli->real_escape_string($val)),explode(',',$s['mails'])) )
+ $message = '{"etat":"nok","message":"Adresse mail déjà prise"}';
+ elseif ( requete('utilisateurs',"UPDATE utilisateurs SET mail = '$mail' WHERE id = ${_SESSION['id']}",$mysqli) )
+ $message = '{"etat":"ok","message":"Adresse mail modifiée"}';
+ }
+ }
+ }
+
+/////////////////////////////////////////////////
+// Accès colleur et professeur : envoi de mail //
+/////////////////////////////////////////////////
+ elseif ( isset($_REQUEST['envoimail']) && isset($_REQUEST['id-copie']) && isset($_REQUEST['sujet']) && isset($_REQUEST['texte']) ) {
+ // Récupération des données de l'utilisateur courant
+ $resultat = $mysqli->query("SELECT mailexp, mail FROM utilisateurs WHERE id = ${_SESSION['id']}");
+ $u = $resultat->fetch_assoc();
+ $resultat->free();
+ // Récupération des destinataires
+ $resultat = $mysqli->query("SELECT id, IF(LENGTH(nom),CONCAT(nom,' ',prenom),login) AS nom, mail
+ FROM utilisateurs WHERE LENGTH(mail) AND LENGTH(mdp)=40 AND id != ${_SESSION['id']} ORDER BY autorisation DESC, nom");
+ while ( $r = $resultat->fetch_assoc() )
+ $utilisateurs[$r['id']] = $r;
+ $resultat->free();
+ $dests = '';
+ $ids = explode(',',$_REQUEST['id-copie']);
+ foreach ( $ids as $i )
+ if ( isset($utilisateurs[$i]) ) {
+ $dests .= $utilisateurs[$i]['nom'].' <'.$utilisateurs[$i]['mail'].'>, ';
+ unset($utilisateurs[$i]);
+ }
+ if ( !strlen($dests) )
+ $message = '{"etat":"nok","message":"Pas de destinataire valide : mail non envoyé"}';
+ elseif ( !strlen($sujet = $_REQUEST['sujet']) )
+ $message = '{"etat":"nok","message":"Pas de sujet : mail non envoyé"}';
+ elseif ( !strlen($texte = $_REQUEST['texte']) )
+ $message = '{"etat":"nok","message":"Pas de texte : mail non envoyé"}';
+ else {
+ $dests = substr($dests,0,-2);
+ $bcc = ( isset($_REQUEST['copie']) ) ? "${u['mailexp']} <${u['mail']}>, " : '';
+ if ( isset($_REQUEST['id-bcc']) )
+ $ids = explode(',',$_REQUEST['id-bcc']);
+ foreach ( $ids as $i )
+ if ( isset($utilisateurs[$i]) ) {
+ $bcc .= $utilisateurs[$i]['nom'].' <'.$utilisateurs[$i]['mail'].'>, ';
+ unset($utilisateurs[$i]);
+ }
+ $bcc = ( strlen($bcc) ) ? 'Bcc: '.substr($bcc,0,-2) : '';
+ mail($dests,'=?UTF-8?B?'.base64_encode($sujet).'?=',$texte,'From: =?UTF-8?B?'.base64_encode($u['mailexp'])."?= <${u['mail']}>\r\nContent-type: text/plain; charset=UTF-8\r\n$bcc","-f${u['mail']}");
+
+ // Message de confirmation d'envoi
+ $n1 = substr_count($dests,'<');
+ $n2 = substr_count($bcc,'<') - isset($_REQUEST['copie']);
+ if ( $n2 )
+ $message = 'Mail envoyé à '.($n1+$n2).' destinataires (dont '.$n2.' en copie cachée)';
+ else
+ $message = ( $n1 > 1 ) ? "Mail envoyé à $n1 destinataires." : 'Mail envoyé à 1 destinataire';
+ $message = $_SESSION['message'] = "{\"etat\":\"ok\",\"message\":\"$message\"}";
}
}
}
@@ -246,59 +298,10 @@
exit(json_encode(array('etat'=>'ok_','mats'=>$mats,'reps'=>$reps,'docs'=>$docs)));
}
-///////////////////
-// Envoi de mail //
-///////////////////
-if ( isset($_REQUEST['envoimail']) && isset($_REQUEST['id-copie']) && isset($_REQUEST['sujet']) && isset($_REQUEST['texte']) ) {
- // Récupération des données de l'utilisateur courant
- $resultat = $mysqli->query("SELECT mailexp, mail FROM utilisateurs WHERE id = ${_SESSION['id']}");
- $u = $resultat->fetch_assoc();
- $resultat->free();
- // Récupération des destinataires
- $resultat = $mysqli->query("SELECT id, IF(LENGTH(nom),CONCAT(nom,' ',prenom),login) AS nom, mail
- FROM utilisateurs WHERE LENGTH(mail) AND LENGTH(mdp)=40 AND id != ${_SESSION['id']} ORDER BY autorisation DESC, nom");
- while ( $r = $resultat->fetch_assoc() )
- $utilisateurs[$r['id']] = $r;
- $resultat->free();
- $dests = '';
- $ids = explode(',',$_REQUEST['id-copie']);
- foreach ( $ids as $i )
- if ( isset($utilisateurs[$i]) ) {
- $dests .= $utilisateurs[$i]['nom'].' <'.$utilisateurs[$i]['mail'].'>, ';
- unset($utilisateurs[$i]);
- }
- if ( !strlen($dests) )
- $message = '{"etat":"nok","message":"Pas de destinataire valide : mail non envoyé"}';
- elseif ( !strlen($sujet = $_REQUEST['sujet']) )
- $message = '{"etat":"nok","message":"Pas de sujet : mail non envoyé"}';
- elseif ( !strlen($texte = $_REQUEST['texte']) )
- $message = '{"etat":"nok","message":"Pas de texte : mail non envoyé"}';
- else {
- $dests = substr($dests,0,-2);
- $bcc = ( isset($_REQUEST['copie']) ) ? "${u['mailexp']} <${u['mail']}>, " : '';
- if ( isset($_REQUEST['id-bcc']) )
- $ids = explode(',',$_REQUEST['id-bcc']);
- foreach ( $ids as $i )
- if ( isset($utilisateurs[$i]) ) {
- $bcc .= $utilisateurs[$i]['nom'].' <'.$utilisateurs[$i]['mail'].'>, ';
- unset($utilisateurs[$i]);
- }
- $bcc = ( strlen($bcc) ) ? 'Bcc: '.substr($bcc,0,-2) : '';
- mail($dests,'=?UTF-8?B?'.base64_encode($sujet).'?=',$texte,'From: =?UTF-8?B?'.base64_encode($u['mailexp'])."?= <${u['mail']}>\r\nContent-type: text/plain; charset=UTF-8\r\n$bcc",'-f'.( ( isset($mailadmin) ) ? $mailadmin : 'admin@cahier-de-prepa.fr'));
-
- // Message de confirmation d'envoi
- $n1 = substr_count($dests,'<');
- $n2 = substr_count($bcc,'<') - isset($_REQUEST['copie']);
- if ( $n2 )
- $message = 'Mail envoyé à '.($n1+$n2).' destinataires (dont '.$n2.' en copie cachée)';
- else
- $message = ( $n1 > 1 ) ? "Mail envoyé à $n1 destinataires." : 'Mail envoyé à 1 destinataire';
- $message = $_SESSION['message'] = "{\"etat\":\"ok\",\"message\":\"$message\"}";
- }
-}
-
-
-elseif ( isset($_REQUEST['table']) ) {
+/////////////////////////////////////////////////////////////////////////
+// Gestion des demandes en fonction de la valeur de $_REQUEST['table'] //
+/////////////////////////////////////////////////////////////////////////
+if ( isset($_REQUEST['table']) ) {
// Fonction PHP pour le stockage dans la base MySQL de l'ordre "naturel" (1,2,10,11 et non 1,10,11,2)
// Remplace tout nombre par un nombre égal mais écrit sur 10 chiffres, complété par des zéros à gauche
// Utilisé pour les documents et les groupes
@@ -506,10 +509,10 @@
// Écriture
elseif ( requete('infos',"UPDATE infos SET ordre = (ordre+1) WHERE page = $page",$mysqli)
&& requete('infos',"INSERT INTO infos SET ordre = 1, page = $page, texte = '$texte', titre = '$titre', cache = $cache",$mysqli) ) {
- $mysqli->query('ALTER TABLE infos ORDER BY page,ordre');
$message = $_SESSION['message'] = '{"etat":"ok","message":"Information ajoutée"}';
if ( !$cache )
- recent($mysqli,1,$id,array('titre'=>" $titre", 'lien'=>".?${r['cle']}", 'texte'=>$texte, 'matiere'=>$r['mat'], 'protection'=>$r['protection']));
+ recent($mysqli,1,$mysqli->insert_id,array('titre'=>" $titre", 'lien'=>".?${r['cle']}", 'texte'=>$texte, 'matiere'=>$r['mat'], 'protection'=>$r['protection']));
+ $mysqli->query('ALTER TABLE infos ORDER BY page,ordre');
}
else
$message = '{"etat":"nok","message":"L\'information n\'a pas pu être ajoutée. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'»."}';
@@ -543,12 +546,12 @@
$message = '{"etat":"nok","message":"Le programme de colle n\'a pas pu être modifié. Texte non vide nécessaire."}';
elseif ( requete('colles',"UPDATE colles SET texte = '$valeur' WHERE id = ${r['id']}",$mysqli) ) {
$message = '{"etat":"ok","message":"Programme de colles modifié"}';
- if ( !$cache ) {
+ if ( !$r['cache'] ) {
// Fabrication des données pour les informations récentes
- $resultat = $mysqli->query("SELECT cle, colles_protection FROM matieres WHERE id = $mid");
- $r = $resultat->fetch_assoc();
+ $resultat = $mysqli->query("SELECT nom, cle, colles_protection FROM matieres WHERE id = $mid");
+ $s = $resultat->fetch_assoc();
$resultat->free();
- recent($mysqli,1,$r['id'],array('titre'=>" Colles du ${r['debut']} en ${r['nom']}", 'lien'=>"colles?${r['cle']}&n=$sid", 'texte'=>$valeur, 'matiere'=>$mid, 'protection'=>$r['colles_protection']));
+ recent($mysqli,2,$r['id'],array('titre'=>" Colles du ${r['debut']} en ${s['nom']}", 'lien'=>"colles?${s['cle']}&n=$sid", 'texte'=>$valeur, 'matiere'=>$mid, 'protection'=>$s['colles_protection']));
}
}
else
@@ -563,7 +566,7 @@
$resultat = $mysqli->query("SELECT nom, cle, colles_protection FROM matieres WHERE id = $mid");
$s = $resultat->fetch_assoc();
$resultat->free();
- recent($mysqli,2,$r['id'],array('titre'=>" Colles du ${r['debut']} en ${s['nom']}", 'lien'=>"colles?${s['cle']}&n=$sid", 'texte'=>$valeur, 'matiere'=>$mid, 'protection'=>$s['colles_protection']));
+ recent($mysqli,2,$r['id'],array('titre'=>" Colles du ${r['debut']} en ${s['nom']}", 'lien'=>"colles?${s['cle']}&n=$sid", 'texte'=>$r['texte'], 'matiere'=>$mid, 'protection'=>$s['colles_protection']));
}
else
$message = '{"etat":"nok","message":"Le programme de colles n\'a pas pu être diffusé. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'»."}';
@@ -723,11 +726,17 @@
}
// Nouvel élément du cahier de texte
- elseif ( !strlen($message) && isset($h_debut) && isset($_REQUEST['matiere']) && in_array($matiere = $_REQUEST['matiere'], explode(',',$_SESSION['matieres'])) ) {
+ elseif ( !strlen($message) && isset($demigroupe) && isset($_REQUEST['matiere']) && in_array($matiere = $_REQUEST['matiere'], explode(',',$_SESSION['matieres'])) ) {
$texte = $mysqli->real_escape_string($_REQUEST['texte']);
$cache = ( isset($_REQUEST['cache']) ) ? 1 : 0;
if ( !strlen($texte) )
- $message = '{"etat":"nok","message":"L\'élément du cahier de texte n\'a pas pu être ajouté. Texte non vide nécessaire."}';
+ $message = '{"etat":"nok","message":"L\'élément du cahier de texte n\'a pas pu être ajouté. Texte non vide nécessaire."}';
+ elseif ( is_null($h_debut) )
+ $message = '{"etat":"nok","message":"L\'élément du cahier de texte n\'a pas pu être ajouté. Horaire de début non vide nécessaire."}';
+ elseif ( is_null($h_fin) )
+ $message = '{"etat":"nok","message":"L\'élément du cahier de texte n\'a pas pu être ajouté. Horaire de fin non vide nécessaire."}';
+ elseif ( is_null($pour) )
+ $message = '{"etat":"nok","message":"L\'élément du cahier de texte n\'a pas pu être ajouté. Date d\'échéance non vide nécessaire."}';
// Écriture dans la base de données
elseif ( requete('cdt',"INSERT INTO cdt SET matiere = $matiere, semaine = $semaine, jour = '$jour', h_debut = '$h_debut', h_fin = '$h_fin',
pour = '$pour', type = $tid, texte = '$texte', demigroupe = $demigroupe, cache = $cache", $mysqli) ) {
@@ -1049,11 +1058,11 @@
elseif ( isset($_REQUEST['supprime_docs']) ) {
if ( requete('reps',"DELETE FROM reps WHERE matiere = $id AND parent > 0",$mysqli) ) {
// Suppression physique
- $resultat = $mysqli->query("SELECT GROUP_CONCAT(CONCAT('documents/',lien) SEPARATOR ' ') AS chemins FROM docs WHERE matiere = $id");
+ $resultat = $mysqli->query("SELECT lien FROM docs WHERE matiere = $id");
if ( $resultat->num_rows ) {
- $r = $resultat->fetch_assoc();
+ while ( $r = $resultat->fetch_row() )
+ exec("rm -rf documents/${r[0]}");
$resultat->free();
- exec("rm -rf ${r['chemins']}");
requete('docs',"DELETE FROM docs WHERE matiere = $id",$mysqli);
}
requete('matieres',"UPDATE matieres SET docs = 0 WHERE id = $id",$mysqli);
@@ -1075,7 +1084,7 @@
$message = '{"etat":"nok","message":"La matière n\'a pas pu être ajoutée. Nom et clé non vides nécessaires."}';
else {
// Vérification que la clé n'existe pas déjà
- $resultat = $mysqli->query("SELECT cle FROM matieres WHERE id != $id");
+ $resultat = $mysqli->query('SELECT cle FROM matieres');
if ( $resultat->num_rows ) {
while ( $r = $resultat->fetch_assoc() )
if ( $r['cle'] == $cle ) {
@@ -1171,8 +1180,13 @@
$message = '{"etat":"nok","message":"Adresse mail déjà prise"}';
elseif ( requete('utilisateurs',"UPDATE utilisateurs SET mail = '$mail' WHERE id = $id",$mysqli) ) {
$message = "{\"etat\":\"ok\",\"message\":\"Adresse mail de ${r['nom']} modifiée (utilisateur prévenu par mail)\"}";
+ // Récupération de l'adresse mail du professeur connecté
+ $resultat = $mysqli->query("SELECT mail FROM utilisateurs WHERE id = ${_SESSION['id']}");
+ $s = $resultat->fetch_row();
+ $resultat->free();
if ( !isset($mailadmin) )
$mailadmin = 'admin@cahier-de-prepa.fr';
+ $returnpath = ( strlen($s[0]) ) ? $s[0] : $mailadmin;
mail($mail,'=?UTF-8?B?'.base64_encode('[Cahier de Prépa] Changement d\'adresse mail').'?=',
'Bonjour
@@ -1183,7 +1197,7 @@
Cordialement,
--
Cahier de Prépa
-",'From: =?UTF-8?B?'.base64_encode('Cahier de Prépa')."?= <$mailadmin>\r\nContent-type: text/plain; charset=UTF-8","-f$mailadmin");
+",'From: =?UTF-8?B?'.base64_encode('Cahier de Prépa')."?= <$mailadmin>\r\nContent-type: text/plain; charset=UTF-8","-f$returnpath");
}
}
}
@@ -1265,7 +1279,7 @@
// Ajout de nouveaux utilisateurs
elseif ( isset($_REQUEST['utilisateurs']) && isset($_REQUEST['autorisation']) && in_array($autorisation = $_REQUEST['autorisation'],array(1,2,3,4)) && isset($_REQUEST['matiere']) ) {
- $utilisateurs = explode("\n",$_REQUEST['utilisateurs']);
+ $utilisateurs = explode("\n",trim($_REQUEST['utilisateurs']));
// Récupération des identifiants
$resultat = $mysqli->query('SELECT GROUP_CONCAT(login) FROM utilisateurs');
$r = $resultat->fetch_row();
@@ -1290,7 +1304,7 @@
$m .= "
Ligne $i : identifiant déjà existant";
else {
$newmdp = sha1($u[1]);
- if ( requete('utilisateurs',"INSERT INTO utilisateurs SET login = '$login', mdp = '$newmdp', autorisation = 1, matieres = '$matiere'",$mysqli) ) {
+ if ( requete('utilisateurs',"INSERT INTO utilisateurs SET login = '$login', mdp = '$newmdp', autorisation = 1, matieres = '$matiere', timeout=900",$mysqli) ) {
$m .= "
Ligne $i : ok (identifiant $login)";
$n = $n+1;
}
@@ -1335,8 +1349,13 @@
$n = $n+1;
if ( $mail ) {
$lien = ( $https ? 'https' : 'http' )."://$site/connexion?reponseinvitation&mail=$mail&p=".sha1($site.$mdp.$mail);
+ // Récupération de l'adresse mail du professeur connecté
+ $resultat = $mysqli->query("SELECT mail FROM utilisateurs WHERE id = ${_SESSION['id']}");
+ $s = $resultat->fetch_row();
+ $resultat->free();
if ( !isset($mailadmin) )
$mailadmin = 'admin@cahier-de-prepa.fr';
+ $returnpath = ( strlen($s[0]) ) ? $s[0] : $mailadmin;
mail($mail,'=?UTF-8?B?'.base64_encode('[Cahier de Prépa] Invitation').'?=',
'Bonjour
@@ -1352,7 +1371,7 @@
Cordialement,
--
Cahier de Prépa
-",'From: =?UTF-8?B?'.base64_encode('Cahier de Prépa')."?= <$mailadmin>\r\nContent-type: text/plain; charset=UTF-8","-f$mailadmin");
+",'From: =?UTF-8?B?'.base64_encode('Cahier de Prépa')."?= <$mailadmin>\r\nContent-type: text/plain; charset=UTF-8","-f$returnpath");
}
}
else
@@ -1461,11 +1480,11 @@
$message = '{"etat":"nok","message":"Les répertoires racine des matières ne sont pas supprimables."}';
elseif ( requete('reps',"DELETE FROM reps WHERE id = $id OR FIND_IN_SET($id,parents)",$mysqli) ) {
// Suppression physique
- $resultat = $mysqli->query("SELECT GROUP_CONCAT(CONCAT('documents/',lien) SEPARATOR ' ') AS chemins FROM docs WHERE FIND_IN_SET($id,parents)");
+ $resultat = $mysqli->query("SELECT lien FROM docs WHERE FIND_IN_SET($id,parents)");
if ( $resultat->num_rows ) {
- $r = $resultat->fetch_assoc();
+ while ( $r = $resultat->fetch_row() )
+ exec("rm -rf documents/${r[0]}");
$resultat->free();
- exec("rm -rf ${r['chemins']}");
requete('docs',"DELETE FROM docs WHERE FIND_IN_SET($id,parents)",$mysqli);
}
$message = '{"etat":"ok","message":"Répertoire supprimé"}';
@@ -1486,7 +1505,7 @@
$resultat->free();
$protection = ( in_array($_REQUEST['protection'],array(0,1,2,3,4,5)) ) ? $_REQUEST['protection'] : 0;
$menu = isset($_REQUEST['menu']) ? 1 : 0;
- if ( requete('reps',"INSERT INTO reps SET parent = $parent, parents = '${s[parents]},$parent', nom = '$nom', matiere = ${s['matiere']},
+ if ( requete('reps',"INSERT INTO reps SET parent = $parent, parents = '${s['parents']},$parent', nom = '$nom', matiere = ${s['matiere']},
nbrep = 0, nbrep_v = 0, nbdoc = 0, nbdoc_v = 0, protection = $protection, menu = $menu",$mysqli) )
$message = $_SESSION['message'] = '{"etat":"ok","message":"Répertoire ajouté"}';
else
@@ -1524,9 +1543,9 @@
if ( isset($_REQUEST['champ']) && ( $_REQUEST['champ'] == 'nom' ) ) {
if ( !strlen( $valeur = trim($_REQUEST['val']) ) )
$message = '{"etat":"nok","message":"Le document n\'a pas pu être modifié. Nom non vide nécessaire."}';
- else {
+ elseif ( $valeur != $r['nom'] ) {
setlocale(LC_CTYPE, "fr_FR.UTF-8");
- $nom = basename(str_replace($r['ext'],'',str_replace('/','-',$valeur)));
+ $nom = substr((str_replace(array($r['ext'],'\\','/'),array('','-','-'),$valeur)),0,100);
// real_escape_string seulement pour la requête SQL
if ( requete('docs','UPDATE docs SET nom = \''.$mysqli->real_escape_string($nom).'\', nom_nat = \''.zpad($mysqli->real_escape_string($nom))."' WHERE id = $id",$mysqli) ) {
exec('mv documents/'.escapeshellarg("${r['lien']}/${r['nom']}${r['ext']}").' documents/'.escapeshellarg("${r['lien']}/$nom${r['ext']}"));
@@ -1544,7 +1563,7 @@
$etat = 'ok';
// Modification du nom et de la protection
setlocale(LC_CTYPE, "fr_FR.UTF-8");
- $nom = basename(str_replace($r['ext'],'',str_replace('/','-',$nom)));
+ $nom = substr(basename(str_replace(array($r['ext'],'\\'),array('','/'),$nom)),0,100);
$protection = ( in_array($_REQUEST['protection'],array(0,1,2,3,4,5)) ) ? $_REQUEST['protection'] : 0;
if ( $nom != $r['nom'] ) {
// real_escape_string seulement pour la requête SQL
@@ -1609,7 +1628,7 @@
'.txt' => '-txt', '.rtf' => '-txt', '' => '-txt'
);
$icone = ( isset($icones[$ext=strtolower($r['ext'])]) ) ? $icones[$ext] : '-txt';
- recent($mysqli,3,$id,array('titre'=>" $path", 'lien'=>"download?id=$id", 'texte'=>'
Nouveau document : $path
', 'matiere'=>$s['matiere'], 'protection'=>$s['protection'])); + recent($mysqli,3,$id,array('titre'=>" $path", 'lien'=>"download?id=$id", 'texte'=>"Modification du document : $path
", 'matiere'=>$s['matiere'], 'protection'=>$s['protection'])); } // Si $protection = 5, on cherche à supprimer. else @@ -1652,7 +1671,7 @@ '.txt' => '-txt', '.rtf' => '-txt', '' => '-txt' ); $icone = ( isset($icones[$ext=strtolower($r['ext'])]) ) ? $icones[$ext] : '-txt'; - recent($mysqli,3,$id,array('titre'=>" $path", 'lien'=>"download?id=$id", 'texte'=>'Nouveau document : $path
', 'matiere'=>$s['matiere'], 'protection'=>$s['protection'])); + recent($mysqli,3,$id,array('titre'=>" $path", 'lien'=>"download?id=$id", 'texte'=>"Mise à jour du document : $path
", 'matiere'=>$s['matiere'], 'protection'=>$s['protection'])); } $message[] = 'Document mis à jour'; } @@ -1693,7 +1712,7 @@ // $est ne doit pas faire plus de 4 caractères sinon fichier plus accessible $ext = ( strpos($nom,'.') ) ? substr(strrchr($nom,'.'),0,4) : ''; setlocale(LC_CTYPE, "fr_FR.UTF-8"); - $nom = basename(str_replace('/','-',str_replace($ext,'', ( strlen($_REQUEST['nom']) ) ? $_REQUEST['nom'] : $nom ))); + $nom = substr(basename(str_replace(array($ext,'\\'),array('','/'), ( strlen($_REQUEST['nom']) ) ? $_REQUEST['nom'] : $nom )),0,100); $protection = ( in_array($_REQUEST['protection'],array(0,1,2,3,4,5)) ) ? $_REQUEST['protection'] : 0; // Création du répertoire particulier $lien = substr(sha1(mt_rand()),0,15); @@ -1713,11 +1732,11 @@ $message = $_SESSION['message'] = '{"etat":"ok","message":"Document ajouté"}'; // Mise à jour des informations récentes if ( $protection < 5 ) { - $resultat = $mysqli->query("SELECT GROUP_CONCAT( reps.nom ORDER BY FIND_IN_SET(reps.id,docs.parents) SEPARATOR '/' ) AS path + $resultat = $mysqli->query("SELECT GROUP_CONCAT( reps.nom ORDER BY FIND_IN_SET(reps.id,docs.parents) SEPARATOR '/' ) AS path, docs.protection, docs.matiere FROM docs LEFT JOIN reps ON FIND_IN_SET(reps.id,docs.parents) WHERE docs.id = $id"); $s = $resultat->fetch_assoc(); $resultat->free(); - $path = $mysqli->real_escape_string("${s['path']}/$nom}"); + $path = $mysqli->real_escape_string("${s['path']}/$nom"); // Liste des icônes pour affichage $icones = array( '.pdf' => '-pdf', @@ -1731,8 +1750,8 @@ '.py' => '-pyt', '.exe' => '-pyt', '.sh' => '-pyt', '.ml' => '-pyt', '.mw' => '-pyt', '.txt' => '-txt', '.rtf' => '-txt', '' => '-txt' ); - $icone = array_key_exists(strtolower($r['ext']),$icones) ? $icones[strtolower($r['ext'])] : '-txt'; - recent($mysqli,3,$id,array('titre'=>" $path", 'lien'=>"download?id=$id", 'texte'=>'Mise à jour du document : $path
', 'matiere'=>$s['matiere'], 'protection'=>$s['protection'])); + $icone = ( isset($icones[$ext]) ) ? $icones[$ext] : '-txt'; + recent($mysqli,3,$id,array('titre'=>" $path", 'lien'=>"download?id=$id", 'texte'=>"Nouveau document : $path
", 'matiere'=>$s['matiere'], 'protection'=>$s['protection'])); } } else { diff -urN /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.0/cdt.php /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.1/cdt.php --- /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.0/cdt.php 2015-09-12 20:25:13.508780758 +0200 +++ /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.1/cdt.php 2015-10-04 00:47:30.000000000 +0200 @@ -141,11 +141,11 @@ $requete .= " AND t.cle = '$seance'"; } } -// Vue de la semaine en cours à partir du samedi +// Vue de la semaine en cours à partir du lundi // Vue de la semaine précédente et de la semaine en cours jusqu'au vendredi // $n est false si non trouvé (hors année scolaire) else { - if ( ( ( $n = array_search(date('yW', strtotime('Monday this week',time()+86400)),$semaines_id) ) !== false ) ) { + if ( ( ( $n = array_search(date('yW', strtotime('Monday this week',time()-86400)),$semaines_id) ) !== false ) ) { $requete = "AND cdt.semaine >= $n"; $nb = ( date('N') > 5 ) ? 1 : 2; } @@ -154,7 +154,7 @@ //////////// /// HTML /// //////////// -debut($mysqli,"Cahier de texte - ${matiere['nom']}",$message,$autorisation,"cdt?${matiere['cle']}"); +debut($mysqli,"Cahier de texte - ${matiere['nom']}",$message,$autorisation,"cdt?${matiere['cle']}",$matiere['id']); // MathJax désactivé par défaut $mathjax = false; @@ -309,7 +309,7 @@ $visible$titre
-- + diff -urN /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.0/CHANGELOG.php /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.1/CHANGELOG.php --- /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.0/CHANGELOG.php 2015-10-27 14:51:13.677744072 +0100 +++ /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.1/CHANGELOG.php 2015-10-27 14:54:14.000000000 +0100 @@ -1,4 +1,4 @@ -Version actuelle : 5.0.0 (20/09/15) +Version actuelle : 5.0.1 (27/09/15) =================== Changements : 1.0 31/08/11 Première version @@ -177,19 +177,30 @@ * Possibilité pour les professeurs de corriger les adresses mails erronées * Possibilité de mettre des notes de colles en demi-point * (Certaines documentations sont manquantes) +5.0.1 27/09/15 Corrections de bugs multiples... (merci L. Beau, S. Ravier, + P. Moreau, F. Evrard, E. Blairon, F. Baux, T. Perruchot, L. Whiteley, + E. Droguet, P. Tondelier, C. Chevalier) + * Retour du bandeau pour prévenir d'utilisateurs en attente de validation + * Retour des documentations des pages : utilisateurs, mail, docs, pages, notes =================== Todo : [ 5.1 ] Octobre 2015 - * Correction des bugs :) - * Ajout des documentations des pages : utilisateurs, mail, docs, pages, notes * Flux RSS séparés par matières ; flux RSS correspondant aux accès de chacun + * Mails : clic possible sur le nom des destinataires + * Mails/Notes : hover + * Mail : problème d'encodage sur les noms/prénoms des destinataires + * Couleurs ? + * Mise en évidence des éléments cachés + * Visualisation du niveau de protection des répertoires/documents [ 5.2 ] Février 2016 * Récupération des documents en .zip * Récupération des données de la base (via la sauvegarde) + * Validation/Suppression multiple d'utilisateurs + * Correction des mises à jour multiples vers les informations récentes [ 6.0 ] Août 2016 * Agenda @@ -202,4 +213,3 @@ * Protection individuelle des informations (possibilité de régler pour chaque information si les invités/élèves/colleurs peuvent la voir) * Programme de colles par quinzaine - diff -urN /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.0/colles.php /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.1/colles.php --- /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.0/colles.php 2015-09-15 23:53:54.675260927 +0200 +++ /documents/cahier-de-prepa-dev/cahier-de-prepa5.0.1/colles.php 2015-09-28 00:29:04.000000000 +0200 @@ -121,7 +121,7 @@ //////////// /// HTML /// //////////// -debut($mysqli,"Programme de colles - ${matiere['nom']}",$message,$autorisation,"colles?${matiere['cle']}"); +debut($mysqli,"Programme de colles - ${matiere['nom']}",$message,$autorisation,"colles?${matiere['cle']}",$matiere['id']); // MathJax désactivé par défaut $mathjax = false; @@ -239,7 +239,7 @@ -
Le programme de colles de cette semaine n'est pas encore défini.