diff -urN cahier-de-prepa8.0.2/ajax.php cahier-de-prepa8.1.0/ajax.php
--- cahier-de-prepa8.0.2/ajax.php 2018-10-22 00:27:14.846078696 +0200
+++ cahier-de-prepa8.1.0/ajax.php 2018-10-30 10:34:46.535499386 +0100
@@ -93,6 +93,8 @@
//////////////////////////////
elseif ( ( $action == 'prefsperso' ) && ( $autorisation > 1 ) ) {
+ // Spécifications pour les manipulations de caractères sur 2 octets (accents)
+ mb_internal_encoding('UTF-8');
// Vérification obligatoire du mot de passe
if ( !isset($_REQUEST['mdp']) )
exit('{"etat":"nok","message":"Mot de passe incorrect"}');
@@ -223,9 +225,12 @@
// Connexion normale obligatoire
connexionlight();
$mysqli = connectsql(true);
+ // Spécifications pour les manipulations de caractères sur 2 octets (accents)
+ mb_internal_encoding('UTF-8');
// Vérification que l'identifiant est valide
- $resultat = $mysqli->query("SELECT matiere, DATE_FORMAT(jour,'%w%Y%m%e') AS date, DATE_FORMAT(jour,'%Y-%m-%d') AS jour, TIME_FORMAT(heure,'%k:%i') AS heure, duree, releve>0 AS releve
+ $resultat = $mysqli->query("SELECT matiere, DATE_FORMAT(jour,'%w%Y%m%e') AS date, DATE_FORMAT(jour,'%Y-%m-%d') AS jour,
+ TIME_FORMAT(heure,'%k:%i') AS heure, duree, releve>0 AS releve, description
FROM heurescolles WHERE id = $id AND colleur = ${_SESSION['id']}");
if ( !$resultat->num_rows )
exit('{"etat":"nok","message":"Identifiant non valide"}');
@@ -234,7 +239,15 @@
$matiere = $r['matiere'];
// Suppression
- if ( isset($_REQUEST['supprime']) && ( $r['releve'] == 0 ) ) {
+ if ( isset($_REQUEST['supprime']) ) {
+ if ( $r['releve'] > 0 )
+ exit('{"etat":"nok","message":"La colle n\'a pas été supprimée car elle a déjà été relevée."}');
+ // Heures en séances de TD (pas de notes associées)
+ if ( strlen($r['description']) )
+ exit( requete('heurescolles',"DELETE FROM heurescolles WHERE id = $id",$mysqli)
+ ? '{"etat":"ok","message":"La séance du '.format_date($r['date']).' a été supprimée."}'
+ : '{"etat":"nok","message":"La séance du '.format_date($r['date']).' n\'a pas été supprimée. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'»."}');
+ // Colle avec notes
$resultat = $mysqli->query("SELECT * FROM notes WHERE heure = $id");
$n = $resultat->num_rows;
$resultat->free();
@@ -248,9 +261,41 @@
// Modification
if ( isset($_REQUEST['jour']) && isset($_REQUEST['heure']) ) {
+ // Heures en séances de TD (pas de notes associées)
+ if ( strlen($r['description']) ) {
+ $requete = array();
+ // Validation du jour
+ if ( $r['jour'] != ( $jour = preg_filter('/(\d{2})\/(\d{2})\/(\d{4})/','$3-$2-$1',$_REQUEST['jour']) ) ) {
+ // Vérification que le jour est bien dans l'année
+ $resultat = $mysqli->query("SELECT id FROM semaines WHERE debut <= '$jour' AND debut >= SUBDATE('$jour',7) ORDER BY debut DESC LIMIT 1");
+ if ( !$resultat->num_rows )
+ exit('{"etat":"nok","message":"Le jour choisi ne se trouve pas dans l\'année scolaire. S\'il s\'agit d\'une erreur, il faut peut-être contacter l\'administrateur."}');
+ $resultat->free();
+ $requete[] = "jour = '$jour'";
+ }
+ // Validation de l'heure
+ if ( ( $r['heure'] != ( $heure = preg_filter('/(\d{1,2})h(\d{2})/','$1:$2',$_REQUEST['heure']) ) ) && strlen($heure) )
+ $requete[] = "heure = '$heure'";
+ // Validation de la durée (séance non relevée uniquement)
+ if ( ( $r['releve'] == 0 ) && isset($_REQUEST['duree']) && ( $r['duree'] != ( $duree = call_user_func_array(function ($h,$m) { return intval($h)*60+intval($m); }, array_pad(explode('h',$_REQUEST['duree']),2,0)) ) && ( $duree > 0 ) ) )
+ $requete[] = "duree = '$duree'";
+ // Validation de la description
+ if ( ( $r['description'] != ( $description = trim(htmlspecialchars($_REQUEST['description'])) ) ) && strlen($description) )
+ $requete[] = 'description = \''.$mysqli->real_escape_string(mb_strtoupper(mb_substr($description,0,1)).mb_substr($description,1)).'\'';
+ // Écriture dans la table heurescolles
+ if ( $requete ) {
+ if ( requete('heurescolles','UPDATE heurescolles SET '.implode(', ',$requete)." WHERE id = $id",$mysqli) )
+ exit($_SESSION['message'] = '{"etat":"ok","message":"La séance du '.format_date($r['date']).' a été modifiée."}');
+ exit('{"etat":"nok","message":"La séance n\'a pas été modifiée. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'»."}');
+ }
+ else
+ exit('{"etat":"nok","message":"La séance du '.format_date($r['date']).' n\'a pas été modifiée. Aucune modification demandée."}');
+ }
+
// Récupération des notes déjà existantes cette semaine
$resultat = $mysqli->query("SELECT semaine, GROUP_CONCAT(eleve) AS dejanotes,
- GROUP_CONCAT(IF(heure=$id,eleve,NULL)) AS eleves, GROUP_CONCAT(IF(heure=$id,CONCAT(note,'-',id),NULL) SEPARATOR '|' ) AS notes
+ GROUP_CONCAT(IF(heure=$id,eleve,NULL)) AS eleves,
+ GROUP_CONCAT(IF(heure=$id,CONCAT(note,'-',id),NULL) SEPARATOR '|' ) AS notes
FROM notes WHERE semaine = (SELECT semaine FROM notes WHERE heure = $id LIMIT 1) AND matiere = $matiere");
$s = $resultat->fetch_assoc();
$resultat->free();
@@ -258,7 +303,7 @@
$notesperso = array_combine(explode(',',$s['eleves']),explode('|',$s['notes']));
$dejanotes = $s['dejanotes'];
$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','nn');
- $requete_heures = $requete_notes = $message = array();
+ $requete_generale = $requete_notes = $message = array();
$etat = 'ok';
// Validation du jour
@@ -267,12 +312,12 @@
$resultat = $mysqli->query("SELECT DATEDIFF('$jour',debut) FROM semaines WHERE id = $semaine OR id = $semaine+1");
$s = $resultat->fetch_row();
if ( ( $s[0] >= 0 ) && ( ( $resultat->num_rows == 1 ) && ( $s[0] < 7 ) || ( $s = $resultat->fetch_row() ) && ( $s[0] < 0 ) ) )
- $requete_heures[] = "jour = '$jour'";
+ $requete_generale[] = "jour = '$jour'";
$resultat->free();
}
// Validation de l'heure
- if ( $r['heure'] != ( $heure = preg_filter('/(\d{1,2})h(\d{2})/','$1:$2',$_REQUEST['heure']) ) && strlen($heure) )
- $requete_heures[] = "heure = '$heure'";
+ if ( ( $r['heure'] != ( $heure = preg_filter('/(\d{1,2})h(\d{2})/','$1:$2',$_REQUEST['heure']) ) ) && strlen($heure) )
+ $requete_generale[] = "heure = '$heure'";
// Si colle déjà relevée : modification des notes déjà mises uniquement
if ( $r['releve'] == 1 ) {
@@ -284,8 +329,8 @@
// modification/ajout/suppression de notes possible
else {
// Validation de la durée
- if ( isset($_REQUEST['duree']) && ( $r['duree'] != ( $duree = call_user_func_array(function ($h,$m) { return intval($h)*60+intval($m); }, array_pad(explode('h',$_REQUEST['duree']),2,0)) )) )
- $requete_heures[] = "duree = '$duree'";
+ if ( isset($_REQUEST['duree']) && ( $r['duree'] != ( $duree = call_user_func_array(function ($h,$m) { return intval($h)*60+intval($m); }, array_pad(explode('h',$_REQUEST['duree']),2,0))) ) && ( $duree > 0 ) )
+ $requete_generale[] = "duree = '$duree'";
// Validation des notes déjà mises à modifier/supprimer
foreach ( $notesperso as $eleve => $note ) {
if ( !isset($_REQUEST["e$eleve"]) || !in_array($newnote = $_REQUEST["e$eleve"], $notes, true) )
@@ -306,8 +351,9 @@
}
// Exécution
- if ( $requete_heures ) {
- if ( requete('heurescolles','UPDATE heurescolles SET '.implode(', ',$requete_heures)." WHERE id = $id",$mysqli) )
+ if ( $requete_generale ) {
+ if ( requete('heurescolles','UPDATE heurescolles SET '.implode(', ',$requete_generale
+ )." WHERE id = $id",$mysqli) )
$message[] = 'La colle du '.format_date($r['date']).' a été modifiée.';
else {
$message[] = 'La colle du '.format_date($r['date']).' n\'a pas été modifiée. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'».';
@@ -341,16 +387,42 @@
//////////////////////////////////////////////////////////////
// Ajout de notes de colles (accès colleurs et professeurs) //
//////////////////////////////////////////////////////////////
-elseif ( ( $action == 'ajout-notes' ) && ( ( $autorisation == 3 ) || ( $autorisation == 5 ) ) && isset($_REQUEST['sid']) && ctype_digit($sid = $_REQUEST['sid']) && isset($_REQUEST['matiere']) && in_array($matiere = intval($_REQUEST['matiere']),explode(',',$_SESSION['matieres'])) && isset($_REQUEST['jour']) && strlen($jour = preg_filter('/(\d{2})\/(\d{2})\/(\d{4})/','$3-$2-$1',$_REQUEST['jour'])) && isset($_REQUEST['heure']) && isset($_REQUEST['duree']) && ( $duree = call_user_func_array(function ($h,$m) { return intval($h)*60+intval($m); }, array_pad(explode('h',$_REQUEST['duree']),2,0)) ) > 0 ) {
+elseif ( ( $action == 'ajout-notes' ) && ( ( $autorisation == 3 ) || ( $autorisation == 5 ) ) && isset($_REQUEST['matiere']) && in_array($matiere = intval($_REQUEST['matiere']),explode(',',$_SESSION['matieres'])) && isset($_REQUEST['jour']) && strlen($jour = preg_filter('/(\d{2})\/(\d{2})\/(\d{4})/','$3-$2-$1',$_REQUEST['jour'])) && isset($_REQUEST['heure']) && isset($_REQUEST['duree']) ) {
// Connexion normale obligatoire
connexionlight();
$mysqli = connectsql(true);
+ // Spécifications pour les manipulations de caractères sur 2 octets (accents)
+ mb_internal_encoding('UTF-8');
+ // Vérification de l'heure (non obligatoire : chaîne vide éventuellement)
+ $heure = preg_filter('/(\d{1,2})h(\d{2})/','$1:$2',$_REQUEST['heure']);
+ // Vérification de la durée
+ if ( ( $duree = call_user_func_array(function ($h,$m) { return intval($h)*60+intval($m); }, array_pad(explode('h',$_REQUEST['duree']),2,0)) ) == 0 )
+ exit('{"etat":"nok","message":"La durée saisie ne peut pas être nulle."}');
+
+ // Heures en séances de TD (pas de notes associées)
+ if ( isset($_REQUEST['td']) && isset($_REQUEST['description']) ) {
+ // Vérification que le jour est bien dans l'année
+ $resultat = $mysqli->query("SELECT id FROM semaines WHERE debut <= '$jour' AND debut >= SUBDATE('$jour',7) ORDER BY debut DESC LIMIT 1");
+ if ( !$resultat->num_rows )
+ exit('{"etat":"nok","message":"Le jour choisi ne se trouve pas dans l\'année scolaire. S\'il s\'agit d\'une erreur, il faut peut-être contacter l\'administrateur."}');
+ $resultat->free();
+ // Vérification de la description
+ if ( !strlen($description = trim(htmlspecialchars($_REQUEST['description']))) )
+ exit('{"etat":"nok","message":"Pour les séances de TD sans note, la description de la séance doit obligatoirement être non vide."}');
+ // Écriture dans la table heurescolles
+ if ( requete('heurescolles',"INSERT INTO heurescolles SET colleur = ${_SESSION['id']}, matiere = $matiere, jour = '$jour', heure = '$heure', duree = '$duree', description = '".$mysqli->real_escape_string(mb_strtoupper(mb_substr($description,0,1)).mb_substr($description,1)).'\'',$mysqli) )
+ exit($_SESSION['message'] = '{"etat":"ok","message":"La séance a été ajoutée."}');
+ exit('{"etat":"nok","message":"La séance n\'a pas été ajoutée. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'»."}');
+ }
+
// Vérification de l'identifiant de la semaine
+ if ( !isset($_REQUEST['sid']) || !ctype_digit($sid = $_REQUEST['sid']) )
+ exit('{"etat":"nok","message":"Semaine non valide"}');
$resultat = $mysqli->query("SELECT (SELECT GROUP_CONCAT(eleve) FROM notes WHERE semaine = semaines.id AND matiere = $matiere) FROM semaines WHERE id = $sid AND colle");
if ( !$resultat->num_rows )
- exit('{"etat":"nok","message":"Identifiant non valide"}');
+ exit('{"etat":"nok","message":"Semaine non valide"}');
$r = $resultat->fetch_row();
$resultat->free();
$dejanotes = $r[0];
@@ -361,9 +433,12 @@
if ( ( $r[0] < 0 ) || ( ( $resultat->num_rows == 1 ) && ( $r[0] >= 7 ) || ( $r = $resultat->fetch_row() ) && ( $r[0] >= 0 ) ) )
exit('{"etat":"nok","message":"La date saisie ne se trouve pas dans la semaine choisie."}');
$resultat->free();
- // Validation de l'heure (non obligatoire)
- $heure = preg_filter('/(\d{1,2})h(\d{2})/','$1:$2',$_REQUEST['heure']);
-
+
+ // Écriture de l'heure dans la table heurescolles
+ if ( !requete('heurescolles',"INSERT INTO heurescolles SET colleur = ${_SESSION['id']}, matiere = $matiere, jour = '$jour', heure = '$heure', duree = '$duree', description = ''",$mysqli) )
+ exit('{"etat":"nok","message":"La colle n\'a pas été ajoutée. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'»."}');
+ $heure = $mysqli->insert_id;
+
// 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();
@@ -371,11 +446,6 @@
$elevesdispos = array_diff(explode(',',$r[0]),explode(',',$dejanotes));
$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','nn');
- // Écriture de l'heure dans la table heurescolles
- if ( !requete('heurescolles',"INSERT INTO heurescolles SET colleur = ${_SESSION['id']}, matiere = $matiere, jour = '$jour', heure = '$heure', duree = '$duree'",$mysqli) )
- exit('{"etat":"nok","message":"La colle n\'a pas été ajoutée. Erreur MySQL n°'.$mysqli->errno.', «'.$mysqli->error.'»."}');
- $heure = $mysqli->insert_id;
-
// Insertion pour les élèves non déjà notés
$requete = array();
foreach ( $elevesdispos as $eleve )
@@ -1706,7 +1776,9 @@
if ( !in_array($login,explode(',',$s[0])) )
$requete .= ', login = \''.$mysqli->real_escape_string($login).'\'';
}
- if ( isset($modifications['mail']) && filter_var($mail = $modifications['mail'],FILTER_VALIDATE_EMAIL) && isset($_REQUEST['mail2']) && ( $mail == mb_strtolower(trim($_REQUEST['mail2'])) ) ) {
+ if ( isset($modifications['mail']) && filter_var($mail = $modifications['mail'],FILTER_VALIDATE_EMAIL) && isset($_REQUEST['mail2']) ) {
+ if ( $mail != mb_strtolower(trim($_REQUEST['mail2'])) )
+ exit('{"etat":"nok","message":"Les préférences '.$compte.' n\'ont pas été modifiées, les deux adresses électroniques saisies ne sont pas identiques."}');
// Vérification que l'adresse n'existe pas déjà
$resultat = $mysqli->query("SELECT GROUP_CONCAT(mail) FROM utilisateurs WHERE id != $id AND mail > ''");
$s = $resultat->fetch_row();
@@ -1758,9 +1830,27 @@
// Suppression
case 'supprutilisateur': {
if ( requete('utilisateurs',"DELETE FROM utilisateurs WHERE id = $id",$mysqli)
- && requete('groupes',"UPDATE groupes SET utilisateurs = TRIM(BOTH ',' FROM REPLACE(CONCAT(',',utilisateurs,','),',$id,',',')) WHERE FIND_IN_SET($id,utilisateurs)",$mysqli)
- && requete('notes',"DELETE FROM notes WHERE colleur = $id OR eleve = $id",$mysqli) )
+ && requete('groupes',"UPDATE groupes SET utilisateurs = TRIM(BOTH ',' FROM REPLACE(CONCAT(',',utilisateurs,','),',$id,',',')) WHERE FIND_IN_SET($id,utilisateurs)",$mysqli) ) {
+ // Recherche des notes : cas des colleurs/profs
+ if ( $r['autorisation'] > 2 ) {
+ requete('notes',"DELETE FROM notes WHERE colleur = $id",$mysqli);
+ requete('heurescolles',"DELETE FROM heurescolles WHERE colleur = $id",$mysqli);
+ }
+ // Recherche des notes : cas des élèves
+ elseif ( $r['autorisation'] == 2 ) {
+ $resultat = $mysqli->query("SELECT GROUP_CONCAT(heure) FROM notes WHERE eleve = $id");
+ $s = $resultat->fetch_row();
+ $resultat->free();
+ if ( !is_null($s[0]) ) {
+ requete('notes',"DELETE FROM notes WHERE eleve = $id",$mysqli);
+ requete('heurescolles',"DELETE heurescolles FROM heurescolles LEFT JOIN notes ON heurescolles.id=notes.heure
+ WHERE FIND_IN_SET(heurescolles.id,'${s[0]}') AND notes.id IS NULL",$mysqli);
+ requete('heurescolles',"UPDATE heurescolles SET duree = duree-(SELECT dureecolle FROM matieres WHERE matieres.id = heurescolles.matiere)
+ WHERE FIND_IN_SET(heurescolles.id,'${s[0]}') AND releve = 0",$mysqli);
+ }
+ }
exit($_SESSION['message'] = "{\"etat\":\"ok\",\"message\":\"Compte $compte supprimé\"}");
+ }
exit("{\"etat\":\"nok\",\"message\":\"La suppression du compte $compte n'a pas été réalisée. Erreur MySQL n°".$mysqli->errno.', «'.$mysqli->error.'»."}');
}
@@ -1847,9 +1937,27 @@
while ( $r = $resultat->fetch_assoc() ) {
$compte = ( strlen($r['nom'].$r['prenom']) ) ? "de ${r['prenom']} ${r['nom']}" : "${r['login']}";
if ( requete('utilisateurs',"DELETE FROM utilisateurs WHERE id = ${r['id']}",$mysqli)
- && requete('groupes',"UPDATE groupes SET utilisateurs = TRIM(BOTH ',' FROM REPLACE(CONCAT(',',utilisateurs,','),',${r['id']},',',')) WHERE FIND_IN_SET(${r['id']},utilisateurs)",$mysqli)
- && requete('notes',"DELETE FROM notes WHERE colleur = ${r['id']} OR eleve = ${r['id']}",$mysqli) )
+ && requete('groupes',"UPDATE groupes SET utilisateurs = TRIM(BOTH ',' FROM REPLACE(CONCAT(',',utilisateurs,','),',${r['id']},',',')) WHERE FIND_IN_SET(${r['id']},utilisateurs)",$mysqli) ) {
+ // Recherche des notes : cas des colleurs/profs
+ if ( $r['autorisation'] > 2 ) {
+ requete('notes',"DELETE FROM notes WHERE colleur = $id",$mysqli);
+ requete('heurescolles',"DELETE FROM heurescolles WHERE colleur = $id",$mysqli);
+ }
+ // Recherche des notes : cas des élèves
+ elseif ( $r['autorisation'] == 2 ) {
+ $resultat = $mysqli->query("SELECT GROUP_CONCAT(heure) FROM notes WHERE eleve = $id");
+ $s = $resultat->fetch_row();
+ $resultat->free();
+ if ( !is_null($s[0]) ) {
+ requete('notes',"DELETE FROM notes WHERE eleve = $id",$mysqli);
+ requete('heurescolles',"DELETE heurescolles FROM heurescolles LEFT JOIN notes ON heurescolles.id=notes.heure
+ WHERE FIND_IN_SET(heurescolles.id,'${s[0]}') AND notes.id IS NULL",$mysqli);
+ requete('heurescolles',"UPDATE heurescolles SET duree = duree-(SELECT dureecolle FROM matieres WHERE matieres.id = heurescolles.matiere)
+ WHERE FIND_IN_SET(heurescolles.id,'${s[0]}') AND releve = 0",$mysqli);
+ }
+ }
$message['ok'] .= "Le compte $compte a été supprimé.
";
+ }
else
$message['nok'] .= "Le compte $compte n'a pas été supprimé. Erreur MySQL n°".$mysqli->errno.', «'.$mysqli->error.'»
';
}
@@ -2043,8 +2151,7 @@
elseif ( $val && requete('utilisateurs',"UPDATE utilisateurs SET matieres = CONCAT(matieres,',$mid') WHERE id = $id",$mysqli) )
$message = "{\"etat\":\"ok\",\"message\":\"L'utilisateur ${r['nom']} a été associé à la matière $matiere.\"}";
// Désassociation
- elseif ( !$val && requete('utilisateurs',"UPDATE utilisateurs SET matieres = TRIM(TRAILING ',' FROM REPLACE(CONCAT(matieres,','),',$mid,',',')) WHERE id = $id",$mysqli)
- && requete('notes',"DELETE FROM notes WHERE matiere = $mid AND ( colleur = $id OR eleve = $id)",$mysqli) )
+ elseif ( !$val && requete('utilisateurs',"UPDATE utilisateurs SET matieres = TRIM(TRAILING ',' FROM REPLACE(CONCAT(matieres,','),',$mid,',',')) WHERE id = $id",$mysqli) )
$message = "{\"etat\":\"ok\",\"message\":\"L'association de l'utilisateur ${r['nom']} à la matière $matiere a été supprimée.\"}";
else
exit("{\"etat\":\"nok\",\"message\":\"L'association de l'utilisateur ${r['nom']} à la matière $matiere n'a pas été modifiée. Erreur MySQL n°".$mysqli->errno.', «'.$mysqli->error.'»."}');
@@ -2092,8 +2199,7 @@
elseif ( $val && requete('utilisateurs',"UPDATE utilisateurs SET matieres = CONCAT(matieres,',$mid') WHERE id = ${r['id']}",$mysqli) )
$message['ok'] .= "Le compte $compte a été associé à la matière $matiere.
";
// Désassociation
- elseif ( !$val && requete('utilisateurs',"UPDATE utilisateurs SET matieres = TRIM(TRAILING ',' FROM REPLACE(CONCAT(matieres,','),',$mid,',',')) WHERE id = ${r['id']}",$mysqli)
- && requete('notes',"DELETE FROM notes WHERE matiere = $mid AND ( colleur = ${r['id']} OR eleve = ${r['id']})",$mysqli) )
+ elseif ( !$val && requete('utilisateurs',"UPDATE utilisateurs SET matieres = TRIM(TRAILING ',' FROM REPLACE(CONCAT(matieres,','),',$mid,',',')) WHERE id = ${r['id']}",$mysqli) )
$message['ok'] .= "L'association du compte $compte à la matière $matiere a été supprimée.
";
else
$message['nok'] .= "L'association de l'utilisateur ${r['nom']} à la matière $matiere n'a pas été modifiée. Erreur MySQL n°".$mysqli->errno.', «'.$mysqli->error.'».
';
diff -urN cahier-de-prepa8.0.2/CHANGELOG.php cahier-de-prepa8.1.0/CHANGELOG.php
--- cahier-de-prepa8.0.2/CHANGELOG.php 2018-10-24 00:44:38.514239367 +0200
+++ cahier-de-prepa8.1.0/CHANGELOG.php 2018-10-31 03:59:47.004088147 +0100
@@ -1,4 +1,4 @@
-Version actuelle : 8.0.2 (23/10/18)
+Version actuelle : 8.1.0 (31/10/18)
===================
Changements :
1.0 31/08/11 Première version
@@ -220,12 +220,15 @@
* Possibilité de désactiver les fonctions cahier de texte/programme de colle/
notes de colles : elles disparaissent alors du menu.
8.0.2 23/10/18 Correction de bugs
-
+8.1.0 30/10/18 Correction de bugs et améliorations des notes de colles :
+ * Possibilité d'impression du relevé de colles pour le compte administratif
+ * Possibilité de déclaration de séances de cours ou TD sans note
+
===================
Todo :
-[8.1] Janvier 2019
+[8.2] Janvier 2019
* Mode lecture
* Page de préférences globales : création de compte, protection globale, titre
* Page de statistiques des colles toutes matières confondues ?
diff -urN cahier-de-prepa8.0.2/css/icones1810.min.css cahier-de-prepa8.1.0/css/icones1810.min.css
--- cahier-de-prepa8.0.2/css/icones1810.min.css 2018-10-18 23:41:26.666214781 +0200
+++ cahier-de-prepa8.1.0/css/icones1810.min.css 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-@font-face{font-family:'icomoon';src:url('../fonts/icomoon.eot?13');src:url('../fonts/icomoon.eot?#iefix13') format('embedded-opentype'),url('../fonts/icomoon.ttf?13') format('truetype'),url('../fonts/icomoon.woff?13') format('woff'),url('../fonts/icomoon.svg?13#icomoon') format('svg');font-weight:normal;font-style:normal}[class^="icon-"]{font-family:'icomoon'!important;color:black;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a[class^="icon-"]{cursor:pointer;text-decoration:none}span.icon-minilock{position:relative!important;left:-0.3em;top:.1em;color:#777;margin-right:-0.5em}.icon-montre:before{content:"\e600"}.icon-cache:before{content:"\e601"}.icon-aide:before{content:"\e602"}.icon-ajoute:before,.icon-ajoutecolle:before{content:"\e603"}.icon-supprime:before{content:"\e604"}.icon-annule:before{content:"\e605"}.icon-ok:before,.icon-envoidoc:before{content:"\e606"}.icon-prefs:before{content:"\e607"}.icon-monte:before{content:"\e608"}.icon-descend:before{content:"\e609"}.icon-ferme:before{content:"\e60a"}.icon-epingle:before{content:"\e60b"}.icon-par1:before{content:"\e60c"}.icon-par2:before{content:"\e60d"}.icon-par3:before{content:"\e60e"}.icon-gras:before{content:"\e60f"}.icon-italique:before{content:"\e610"}.icon-souligne:before{content:"\e611"}.icon-omega:before{content:"\e612"}.icon-sigma:before{content:"\e613"}.icon-exp:before{content:"\e614"}.icon-ind:before{content:"\e615"}.icon-ol:before{content:"\e616"}.icon-ul:before{content:"\e617"}.icon-lien1:before{content:"\e618"}.icon-lien2:before{content:"\e619"}.icon-retour:before{content:"\e61a"}.icon-source:before{content:"\e61b"}.icon-nosource:before{content:"\e61c"}.icon-tex:before{content:"\e61d"}.icon-titres:before{content:"\e61e"}.icon-edite:before,.icon-editedoc:before,.icon-editerep:before{content:"\e61f"}.icon-precedent:before{content:"\e620"}.icon-suivant:before{content:"\e621"}.icon-recherche:before{content:"\e622"}.icon-voirtout:before{content:"\e623";color:#000}.icon-accueil:before{content:"\e624"}.icon-imprime:before{content:"\e625"}.icon-connexion:before{content:"\e626"}.icon-deconnexion:before{content:"\e627"}.icon-mail:before{content:"\e628"}.icon-menu:before{content:"\e629"}.icon-cocher:before{content:"\e62a"}.icon-decocher:before{content:"\e62b"}.icon-rep:before{content:"\e62c"}.icon-rep-open:before{content:"\e62d"}.icon-download:before{content:"\e62e"}.icon-minilock:before{content:"\e62f"}.icon-alphaasc:before{content:"\e630"}.icon-alphadesc:before{content:"\e631"}.icon-chronoasc:before{content:"\e632"}.icon-chronodesc:before{content:"\e633"}.icon-ajouterep:before{content:"\e634"}.icon-ajoutedoc:before{content:"\e635"}.icon-doc:before{content:"\e636"}.icon-doc-pdf:before{content:"\e637"}.icon-doc-doc:before{content:"\e638"}.icon-doc-xls:before{content:"\e639"}.icon-doc-ppt:before{content:"\e63a"}.icon-doc-jpg:before{content:"\e63b"}.icon-doc-zip:before{content:"\e63c"}.icon-doc-mp3:before{content:"\e63d"}.icon-doc-mp4:before{content:"\e63e"}.icon-doc-pyt:before{content:"\e63f"}.icon-rss:before{content:"\e640"}.icon-infos:before{content:"\e641"}.icon-colles:before{content:"\e642"}.icon-recent:before{content:"\e643"}.icon-lock1:before{content:"\e644"}.icon-lock2:before{content:"\e645"}.icon-lock3:before{content:"\e646"}.icon-lock4:before{content:"\e647"}.icon-lock5:before{content:"\e648"}.icon-agenda:before{content:"\e649"}.icon-ajout-colle:before{content:"\e64a"}.icon-messages:before{content:"\e64b"}.icon-lock:before{content:"\e64c"}.icon-locktotal:before{content:"\e64d"}.icon-editemultiple:before{content:"\e64e"}.icon-plie:before{content:"\e64f"}.icon-deplie:before{content:"\e650"}.icon-mailenvoi:before{content:"\e651"}.icon-nok:before{content:"\e652"}.icon-active:before{content:"\e653"}.icon-desactive:before{content:"\e654"}.icon-supprutilisateur:before{content:"\e655"}.icon-validutilisateur:before{content:"\e656"}.icon-lecture:before{content:"\e657"}.icon-nolecture:before{content:"\e658";
diff -urN cahier-de-prepa8.0.2/css/icones.css cahier-de-prepa8.1.0/css/icones.css
--- cahier-de-prepa8.0.2/css/icones.css 2018-10-18 23:41:02.721935642 +0200
+++ cahier-de-prepa8.1.0/css/icones.css 2018-10-27 22:33:15.519945682 +0200
@@ -1,10 +1,10 @@
@font-face {
font-family: 'icomoon';
- src:url('../fonts/icomoon.eot?13');
- src:url('../fonts/icomoon.eot?#iefix13') format('embedded-opentype'),
- url('../fonts/icomoon.ttf?13') format('truetype'),
- url('../fonts/icomoon.woff?13') format('woff'),
- url('../fonts/icomoon.svg?13#icomoon') format('svg');
+ src:url('../fonts/icomoon.eot?18');
+ src:url('../fonts/icomoon.eot?#iefix18') format('embedded-opentype'),
+ url('../fonts/icomoon.ttf?18') format('truetype'),
+ url('../fonts/icomoon.woff?18') format('woff'),
+ url('../fonts/icomoon.svg?18#icomoon') format('svg');
font-weight: normal;
font-style: normal;
}
diff -urN cahier-de-prepa8.0.2/css/icones.min.css cahier-de-prepa8.1.0/css/icones.min.css
--- cahier-de-prepa8.0.2/css/icones.min.css 1970-01-01 01:00:00.000000000 +0100
+++ cahier-de-prepa8.1.0/css/icones.min.css 2018-10-31 03:52:49.115198187 +0100
@@ -0,0 +1 @@
+@font-face{font-family:'icomoon';src:url('../fonts/icomoon.eot?18');src:url('../fonts/icomoon.eot?#iefix18') format('embedded-opentype'),url('../fonts/icomoon.ttf?18') format('truetype'),url('../fonts/icomoon.woff?18') format('woff'),url('../fonts/icomoon.svg?18#icomoon') format('svg');font-weight:normal;font-style:normal}[class^="icon-"]{font-family:'icomoon'!important;color:black;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a[class^="icon-"]{cursor:pointer;text-decoration:none}span.icon-minilock{position:relative!important;left:-0.3em;top:.1em;color:#777;margin-right:-0.5em}.icon-montre:before{content:"\e600"}.icon-cache:before{content:"\e601"}.icon-aide:before{content:"\e602"}.icon-ajoute:before,.icon-ajoutecolle:before{content:"\e603"}.icon-supprime:before{content:"\e604"}.icon-annule:before{content:"\e605"}.icon-ok:before,.icon-envoidoc:before{content:"\e606"}.icon-prefs:before{content:"\e607"}.icon-monte:before{content:"\e608"}.icon-descend:before{content:"\e609"}.icon-ferme:before{content:"\e60a"}.icon-epingle:before{content:"\e60b"}.icon-par1:before{content:"\e60c"}.icon-par2:before{content:"\e60d"}.icon-par3:before{content:"\e60e"}.icon-gras:before{content:"\e60f"}.icon-italique:before{content:"\e610"}.icon-souligne:before{content:"\e611"}.icon-omega:before{content:"\e612"}.icon-sigma:before{content:"\e613"}.icon-exp:before{content:"\e614"}.icon-ind:before{content:"\e615"}.icon-ol:before{content:"\e616"}.icon-ul:before{content:"\e617"}.icon-lien1:before{content:"\e618"}.icon-lien2:before{content:"\e619"}.icon-retour:before{content:"\e61a"}.icon-source:before{content:"\e61b"}.icon-nosource:before{content:"\e61c"}.icon-tex:before{content:"\e61d"}.icon-titres:before{content:"\e61e"}.icon-edite:before,.icon-editedoc:before,.icon-editerep:before{content:"\e61f"}.icon-precedent:before{content:"\e620"}.icon-suivant:before{content:"\e621"}.icon-recherche:before{content:"\e622"}.icon-voirtout:before{content:"\e623";color:#000}.icon-accueil:before{content:"\e624"}.icon-imprime:before{content:"\e625"}.icon-connexion:before{content:"\e626"}.icon-deconnexion:before{content:"\e627"}.icon-mail:before{content:"\e628"}.icon-menu:before{content:"\e629"}.icon-cocher:before{content:"\e62a"}.icon-decocher:before{content:"\e62b"}.icon-rep:before{content:"\e62c"}.icon-rep-open:before{content:"\e62d"}.icon-download:before{content:"\e62e"}.icon-minilock:before{content:"\e62f"}.icon-alphaasc:before{content:"\e630"}.icon-alphadesc:before{content:"\e631"}.icon-chronoasc:before{content:"\e632"}.icon-chronodesc:before{content:"\e633"}.icon-ajouterep:before{content:"\e634"}.icon-ajoutedoc:before{content:"\e635"}.icon-doc:before{content:"\e636"}.icon-doc-pdf:before{content:"\e637"}.icon-doc-doc:before{content:"\e638"}.icon-doc-xls:before{content:"\e639"}.icon-doc-ppt:before{content:"\e63a"}.icon-doc-jpg:before{content:"\e63b"}.icon-doc-zip:before{content:"\e63c"}.icon-doc-mp3:before{content:"\e63d"}.icon-doc-mp4:before{content:"\e63e"}.icon-doc-pyt:before{content:"\e63f"}.icon-rss:before{content:"\e640"}.icon-infos:before{content:"\e641"}.icon-colles:before{content:"\e642"}.icon-recent:before{content:"\e643"}.icon-lock1:before{content:"\e644"}.icon-lock2:before{content:"\e645"}.icon-lock3:before{content:"\e646"}.icon-lock4:before{content:"\e647"}.icon-lock5:before{content:"\e648"}.icon-agenda:before{content:"\e649"}.icon-ajout-colle:before{content:"\e64a"}.icon-messages:before{content:"\e64b"}.icon-lock:before{content:"\e64c"}.icon-locktotal:before{content:"\e64d"}.icon-editemultiple:before{content:"\e64e"}.icon-plie:before{content:"\e64f"}.icon-deplie:before{content:"\e650"}.icon-mailenvoi:before{content:"\e651"}.icon-nok:before{content:"\e652"}.icon-active:before{content:"\e653"}.icon-desactive:before{content:"\e654"}.icon-supprutilisateur:before{content:"\e655"}.icon-validutilisateur:before{content:"\e656"}.icon-lecture:before{content:"\e657"}.icon-nolecture:before{content:"\e658";
\ No newline at end of file
diff -urN cahier-de-prepa8.0.2/css/style1810.min.css cahier-de-prepa8.1.0/css/style1810.min.css
--- cahier-de-prepa8.0.2/css/style1810.min.css 2018-10-20 11:20:07.056445528 +0200
+++ cahier-de-prepa8.1.0/css/style1810.min.css 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-*{font-size:1em;margin:0;padding:0}html,body{height:100%}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;position:relative;width:100%;margin:0 auto;min-width:320px;max-width:1500px;background-color:#f6f6f6}h1{font-size:2.2em;text-align:center;padding:1em 2em}h2{font-size:1.8em;margin:1em 0 .8em}h3{font-size:1.5em;margin:1em 0 .5em}h2+h3{padding-left:1%}h4{font-size:1.3em;margin:.5em 0 .2em;padding-left:2.5%}h5{font-size:1.1em;margin-top:.2em;padding-left:4%}h6{font-size:1em;margin-top:.2em;padding-left:5.5%}ul,ol{margin:.5em 0;padding:0 2% 0 6%}p{padding:0 2%}p+p{margin-top:.5em}img{border:0;max-width:100%}div,p,section,article{text-align:justify}section>:first-child,article>:first-child,article>h2:first-of-type,article>h3:first-of-type,#fenetre h3:first-of-type{margin-top:0}article>:last-child,#fenetre>:last-child{margin-bottom:0}article{margin-bottom:1em;padding:1em 2%;background-color:#cdd5e4}#fenetre{position:fixed;left:50%;z-index:15;padding:1em 2%;overflow:auto;background-color:#e7eefe;opacity:.97;box-shadow:.5em .5em .5em #777}#fenetre_fond{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000;opacity:.2;z-index:14}article>a[class^="icon-"],#fenetre>a[class^="icon-"]{float:right;margin-left:.3em}#fenetre hr{margin:1.5em 0}footer{text-align:center;width:90%;padding:1em 5%;clear:both;position:fixed;left:0;bottom:0;z-index:20;border-top:1px solid black;background-color:#DDD;opacity:.97}@media screen and (min-width:800px){#colonne{width:280px;float:left;margin:0 30px 3em}nav{padding:1em 20px .7em}.icon-menu,.icon-recent{display:none}#recent{margin-top:1.5em;padding:1em 20px}section{position:relative;margin:0 30px 0 340px;padding-bottom:3em}#icones{position:absolute;top:-4em;right:0}header+section{width:96%;margin:0 auto;max-width:1500px;text-align:center}footer{font-size:.8em}#fenetre{top:10%;width:70%;margin-left:-37%;max-height:80%}}@media screen and (max-width:800px){h1{font-size:1.8em;padding:.3em 3em}h2{font-size:1.65em}#colonne{display:none}#colonne.visible{display:block}nav.visible,#recent.visible{display:block;position:fixed;z-index:10;top:3.3em;left:.5em;padding:1em 20px .7em;width:80%;min-width:200px;max-width:280px;max-height:70%;overflow:auto;box-shadow:.5em .5em .5em #777}.icon-menu,.icon-recent{position:fixed;z-index:10;top:.8em;left:.5em;font-size:1.2em;cursor:pointer}.icon-recent{left:2.5em}section{position:relative;width:96%;margin:0 auto;padding-bottom:3em}#icones{position:absolute;top:-2.2em;right:0}header+section{text-align:center}footer{font-size:.6em}#fenetre{top:4%;width:92%;margin-left:-48%;max-height:92%}}nav,#recent{background-color:#99b3e5}nav a[class^="icon-"]{display:inline-block;margin:0 .3em;color:#001030}nav a{display:block;margin-bottom:.2em;text-decoration:none;color:#002877}nav a:hover{color:#CDF}nav h3{font-size:1.2em;margin:.5em 3% .1em;padding-top:.3em;color:#001030;border-top:1px solid #001030}nav hr{margin:.5em 3% .5em;color:#001030;border-top:1px solid #001030;border-bottom:0}nav a.menurep{padding-left:3%;font-size:.9em}#actuel{font-style:italic}nav h3 span{font-weight:500;font-size:.83em;margin-right:.2em;color:#001030!important}#recent a{display:block;margin-bottom:.4em;text-decoration:none;color:#002877;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#recent a span{color:#002877}#recent h3{font-size:1.2em;margin:0 3% .5em;color:#001030}.pdf{height:0;width:100%;overflow:hidden;position:relative}.portrait{padding-bottom:138%}.paysage{padding-bottom:74%}.hauteur50{padding-bottom:50%}.pdf object{position:absolute}.warning{text-align:center;width:50%;margin:1em auto;padding:.5em 3%}.annonce{margin:1em 3%;padding:.5em 4%}.note{margin:.5em 2%;padding:0 4%}.warning,.annonce{color:#ba0d1f;border:2px solid #ba0d1f}.note{color:#ba0d1f}.oubli{font-size:.8em;text-align:center}.oubli a{text-decoration:none;color:#333}.oubli label{font-weight:700}.oubli input{margin-left:1em;vertical-align:text-top}p.titrecdt{text-align:right;text-decoration:underline}p.titrecdt.edition{text-align:left;text-decoration:none;padding-right:1%}.topbarre{height:1.5em;background-color:#DDD;border:1px solid #BBB;width:auto;border-radius:4px;margin-bottom:1.5em}h1 span{font-size:70%;vertical-align:7%;margin-left:.4em}#recherchecdt a,#recherchecolle a,#rechercheagenda a{margin-right:.4em;vertical-align:middle}.topbarre select#semaines{margin-left:.8em;width:8.5em}.topbarre select#seances{margin-left:.8em;width:11em}.topbarre input{position:absolute;top:.25em;margin:0 .8em 0 1em;padding-left:1.8em;width:-moz-available}.topbarre input,.topbarre select{font-size:.9em;height:1.25em;vertical-align:bottom}.topbarre .icon-recherche{position:relative;left:1.9em;font-size:.7em;cursor:pointer}@media screen and (max-width:980px) and (min-width:800px),screen and (max-width:600px){#recherchecdt input{display:none;top:1.8em;padding-left:.1em;right:2em;margin-left:2em!important}#recherchecdt span{left:1.3em}}@media screen and (max-width:450px){#recherchecdt a,#recherchecdt select{margin-left:.3em!important}#recherchecdt input{margin-left:.3em}#recherchecdt select{width:6em!important}#recherchecdt span{left:.3em}}@media screen and (max-width:400px){#recherchecolle a,#recherchecolle select{margin-left:.3em!important}#recherchecolle input{margin-left:0!important}#recherchecolle select{width:6em}#recherchecolle span{left:.3em}}@media screen and (max-width:350px){#recherchecolle input{display:none;top:1.8em;padding-left:.1em;right:2em;margin-left:2em!important}}#parentsdoc{margin-bottom:1.5em;padding:.3em 2% 0;line-height:1.3em}#parentsdoc span{position:static;cursor:auto}.rep,.doc{margin:0 2%;padding:0;border-bottom:1px dotted #BBB;line-height:1.3em}.repcontenu,.docdonnees{float:right;font-size:.8em;padding-left:.5em;line-height:1.625em}#parentsdoc>a[class^="icon-"],.rep>a[class^="icon-"],.doc>a[class^="icon-"]{float:right;margin-left:.3em;line-height:1.3em}#parentsdoc a,.rep a,.doc a{text-decoration:none;color:black}#parentsdoc .nom,.rep .nom,.doc .nom{font-weight:700;margin-left:.5em}.edition{display:inline;text-align:left;padding-right:3em}h3.edition.editable{padding-right:1%}.edition+p,.edition ~ form{margin-top:.75em}article.cache{background-color:#AAA;opacity:.6}#log{position:fixed;top:3%;left:3%;padding:.3em 2%;z-index:20;margin-right:3%}.ok{background-color:#EFE;color:#090;border:1px solid #090}.nok{background-color:#FEE;color:#D00;border:1px solid #D00}.ok span{color:#090}.nok span{color:#D00}#log span{cursor:pointer;position:relative;right:-0.8em;top:.1em}[id^="aide-"],[id^="form-"]{display:none}#fenetre [name="titre"]{margin:2em 0 1em}#fenetre [name="titre"]+*{display:inline}form.titrecdt{padding:.2em 0 .5em;margin-top:.2em}.confirmation{text-align:center}#fenetre.usergrp .ligne{border-bottom:1px dotted #BBB}#fenetre.usergrp input{margin-top:.2em}.protection{font-size:.8em;color:#999}input,select,textarea{box-sizing:border-box;-webkit-box-sizing:border-box;border:1px solid;border-radius:2px;padding:0 .3em}#fichier{border:0;font-size:.8em;height:1.9em}p.ligne label{font-weight:700}p.ligne input,p.ligne select,p.ligne code{width:65%;float:right;margin-left:.2em;font-size:.8em;height:1.6em}p.ligne input[type="checkbox"],p.ligne input[type="radio"]{width:1em}input.ligne{width:96%;margin:.5em 2%;height:1.6em;font-size:.8em;display:block}p.ligne+*{clear:right}.gestion_protection{margin:0!important}.gestion_protection p{margin:0}.gestion_protection input{vertical-align:sub}.supprmultiple{margin-top:.3em;margin-bottom:0!important}table{width:100%;margin:1em 0;border-collapse:collapse;border:medium solid #999}table td{padding:.15em .5%}table th{padding:.15em 3%}table td,table th{border:thin solid #AAA}.centre,#planning,#notes{text-align:center}.centre th{padding:.15em 0}tr[data-id]:hover,#planning tbody tr:hover,#fenetre tbody tr:not(.categorie):hover{background-color:#EFF}#selmult{width:auto;min-width:70%;margin:2em auto;padding-bottom:2em}#selmult td{border:0;padding-left:5%;font-weight:700}#selmult .element td:first-child{padding-left:10%;font-weight:500}#selmult td+td{vertical-align:sub;text-align:center;width:5em;padding:.1em}.editable,.titrecdt.edition,form.titrecdt{border:1px dotted #BBB;position:relative}.editable a[class^="icon-"],p.titrecdt a[class^="icon-"],.maildest a[class^="icon-"]{padding-left:.3em}.avecform{border:none!important}h3.editable a[class^="icon-"],h3 span.editable a[class^="icon-"]{font-weight:500;font-size:.67em;padding-top:.1em}h3.avecform span{font-weight:500;font-size:.6em;margin-top:.5em;width:80%;overflow:hidden;white-space:nowrap}h3.avecform input{width:50%}textarea,[contenteditable=true].ligne{width:96%;margin:.5em 2%}textarea+div{min-height:6em;border:1px dotted #CCC;background-color:#FFF}.boutons{clear:right;background-color:#DDD;border:1px solid #BBB;width:auto;padding:0;margin-bottom:0;border-radius:4px}.boutons button{cursor:default;background-color:transparent;border-top:0;border-left:none;border-bottom:1px solid #BBB;border-right:1px solid #BBB;height:1.5em;font-size:100%;width:2em}.boutons button+button{margin-left:-0.2em}p.boutons.ligne{width:96%;margin:0 2%}[contenteditable=true]:empty:before{content:attr(placeholder);color:#999;font-size:.8em;display:block}div.editable a[class^="icon-"]{position:absolute;right:3px;top:0}div.editable a.icon-annule{top:1.5em}div.edithtml a.icon-ok{top:1.6em}div.edithtml a.icon-annule{top:3.1em}.icon-mailenvoi{font-size:2em}#notes th,#notes td{padding-left:0;padding-right:0}#notes .icones{text-align:left;padding:.15em .5em;width:2.3em}.notes td+td{width:6em;text-align:center}.notes td+td select{width:6em;font-size:.8em;margin-bottom:.2em}td.pasnote{font-style:italic;text-align:center}.collsel{font-weight:700}.collnosel,.dejanote{color:#AAA}#recherchenote{padding:0 1em}#tableaunotes td+td{text-align:right}.sel{background-color:#EFF}#utilisateurs tr,#selmult tr{border-top:0;border-left:none;border-right:0;border-bottom:1px dotted #BBB}#utilisateurs th,#utilisateurs td,#utilisateurs-matieres th,#utilisateurs-matieres td{border:1px dotted #BBB}#fenetre #utilisateurs th,#fenetre #utilisateurs td{border:0}#fenetre #utilisateurs th+th,#fenetre #utilisateurs td+td{text-align:center;width:5em;padding:.1em}#utilisateurs input,#utilisateurs-matieres input,#selmult input{vertical-align:sub}.categorie th+th,#utilisateurs-matieres td+td{text-align:center;padding:0}#utilisateurs .icones{width:1em;white-space:nowrap;padding:.15em .3em;font-weight:normal;text-align:right}#utilisateurs .icones *{font-weight:normal;vertical-align:middle;padding:0;margin:0}#utilisateurs .icones input{width:1em}#utilisateurs .icones a{display:inline-block;width:1em}.categorie th{border:none!important}.categorie span{cursor:pointer}th.semaines,th.matieres,th.colleurs{vertical-align:bottom;padding:1em 0;text-align:center}th.semaines{width:1.7em}th.semaines span,th.matieres span,th.colleurs span{display:inline-block;writing-mode:vertical-lr;-webkit-writing-mode:vertical-lr;transform:rotate(180deg);-webkit-transform:rotate(180deg);white-space:nowrap}@media print{body{font-size:90%;font-family:Serif}#colonne,#recherchecolle,#recherchecdt,#rechercheagenda,[id^="aide-"],[id^="form-"],footer,a[class^="icon-"]{display:none}.editable,.titrecdt.edition,form.titrecdt{border:0}h1{font-size:1.7em}h2{font-size:1.5em;margin:.7em 0}h3{font-size:1.35em;margin:.6em 0}h4{font-size:1.2em;margin:.4em 0 .2em}article{border:1px solid #999}}#calendrier{margin-top:1em}#calendrier table{table-layout:fixed}#semaine,.semaine-bg,.evenements{margin:0}#semaine{font-weight:900;text-align:center}#semaine th{overflow:hidden;text-overflow:clip}.semaine-bg{border-top:0;position:absolute;z-index:1}.autremois{background-color:#e7eefe;color:#002877}#aujourdhui{background-color:#99b3e5}.evenements{position:relative;z-index:2;border-top:0;border-bottom:0}.evenements thead{border-bottom:1px solid #999}.evenements th{padding:.15em .5%;text-align:right}.evenements td{padding:2px 3px 1px;border:none!important}.modifevnmt{padding:1px 3px;border-radius:5px;white-space:nowrap;overflow:hidden;font-size:.8em;cursor:pointer}.evnmt_suivi{border-top-right-radius:0;border-bottom-right-radius:0;margin-right:-2px}.evnmt_suite{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-3px}#load{display:none;margin:0;padding:0;position:fixed;top:0;left:0;width:100%;height:100%;z-index:30;text-align:center}#load img{position:absolute;top:50%}
diff -urN cahier-de-prepa8.0.2/css/style.css cahier-de-prepa8.1.0/css/style.css
--- cahier-de-prepa8.0.2/css/style.css 2018-10-20 11:19:18.319917357 +0200
+++ cahier-de-prepa8.1.0/css/style.css 2018-10-28 01:06:24.017445327 +0200
@@ -227,10 +227,11 @@
.icon-mailenvoi { font-size: 2em; }
/* Tableau de notes de colles personnel */
-#notes th, #notes td { padding-left: 0; padding-right: 0; }
+#notes th, #notes td { padding: 0.15em 0.5em; }
#notes .icones { text-align: left; padding: 0.15em 0.5em; width: 2.3em; }
.notes td+td { width: 6em; text-align: center; }
.notes td+td select { width: 6em; font-size: 0.8em; margin-bottom: 0.2em; }
+.notes + p.ligne { clear: right; margin-top: 0.5em; }
/* Tableau de notes global */
td.pasnote { font-style: italic; text-align: center; }
@@ -272,6 +273,7 @@
h3 { font-size: 1.35em; margin: 0.6em 0; }
h4 { font-size: 1.2em; margin: 0.4em 0 0.2em; }
article { border: 1px solid #999; }
+ table th { padding: 0.15em 0.5%; }
}
/* Agenda */
diff -urN cahier-de-prepa8.0.2/css/style.min.css cahier-de-prepa8.1.0/css/style.min.css
--- cahier-de-prepa8.0.2/css/style.min.css 1970-01-01 01:00:00.000000000 +0100
+++ cahier-de-prepa8.1.0/css/style.min.css 2018-10-31 03:52:49.351200890 +0100
@@ -0,0 +1 @@
+*{font-size:1em;margin:0;padding:0}html,body{height:100%}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;position:relative;width:100%;margin:0 auto;min-width:320px;max-width:1500px;background-color:#f6f6f6}h1{font-size:2.2em;text-align:center;padding:1em 2em}h2{font-size:1.8em;margin:1em 0 .8em}h3{font-size:1.5em;margin:1em 0 .5em}h2+h3{padding-left:1%}h4{font-size:1.3em;margin:.5em 0 .2em;padding-left:2.5%}h5{font-size:1.1em;margin-top:.2em;padding-left:4%}h6{font-size:1em;margin-top:.2em;padding-left:5.5%}ul,ol{margin:.5em 0;padding:0 2% 0 6%}p{padding:0 2%}p+p{margin-top:.5em}img{border:0;max-width:100%}div,p,section,article{text-align:justify}section>:first-child,article>:first-child,article>h2:first-of-type,article>h3:first-of-type,#fenetre h3:first-of-type{margin-top:0}article>:last-child,#fenetre>:last-child{margin-bottom:0}article{margin-bottom:1em;padding:1em 2%;background-color:#cdd5e4}#fenetre{position:fixed;left:50%;z-index:15;padding:1em 2%;overflow:auto;background-color:#e7eefe;opacity:.97;box-shadow:.5em .5em .5em #777}#fenetre_fond{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000;opacity:.2;z-index:14}article>a[class^="icon-"],#fenetre>a[class^="icon-"]{float:right;margin-left:.3em}#fenetre hr{margin:1.5em 0}footer{text-align:center;width:90%;padding:1em 5%;clear:both;position:fixed;left:0;bottom:0;z-index:20;border-top:1px solid black;background-color:#DDD;opacity:.97}@media screen and (min-width:800px){#colonne{width:280px;float:left;margin:0 30px 3em}nav{padding:1em 20px .7em}.icon-menu,.icon-recent{display:none}#recent{margin-top:1.5em;padding:1em 20px}section{position:relative;margin:0 30px 0 340px;padding-bottom:3em}#icones{position:absolute;top:-4em;right:0}header+section{width:96%;margin:0 auto;max-width:1500px;text-align:center}footer{font-size:.8em}#fenetre{top:10%;width:70%;margin-left:-37%;max-height:80%}}@media screen and (max-width:800px){h1{font-size:1.8em;padding:.3em 3em}h2{font-size:1.65em}#colonne{display:none}#colonne.visible{display:block}nav.visible,#recent.visible{display:block;position:fixed;z-index:10;top:3.3em;left:.5em;padding:1em 20px .7em;width:80%;min-width:200px;max-width:280px;max-height:70%;overflow:auto;box-shadow:.5em .5em .5em #777}.icon-menu,.icon-recent{position:fixed;z-index:10;top:.8em;left:.5em;font-size:1.2em;cursor:pointer}.icon-recent{left:2.5em}section{position:relative;width:96%;margin:0 auto;padding-bottom:3em}#icones{position:absolute;top:-2.2em;right:0}header+section{text-align:center}footer{font-size:.6em}#fenetre{top:4%;width:92%;margin-left:-48%;max-height:92%}}nav,#recent{background-color:#99b3e5}nav a[class^="icon-"]{display:inline-block;margin:0 .3em;color:#001030}nav a{display:block;margin-bottom:.2em;text-decoration:none;color:#002877}nav a:hover{color:#CDF}nav h3{font-size:1.2em;margin:.5em 3% .1em;padding-top:.3em;color:#001030;border-top:1px solid #001030}nav hr{margin:.5em 3% .5em;color:#001030;border-top:1px solid #001030;border-bottom:0}nav a.menurep{padding-left:3%;font-size:.9em}#actuel{font-style:italic}nav h3 span{font-weight:500;font-size:.83em;margin-right:.2em;color:#001030!important}#recent a{display:block;margin-bottom:.4em;text-decoration:none;color:#002877;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#recent a span{color:#002877}#recent h3{font-size:1.2em;margin:0 3% .5em;color:#001030}.pdf{height:0;width:100%;overflow:hidden;position:relative}.portrait{padding-bottom:138%}.paysage{padding-bottom:74%}.hauteur50{padding-bottom:50%}.pdf object{position:absolute}.warning{text-align:center;width:50%;margin:1em auto;padding:.5em 3%}.annonce{margin:1em 3%;padding:.5em 4%}.note{margin:.5em 2%;padding:0 4%}.warning,.annonce{color:#ba0d1f;border:2px solid #ba0d1f}.note{color:#ba0d1f}.oubli{font-size:.8em;text-align:center}.oubli a{text-decoration:none;color:#333}.oubli label{font-weight:700}.oubli input{margin-left:1em;vertical-align:text-top}p.titrecdt{text-align:right;text-decoration:underline}p.titrecdt.edition{text-align:left;text-decoration:none;padding-right:1%}.topbarre{height:1.5em;background-color:#DDD;border:1px solid #BBB;width:auto;border-radius:4px;margin-bottom:1.5em}h1 span{font-size:70%;vertical-align:7%;margin-left:.4em}#recherchecdt a,#recherchecolle a,#rechercheagenda a{margin-right:.4em;vertical-align:middle}.topbarre select#semaines{margin-left:.8em;width:8.5em}.topbarre select#seances{margin-left:.8em;width:11em}.topbarre input{position:absolute;top:.25em;margin:0 .8em 0 1em;padding-left:1.8em;width:-moz-available}.topbarre input,.topbarre select{font-size:.9em;height:1.25em;vertical-align:bottom}.topbarre .icon-recherche{position:relative;left:1.9em;font-size:.7em;cursor:pointer}@media screen and (max-width:980px) and (min-width:800px),screen and (max-width:600px){#recherchecdt input{display:none;top:1.8em;padding-left:.1em;right:2em;margin-left:2em!important}#recherchecdt span{left:1.3em}}@media screen and (max-width:450px){#recherchecdt a,#recherchecdt select{margin-left:.3em!important}#recherchecdt input{margin-left:.3em}#recherchecdt select{width:6em!important}#recherchecdt span{left:.3em}}@media screen and (max-width:400px){#recherchecolle a,#recherchecolle select{margin-left:.3em!important}#recherchecolle input{margin-left:0!important}#recherchecolle select{width:6em}#recherchecolle span{left:.3em}}@media screen and (max-width:350px){#recherchecolle input{display:none;top:1.8em;padding-left:.1em;right:2em;margin-left:2em!important}}#parentsdoc{margin-bottom:1.5em;padding:.3em 2% 0;line-height:1.3em}#parentsdoc span{position:static;cursor:auto}.rep,.doc{margin:0 2%;padding:0;border-bottom:1px dotted #BBB;line-height:1.3em}.repcontenu,.docdonnees{float:right;font-size:.8em;padding-left:.5em;line-height:1.625em}#parentsdoc>a[class^="icon-"],.rep>a[class^="icon-"],.doc>a[class^="icon-"]{float:right;margin-left:.3em;line-height:1.3em}#parentsdoc a,.rep a,.doc a{text-decoration:none;color:black}#parentsdoc .nom,.rep .nom,.doc .nom{font-weight:700;margin-left:.5em}.edition{display:inline;text-align:left;padding-right:3em}h3.edition.editable{padding-right:1%}.edition+p,.edition ~ form{margin-top:.75em}article.cache{background-color:#AAA;opacity:.6}#log{position:fixed;top:3%;left:3%;padding:.3em 2%;z-index:20;margin-right:3%}.ok{background-color:#EFE;color:#090;border:1px solid #090}.nok{background-color:#FEE;color:#D00;border:1px solid #D00}.ok span{color:#090}.nok span{color:#D00}#log span{cursor:pointer;position:relative;right:-0.8em;top:.1em}[id^="aide-"],[id^="form-"]{display:none}#fenetre [name="titre"]{margin:2em 0 1em}#fenetre [name="titre"]+*{display:inline}form.titrecdt{padding:.2em 0 .5em;margin-top:.2em}.confirmation{text-align:center}#fenetre.usergrp .ligne{border-bottom:1px dotted #BBB}#fenetre.usergrp input{margin-top:.2em}.protection{font-size:.8em;color:#999}input,select,textarea{box-sizing:border-box;-webkit-box-sizing:border-box;border:1px solid;border-radius:2px;padding:0 .3em}#fichier{border:0;font-size:.8em;height:1.9em}p.ligne label{font-weight:700}p.ligne input,p.ligne select,p.ligne code{width:65%;float:right;margin-left:.2em;font-size:.8em;height:1.6em}p.ligne input[type="checkbox"],p.ligne input[type="radio"]{width:1em}input.ligne{width:96%;margin:.5em 2%;height:1.6em;font-size:.8em;display:block}p.ligne+*{clear:right}.gestion_protection{margin:0!important}.gestion_protection p{margin:0}.gestion_protection input{vertical-align:sub}.supprmultiple{margin-top:.3em;margin-bottom:0!important}table{width:100%;margin:1em 0;border-collapse:collapse;border:medium solid #999}table td{padding:.15em .5%}table th{padding:.15em 3%}table td,table th{border:thin solid #AAA}.centre,#planning,#notes{text-align:center}.centre th{padding:.15em 0}tr[data-id]:hover,#planning tbody tr:hover,#fenetre tbody tr:not(.categorie):hover{background-color:#EFF}#selmult{width:auto;min-width:70%;margin:2em auto;padding-bottom:2em}#selmult td{border:0;padding-left:5%;font-weight:700}#selmult .element td:first-child{padding-left:10%;font-weight:500}#selmult td+td{vertical-align:sub;text-align:center;width:5em;padding:.1em}.editable,.titrecdt.edition,form.titrecdt{border:1px dotted #BBB;position:relative}.editable a[class^="icon-"],p.titrecdt a[class^="icon-"],.maildest a[class^="icon-"]{padding-left:.3em}.avecform{border:none!important}h3.editable a[class^="icon-"],h3 span.editable a[class^="icon-"]{font-weight:500;font-size:.67em;padding-top:.1em}h3.avecform span{font-weight:500;font-size:.6em;margin-top:.5em;width:80%;overflow:hidden;white-space:nowrap}h3.avecform input{width:50%}textarea,[contenteditable=true].ligne{width:96%;margin:.5em 2%}textarea+div{min-height:6em;border:1px dotted #CCC;background-color:#FFF}.boutons{clear:right;background-color:#DDD;border:1px solid #BBB;width:auto;padding:0;margin-bottom:0;border-radius:4px}.boutons button{cursor:default;background-color:transparent;border-top:0;border-left:none;border-bottom:1px solid #BBB;border-right:1px solid #BBB;height:1.5em;font-size:100%;width:2em}.boutons button+button{margin-left:-0.2em}p.boutons.ligne{width:96%;margin:0 2%}[contenteditable=true]:empty:before{content:attr(placeholder);color:#999;font-size:.8em;display:block}div.editable a[class^="icon-"]{position:absolute;right:3px;top:0}div.editable a.icon-annule{top:1.5em}div.edithtml a.icon-ok{top:1.6em}div.edithtml a.icon-annule{top:3.1em}.icon-mailenvoi{font-size:2em}#notes th,#notes td{padding:.15em .5em}#notes .icones{text-align:left;padding:.15em .5em;width:2.3em}.notes td+td{width:6em;text-align:center}.notes td+td select{width:6em;font-size:.8em;margin-bottom:.2em}.notes+p.ligne{clear:right;margin-top:.5em}td.pasnote{font-style:italic;text-align:center}.collsel{font-weight:700}.collnosel,.dejanote{color:#AAA}#recherchenote{padding:0 1em}#tableaunotes td+td{text-align:right}.sel{background-color:#EFF}#utilisateurs tr,#selmult tr{border-top:0;border-left:none;border-right:0;border-bottom:1px dotted #BBB}#utilisateurs th,#utilisateurs td,#utilisateurs-matieres th,#utilisateurs-matieres td{border:1px dotted #BBB}#fenetre #utilisateurs th,#fenetre #utilisateurs td{border:0}#fenetre #utilisateurs th+th,#fenetre #utilisateurs td+td{text-align:center;width:5em;padding:.1em}#utilisateurs input,#utilisateurs-matieres input,#selmult input{vertical-align:sub}.categorie th+th,#utilisateurs-matieres td+td{text-align:center;padding:0}#utilisateurs .icones{width:1em;white-space:nowrap;padding:.15em .3em;font-weight:normal;text-align:right}#utilisateurs .icones *{font-weight:normal;vertical-align:middle;padding:0;margin:0}#utilisateurs .icones input{width:1em}#utilisateurs .icones a{display:inline-block;width:1em}.categorie th{border:none!important}.categorie span{cursor:pointer}th.semaines,th.matieres,th.colleurs{vertical-align:bottom;padding:1em 0;text-align:center}th.semaines{width:1.7em}th.semaines span,th.matieres span,th.colleurs span{display:inline-block;writing-mode:vertical-lr;-webkit-writing-mode:vertical-rl;transform:rotate(180deg);-webkit-transform:rotate(180deg);white-space:nowrap}@media print{body{font-size:90%;font-family:Serif}#colonne,#recherchecolle,#recherchecdt,#rechercheagenda,[id^="aide-"],[id^="form-"],footer,a[class^="icon-"]{display:none}.editable,.titrecdt.edition,form.titrecdt{border:0}h1{font-size:1.7em}h2{font-size:1.5em;margin:.7em 0}h3{font-size:1.35em;margin:.6em 0}h4{font-size:1.2em;margin:.4em 0 .2em}article{border:1px solid #999}table th{padding:.15em .5%}}#calendrier{margin-top:1em}#calendrier table{table-layout:fixed}#semaine,.semaine-bg,.evenements{margin:0}#semaine{font-weight:900;text-align:center}#semaine th{overflow:hidden;text-overflow:clip}.semaine-bg{border-top:0;position:absolute;z-index:1}.autremois{background-color:#e7eefe;color:#002877}#aujourdhui{background-color:#99b3e5}.evenements{position:relative;z-index:2;border-top:0;border-bottom:0}.evenements thead{border-bottom:1px solid #999}.evenements th{padding:.15em .5%;text-align:right}.evenements td{padding:2px 3px 1px;border:none!important}.modifevnmt{padding:1px 3px;border-radius:5px;white-space:nowrap;overflow:hidden;font-size:.8em;cursor:pointer}.evnmt_suivi{border-top-right-radius:0;border-bottom-right-radius:0;margin-right:-2px}.evnmt_suite{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-3px}#load{display:none;margin:0;padding:0;position:fixed;top:0;left:0;width:100%;height:100%;z-index:30;text-align:center}#load img{position:absolute;top:50%}
\ No newline at end of file
diff -urN cahier-de-prepa8.0.2/def_sql.php cahier-de-prepa8.1.0/def_sql.php
--- cahier-de-prepa8.0.2/def_sql.php 2018-10-19 00:36:14.708539874 +0200
+++ cahier-de-prepa8.1.0/def_sql.php 2018-10-27 23:56:44.625458730 +0200
@@ -235,6 +235,7 @@
`jour` date NOT NULL,
`heure` time NOT NULL,
`duree` smallint(3) unsigned NOT NULL,
+ `description` varchar(200) NOT NULL,
`releve` date NOT NULL,
KEY `colleur` (`colleur`),
KEY `matiere` (`matiere`)
diff -urN cahier-de-prepa8.0.2/fonctions.php cahier-de-prepa8.1.0/fonctions.php
--- cahier-de-prepa8.0.2/fonctions.php 2018-10-20 02:21:45.484001552 +0200
+++ cahier-de-prepa8.1.0/fonctions.php 2018-10-31 04:00:11.408376567 +0100
@@ -715,8 +715,8 @@