$titre
-Aucun résultat n'a été trouvé pour cette recherche.
L'année est terminée... Bonnes vacances !
\nL'année est terminée... Bonnes vacances !
\nModifier les raccourcis de séance
@@ -85,6 +88,7 @@ // Récupération $resultat = $mysqli->query("SELECT id, ordre, nom, jour, type, demigroupe, TIME_FORMAT(h_debut,'%kh%i') AS h_debut, TIME_FORMAT(h_fin,'%kh%i') AS h_fin FROM `cdt-seances` WHERE matiere = ${matiere['id']}"); +$mysqli->close(); if ( $max = $resultat->num_rows ) { while ( $r = $resultat->fetch_assoc() ) { $id = $r['id']; @@ -96,15 +100,15 @@ echo <<Aide et explications
-Il est possible ici d'ajouter ou de modifier des raccourcis pour le cahier de texte. Ces raccourcis de séance, propres à chaque matière, formeront un menu déroulant disponible lors de l'édition des horaires d'un élément du cahier de texte. Sélectionner un raccourci de séance dans ce menu déroulant pré-remplit les champs séances, jour, heures et demi-groupe. Cela permet donc d'aller plus vite lors du remplissage du cahier de texte. Les raccourcis n'apparaissent qu'en mode édition, et non dans la partie publique.
+Il est possible ici d'ajouter ou de modifier des raccourcis pour le cahier de texte. Ces raccourcis de séance, propres à chaque matière, formeront un menu déroulant disponible lors de l'édition des horaires d'un élément du cahier de texte. Sélectionner un raccourci de séance dans ce menu déroulant pré-remplit les champs séances, jour, heures et demi-groupe. Cela permet donc d'aller plus vite lors du remplissage du cahier de texte. Les raccourcis n'apparaissent qu'en mode édition (pour vous), non devant les élèves ou autres visiteurs.
On peut par exemple disposer d'un raccourci « Cours du lundi » qui permettra de régler automatiquement le type de séance à Cours, le jour de la semaine au lundi de la semaine en cours, les heures de début et fin à 8h et 10h.
Le nom est ce qui sera affiché dans le menu d'accès aux raccourcis, visible lors de l'édition d'un élément du cahier de texte. On peut mettre ce que l'on veut.
La séance est le type de séance qui sera automatiquement sélectionné. Les types de séances sont modifiables, indépendamment pour chaque matière, sur la page de modification des types de séances.
@@ -159,10 +162,10 @@Les raccourcis existants sont directement modifiables. Les modifications sont prises en compte après validation avec le bouton .
Aide et explications
Le nom est ce qui sera affiché dans le menu d'accès aux raccourcis, visible lors de l'édition d'un élément du cahier de texte. On peut mettre ce que l'on veut.
-La séance est le type de séance qui sera automatiquement sélectionné. Les types de séances sont modifiables, indépendamment pour chaque matière, sur la page de modification des types de séances.
+La séance est le type de séance qui sera automatiquement sélectionné. Les types de séances sont modifiables, indépendamment pour chaque matière, à la gestion de types de séances.
Une fois les modifications faites, il faut les valider en cliquant sur le bouton .
D'autres modifications sont possibles à l'aide des boutons disponibles pour chaque raccourci de séance :
-
@@ -173,7 +176,7 @@
Supprimer un raccourci de séance n'a strictement aucun impact sur les éléments du cahier de texte.
Aide et explications
Ce formulaire permet de créer un nouveau raccourci de séance. Il sera validé par un clic sur , et abandonné (donc supprimé) par un clic sur .
Chaque raccourci de séance ne concerne qu'une matière à la fois.
@@ -185,11 +188,18 @@ close(); fin(true); ?> diff -urN cahier-de-prepa6.2.0/cdt-seances.php cahier-de-prepa8.0.1/cdt-seances.php --- cahier-de-prepa6.2.0/cdt-seances.php 2016-08-23 00:29:01.217875511 +0200 +++ cahier-de-prepa8.0.1/cdt-seances.php 2018-10-12 15:03:58.728099684 +0200 @@ -21,10 +21,11 @@ // Recherche de la matière concernée, variable $matiere // Si $_REQUEST['cle'] existe, on la cherche dans les matières disponibles. +// colles_protection=32 : cahier de texte désactivé, pas d'affichage // Accès aux professeurs connectés uniquement $mysqli = connectsql(); -if ( $autorisation == 4 ) { - $resultat = $mysqli->query("SELECT id, cle, nom FROM matieres WHERE FIND_IN_SET(id,'${_SESSION['matieres']}')"); +if ( $autorisation == 5 ) { + $resultat = $mysqli->query("SELECT id, cle, nom FROM matieres WHERE FIND_IN_SET(id,'${_SESSION['matieres']}') AND colles_protection < 32"); if ( $resultat->num_rows ) { if ( !empty($_REQUEST) ) { while ( $r = $resultat->fetch_assoc() ) @@ -56,12 +57,14 @@ ////////////// //// HTML //// ////////////// -debut($mysqli,"Cahier de texte - ${matiere['nom']}",$message,4,"cdt-seances?${matiere['cle']}"); +debut($mysqli,"Cahier de texte - ${matiere['nom']}",$message,5,"cdt-seances?${matiere['cle']}"); echo <<Modifier les types de séances
@@ -76,6 +79,7 @@ '; // Récupération $resultat = $mysqli->query("SELECT id, ordre, titre, cle, deb_fin_pour, nb FROM `cdt-types` WHERE matiere = ${matiere['id']}"); +$mysqli->close(); $max = $resultat->num_rows; while ( $r = $resultat->fetch_assoc() ) { $id = $r['id']; @@ -86,16 +90,16 @@ echo <<Aide et explications
-Il est possible ici d'ajouter ou de modifier les types de séances du cahier de texte. Ces modifications sont propres à chaque matière.
+Il est possible ici d'ajouter ou de modifier les types de séances du cahier de texte. Les modifications effectuées ici ne concernent que la matière .
Le titre sera affiché au début de chaque élément du cahier de texte. Il doit s'agit d'un nom singulier et commençant par une majuscule. Il peut être relativement long. Par exemple : « Séance de travaux pratiques », « Interrogation de cours »
La clé sera affichée dans le menu déroulant de recherche, précédé de « les », ainsi que dans l'adresse des pages qui affichent ce type de séances : il faut donc que ce soit un pluriel, court, en un mot, sans majucule au début (sauf s'il le faut). Par exemple, « TP », « interros ».
Vous pouvez choisir les valeurs affichées pour chaque type de séances grâce à l'affichage d'horaires :
@@ -179,7 +182,7 @@Seuls les types qui correspondent effectivement à des séances apparaissent dans le menu déroulant de recherche de la partie publique. Ce n'est donc pas un problème d'avoir des types qui ne servent finalement à rien, il n'apparaîtront pas sur la partie publique.
Aide et explications
Le titre sera affiché au début de chaque élément du cahier de texte. Il doit s'agit d'un nom singulier et commençant par une majuscule. Il peut être relativement long. Par exemple : « Séance de travaux pratiques », « Interrogation de cours »
La clé sera affichée dans le menu déroulant de recherche, précédé de « les », ainsi que dans l'adresse des pages qui affichent ce type de séances : il faut donc que ce soit un pluriel, court, en un mot, sans majucule au début (sauf s'il le faut). Par exemple, « TP », « interros ». La clé doit obligatoirement être unique (deux types de séances ne peuvent pas avoir la même clé).
@@ -199,13 +202,13 @@Attention : supprimer un type de séances supprime aussi automatiquement tous les éléments du cahier de texte correspondant à ce type. Cela ne peut impacter que la matière concernée. Le nombre d'éléments du cahier de texte correspondant à un type est donné pour chaque type de séances.
+Attention : supprimer un type de séances supprime aussi automatiquement tous les éléments du cahier de texte correspondant à ce type. Cela ne peut impacter que la matière . Le nombre d'éléments du cahier de texte correspondant à un type est donné pour chaque type de séances.
Aide et explications
Ce formulaire permet de créer un nouveau type de séances. Il sera validé par un clic sur , et abandonné (donc supprimé) par un clic sur .
-Chaque type de séances ne concerne qu'une matière à la fois.
+Un type de séances créé ici ne concernera que la matière .
Le titre sera affiché au début de chaque élément du cahier de texte. Il doit s'agit d'un nom singulier et commençant par une majuscule. Il peut être relativement long. Par exemple : « Séance de travaux pratiques », « Interrogation de cours »
La clé sera affichée dans le menu déroulant de recherche, précédé de « les », ainsi que dans l'adresse des pages qui affichent ce type de séances : il faut donc que ce soit un pluriel, court, en un mot, sans majucule au début (sauf s'il le faut). Par exemple, « TP », « interros ». La clé doit obligatoirement être unique (deux types de séances ne peuvent pas avoir la même clé).
Vous pouvez choisir les valeurs affichées pour chaque type de séances grâce à l'affichage d'horaires :
@@ -224,14 +227,14 @@ close(); fin(true); ?> diff -urN cahier-de-prepa6.2.0/CHANGELOG.php cahier-de-prepa8.0.1/CHANGELOG.php --- cahier-de-prepa6.2.0/CHANGELOG.php 2018-10-14 22:31:03.622207601 +0200 +++ cahier-de-prepa8.0.1/CHANGELOG.php 2018-10-17 01:26:23.807180273 +0200 @@ -1,4 +1,4 @@ -Version actuelle : 6.1.0 (25/08/17) +Version actuelle : 8.0.1 (15/10/18) =================== Changements : 1.0 31/08/11 Première version @@ -195,24 +195,51 @@ * Améliorations et uniformisations d'affichage 6.1.0 25/08/17 Correction de bug : problème des invitations (liens avec @) * Nouvelle version du planning annuel pour 2017-2018 - * La version 7 viendra courant septembre. 6.2.0 02/09/18 Version non publiée * Nouvelle version du planning annuel pour 2018-2019 - +8.0.1 15/10/18 Nouvelles fonctionnalités : + * Envois de mails + * Envoi paramétré avec une adresse générale évitant les erreurs de transport + * Possibilité pour tous les utilisateurs (y compris les élèves) d'envoyer + des mails, réglage particulier à chaque compte + * Gestion des accès entièrement revue, possibilité de réglage beaucoup plus fin + pour la protection de l'accès de chaque ressource + * Création d'un nouveau type d'utilisateur : administration + * Gestion des utilisateurs améliorée + * Validations/suppressions/modifications multiples d'utilisateurs + * Possibilité de "désactiver" un compte sans le supprimer, par exemple pour + les élèves partis en cours d'année + * Les groupes peuvent comprendre des utilisateurs non élèves + * Protection individuelle des informations + * Possibilité de connexion automatique sans mot de passe pour les pages + en lecture seule et sans donnée sensible. + * Gestion des notes entièrement revue, avec un regroupement par heure et une + nouvelle interface de saisie et modification. Les notes de colles peuvent + être relevées par l'administration. Les données récapitulatives (nombre + d'élèves et nombre d'heures déclarées et relevées) sont affichées. + * Possibilité de désactiver les fonctions cahier de texte/programme de colle/ + notes de colles : elles disparaissent alors du menu. + =================== Todo : -[ 7.0 ] Septembre 2017 - * Modification complète des envois de mails et mise en place d'un système de forum. - * Possibilité pour les élèves de contacter professeurs et colleurs si autorisé. - * Gestion des accès entièrement revue - * Création d'un nouveau type d'utilisateur : administration - * Possibilité de modifier le type d'un utilisateur existant - * Gestion des utilisateurs - * Validations/suppressions multiples d'utilisateurs - * Possibilité de "désactiver" un compte sans le supprimer, pour les élèves partis en cours d'année - * Protection individuelle des informations +[8.1] 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 ? + * Correction des mises à jour multiples vers les informations récentes + * FAQ + * Affichage en ligne des vidéos et fichiers sonores + * Pièce jointe sur les mails : téléchargement, enregistrement dans un répertoire + hors d'atteinte, lien spécial à insérer dans le corps du mail. + * À côté de Cahier de Prépa : une interface spéciale pour l'administration des + lycées qui voudraient récupérer les notes de colles sur plusieurs classes. + +[ 9.0 ] Septembre 2019 + * Meilleure visiblité des protections dans le menu + * Réglages des fichiers xls téléchargés (notes & utilisateurs) + * Mise en place d'un système de forum ? * Améliorations de l'agenda * Possibilité de montrer/cacher un événement * Protection individuelle des événements @@ -221,35 +248,26 @@ * Vue de l'agenda sous forme de liste d'événements * Recherche dans les événements * Raccourcis cdt : texte pré-défini - * FAQ - -[ 7.1 ] Janvier 2018 - * Timeout revu. Connexion automatique sans mot de passe pour les pages sans danger. * Système de récupération des données/documents * Paramétrage des styles pour les titres, des couleurs - * Modification globale des répertoires ou matières : répercution sur les information récentes - * Notes : gestions de modifications de personnes, matières + ======= Autres remarques / propositions : - * Types cdt : suppression massive (idem pages) - * Préférences globales : création de compte, protection globale, - * Suppressions (modifications ?) multiples de documents/informations + * Modifications multiples sur des éléments (informations, pages, types ou + séances de cahier de texte, documents...) * Tags dans les cahiers de texte - * Modifier les matières des utilisateurs depuis utilisateurs.php * Programme de colles par quinzaine - * Bug : suppression des notes lorsque suppression d'un compte élève/colleur - * Correction des mises à jour multiples vers les informations récentes - * agrandir les icônes * ajouter la durée des séances dans le cahier de texte * bug : interdire les "." dans les clés - * crayon matière dans menu -> modification de la matière - * meilleure compréhension des visibilités dans le menu - * notes : garder des notes malgré suppression de l'association colleur/matière ou élève/matière (changement de matière, Y PCSI) + * matière éditable depuis le menu -> modification de la matière seule (matieres.php accessible avec une clé) * notes : savoir combien de notes sont attribuées à un compte avant suppression (gestion des doublons) * news : date de création, date de mise à jour ? * modification de docs par les élèves * modification d'items de l'agenda par les élèves * ajout de la possibilité d'envoi de notification à chaque saisie de document/information/programme de colle - * prévention javascript de changement de page en cours d'édition + * prévention javascript de changement de page/fermeture de sous-fenêtre, en cours d'édition + * mise en évidence (surlignage) des champs modifiés, envoi sélectif ? + * correction : détection de la touche entrée sur les input/select plus globale (supprimer les copies multiples) + * correction : utiliser le data-matiere associé à body dans les actions ajax diff -urN cahier-de-prepa6.2.0/colles.php cahier-de-prepa8.0.1/colles.php --- cahier-de-prepa6.2.0/colles.php 2015-10-27 12:28:17.595628535 +0100 +++ cahier-de-prepa8.0.1/colles.php 2018-10-15 17:50:45.624901382 +0200 @@ -12,13 +12,20 @@ // Recherche de la matière concernée, variable $matiere // Si $_REQUEST['cle'] existe, on la cherche dans les matières disponibles. +// colles=0 : cahier de texte vide, à afficher uniquement pour les profs concernés +// colles=1 : cahier de texte utilisé, à afficher pour les utilisateurs associés +// à la matière +// colles_protection permet de restreindre l'accès +// colles_protection=32 : cahier de texte désactivé, pas d'affichage $mysqli = connectsql(); -$resultat = $mysqli->query('SELECT id, cle, nom, colles_protection AS protection FROM matieres WHERE colles'.( ( $autorisation == 4 ) ? " OR FIND_IN_SET(id,'${_SESSION['matieres']}')" : '' )); +$resultat = $mysqli->query('SELECT id, cle, nom, colles_protection AS protection + FROM matieres WHERE ( colles = 1'.( ( $autorisation == 5 ) ? " OR FIND_IN_SET(id,'${_SESSION['matieres']}')" : '' ).' ) AND colles_protection < 32'); if ( $resultat->num_rows ) { if ( !empty($_REQUEST) ) { while ( $r = $resultat->fetch_assoc() ) if ( isset($_REQUEST[$r['cle']]) ) { $matiere = $r; + $mid = $matiere['id']; break; } } @@ -37,27 +44,10 @@ fin(); } - ///////////////////////////// // Vérification de l'accès // ///////////////////////////// -// Interdiction de voir les programmes de protection élevée ou non associés à -// ses propres matières si on est invité/élève/colleur -// Toutes les matières sont visibles pour les professeurs (édition: cf plus bas) -if ( $matiere['protection'] && ( $autorisation > 0 ) && ( $autorisation < 4 ) - && ( ( $matiere['protection'] > $autorisation ) || ( !in_array($matiere['id'],explode(',',$_SESSION['matieres'])) ) ) ) { - debut($mysqli,"Programme de colles - ${matiere['nom']}",'Vous n\'avez pas accès à cette page.',$autorisation,"colles?${matiere['cle']}"); - $mysqli->close(); - fin(); -} -// Connexion nécessaire si protection -if ( $matiere['protection'] && !$autorisation ) { - $titre = "Programme de colles - ${matiere['nom']}"; - $actuel = "colles?${matiere['cle']}"; - include('login.php'); -} -// Mode édition pour les professeurs sur leurs propres matières uniquement -$edition = ( ( $autorisation == 4 ) && in_array($matiere['id'],explode(',',$_SESSION['matieres'])) ); +$edition = acces($matiere['protection'],$mid,"Programme de colles - ${matiere['nom']}","colles?${matiere['cle']}",$mysqli); ////////////////////////////////////////////////////////////////// // Validation de la requête : semaine(s) ou éléments à afficher // @@ -111,17 +101,16 @@ } // Vue de la semaine en cours, prochaine semaine à partir du vendredi 19h // $n est false si non trouvé (hors année scolaire) -else { - if ( ( ( $n = array_search(date('yW', strtotime('Monday this week',time()+104400)),$semaines) ) !== false ) ) { - $requete = "WHERE s.id >= $n"; - $nb = 1+$edition; - } +elseif ( ( $n = array_search(date('yW', strtotime('Monday this week',time()+104400)),$semaines) ) !== false ) { + $requete = "WHERE s.id >= $n"; + $nb = 1+$edition; } //////////// /// HTML /// //////////// -debut($mysqli,"Programme de colles - ${matiere['nom']}". ( ( $edition && $matiere['protection'] ) ? "" : '' ),$message,$autorisation,"colles?${matiere['cle']}",$matiere['id']); +$icone = ( $edition && $matiere['protection'] ) ? '' : ''; +debut($mysqli,"Programme de colles - ${matiere['nom']}$icone",$message,$autorisation,"colles?${matiere['cle']}",$mid); // MathJax désactivé par défaut $mathjax = false; @@ -161,23 +150,24 @@ echo $boutons; if ( $n !== false ) { // Affichage des programmes de colles diffusés - if ( strlen($recherche) ) + if ( strlen($recherche) > 0 ) $resultat = $mysqli->query("SELECT DATE_FORMAT(s.debut,'%w%Y%m%e') AS debut, s.colle, s.vacances, c.texte FROM colles AS c LEFT JOIN semaines AS s ON c.semaine=s.id - WHERE c.matiere = ${matiere['id']} AND c.cache = 0 AND c.texte LIKE '%".$mysqli->real_escape_string($_REQUEST['recherche']).'%\' ORDER BY c.semaine'); + WHERE c.matiere = $mid AND c.cache = 0 AND c.texte LIKE '%".$mysqli->real_escape_string($_REQUEST['recherche']).'%\' ORDER BY c.semaine'); else $resultat = $mysqli->query("SELECT DATE_FORMAT(s.debut,'%w%Y%m%e') AS debut, s.colle, s.vacances, c.texte FROM semaines AS s - LEFT JOIN (SELECT texte, semaine FROM colles WHERE matiere = ${matiere['id']} AND cache = 0) AS c ON c.semaine=s.id + LEFT JOIN (SELECT texte, semaine FROM colles WHERE matiere = $mid AND cache = 0) AS c ON c.semaine=s.id $requete" ); - if ( $resultat->num_rows ) { + $mysqli->close(); + if ( $resultat->num_rows > 0 ) { $compteur = 0; while ( ( $compteur < $nb ) && ( $r = $resultat->fetch_assoc() ) ) { - $mathjax = ( $mathjax ) ? true : strpos($r['texte'],'$')+strpos($r['texte'],'\\'); + $mathjax = $mathjax ?: boolval(strpos($r['texte'],'$')+strpos($r['texte'],'\\')); $titre = generetitre($r['debut'],$r['vacances']); if ( $r['colle'] ) { $compteur = $compteur+1; - $texte = ( is_null($r['texte']) ) ? 'Le programme de colles de cette semaine n\'est pas défini.
' : $r['texte']; + $texte = $r['texte'] ?: 'Le programme de colles de cette semaine n\'est pas défini.
'; } else $texte = ( $r['vacances'] ) ? '' : 'Il n\'y a pas de colles cette semaine.
'; @@ -202,67 +192,57 @@ // Affichage professeur éditeur else { echo <<$titre
- - - - - -Le programme de colles de cette semaine n'est pas encore défini.
-Le programme de colles de cette semaine n'est pas encore défini.
$titre
- - $visible + + $bouton_cache - -Il n\'y a normalement pas de colles cette semaine-là.
S\'il s\'agit d\'une erreur, cela est modifiable sur la page des semaines
'; + $texte = ( $r['vacances'] ) ? '' : 'Il n\'y a normalement pas de colles cette semaine-là.
S\'il s\'agit d\'une erreur, cela est modifiable sur la page de gestion du planning annuel.
'; echo <<L'année est terminée.
\nAide et explications
-Il est possible ici d'ajouter et de modifier des programmes de colles. On peut précédemment sélectionner une semaine ou effectuer une recherche de texte.
-Chaque programme de colles est associé à une semaine du planning annuel. Il est impossible de déplacer un programme de colles.
+Il est possible ici d'ajouter et de modifier des programmes de colles. On peut également les consulter, sélectionner une semaine ou effectuer une recherche de texte.
+Chaque programme de colles est associé à une semaine du planning annuel. Il est impossible de déplacer un programme de colles. Pour modifier les semaines correspondant à un programme de colle, il faut vous rendre à la gestion du planning annuel.
Si une semaine de colles ne contient pas de programme, il est possible d'en rajouter un en cliquant sur le bouton .
Les textes modifiables sont dans les zones indiquées par des pointillés. Ils sont modifiables en cliquant sur les boutons et en validant avec le bouton qui apparaît alors.
-Autres réglages
-Vous ne pouvez modifier les programmes de colles et leur possibilité d'accès que pour les matières qui sont associées à votre compte. Tout cela est modifiable dans la page de gestion des Matières.
-Vous pouvez modifier les semaines avec ou sans colle et les vacances scolaires sur la page du Planning annuel.
+Gestion des accès
+L'accès aux programmes de colles peut être protégé en cliquant sur le bouton des préférences . Trois choix sont possibles :
+-
+
- Accès public : programme accessible de tout visiteur, sans identification. +
- Utilisateurs identifiés : programme accessible uniquement par les utilisateurs identifiés, en fonction de leur type de compte et des matières auxquelles ils sont associés. Un cadenas est alors affiché dans le titre de la page. Les associations entre utilisateurs et matières sont modifiables à la gestion utilisateurs-matières. +
- Fonction désactivée : les programmes de colles pour cette matière sont complètement indisponibles. La fonction n'apparaît plus dans le menu, y compris pour vous. +
Si vous désactivez ici cette fonction, vous ne pourrez plus utiliser cette page. Les programmes de colles ne seront pas supprimés, le choix est réversible. Vous pourrez réactiver cette fonction à la gestion des matières.
+Le lien de la page dans le menu est visible avant identification. Il disparaît après identification pour les utilisateurs n'ayant pas accès à la page.
+Suppression de tous les programmes de colles
+L'ensemble des programmes de colles est supprimable en un clic à la gestion des matières.
Aide et explications
+Ce formulaire permet de modifier l'accès aux programmes de colles en . Il sera validé par un clic sur , et abandonné (donc supprimé) par un clic sur . Trois choix sont possibles :
+-
+
- Accès public : programme accessible de tout visiteur, sans identification. +
- Utilisateurs identifiés : programme accessible uniquement par les utilisateurs identifiés, en fonction de leur type de compte et des matières auxquelles ils sont associés. Un cadenas est alors affiché dans le titre de la page. Les associations entre utilisateurs et matières sont modifiables à la gestion utilisateurs-matières. +
- Fonction désactivée : les programmes de colles pour cette matière sont complètement indisponibles. La fonction n'apparaît plus dans le menu, y compris pour vous. +
Si vous désactivez ici cette fonction, vous ne pourrez plus utiliser cette page. Les programmes de colles ne seront pas supprimés, le choix est réversible. Vous pourrez réactiver cette fonction à la gestion des matières.
+Suppression de tous les programmes de colles
+L'ensemble des programmes de colles n'est pas supprimable ici, mais en un clic à la gestion des matières.
+Aide et explications
Le texte de chaque programme de colle existant est modifiable, en cliquant sur le bouton . Si aucun programme de colle n'existe pour la semaine concerné, il est possible d'en créer un en cliquant sur le bouton . Chaque contenu éditable est indiqué par une bordure en pointillés.
Une fois le texte édité, il est validé en appuyant sur le bouton . Au contraire, un clic sur le bouton annule l'édition.
@@ -325,7 +355,7 @@Le texte doit être formaté en HTML : par exemple, chaque bloc de texte doit être encadré par <p> et </p>. Il peut donc contenir des liens vers les autres pages du site, vers des documents du site, vers le web... Des boutons sont fournis pour aider au formattage (ainsi qu'une aide).
Aide et explications
Ce formulaire permet de créer un nouveau programme de colles. Il sera validé par un clic sur , et abandonné (donc supprimé) par un clic sur .
Le texte doit être formaté en HTML : par exemple, chaque bloc de texte doit être encadré par <p> et </p>. Il peut donc contenir des liens vers les autres pages du site, vers des documents du site, vers le web... Des boutons sont fournis pour aider au formattage (ainsi qu'une aide).
@@ -336,7 +366,5 @@ close(); fin($edition,$mathjax); ?> diff -urN cahier-de-prepa6.2.0/config.php cahier-de-prepa8.0.1/config.php --- cahier-de-prepa6.2.0/config.php 2015-09-20 22:00:18.811329075 +0200 +++ cahier-de-prepa8.0.1/config.php 2018-10-14 21:23:43.171112433 +0200 @@ -2,12 +2,9 @@ // Fichier de configuration de Cahier de Prépa // Adresse web -// Ne pas mettre le protocole ("http://" ou "https://") ni de "/" final +// Ne pas mettre le protocole ("https://") ni de "/" final $site = ''; -// Forçage du https -$https = true; - // Accès à la base de données MySQL /* $serveur est le nom du serveur. localhost est la valeur par défaut. * $base est le nom de la base de données utilisée. 12 caractères maximum. @@ -23,4 +20,10 @@ // redirigées l'ensemble des erreurs $mailadmin = 'admin@cahier-de-prepa.fr'; +// Adresse d'envoi des mails +// Utilisée pour envoyer les mails en évitant les erreurs de mauvais +// serveur SMTP (mettre le même nom de domaine que le serveur web) +// Les adresses réelles des expéditeurs sont utilisées si vide +$mailenvoi = 'ne-pas-repondre@cahier-de-prepa.fr'; + ?> diff -urN cahier-de-prepa6.2.0/connexion.php cahier-de-prepa8.0.1/connexion.php --- cahier-de-prepa6.2.0/connexion.php 2017-08-25 00:47:53.657017642 +0200 +++ cahier-de-prepa8.0.1/connexion.php 1970-01-01 01:00:00.000000000 +0100 @@ -1,461 +0,0 @@ -query('SELECT titre FROM pages WHERE id = 1'); -$r = $resultat->fetch_assoc(); -$resultat->free(); -$titre = "${r['titre']}"; - -///////////////////////////////////////////////////////////////////// -// Gestion de la demande : oubli d'identifiant, création de compte // -///////////////////////////////////////////////////////////////////// - -// Oubli d'identifiant -if ( isset($_REQUEST['oublimdp']) && isset($_REQUEST['mail']) && strlen($mail = str_replace('ø','@',$_REQUEST['mail'])) ) { - - // Recherche de l'adresse électronique dans la base de données - $resultat = $mysqli->query('SELECT id, login, mail, mdp FROM utilisateurs WHERE LENGTH(mail)'); - while ( $r = $resultat->fetch_assoc() ) - if ( $r['mail'] == $mail ) { - $utilisateur = $r; - break; - } - $resultat->free(); - if ( !isset($utilisateur) ) { - $mysqli->close(); - exit('{"etat":"nok_","message":"L\'adresse électronique donnée est inconnue. Si vous venez de demander la création de votre compte, le mot de passe n\'est pas modifiable tant que les professeurs de la classe n\'ont pas validé l\'inscription. Vous recevrez un courriel quand cela sera effectif."}'); - } - - // Retour de courriel : variable $_REQUEST['p'] - if ( isset($_REQUEST['p']) ) { - // Si variable $_REQUEST['p'] à une mauvaise valeur, on l'efface : le - // formulaire affiché sera celui de demande d'adresse électronique - if ( ( $_REQUEST['p'] != sha1($site.date('Y-m-d-H').$utilisateur['mdp']) ) && ( $_REQUEST['p'] != sha1($site.date('Y-m-d-H',time()+900).$utilisateur['mdp']) ) ) - unset($_REQUEST['p']); - - // Traitement du formulaire - elseif ( isset($_REQUEST['mdp1']) && strlen($newmdp = $_REQUEST['mdp1']) ) { - if ( $newmdp != $_REQUEST['mdp2'] ) { - $mysqli->close(); - exit('{"etat":"nok_","message":"Les deux mots de passe donnés ne sont pas identiques."}'); - } - // Écriture du nouveau mot de passe - $mysqli->close(); - $mysqli = connectsql(true); - $message = ( requete('utilisateurs',"UPDATE utilisateurs SET mdp = '".sha1($newmdp)."' WHERE id = ${utilisateur['id']}",$mysqli) ) ? '{"etat":"ok_","message":"Votre mot de passe a bien été modifié."}' : '{"etat":"nok_","message":"Votre mot de passe n\'a pas pu être modifié suite à une erreur technique."}'; - $mysqli->close(); - exit($message); - } - } - - // Envoi de courriel - else { - // On ajoute 15 minutes au temps utilisé : - // de xh00 à xh45, on a jusqu'à (x+1)h, de xh45 à (x+1)h on a jusqu'à (x+2)h - $t = time() + 900; - $lien = ( $https ? 'https' : 'http' )."://$site/connexion?oublimdp&mail=".str_replace('@','ø',$mail).'&p='.sha1($site.date('Y-m-d-H',$t).$utilisateur['mdp']); - $s = strstr($site.'/','/',true); - if ( !isset($mailadmin) ) $mailadmin = 'admin@cahier-de-prepa.fr'; - mail($mail,'=?UTF-8?B?'.base64_encode('[Cahier de Prépa] Changement de mot de passe').'?=', -'Bonjour - -Vous avez rempli une demande de modification de votre mot de passe sur le Cahier de Prépa'.$mail.'
.Si vous ne voyez rien, pensez à regarder dans les courriels marqués comme spam. Certains serveurs retardent jusqu\'à 10 minutes l\'arrivée des messages, normalement la première fois uniquement.
Le courriel qui vous a été envoyé contiendra un lien, valable jusqu\'à '.date('G\h00',$t+3600).', vous permettant de modifier votre mot de passe."}'); - } -} - -// Création de compte -elseif ( isset($_REQUEST['creationcompte']) ) { - - // Vérification de la possibilité de rajouter des comptes - // Si un utilisateur au mot de passe vide a été inséré, c'est le réglage pour - // arrêter la création de compte - $resultat = $mysqli->query('SELECT id FROM utilisateurs WHERE LENGTH(mdp) = 0'); - if ( $creationinterdite = $resultat->num_rows ) - $resultat->free(); - elseif ( isset($_REQUEST['mail']) && strlen($mail = str_replace('ø','@',strtolower(trim($_REQUEST['mail'])))) ) { - // Vérifications - if ( !filter_var($mail,FILTER_VALIDATE_EMAIL) ) { - $mysqli->close(); - exit('{"etat":"nok_","message":"L\'adresse saisie n\'est pas une adresse électronique valide.
Vous avez dû faire une faute de frappe."}'); - } - if ( in_array($domaine = strstr($mail,'@'),array('@gmail.fr','@laposte.fr')) ) { - $mysqli->close(); - exit('{"etat":"nok_","message":"L\'adresse saisie ne pourra pas fonctionner : le domaine
'.$domaine.'
ne reçoit pas de courriels."}');
- }
- // Recherche du mail dans la base de données
- $resultat = $mysqli->query('SELECT GROUP_CONCAT(mail) AS mails FROM utilisateurs WHERE LENGTH(mail)');
- $r = $resultat->fetch_assoc();
- $resultat->free();
- if ( in_array($mail,$mails = explode(',',$r['mails'])) || in_array("@$mail",$mails) ) {
- $mysqli->close();
- exit('{"etat":"nok_","message":"Un compte avec cette adresse électronique existe déjà. Si vous venez de demander la création de votre compte, le compte n\'est pas modifiable tant que les professeurs de la classe n\'ont pas validé l\'inscription. Vous recevrez un courriel quand cela sera effectif. Si ce compte a déjà été validé par les professeurs, vous pouvez changer le mot de passe."}');
- }
-
- // Retour de mail : variable $_REQUEST['p']
- if ( isset($_REQUEST['p']) ) {
- // Si variable $_REQUEST['p'] à une mauvaise valeur, on l'efface : le
- // formulaire affiché sera celui de demande d'adresse mail
- if ( ( $_REQUEST['p'] != sha1($site.$mdp.date('Y-m-d-H').$mail) ) && ( $_REQUEST['p'] != sha1($site.$mdp.date('Y-m-d-H',time()+900).$mail) ) )
- unset($_REQUEST['p']);
-
- // Traitement du formulaire
- // Un compte temporaire non validé par l'équipe pédagogique contient une
- // adresse mail commençant par @ (pour interdire le changement de mdp)
- // et un mot de passe commençant par * (pour interdire la connexion).
- elseif ( isset($_REQUEST['nom']) ) {
- if ( !strlen($nom = trim($_REQUEST['nom'])) )
- $message = '{"etat":"nok_","message":"Le nom est obligatoire."}';
- elseif ( !isset($_REQUEST['prenom']) || !strlen($prenom = trim($_REQUEST['prenom'])) )
- $message = '{"etat":"nok_","message":"Le prénom est obligatoire."}';
- elseif ( !isset($_REQUEST['mdp1']) || !strlen($newmdp = $_REQUEST['mdp1']) )
- $message = '{"etat":"nok_","message":"Le mot de passe est obligatoire."}';
- elseif ( $newmdp != $_REQUEST['mdp2'] )
- $message = '{"etat":"nok_","message":"Les deux mots de passe donnés ne sont pas identiques."}';
- else {
- // Nettoyage des données envoyées
- $prenom = mb_convert_case(strip_tags($mysqli->real_escape_string($prenom)),MB_CASE_TITLE,'UTF-8');
- $nom = mb_convert_case(strip_tags($mysqli->real_escape_string($nom)),MB_CASE_TITLE,'UTF-8');
- $mail = $mysqli->real_escape_string($mail);
- $newmdp = sha1($newmdp);
- // Login automatique
- $login = mb_strtolower(mb_substr($prenom,0,1,'UTF-8').str_replace(' ','_',$nom),'UTF-8');
- $resultat = $mysqli->query('SELECT GROUP_CONCAT(login) AS logins FROM utilisateurs');
- $r = $resultat->fetch_assoc();
- $resultat->free();
- if ( in_array($login,explode(',',$r['logins'])) )
- $message = '{"etat":"nok_","message":"Un compte avec le même identifiant existe déjà. Merci de vous connecter avec l\'adresse électronique correspondante."}';
- else {
- // Récupération des matières
- $resultat = $mysqli->query('SELECT GROUP_CONCAT(id) AS matieres FROM matieres');
- $r = $resultat->fetch_row();
- $resultat->free();
- // Si "colleur" choisi, autorisation vaut 3. Sinon, 2 (élève)
- if ( $_REQUEST['autorisation'] == 2 ) {
- $autorisation = 3;
- // Vérification de la matière
- $matiere = ( isset($_REQUEST['matiere']) && in_array($_REQUEST['matiere'],explode(',',$r['0'])) ) ? "0,${_REQUEST['matiere']}" : 0;
- $mailexp = "$prenom $nom";
- $mailcopy = 1;
- }
- else {
- $autorisation = 2;
- // De base : toutes matières
- $matiere = "0,${r[0]}";
- $mailexp = '';
- $mailcopy = 0;
- }
- // Écriture du nouveau compte
- $mysqli->close();
- $mysqli = connectsql(true);
- $message = ( requete('utilisateurs',"INSERT INTO utilisateurs SET login = '$login', prenom = '$prenom', nom = '$nom', mail = '@$mail',
- mdp = '*$newmdp', autorisation = $autorisation, matieres = '$matiere', timeout = 900, mailexp = '$mailexp', mailcopy = $mailcopy",$mysqli) )
- ? '{"etat":"ok_","message":"Votre demande d\'inscription est terminée. Elle est maintenant en attente de validation par les professeurs de la classe. Vous recevrez un courriel lorsque votre inscription sera validée."}'
- : '{"etat":"nok_","message":"Votre demande d\'inscription n\'a pas pu être enregistrée suite à une erreur technique."}';
- }
- }
- $mysqli->close();
- exit($message);
- }
- }
-
- // Envoi de mail
- else {
- // On ajoute 15 minutes au temps utilisé : de xh00 à xh45,
- // on a jusqu'à (x+1)h, de xh45 à (x+1)h on a jusqu'à (x+2)h
- $t = time() + 900;
- $lien = ( $https ? 'https' : 'http' )."://$site/connexion?creationcompte&mail=".str_replace('@','ø',$mail).'&p='.sha1($site.$mdp.date('Y-m-d-H',$t).$mail);
- if ( !isset($mailadmin) ) $mailadmin = 'admin@cahier-de-prepa.fr';
- mail($mail,'=?UTF-8?B?'.base64_encode('[Cahier de Prépa] Création de compte').'?=',
-'Bonjour
-
-Vous venez de donner cette adresse pour une demande de création de compte sur le Cahier de Prépa '.$mail.'
.Si vous ne voyez rien, pensez à regarder dans les courriels marqués comme spam. Vérifiez bien qu\'il n\'y a pas d\'erreur dans cette adresse, car vous ne pourrez pas continuer votre inscription si elle est fausse. Certains serveurs retardent jusqu\'à 10 minutes l\'arrivée des messages, la première fois uniquement.
Le courriel qui vous a été envoyé contiendra un lien, valable jusqu\'à '.date('G\h00',$t+3600).', vous permettant de terminer votre inscription."}'); - } - } -} - -// Réponse à une invitation -elseif ( isset($_REQUEST['reponseinvitation']) && isset($_REQUEST['mail']) && strlen($mail = str_replace('ø','@',$_REQUEST['mail'])) && isset($_REQUEST['p']) && ( $_REQUEST['p'] == sha1($site.$mdp.$mail) ) ) { - // Recherche de l'adresse électronique dans la base de données - $resultat = $mysqli->query('SELECT id, login, mail, LENGTH(mdp) AS lmdp FROM utilisateurs WHERE LENGTH(mail)'); - while ( $r = $resultat->fetch_assoc() ) - if ( $r['mail'] == $mail ) { - $utilisateur = $r; - break; - } - $resultat->free(); - if ( !isset($utilisateur) ) { - debut($mysqli,$titre,'L\'adresse électronique donnée est inconnue. Le compte pour lequel vous avez été invité a peut-être été supprimé.',false); - $mysqli->close(); - fin(); - } - if ( $r['lmdp'] == 40 ) { - debut($mysqli,$titre,'Le mot de passe a déjà été défini. Si vous souhaitez le modifier, vous pouvez utiliser le formulaire de mot de passe oublié.',false); - $mysqli->close(); - fin(); - } - - // Modification du mot de passe - if ( isset($_REQUEST['mdp1']) && strlen($newmdp = $_REQUEST['mdp1']) ) { - if ( $newmdp != $_REQUEST['mdp2'] ) { - $mysqli->close(); - exit('{"etat":"nok_","message":"Les deux mots de passe donnés ne sont pas identiques."}'); - } - // Écriture du nouveau mot de passe - $mysqli->close(); - $mysqli = connectsql(true); - $message = ( requete('utilisateurs',"UPDATE utilisateurs SET mdp = '".sha1($newmdp)."' WHERE id = ${utilisateur['id']}",$mysqli) ) ? '{"etat":"ok_","message":"Votre mot de passe a bien été modifié."}' : '{"etat":"nok_","message":"Votre mot de passe n\'a pas pu être modifié suite à une erreur technique."}'; - $mysqli->close(); - exit($message); - } -} - -//////////// -/// HTML /// -//////////// -debut($mysqli,$titre,'',false); -if ( isset($_REQUEST['oublimdp']) ) { - if ( !isset($_REQUEST['p']) ) - echo <<
Aucune action n\'a été effectuée.
'; - -$mysqli->close(); -fin(); -?> diff -urN cahier-de-prepa6.2.0/css/icones1810.min.css cahier-de-prepa8.0.1/css/icones1810.min.css --- cahier-de-prepa6.2.0/css/icones1810.min.css 1970-01-01 01:00:00.000000000 +0100 +++ cahier-de-prepa8.0.1/css/icones1810.min.css 2018-10-14 22:22:51.240384586 +0200 @@ -0,0 +1 @@ +@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{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-prepa6.2.0/css/icones.css cahier-de-prepa8.0.1/css/icones.css --- cahier-de-prepa6.2.0/css/icones.css 2016-07-25 23:24:21.557674925 +0200 +++ cahier-de-prepa8.0.1/css/icones.css 2018-10-09 01:12:05.346269747 +0200 @@ -1,30 +1,34 @@ @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; + 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-"], [class*=" icon-"] { - font-family: 'icomoon'; +[class^="icon-"] { + font-family: 'icomoon' !important; color: black; - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } + a[class^="icon-"] { cursor: pointer; - float: right; - margin-left: 5px; - padding-top: 0.2em; text-decoration: none; - font-weight: 500; } -span.icon-lock { +span.icon-minilock { position: relative !important; left: -0.3em; top: 0.1em; @@ -32,227 +36,224 @@ margin-right: -0.5em; } .icon-montre:before { - content: "\e600"; + content: "\e600"; } .icon-cache:before { - content: "\e601"; + content: "\e601"; } .icon-aide:before { - content: "\e602"; + content: "\e602"; } -.icon-ajoute:before { - content: "\e603"; +.icon-ajoute:before, .icon-ajoutecolle:before { + content: "\e603"; } .icon-supprime:before { - content: "\e604"; + content: "\e604"; } .icon-annule:before { - content: "\e605"; + content: "\e605"; } .icon-ok:before { - content: "\e606"; + content: "\e606"; } .icon-prefs:before { - content: "\e607"; + content: "\e607"; } .icon-monte:before { - content: "\e608"; + content: "\e608"; } .icon-descend:before { - content: "\e609"; + content: "\e609"; } .icon-ferme:before { - content: "\e60a"; + content: "\e60a"; } .icon-epingle:before { - content: "\e60b"; + content: "\e60b"; } .icon-par1:before { - content: "\e60c"; + content: "\e60c"; } .icon-par2:before { - content: "\e60d"; + content: "\e60d"; } .icon-par3:before { - content: "\e60e"; + content: "\e60e"; } .icon-gras:before { - content: "\e60f"; + content: "\e60f"; } .icon-italique:before { - content: "\e610"; + content: "\e610"; } .icon-souligne:before { - content: "\e611"; + content: "\e611"; } .icon-omega:before { - content: "\e612"; + content: "\e612"; } .icon-sigma:before { - content: "\e613"; + content: "\e613"; } .icon-exp:before { - content: "\e614"; + content: "\e614"; } .icon-ind:before { - content: "\e615"; + content: "\e615"; } .icon-ol:before { - content: "\e616"; + content: "\e616"; } .icon-ul:before { - content: "\e617"; + content: "\e617"; } .icon-lien1:before { - content: "\e618"; + content: "\e618"; } .icon-lien2:before { - content: "\e619"; + content: "\e619"; } .icon-retour:before { - content: "\e61a"; + content: "\e61a"; } .icon-source:before { - content: "\e61b"; + content: "\e61b"; } .icon-nosource:before { - content: "\e61c"; + content: "\e61c"; } .icon-tex:before { - content: "\e61d"; + content: "\e61d"; } .icon-titres:before { - content: "\e61e"; + content: "\e61e"; } -.icon-edite:before { - content: "\e61f"; +.icon-edite:before, .icon-editedoc:before, .icon-editerep:before { + content: "\e61f"; } .icon-precedent:before { - content: "\e620"; + content: "\e620"; } .icon-suivant:before { - content: "\e621"; + content: "\e621"; } .icon-recherche:before { - content: "\e622"; + content: "\e622"; } .icon-voirtout:before { - content: "\e623"; + content: "\e623"; + color: #000; } .icon-accueil:before { - content: "\e624"; + content: "\e624"; } .icon-imprime:before { - content: "\e625"; + content: "\e625"; } .icon-connexion:before { - content: "\e626"; + content: "\e626"; } .icon-deconnexion:before { - content: "\e627"; + content: "\e627"; } .icon-mail:before { - content: "\e628"; + content: "\e628"; } .icon-menu:before { - content: "\e629"; + content: "\e629"; } .icon-cocher:before { - content: "\e62a"; + content: "\e62a"; } .icon-decocher:before { - content: "\e62b"; + content: "\e62b"; } .icon-rep:before { - content: "\e62c"; + content: "\e62c"; } .icon-rep-open:before { - content: "\e62d"; + content: "\e62d"; } .icon-download:before { - content: "\e62e"; + content: "\e62e"; } -.icon-lock:before { - content: "\e62f"; +.icon-minilock:before { + content: "\e62f"; } .icon-alphaasc:before { - content: "\e630"; + content: "\e630"; } .icon-alphadesc:before { - content: "\e631"; + content: "\e631"; } .icon-chronoasc:before { - content: "\e632"; + content: "\e632"; } .icon-chronodesc:before { - content: "\e633"; + content: "\e633"; } .icon-ajouterep:before { - content: "\e634"; + content: "\e634"; } .icon-ajoutedoc:before { - content: "\e635"; + content: "\e635"; } .icon-doc:before { - content: "\e636"; -} -.icon-doc-txt:before { - content: "\e636"; + content: "\e636"; } .icon-doc-pdf:before { - content: "\e637"; + content: "\e637"; } .icon-doc-doc:before { - content: "\e638"; + content: "\e638"; } .icon-doc-xls:before { - content: "\e639"; + content: "\e639"; } .icon-doc-ppt:before { - content: "\e63a"; + content: "\e63a"; } .icon-doc-jpg:before { - content: "\e63b"; + content: "\e63b"; } .icon-doc-zip:before { - content: "\e63c"; + content: "\e63c"; } .icon-doc-mp3:before { - content: "\e63d"; + content: "\e63d"; } .icon-doc-mp4:before { - content: "\e63e"; + content: "\e63e"; } .icon-doc-pyt:before { - content: "\e63f"; + content: "\e63f"; } .icon-rss:before { - content: "\e640"; + content: "\e640"; } .icon-infos:before { - content: "\e641"; + content: "\e641"; } .icon-colles:before { - content: "\e642"; + content: "\e642"; } .icon-recent:before { - content: "\e643"; + content: "\e643"; } .icon-lock1:before { - content: "\e644"; + content: "\e644"; } .icon-lock2:before { - content: "\e645"; + content: "\e645"; } .icon-lock3:before { - content: "\e646"; + content: "\e646"; } .icon-lock4:before { - content: "\e647"; + content: "\e647"; } .icon-lock5:before { - content: "\e648"; - color: #C00; + content: "\e648"; } .icon-agenda:before { content: "\e649"; @@ -260,3 +261,44 @@ .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-prepa6.2.0/css/icones.min.css cahier-de-prepa8.0.1/css/icones.min.css --- cahier-de-prepa6.2.0/css/icones.min.css 2016-08-30 18:10:42.106670849 +0200 +++ cahier-de-prepa8.0.1/css/icones.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-"],[class*=" icon-"]{font-family:'icomoon';color:black;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a[class^="icon-"]{cursor:pointer;float:right;margin-left:5px;padding-top:.2em;text-decoration:none;font-weight:500}span.icon-lock{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{content:"\e603"}.icon-supprime:before{content:"\e604"}.icon-annule:before{content:"\e605"}.icon-ok: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{content:"\e61f"}.icon-precedent:before{content:"\e620"}.icon-suivant:before{content:"\e621"}.icon-recherche:before{content:"\e622"}.icon-voirtout:before{content:"\e623"}.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-lock: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-txt: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";color:#C00}.icon-agenda:before{content:"\e649"}.icon-ajout-colle:before{content:"\e64a"} \ No newline at end of file diff -urN cahier-de-prepa6.2.0/css/style1810.min.css cahier-de-prepa8.0.1/css/style1810.min.css --- cahier-de-prepa6.2.0/css/style1810.min.css 1970-01-01 01:00:00.000000000 +0100 +++ cahier-de-prepa8.0.1/css/style1810.min.css 2018-10-14 22:22:51.476387398 +0200 @@ -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-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)}@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%} \ No newline at end of file diff -urN cahier-de-prepa6.2.0/css/style.css cahier-de-prepa8.0.1/css/style.css --- cahier-de-prepa6.2.0/css/style.css 2016-09-09 11:08:48.337403096 +0200 +++ cahier-de-prepa8.0.1/css/style.css 2018-10-14 15:08:06.438640850 +0200 @@ -11,57 +11,82 @@ * #AAA : articles cachés * #EFE/#090 : bandeau ok vert (fond/texte) * #FEE/#D00 : bandeau non-ok rouge (fond/texte) - * #EFF : hover sur les tableaux (#planning,#utilisateurs,#notes,.usergrp,.usermat) + * #EFF : hover sur les tableaux (#planning,.notes,.destinataires,.usergrp,.usermat) */ /* Police et taille globales */ -html,body { height: 100%; } -body { font-size: 100%; font-family:Arial, Helvetica, sans-serif; position: relative; width:100%; margin: 0 auto; max-width: 1500px; background-color: #F6F6F6; } -h1 { font-size: 2.2em; text-align: center; margin: 0; padding: 1em 2em; } -h2 { font-size: 1.8em; margin: 1em 0 0.8em; padding: 0; } -h3 { font-size: 1.5em; margin: 1em 0 0.5em; padding: 0 1% 0; } -h4 { font-size: 1.3em; margin: 0.5em 0 0.2em; padding: 0 2.5% 0; } -h5 { font-size: 1.1em; margin: 0.2em 0 0; padding: 0 4% 0; } -h6 { font-size: 1em; margin: 0.2em 0 0; padding: 0 5.5% 0; } -ul { margin: 0.5em 0; padding: 0 2% 0 6%; } -p { margin: 0; padding: 0 2%; } +* { 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 0.8em; } +h3 { font-size: 1.5em; margin: 1em 0 0.5em; } +h2 + h3 { padding-left: 1%; } +h4 { font-size: 1.3em; margin: 0.5em 0 0.2em; padding-left: 2.5%; } +h5 { font-size: 1.1em; margin-top: 0.2em; padding-left: 4%; } +h6 { font-size: 1em; margin-top: 0.2em; padding-left: 5.5%; } +ul, ol { margin: 0.5em 0; padding: 0 2% 0 6%; } +p { padding: 0 2%; } p + p { margin-top: 0.5em; } -div, form { margin: 0; padding: 0; } img { border: none; max-width: 100%; } -div,p,section,article { text-align: justify; } -article > *:first-child { margin-top: 0; } -article > *:last-child { margin-bottom: 0; } -section > h2:first-child { margin-top: 0; } +div, p, section, article { text-align: justify; } -/* Blocs pricipaux */ +/* Blocs principaux, icônes */ +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: 0.97; box-shadow: 0.5em 0.5em 0.5em #777; } +#fenetre_fond { position: fixed; top: 0; left: 0; width: 100%; height: 100%; + background-color: #000; opacity: 0.2; z-index: 14; } +article > a[class^="icon-"], #fenetre > a[class^="icon-"] { float: right; margin-left: 0.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: 0.97; } + +/* Blocs principaux, affichage différentiés selon la taille de l'écran */ @media screen and (min-width: 800px) { #colonne { width: 280px; float: left; margin: 0 30px 3em; } - nav { margin: 0; padding: 1em 20px 0.7em; } + nav { padding: 1em 20px 0.7em; } .icon-menu, .icon-recent { display: none; } #recent { margin-top: 1.5em; padding: 1em 20px; } - section { position: relative; margin: 0 30px 0 340px; padding: 0 0 3em; } + 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: 0.8em; } + #fenetre { top: 10%; width: 70%; margin-left: -37%; max-height: 80%; } } @media screen and (max-width: 800px) { h1 { font-size: 1.8em; padding: 0.3em 3em; } h2 { font-size: 1.65em; } - #colonne, nav, #recent { display: none; } + #colonne { display: none; } #colonne.visible { display: block; } nav.visible, #recent.visible { display: block; position: fixed; z-index: 10; top: 3.3em; left: 0.5em; padding: 1em 20px 0.7em; - width: 80%; min-width: 200px; max-width: 280px; max-height: 70%; overflow: auto; - box-shadow: 0.5em 0.5em 0.5em #777; -moz-box-shadow: 0.5em 0.5em 0.5em #777; -webkit-box-shadow: 0.5em 0.5em 0.5em #777; } + width: 80%; min-width: 200px; max-width: 280px; max-height: 70%; overflow: auto; box-shadow: 0.5em 0.5em 0.5em #777; } .icon-menu, .icon-recent { position: fixed; z-index: 10; top: 0.8em; left: 0.5em; font-size: 1.2em; cursor: pointer; } .icon-recent { left: 2.5em; } - section { position: relative; width:96%; margin: 0 2%; padding: 0 0 3em; } + 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: 0.6em; } + #fenetre { top: 4%; width: 92%; margin-left: -48%; max-height: 92%; } } -article { margin: 1em 0; padding: 1em 2%; background-color: #CDD5E4; } -article:first-child, .general + article { margin-top: 0 !important; } -footer { text-align: center; width: 90%; padding: 1em 5%; clear: both; position: fixed; left: 0; bottom: 0; z-index: 15; - border-top: 1px solid black; background-color: #DDD; opacity: 0.97; filter: alpha(opacity=97); } +/* Dans le menu et dans les informations récentes*/ +nav, #recent { background-color: #99B3E5; } +nav a[class^="icon-"] { display: inline-block; margin: 0 0.3em; color: #001030; } +nav a { display: block; margin-bottom: 0.2em; text-decoration: none; color: #002877; } +nav a:hover { color: #CDF; } +nav h3 { font-size: 1.2em; margin: 0.5em 3% 0.1em; padding-top: 0.3em; color: #001030; border-top: 1px solid #001030; } +nav hr { margin: 0.5em 3% 0.5em; color: #001030; border-top: 1px solid #001030; border-bottom: none; } +nav a.menurep { padding-left: 3%; font-size: 0.9em; } +#actuel { font-style: italic; } +nav h3 span { font-weight: 500; font-size: 0.83em; margin-right: 0.2em; color: #001030 !important; } +#recent a { display: block; margin-bottom: 0.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% 0.5em; color: #001030; } + /* PDF et JPG */ .pdf { height: 0; width: 100%; overflow: hidden; position: relative; } .portrait { padding-bottom: 138%; } @@ -77,18 +102,20 @@ .note { color: #BA0D1F; } .oubli { font-size: 0.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; } -.titrecdt.edition { text-align: left; text-decoration: none; padding-right: 1%; } -.topbarre { height: 1.5em; background-color: #DDD; border: 1px solid #BBB; width: auto; padding: 0; margin-bottom: 0; border-radius: 4px; } +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: 0.4em; } /* indication de protection en mode édition */ /* Menu de recherche, programme de colle et cahier de texte */ -#recherchecdt a, #recherchecolle a, #rechercheagenda a { float: none !important; margin-left: 0.5em; } -#rechercheagenda a { vertical-align: sub; } -.topbarre select#semaines { margin-left: 1.3em; width: 8.5em; height: 1.7em; } -.topbarre select#seances { margin-left: 1.3em; width: 11em; height: 1.7em; } -.topbarre input { position: absolute; margin:0 0.8em 0 1.5em; padding-left: 1.8em; width: -moz-available; height: 1.7em; } -.topbarre span { position: relative; left: 1.9em; cursor: pointer; top: 0.1em; } +#recherchecdt a, #recherchecolle a, #rechercheagenda a { margin-right: 0.4em; vertical-align: middle; } +.topbarre select#semaines { margin-left: 0.8em; width: 8.5em; } +.topbarre select#seances { margin-left: 0.8em; width: 11em; } +.topbarre input { position: absolute; top: 0.25em; margin:0 0.8em 0 1em; padding-left: 1.8em; width: -moz-available; } +.topbarre input, .topbarre select { font-size: 0.9em; height: 1.25em; vertical-align: bottom; } +.topbarre .icon-recherche { position: relative; left: 1.9em; font-size: 0.7em; cursor: pointer; } /* Disparition de la case de recherche */ @media screen and (max-width: 980px) and (min-width: 800px), screen and (max-width: 600px) { #recherchecdt input { display: none; top: 1.8em; padding-left: 0.1em; right: 2em; margin-left: 2em !important; } @@ -110,151 +137,139 @@ #recherchecolle input { display: none; top: 1.8em; padding-left: 0.1em; right: 2em; margin-left: 2em !important; } } -/* Spécifique webkit */ +/* Spécifique webkit @media screen and (-webkit-min-device-pixel-ratio:0) { .topbarre { height: 1.4em; vertical-align: bottom; } #recherchecolle input { width: 40%; } .topbarre span { top: 0.2em; } #recherchecdt a, #recherchecolle a { vertical-align: middle; } -/* .topbarre select { height: 1.7em; }*/ -} +}*/ /* Documents */ -#parentsdoc { margin-bottom: 1.5em; padding: 0.3em 2% 0; } -#parentsdoc * { padding-top: 0; } +#parentsdoc { margin-bottom: 1.5em; padding: 0.3em 2% 0; line-height: 1.3em; } #parentsdoc span { position: static; cursor: auto; } -.rep, .doc { padding: 0; margin-left: 2%; margin-right: 2%; border-bottom: 1px dotted #BBB; } -.repcontenu, .docdonnees { float: right; font-size: 0.8em; padding-top: 0.2em; padding-left: 0.5em; } +.rep, .doc { margin: 0 2%; padding: 0; border-bottom: 1px dotted #BBB; line-height: 1.3em; } +.repcontenu, .docdonnees { float: right; font-size: 0.8em; padding-left: 0.5em; line-height: 1.625em; } +#parentsdoc > a[class^="icon-"], .rep > a[class^="icon-"], .doc > a[class^="icon-"] { float: right; margin-left: 0.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: 0.5em; } /* Édition : positionnements globaux */ -.general { position: absolute; top: -4.1em; right: 1em; } -.general + .general { right: 2.2em; } -.general + .general + .general { right: 3.4em; } -.general + .general + .general + .general { right: 4.6em; } .edition { display: inline; text-align: left; padding-right: 3em; } h3.edition.editable { padding-right: 1%; } -.edition ~ div, .edition + p, .edition ~ form { margin-top: 0.75em; } -article.cache { background-color: #AAA; opacity: 0.6; filter: alpha(opacity=60); } +.edition + p, .edition ~ form { margin-top: 0.75em; } +article.cache { background-color: #AAA; opacity: 0.6; } #log { position: fixed; top:3%; left: 3%; padding: 0.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: 0.1em;} -#fenetre_fond { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: #000; opacity: 0.2; filter: alpha(opacity=20); z-index: 12; } -#fenetre { position: fixed; left: 50%; z-index: 14; padding: 0 2%; overflow: auto; background-color: #E7EEFE; opacity: 0.97; filter: alpha(opacity=97); - box-shadow: 0.5em 0.5em 0.5em #777; -webkit-box-shadow: 0.5em 0.5em 0.5em #777; } -#fenetre > *:last-child { margin-bottom: 1em; } -@media screen and (min-width: 800px) { - #fenetre { top: 10%; width: 70%; margin-left: -37%; max-height: 80%; } -} -@media screen and (max-width: 800px) { - .general { top: -2.2em; } - #fenetre { top: 4%; width: 92%; margin-left: -48%; max-height: 92%; } -} -#fenetre a[class^="icon-"] { margin-top: 1.5em; } -#fenetre hr { margin: 1.5em 0; } -#epingle { margin-top: 1.5em; } -#epingle h3 { padding-left: 0; } [id^="aide-"],[id^="form-"] { display: none; } /* Édition : spécial */ #fenetre [name="titre"] { margin: 2em 0 1em; } /* pour popup titres */ #fenetre [name="titre"]+* { display: inline; } form.titrecdt { padding: 0.2em 0 0.5em; margin-top: 0.2em; } /* pour édition des propriétés des éléments des cahiers de texte */ -.suppression { text-align: center; } -#fenetre.usermat h3 { margin-bottom: 0; } -#fenetre.usermat a.icon-ajoute, #fenetre a.icon-supprime { margin-top: 0.8em; } -#fenetre.usermat .ligne, #fenetre.usergrp .ligne { border-bottom: 1px dotted #BBB; } -#fenetre.usermat input, #fenetre.usergrp input { margin-top: 0.2em; } -#fenetre th+th, #fenetre td+td { text-align: center; width: 2em; padding: 0.15em; } /* Formulaire pour choisir les destinataires de mail */ -#fenetre th a { float: none; } /* Formulaire pour choisir les destinataires de mail */ -#fenetre th { border: none !important; } -#fenetre td { border-top: none !important; border-left: none !important; border-right: none !important; border-bottom: 1px dotted #BBB !important; } -#planning { text-align: center; } -.labelchecked { color: #999; } -#planning tr:hover, #utilisateurs tr:hover, #notes tr:hover, .usergrp .ligne:hover, .usermat .ligne:hover { background-color: #EFF; } - +.confirmation { text-align: center; } +#fenetre.usergrp .ligne { border-bottom: 1px dotted #BBB; } +#fenetre.usergrp input { margin-top: 0.2em; } +.protection { font-size: 0.8em; color: #999; } /* texte indiquant la protection des icônes */ + /* Édition : formulaires */ input, select, textarea { box-sizing: border-box; -webkit-box-sizing: border-box; border: 1px solid; border-radius: 2px; padding: 0 0.3em; } #fichier { border: none; font-size: 0.8em; height: 1.9em; } -p.ligne { padding: 0; clear: right; } -.ligne label { font-weight: 700; } -.ligne input, .ligne select, .ligne code { width: 65%; float: right; margin-top: -0.1em; margin-left: 0.2em; line-height: 1em; height: 1.5em; box-sizing: border-box; } -.ligne input[type="checkbox"], .ligne input[type="radio"] { width: 1em; margin-top: 0.2em; } -input.ligne { width: 100%; margin-bottom: 0.5em; line-height: 1em; height: 1.5em; display: block; } +p.ligne label { font-weight: 700; } +p.ligne input, p.ligne select, p.ligne code { width: 65%; float: right; margin-left: 0.2em; font-size: 0.8em; height: 1.6em; } +p.ligne input[type="checkbox"], p.ligne input[type="radio"] { width: 1em; } +input.ligne { width: 96%; margin: 0.5em 2%; height: 1.6em; font-size: 0.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: 0.3em; margin-bottom: 0 !important; } -.usermat { margin-top: 0.5em; padding: 0; clear: right; } -.usermat a { padding: 0 !important; } +/* Tableaux */ table { width: 100%; margin: 1em 0; border-collapse: collapse; border: medium solid #999; } table td { padding: 0.15em 0.5%; } table th { padding: 0.15em 3%; } -table td, table th { border: thin solid #AAA !important; } -table td .icon-edite { float: left !important; margin: 0 0.2em 0 0.1em; } +table td, table th { border: thin solid #AAA; } +.centre, #planning, #notes { text-align: center; } +.centre th { padding: 0.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: none; 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: 0.1em; } /* Édition : champs éditables */ -div.placeholder:before { content: attr(data-placeholder); color: #AAA; margin-left: 4px; z-index: 12; } -span.placeholder { color: #AAA; position: absolute; margin: 0.25em 2.5% 0 5px; z-index: 12; font-size: 0.8em; } -p.ligne span.placeholder { left: 35%; margin-top: 0.1em; margin-left: 1em; } -#fenetre span.placeholder, #fenetre div.placeholder:before { z-index: 15; } -.editable, .titrecdt.edition, form.titrecdt, .editabledest { border: 1px dotted #BBB; position: relative; } -.editable a[class^="icon-"], p.titrecdt a[class^="icon-"], .editabledest a[class^="icon-"] { float: none; } -.avecform { padding: 0; border: none !important; } +.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: 0.3em; } +.avecform { border: none !important; } h3.editable a[class^="icon-"], h3 span.editable a[class^="icon-"] { font-weight: 500; font-size: 0.67em; padding-top: 0.1em;} h3.avecform span { font-weight: 500; font-size: 0.6em; margin-top: 0.5em; width: 80%; overflow: hidden; white-space:nowrap; } h3.avecform input { width: 50%; } -textarea { width: 100%; margin: 0 0 0.2em; } +textarea, [contenteditable=true].ligne { width: 96%; margin: 0.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: none; 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: 0.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; } -/* Dans le menu et dans les informations récentes*/ -nav, #recent { background-color: #99B3E5; } -nav a[class^="icon-"] { float: none !important; display: inline !important; margin: 0.5em 3% 1em; color: #001030; } -nav a { display: block; margin-bottom: 0.2em; padding: 0; text-decoration: none; color: #002877; } -nav a:hover { color: #CDF; } -nav h3 { font-size: 1.2em; margin: 0.5em 3% 0.1em; padding-top: 0.3em; color: #001030; border-top: 1px solid #001030; } -nav hr { margin: 0.5em 3% 0.5em; color: #001030; border-top: 1px solid #001030; border-bottom: none; } -nav a.menurep { padding-left: 3%; font-size: 0.9em; } -#actuel { font-style: italic; } -nav h3 span { font-weight: 500; font-size: 0.83em; margin-right: 0.2em; color: #001030 !important; } -#recent a { display: block; margin-bottom: 0.4em; padding: 0; 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% 0.5em; color: #001030; } - -/* Tableau de notes */ -th.semaines { vertical-align: bottom; padding: 1.6em 0; text-align: center; } -td.semaines { padding-bottom: 1em !important; vertical-align: bottom; text-align: center; padding: 0.2em 5px;} -td.semaines span { display: block; font-weight: 700; margin: 0; padding: 0; width: 1.2em; - transform: rotate(-90deg); -webkit-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -ms-transform: rotate(-90deg); -o-transform: rotate(-90deg); - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); white-space: nowrap; zoom: 1; } +/* Mails */ +.icon-mailenvoi { font-size: 2em; } + +/* Tableau de notes de colles personnel */ +#notes th, #notes td { padding-left: 0; padding-right: 0; } +#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; } + +/* Tableau de notes global */ td.pasnote { font-style: italic; text-align: center; } .collsel { font-weight: 700; } .collnosel, .dejanote { color: #AAA; } #recherchenote { padding: 0px 1em; } -#notes td+td { text-align: right;} +#tableaunotes td+td { text-align: right;} +/* th.semaines réglés comme th.matieres et th.colleurs */ + +/* Tableau d'utilisateurs : mail, groupes, utilisateurs, utilisateurs-matieres */ +.sel { background-color: #EFF; } +#utilisateurs tr, #selmult tr { border-top: none; border-left: none; border-right: none; 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: none; } +#fenetre #utilisateurs th+th, #fenetre #utilisateurs td+td { text-align: center; width: 5em; padding: 0.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: 0.15em 0.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); +} /* Pour l'impression */ @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, .editabledest { border: none; } - h1 { font-size: 1.7em; text-align: center; margin: 0; padding: 0 0 1em; } - h2 { font-size: 1.5em; margin: 0.7em 0; padding: 0; } - h3 { font-size: 1.35em; margin: 0.6em 0; padding: 0 1% 0; } - h4 { font-size: 1.2em; margin: 0.4em 0 0.2em; padding: 0 2.5% 0; } - h5 { font-size: 1.1em; margin: 0.2em 0 0; padding: 0 4% 0; } - h6 { font-size: 1em; margin: 0.2em 0 0; padding: 0 5.5% 0; } + .editable, .titrecdt.edition, form.titrecdt { border: none; } + h1 { font-size: 1.7em; } + h2 { font-size: 1.5em; margin: 0.7em 0; } + 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; } } @@ -271,6 +286,10 @@ .evenements thead { border-bottom: 1px solid #999; } .evenements th { padding: 0.15em 0.5%; text-align: right; } .evenements td { padding: 2px 3px 1px; border: none !important; } -.evnmt { padding: 1px 3px; border-radius: 5px; white-space: nowrap; overflow: hidden; font-size: 0.8em; cursor: pointer; } +.modifevnmt { padding: 1px 3px; border-radius: 5px; white-space: nowrap; overflow: hidden; font-size: 0.8em; cursor: pointer; } .evnmt_suivi { border-top-right-radius: 0px; border-bottom-right-radius: 0px; margin-right: -2px; } .evnmt_suite { border-top-left-radius: 0px; border-bottom-left-radius: 0px; margin-left: -3px; } + +/* Chargement pour les envoi ajax */ +#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-prepa6.2.0/css/style.min.css cahier-de-prepa8.0.1/css/style.min.css --- cahier-de-prepa6.2.0/css/style.min.css 2016-09-09 11:11:06.778955925 +0200 +++ cahier-de-prepa8.0.1/css/style.min.css 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -html,body{height:100%}body{font-size:100%;font-family:Arial,Helvetica,sans-serif;position:relative;width:100%;margin:0 auto;max-width:1500px;background-color:#f6f6f6}h1{font-size:2.2em;text-align:center;margin:0;padding:1em 2em}h2{font-size:1.8em;margin:1em 0 .8em;padding:0}h3{font-size:1.5em;margin:1em 0 .5em;padding:0 1% 0}h4{font-size:1.3em;margin:.5em 0 .2em;padding:0 2.5% 0}h5{font-size:1.1em;margin:.2em 0 0;padding:0 4% 0}h6{font-size:1em;margin:.2em 0 0;padding:0 5.5% 0}ul{margin:.5em 0;padding:0 2% 0 6%}p{margin:0;padding:0 2%}p+p{margin-top:.5em}div,form{margin:0;padding:0}img{border:0;max-width:100%}div,p,section,article{text-align:justify}article>*:first-child{margin-top:0}article>*:last-child{margin-bottom:0}section>h2:first-child{margin-top:0}@media screen and (min-width:800px){#colonne{width:280px;float:left;margin:0 30px 3em}nav{margin:0;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:0 0 3em}header+section{width:96%;margin:0 auto;max-width:1500px;text-align:center}footer{font-size:.8em}}@media screen and (max-width:800px){h1{font-size:1.8em;padding:.3em 3em}h2{font-size:1.65em}#colonne,nav,#recent{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;-moz-box-shadow:.5em .5em .5em #777;-webkit-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 2%;padding:0 0 3em}header+section{text-align:center}footer{font-size:.6em}}article{margin:1em 0;padding:1em 2%;background-color:#cdd5e4}article:first-child,.general+article{margin-top:0!important}footer{text-align:center;width:90%;padding:1em 5%;clear:both;position:fixed;left:0;bottom:0;z-index:15;border-top:1px solid black;background-color:#DDD;opacity:.97;filter:alpha(opacity=97)}.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}p.titrecdt{text-align:right;text-decoration:underline}.titrecdt.edition{text-align:left;text-decoration:none;padding-right:1%}.topbarre{height:1.5em;background-color:#DDD;border:1px solid #BBB;width:auto;padding:0;margin-bottom:0;border-radius:4px}h1 span{font-size:70%;vertical-align:7%;margin-left:.4em}#recherchecdt a,#recherchecolle a,#rechercheagenda a{float:none!important;margin-left:.5em}#rechercheagenda a{vertical-align:sub}.topbarre select#semaines{margin-left:1.3em;width:8.5em;height:1.7em}.topbarre select#seances{margin-left:1.3em;width:11em;height:1.7em}.topbarre input{position:absolute;margin:0 .8em 0 1.5em;padding-left:1.8em;width:-moz-available;height:1.7em}.topbarre span{position:relative;left:1.9em;cursor:pointer;top:.1em}@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}}@media screen and (-webkit-min-device-pixel-ratio:0){.topbarre{height:1.4em;vertical-align:bottom}#recherchecolle input{width:40%}.topbarre span{top:.2em}#recherchecdt a,#recherchecolle a{vertical-align:middle}}#parentsdoc{margin-bottom:1.5em;padding:.3em 2% 0}#parentsdoc *{padding-top:0}#parentsdoc span{position:static;cursor:auto}.rep,.doc{padding:0;margin-left:2%;margin-right:2%;border-bottom:1px dotted #BBB}.repcontenu,.docdonnees{float:right;font-size:.8em;padding-top:.2em;padding-left:.5em}#parentsdoc a,.rep a,.doc a{text-decoration:none;color:black}#parentsdoc .nom,.rep .nom,.doc .nom{font-weight:700;margin-left:.5em}.general{position:absolute;top:-4.1em;right:1em}.general+.general{right:2.2em}.general+.general+.general{right:3.4em}.general+.general+.general+.general{right:4.6em}.edition{display:inline;text-align:left;padding-right:3em}h3.edition.editable{padding-right:1%}.edition ~ div,.edition+p,.edition ~ form{margin-top:.75em}article.cache{background-color:#AAA;opacity:.6;filter:alpha(opacity=60)}#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}#fenetre_fond{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000;opacity:.2;filter:alpha(opacity=20);z-index:12}#fenetre{position:fixed;left:50%;z-index:14;padding:0 2%;overflow:auto;background-color:#e7eefe;opacity:.97;filter:alpha(opacity=97);box-shadow:.5em .5em .5em #777;-webkit-box-shadow:.5em .5em .5em #777}#fenetre>*:last-child{margin-bottom:1em}@media screen and (min-width:800px){#fenetre{top:10%;width:70%;margin-left:-37%;max-height:80%}}@media screen and (max-width:800px){.general{top:-2.2em}#fenetre{top:4%;width:92%;margin-left:-48%;max-height:92%}}#fenetre a[class^="icon-"]{margin-top:1.5em}#fenetre hr{margin:1.5em 0}#epingle{margin-top:1.5em}#epingle h3{padding-left:0}[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}.suppression{text-align:center}#fenetre.usermat h3{margin-bottom:0}#fenetre.usermat a.icon-ajoute,#fenetre a.icon-supprime{margin-top:.8em}#fenetre.usermat .ligne,#fenetre.usergrp .ligne{border-bottom:1px dotted #BBB}#fenetre.usermat input,#fenetre.usergrp input{margin-top:.2em}#fenetre th+th,#fenetre td+td{text-align:center;width:2em;padding:.15em}#fenetre th a{float:none}#fenetre th{border:none!important}#fenetre td{border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:1px dotted #BBB!important}#planning{text-align:center}.labelchecked{color:#999}#planning tr:hover,#utilisateurs tr:hover,#notes tr:hover,.usergrp .ligne:hover,.usermat .ligne:hover{background-color:#EFF}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{padding:0;clear:right}.ligne label{font-weight:700}.ligne input,.ligne select,.ligne code{width:65%;float:right;margin-top:-0.1em;margin-left:.2em;line-height:1em;height:1.5em;box-sizing:border-box}.ligne input[type="checkbox"],.ligne input[type="radio"]{width:1em;margin-top:.2em}input.ligne{width:100%;margin-bottom:.5em;line-height:1em;height:1.5em;display:block}.supprmultiple{margin-top:.3em;margin-bottom:0!important}.usermat{margin-top:.5em;padding:0;clear:right}.usermat a{padding: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!important}table td .icon-edite{float:left!important;margin:0 .2em 0 .1em}div.placeholder:before{content:attr(data-placeholder);color:#AAA;margin-left:4px;z-index:12}span.placeholder{color:#AAA;position:absolute;margin:.25em 2.5% 0 5px;z-index:12;font-size:.8em}p.ligne span.placeholder{left:35%;margin-top:.1em;margin-left:1em}#fenetre span.placeholder,#fenetre div.placeholder:before{z-index:15}.editable,.titrecdt.edition,form.titrecdt,.editabledest{border:1px dotted #BBB;position:relative}.editable a[class^="icon-"],p.titrecdt a[class^="icon-"],.editabledest a[class^="icon-"]{float:none}.avecform{padding:0;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{width:100%;margin:0 0 .2em}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}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}nav,#recent{background-color:#99b3e5}nav a[class^="icon-"]{float:none!important;display:inline!important;margin:.5em 3% 1em;color:#001030}nav a{display:block;margin-bottom:.2em;padding:0;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;padding:0;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}th.semaines{vertical-align:bottom;padding:1.6em 0;text-align:center}td.semaines{padding-bottom:1em!important;vertical-align:bottom;text-align:center;padding:.2em 5px}td.semaines span{display:block;font-weight:700;margin:0;padding:0;width:1.2em;transform:rotate(-90deg);-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);white-space:nowrap;zoom:1}td.pasnote{font-style:italic;text-align:center}.collsel{font-weight:700}.collnosel,.dejanote{color:#AAA}#recherchenote{padding:0 1em}#notes td+td{text-align:right}@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,.editabledest{border:0}h1{font-size:1.7em;text-align:center;margin:0;padding:0 0 1em}h2{font-size:1.5em;margin:.7em 0;padding:0}h3{font-size:1.35em;margin:.6em 0;padding:0 1% 0}h4{font-size:1.2em;margin:.4em 0 .2em;padding:0 2.5% 0}h5{font-size:1.1em;margin:.2em 0 0;padding:0 4% 0}h6{font-size:1em;margin:.2em 0 0;padding:0 5.5% 0}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}.evnmt{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} \ No newline at end of file diff -urN cahier-de-prepa6.2.0/def_sql.php cahier-de-prepa8.0.1/def_sql.php --- cahier-de-prepa6.2.0/def_sql.php 2017-08-25 03:55:12.296954564 +0200 +++ cahier-de-prepa8.0.1/def_sql.php 2018-10-17 00:49:36.193538372 +0200 @@ -22,11 +22,16 @@ FLUSH PRIVILEGES; USE `$base`; -CREATE TABLE `prefs` ( - `nom` varchar(50) NOT NULL, - `val` tinyint(2) unsigned NOT NULL -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - +-- colles, cdt, docs : 0 si vide, 1 si présent +-- notes : 0 si vide, 1 si présent, 2 si désactivées +-- *_protection : valeur numérique de gestion de la protection. Si nul, autorisation à tous, sans +-- nécessité de connexion identifiée. Si entre 1 et 32, conversion de la valeur binaire PACEI +-- (profs,administration,colleurs,élèves,invités) à laquelle on a ajouté 1. Chaque 0 correspond +-- aux accès autorisés, chaque 1 correspond aux protections (accès interdit pour ce type de compte). +-- Exemple : 10->PACEI=9=01001->autorisé pour P,C,E et interdit pour A et I. +-- Le code 32 (interdit pour tous) correspond aux fonctions désactivées et aux documents/répertoires +-- non visibles : plus d'affichage dans le menu, plus d'accès. +-- dureecolle : durée pour un élève, en minutes CREATE TABLE `matieres` ( `id` tinyint(2) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, `ordre` tinyint(2) unsigned NOT NULL, @@ -38,12 +43,26 @@ `notes` tinyint(1) unsigned NOT NULL, `colles_protection` tinyint(1) unsigned NOT NULL, `cdt_protection` tinyint(1) unsigned NOT NULL, + `docs_protection` tinyint(1) unsigned NOT NULL, + `dureecolle`tinyint(2) unsigned NOT NULL, KEY `colles` (`colles`), KEY `cdt` (`cdt`), KEY `docs` (`docs`), KEY `notes` (`notes`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; +-- autorisation : type d'utilisateur (1:invité, 2:élève, 3:colleur, 4:administration, 5:professeur) +-- mdp : stockage du mot de passe sur 40 caractères +-- * si commence par un ? : invitation non répondue (mot de passe non défini) +-- * si commence par un * : compte demandé en attente de validation +-- * si commence par un ! : compte suspendu +-- mailexp : nom d'expédition des courriels +-- mailcopie : si par défaut envoi personnel d'une copie de ses courriels +-- mailenvoi : si on peut envoyer des courriels ; doit être cohérent avec mail +-- mailliste : si on apparait dans la liste des destinataires possibles +-- de courriels pour les élèves ; doit être cohérent avec mail +-- permconn : token d'identification légère, par cookie +-- lastconn : horodatage de la connexion actuelle CREATE TABLE `utilisateurs` ( `id` smallint(3) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, `login` varchar(50) NOT NULL UNIQUE, @@ -55,7 +74,11 @@ `matieres` varchar(30) NOT NULL, `timeout` smallint(4) UNSIGNED NOT NULL, `mailexp` varchar(50) NOT NULL, - `mailcopy` tinyint(1) UNSIGNED NOT NULL + `mailcopie` tinyint(1) UNSIGNED NOT NULL, + `mailenvoi` tinyint(1) UNSIGNED NOT NULL, + `mailliste` tinyint(1) UNSIGNED NOT NULL, + `permconn` varchar(10) NOT NULL, + `lastconn` datetime NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `pages` ( @@ -76,6 +99,7 @@ `cache` tinyint(1) unsigned NOT NULL, `titre` text NOT NULL, `texte` text NOT NULL, + `protection` tinyint(1) unsigned NOT NULL, KEY `ordre` (`ordre`,`page`), KEY `cache` (`cache`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; @@ -112,6 +136,7 @@ `texte` text NOT NULL, `demigroupe` tinyint(1) unsigned NOT NULL, `cache` tinyint(1) unsigned NOT NULL, + `protection` tinyint(1) unsigned NOT NULL, KEY `matiere` (`matiere`), KEY `semaine` (`semaine`), KEY `type` (`type`), @@ -126,7 +151,6 @@ `cle` varchar(20) NOT NULL, `deb_fin_pour` tinyint(1) unsigned NOT NULL, `nb` tinyint(2) unsigned NOT NULL, - `nb_v` tinyint(2) unsigned NOT NULL, KEY `matiere` (`matiere`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; @@ -140,12 +164,14 @@ `h_fin` time NOT NULL, `type` tinyint(3) unsigned NOT NULL, `demigroupe` tinyint(1) unsigned NOT NULL, + `protection` tinyint(1) unsigned NOT NULL, + `template` text NOT NULL, KEY `matiere` (`matiere`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `reps` ( - `id` tinyint(3) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, - `parent` tinyint(3) unsigned NOT NULL, + `id` smallint(3) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, + `parent` smallint(3) unsigned NOT NULL, `parents` varchar(50) NOT NULL, `matiere` tinyint(2) unsigned NOT NULL, `nom` varchar(100) NOT NULL, @@ -161,7 +187,7 @@ CREATE TABLE `docs` ( `id` smallint(3) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, - `parent` tinyint(3) unsigned NOT NULL, + `parent` smallint(3) unsigned NOT NULL, `parents` varchar(50) NOT NULL, `matiere` tinyint(2) unsigned NOT NULL, `nom` varchar(100) NOT NULL, @@ -190,18 +216,37 @@ CREATE TABLE notes ( `id` smallint(5) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, `semaine` tinyint(2) unsigned NOT NULL, - `eleve` tinyint(2) unsigned NOT NULL, - `colleur` tinyint(2) unsigned NOT NULL, + `heure` smallint(3) unsigned NOT NULL, + `eleve` smallint(3) unsigned NOT NULL, + `colleur` smallint(3) unsigned NOT NULL, + `matiere` tinyint(2) unsigned NOT NULL, + `note` varchar(4) NOT NULL, + KEY `semaine` (`semaine`), + KEY `heure` (`heure`), + KEY `eleve` (`eleve`), + KEY `colleur` (`colleur`), + KEY `matiere` (`matiere`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +CREATE TABLE heurescolles ( + `id` smallint(5) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + `colleur` smallint(3) unsigned NOT NULL, `matiere` tinyint(2) unsigned NOT NULL, - `note` varchar(4) NOT NULL + `jour` date NOT NULL, + `heure` time NOT NULL, + `duree` smallint(3) unsigned NOT NULL, + `releve` date NOT NULL, + KEY `colleur` (`colleur`), + KEY `matiere` (`matiere`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE groupes ( `id` tinyint(2) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, - `nom` varchar(10) NOT NULL, - `nom_nat` varchar(30) NOT NULL, - `mailnotes` tinyint(1) UNSIGNED NOT NULL, - `eleves` varchar(250) NOT NULL + `nom` varchar(50) NOT NULL, + `nom_nat` varchar(50) NOT NULL, + `mails` tinyint(1) UNSIGNED NOT NULL, + `notes` tinyint(1) UNSIGNED NOT NULL, + `utilisateurs` varchar(250) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `agenda` ( @@ -223,24 +268,30 @@ `couleur` varchar(6) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; +CREATE TABLE `prefs` ( + `nom` varchar(50) NOT NULL, + `val` tinyint(2) unsigned NOT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + INSERT INTO prefs (nom,val) VALUES ('creation_compte',1), ('nb_agenda_index',10), ('protection_globale',0), - ('protection_agenda',0); + ('protection_agenda',0), + ('envoi_mail_defaut',0); -INSERT INTO utilisateurs (id,login,prenom,nom,mail,mdp,autorisation,matieres,timeout,mailexp,mailcopy) - VALUES (1, '$login', '$prenom', '$nom', '$mail', '*', 4, '0,1', 900, '$prenom $nom', 1); +INSERT INTO utilisateurs (id,login,prenom,nom,mail,mdp,autorisation,matieres,timeout,mailexp,mailcopie,mailenvoi,mailliste) + VALUES (1, '$login', '$prenom', '$nom', '$mail', '?', 5, '0,1', 900, '$prenom $nom', 1, 1, 1); -INSERT INTO matieres (id,ordre,cle,nom,colles,cdt,docs,notes,colles_protection,cdt_protection) - VALUES (1, 1, '$cle_matiere', '$nom_matiere', 0, 0, 0, 0, 0, 0); +INSERT INTO matieres (id,ordre,cle,nom) + VALUES (1, 1, '$cle_matiere', '$nom_matiere'); -INSERT INTO reps (id,parent,parents,matiere,nom,nbrep,nbrep_v,nbdoc,nbdoc_v,protection,menu) - VALUES (1, 0, '0', 0, 'Général', 0, 0, 0, 0, 0, 0), - (2, 0, '0', 1, '$nom_matiere', 0, 0, 0, 0, 0, 0); +INSERT INTO reps (id,parents,matiere,nom) + VALUES (1, '0', 0, 'Général'), + (2, '0', 1, '$nom_matiere'); -INSERT INTO pages (ordre,cle,nom,titre,bandeau,protection) - VALUES (1, 'accueil', 'Accueil', '$titre', 'Dernières informations importantes', 0); +INSERT INTO pages (ordre,cle,nom,titre,bandeau) + VALUES (1, 'accueil', 'Accueil', '$titre', 'Dernières informations importantes'); INSERT INTO `cdt-types` (matiere,ordre,cle,titre,deb_fin_pour) VALUES (1, 1, 'cours', 'Cours', 1), @@ -262,38 +313,38 @@ (7, 8, 'Jour férié', 'fer', 'CC3333'), (8, 9, 'Vacances', 'vac', '66CC33'); -INSERT INTO semaines (debut) VALUES ('2017-09-04'),('2017-09-11'),('2017-09-18'),('2017-09-25'), - ('2017-10-02'),('2017-10-09'),('2017-10-16'),('2017-10-23'),('2017-10-30'),('2017-11-06'),('2017-11-13'),('2017-11-20'),('2017-11-27'), - ('2017-12-04'),('2017-12-11'),('2017-12-18'),('2017-12-25'),('2018-01-01'),('2018-01-08'),('2018-01-15'),('2018-01-22'), - ('2018-01-29'),('2018-02-05'),('2018-02-12'),('2018-02-19'),('2018-02-26'),('2018-03-05'),('2018-03-12'),('2018-03-19'),('2018-03-26'), - ('2018-04-03'),('2018-04-09'),('2018-04-16'),('2018-04-23'),('2018-04-30'),('2018-05-07'),('2018-05-14'),('2018-05-22'),('2018-05-28'), - ('2018-06-04'),('2018-06-11'),('2018-06-18'),('2018-06-25'),('2018-07-02'); +INSERT INTO semaines (debut) VALUES ('2018-09-03'),('2018-09-10'),('2018-09-17'),('2018-09-24'), + ('2018-10-01'),('2018-10-08'),('2018-10-15'),('2018-10-22'),('2018-10-29'),('2018-11-05'),('2018-11-12'),('2018-11-19'),('2018-11-26'), + ('2018-12-03'),('2018-12-10'),('2018-12-17'),('2018-12-24'),('2018-12-31'),('2019-01-07'),('2019-01-14'),('2019-01-21'), + ('2019-01-28'),('2019-02-04'),('2019-02-11'),('2019-02-18'),('2019-02-25'),('2019-03-04'),('2019-03-11'),('2019-03-18'),('2019-03-25'), + ('2019-04-02'),('2019-04-08'),('2019-04-15'),('2019-04-22'),('2019-04-29'),('2019-05-06'),('2019-05-13'),('2019-05-21'),('2019-05-27'), + ('2019-06-03'),('2019-06-10'),('2019-06-17'),('2019-06-24'),('2019-07-01'); UPDATE semaines SET colle = 1; INSERT INTO agenda (id,matiere,debut,fin,type,texte) VALUES - (1, 0, '2017-09-04 00:00:00', '2017-09-04 00:00:00', 1, 'Assomption
'), - (3, 0, '2017-11-01 00:00:00', '2017-11-01 00:00:00', 7, 'Toussaint
'), - (4, 0, '2017-11-11 00:00:00', '2017-11-11 00:00:00', 7, 'Armistice 1918
'), - (5, 0, '2017-12-25 00:00:00', '2017-12-25 00:00:00', 7, 'Noël
'), - (6, 0, '2018-01-01 00:00:00', '2018-01-01 00:00:00', 7, 'Jour de l''an
'), - (7, 0, '2018-04-02 00:00:00', '2018-04-02 00:00:00', 7, 'Pâques
'), - (8, 0, '2018-05-01 00:00:00', '2018-05-01 00:00:00', 7, 'Fête du travail
'), - (9, 0, '2018-05-08 00:00:00', '2018-05-08 00:00:00', 7, 'Armistice 1945
'), - (10, 0, '2018-05-10 00:00:00', '2018-05-10 00:00:00', 7, 'Ascension
'), - (11, 0, '2018-05-21 00:00:00', '2018-05-21 00:00:00', 7, 'Pentecôte
'), - (12, 0, '2018-07-14 00:00:00', '2018-07-14 00:00:00', 7, 'Fête Nationale
'), - (13, 0, '2017-07-06 00:00:00', '2017-09-03 00:00:00', 8, 'Vacances d''été
'), - (14, 0, '2017-10-22 00:00:00', '2017-11-05 00:00:00', 8, 'Vacances de la Toussaint
'), - (15, 0, '2017-12-24 00:00:00', '2018-01-07 00:00:00', 8, 'Vacances de Noël
'), - (16, 0, '2018-02-11 00:00:00', '2018-02-25 00:00:00', 8, 'Vacances d''hiver, zone A
'), - (17, 0, '2018-02-25 00:00:00', '2018-03-11 00:00:00', 8, 'Vacances d''hiver, zone B
'), - (18, 0, '2018-02-18 00:00:00', '2018-03-04 00:00:00', 8, 'Vacances d''hiver, zone C
'), - (19, 0, '2018-04-08 00:00:00', '2018-04-22 00:00:00', 8, 'Vacances de printemps, zone A
'), - (20, 0, '2018-04-22 00:00:00', '2018-05-06 00:00:00', 8, 'Vacances de printemps, zone B
'), - (21, 0, '2018-04-15 00:00:00', '2018-04-29 00:00:00', 8, 'Vacances de printemps, zone C
'), - (22, 0, '2018-07-09 00:00:00', '2018-08-31 00:00:00', 8, 'Vacances d''été
'); + (1, 0, '2018-09-03 00:00:00', '2018-09-03 00:00:00', 3, 'Assomption
'), + (3, 0, '2018-11-01 00:00:00', '2018-11-01 00:00:00', 7, 'Toussaint
'), + (4, 0, '2018-11-11 00:00:00', '2018-11-11 00:00:00', 7, 'Armistice 1918
'), + (5, 0, '2018-12-25 00:00:00', '2018-12-25 00:00:00', 7, 'Noël
'), + (6, 0, '2019-01-01 00:00:00', '2019-01-01 00:00:00', 7, 'Jour de l''an
'), + (7, 0, '2019-04-22 00:00:00', '2019-04-22 00:00:00', 7, 'Lundi de Pâques
'), + (8, 0, '2019-05-01 00:00:00', '2019-05-01 00:00:00', 7, 'Fête du travail
'), + (9, 0, '2019-05-08 00:00:00', '2019-05-08 00:00:00', 7, 'Armistice 1945
'), + (10, 0, '2019-05-30 00:00:00', '2019-05-30 00:00:00', 7, 'Jeudi de l''Ascension
'), + (11, 0, '2019-06-10 00:00:00', '2019-06-10 00:00:00', 7, 'Lundi de Pentecôte
'), + (12, 0, '2019-07-14 00:00:00', '2019-07-14 00:00:00', 7, 'Fête Nationale
'), + (13, 0, '2018-07-08 00:00:00', '2018-09-02 00:00:00', 8, 'Vacances d''été
'), + (14, 0, '2018-10-21 00:00:00', '2018-11-04 00:00:00', 8, 'Vacances de la Toussaint
'), + (15, 0, '2018-12-23 00:00:00', '2019-01-06 00:00:00', 8, 'Vacances de Noël
'), + (16, 0, '2019-02-17 00:00:00', '2019-03-03 00:00:00', 8, 'Vacances d''hiver, zone A
'), + (17, 0, '2019-02-10 00:00:00', '2019-02-24 00:00:00', 8, 'Vacances d''hiver, zone B
'), + (18, 0, '2019-02-24 00:00:00', '2019-03-10 00:00:00', 8, 'Vacances d''hiver, zone C
'), + (19, 0, '2019-04-14 00:00:00', '2019-04-28 00:00:00', 8, 'Vacances de printemps, zone A
'), + (20, 0, '2019-04-07 00:00:00', '2019-04-22 00:00:00', 8, 'Vacances de printemps, zone B
'), + (21, 0, '2019-04-21 00:00:00', '2019-05-05 00:00:00', 8, 'Vacances de printemps, zone C
'), + (22, 0, '2019-07-07 00:00:00', '2019-09-01 00:00:00', 8, 'Vacances d''été
'); FIN; ?> diff -urN cahier-de-prepa6.2.0/docs.php cahier-de-prepa8.0.1/docs.php --- cahier-de-prepa6.2.0/docs.php 2015-10-27 12:48:33.019597305 +0100 +++ cahier-de-prepa8.0.1/docs.php 2018-10-15 17:50:49.820945409 +0200 @@ -11,10 +11,11 @@ ////////////////////////////////////////////////////// // Ordre d'affichage des documents (à supprimer avant d'analyser la requête) -$ordre = ''; +$ordre = 'ORDER BY nom_nat ASC'; +$ordrerep = 'ORDER BY nom ASC'; if ( isset($_REQUEST['ordre']) ) { switch ($_REQUEST['ordre']) { - case 'alpha-inv': $ordre = 'ORDER BY nom_nat DESC'; break; + case 'alpha-inv': $ordre = 'ORDER BY nom_nat DESC'; $ordrerep = 'ORDER BY nom DESC'; break; case 'chrono': $ordre = 'ORDER BY docs.upload ASC'; break; case 'chrono-inv': $ordre = 'ORDER BY docs.upload DESC'; break; } @@ -24,22 +25,21 @@ // Récupération des données du répertoire demandé $mysqli = connectsql(); // Requête non nulle : soit un numéro de répertoire, soit une clé de matière -// Les répertoires "non visibles" (protection 5), sauf pour les professeurs -// associés à la matière, ne sont pas accessibles. -$restriction = ( $autorisation == 4 ) ? "AND ( r.protection < 5 OR FIND_IN_SET(r.matiere,'${_SESSION['matieres']}') )" : 'AND r.protection < 5'; +// Les répertoires "non visibles" (protection 32), sauf pour les professeurs +// associés à la matière, ne sont pas accessibles (il ne faut pas que l'on +// obtienne "accès non autorisé" mais "mauvais paramètre"). +$requete = 'SELECT r.id, r.nom, r.parent, r.parents, r.menu, r.protection, IFNULL(m.id,0) AS mid, m.cle, m.nom AS mat + FROM reps AS r LEFT JOIN matieres AS m ON r.matiere = m.id'; +$restriction = ( $autorisation == 5 ) ? "AND ( r.protection != 32 OR FIND_IN_SET(r.matiere,'${_SESSION['matieres']}') )" : 'AND r.protection != 32'; if ( isset($_REQUEST['rep']) && ctype_digit($rid = $_REQUEST['rep']) ) { - $resultat = $mysqli->query("SELECT r.nom, r.parent, r.parents, r.nbrep_v+r.nbdoc_v AS nbv, r.nbrep+r.nbdoc AS nb, r.menu, r.protection, IFNULL(m.id,0) AS mid, m.cle, m.nom AS mat - FROM reps AS r LEFT JOIN matieres AS m ON r.matiere = m.id - WHERE r.id = $rid $restriction"); + $resultat = $mysqli->query("$requete WHERE r.id = $rid $restriction"); if ( $resultat->num_rows ) { $rep = $resultat->fetch_assoc(); $resultat->free(); } } elseif ( !empty($_REQUEST) ) { - $resultat = $mysqli->query("SELECT r.id, r.nom, r.parent, r.parents, r.nbrep_v+r.nbdoc_v AS nbv, r.nbrep+r.nbdoc AS nb, r.menu, r.protection, IFNULL(m.id,0) AS mid, m.cle, m.nom AS mat - FROM reps AS r LEFT JOIN matieres AS m ON r.matiere = m.id - WHERE r.parent = 0 $restriction"); + $resultat = $mysqli->query("$requete WHERE r.parent = 0 $restriction"); if ( $resultat->num_rows ) { while ( $r = $resultat->fetch_assoc() ) if ( isset($_REQUEST[$r['cle']]) ) { @@ -52,13 +52,10 @@ } // Pas d'argument : répertoire "Général" (peut être non visible) else { - $resultat = $mysqli->query("SELECT r.id, r.nom, r.parent, r.parents, r.nbrep_v+r.nbdoc_v AS nbv, r.nbrep+r.nbdoc AS nb, r.menu, r.protection, IFNULL(m.id,0) AS mid, m.cle, m.nom AS mat - FROM reps AS r LEFT JOIN matieres AS m ON r.matiere = m.id - WHERE r.id = 1 $restriction"); + $resultat = $mysqli->query("$requete WHERE r.id = 1 $restriction"); if ( $resultat->num_rows ) { - $r = $resultat->fetch_assoc(); - $rep = $r; - $rid = $r['id']; + $rep = $resultat->fetch_assoc(); + $rid = $rep['id']; $resultat->free(); } } @@ -72,30 +69,17 @@ ///////////////////////////// // Vérification de l'accès // ///////////////////////////// -// Interdiction de voir les répertoires de protection élevée ou non associés à -// ses propres matières si on est invité/élève/colleur -// Toutes les matières sont visibles pour les professeurs (édition: cf plus bas) -if ( $rep['protection'] && ( $autorisation > 0 ) && ( $autorisation < 4 ) - && ( ( $rep['protection'] > $autorisation ) || ( !in_array($rep['mid'],explode(',',$_SESSION['matieres'])) ) ) ) { - debut($mysqli,($rep['mat']) ? "Documents à télécharger - ${rep['mat']}" : 'Documents à télécharger','Vous n\'avez pas accès à cette page.',$autorisation,($rep['mat']) ? "docs?${rep['cle']}" : 'docs'); - $mysqli->close(); - fin(); -} -// Connexion nécessaire si protection -if ( $rep['protection'] && !$autorisation ) { - $titre = ($rep['mat']) ? "Documents à télécharger - ${rep['mat']}" : 'Documents à télécharger'; - $actuel = ($rep['mat']) ? "docs?${rep['cle']}" : 'docs'; - include('login.php'); -} -// Mode édition pour les professeurs sur leurs propres matières uniquement -$edition = ( ( $autorisation == 4 ) && in_array($rep['mid'],explode(',',$_SESSION['matieres'])) ); +$edition = acces($rep['protection'],$rep['mid'],($rep['mat']) ? "Documents à télécharger - ${rep['mat']}" : 'Documents à télécharger',($rep['mat']) ? "docs?${rep['cle']}" : 'docs',$mysqli); //////////// /// HTML /// //////////// -debut($mysqli,($rep['mat']) ? "Documents à télécharger - ${rep['mat']}" : 'Documents à télécharger',$message,$autorisation,($rep['mat']) ? "docs?${rep['cle']}" : 'docs'); +if ( $edition && $rep['protection'] ) + $icone = ( $rep['protection'] == 32 ) ? '' : ''; +else $icone = ''; +debut($mysqli,($rep['mat']) ? "Documents à télécharger - ${rep['mat']}$icone" : 'Documents à télécharger',$message,$autorisation,($rep['mat']) ? "docs?${rep['cle']}" : 'docs'); -// Répertoires parents +// Répertoires parents (pas de vérification de protection a priori) $resultat = $mysqli->query("SELECT GROUP_CONCAT(CONCAT('',nom,'') SEPARATOR ' / ') FROM reps WHERE FIND_IN_SET(id,'${rep['parents']},$rid')"); $r = $resultat->fetch_row(); @@ -130,55 +114,74 @@ FIN; // Affichage du répertoire et de son contenu - if ( $rep['nbv'] ) { - - // Sous-répertoires - $resultat = $mysqli->query("SELECT id, nom, nbrep_v AS nbrep, nbdoc_v AS nbdoc, IF(protection>$autorisation,1,0) AS protection FROM reps WHERE parent = $rid AND protection < 5"); - if ( $resultat->num_rows ) { - while ( $r = $resultat->fetch_assoc() ) - // Affichage du contenu : pas de lien si connecté et protection trop élevée - if ( $autorisation && $r['protection'] ) - echo "\n${r['nom']}
\n"; - // Lien sinon, avec cadenas si non connecté mais protection - else { - $protection = ( $r['protection'] ) ? '' : ''; - $contenu = ( $r['nbrep']+$r['nbdoc'] ) ? str_replace(array('0 répertoire,',', 0 document'),'',"(${r['nbrep']} répertoire".( ( $r['nbrep'] > 1 ) ? 's' : '' ).", ${r['nbdoc']} document".( ( $r['nbdoc'] > 1 ) ? 's' : '' ).' )') - : '(vide)'; - echo "\n$contenu $protection${r['nom']}
\n"; - } - $resultat->free(); - } + // Sous-répertoires + $resultat = $mysqli->query('SELECT id, nom, IF('.requete_protection($autorisation).",0,1) AS protection + FROM reps WHERE parent = $rid AND protection != 32 $ordrerep"); + if ( $nr = $resultat->num_rows ) { + while ( $r = $resultat->fetch_assoc() ) + // Si protégé, pas de détails et lien que si utilisateur non connecté + if ( $r['protection'] == 1 ) { + if ( $autorisation ) + echo "\n${r['nom']}
\n"; + else + echo "\n \n"; + } + else { + $resultatbis = $mysqli->query("SELECT id FROM reps WHERE parent = ${r['id']} AND protection != 32"); + $contenu = ( ($n = $resultatbis->num_rows) > 0 ) ? "$n répertoire".( ($n>1) ? 's' : '' ) : ''; + $resultatbis->free(); + $resultatbis = $mysqli->query("SELECT id FROM docs WHERE parent = ${r['id']} AND protection != 32"); + $contenu .= ( ($n = $resultatbis->num_rows) > 0 ) ? ", $n document".( ($n>1) ? 's' : '' ) : ''; + $resultatbis->free(); + if ( strlen($contenu) == 0 ) + $contenu = 'vide'; + elseif ( $contenu[0] == ',' ) + $contenu = substr($contenu,2); + echo "\n($contenu) ${r['nom']}
\n"; + } + $resultat->free(); + } - // Documents - $resultat = $mysqli->query("SELECT id, nom, taille, DATE_FORMAT(upload,'%d/%m/%Y') AS upload, LOWER(ext) AS ext, IF(protection>$autorisation,1,0) AS protection - FROM docs WHERE parent = $rid AND protection < 5 $ordre"); - if ( $resultat->num_rows ) { - while ( $r = $resultat->fetch_assoc() ) { - $icone = isset($icones[$ext = substr($r['ext'],1)]) ? $icones[$ext] : ''; - if ( $autorisation && $r['protection'] ) - echo "\n($ext, ${r['upload']}, ${r['taille']}) ${r['nom']}
\n"; - else { - $protection = ( $r['protection'] ) ? '' : ''; - echo "\n($ext, ${r['upload']}, ${r['taille']}) $protection${r['nom']}
\n"; - } + // Documents + $resultat = $mysqli->query('SELECT id, nom, taille, DATE_FORMAT(upload,\'%d/%m/%Y\') AS upload, LOWER(ext) AS ext, IF('.requete_protection($autorisation).",0,1) AS protection + FROM docs WHERE parent = $rid AND protection != 32 $ordre"); + if ( $nd = $resultat->num_rows ) { + while ( $r = $resultat->fetch_assoc() ) { + $icone = isset($icones[$ext = substr($r['ext'],1)]) ? $icones[$ext] : ''; + // Si protégé, pas de détails et lien que si utilisateur non connecté + if ( $r['protection'] == 1 ) { + if ( $autorisation ) + echo "\n${r['nom']}
\n"; + else + echo "\n \n"; } - $resultat->free(); + else + echo "\n($ext, ${r['upload']}, ${r['taille']}) ${r['nom']}
\n"; } + $resultat->free(); } - else + // Répertoire vide + if ( $nr+$nd == 0 ) echo "\nCe répertoire est vide.
\n"; } + // Affichage professeur éditeur else { - $protection = ( $rep['protection'] ) ? "" : ''; + switch ( $rep['protection'] ) { + case 0: $protection = ''; break; + case 32: $protection = ''; break; + default: $protection = ''; + } echo <<< FIN - + FIN; - } - $resultat->free(); } + $resultat->free(); + } - // Documents - $resultat = $mysqli->query("SELECT id, nom, taille, DATE_FORMAT(upload,'%d/%m/%Y') AS upload, LOWER(ext) AS ext, protection - FROM docs WHERE parent = $rid $ordre"); - if ( $resultat->num_rows ) { - while ( $r = $resultat->fetch_assoc() ) { - $icone = isset($icones[$ext = substr($r['ext'],1)]) ? $icones[$ext] : ''; - $protection = ( $r['protection'] ) ? "" : ''; - echo <<Ce répertoire est vide.
\n"; // Select sur les répertoires (pour les déplacements) @@ -264,204 +281,180 @@ $taille = substr($taille,0,-1)*1024; $taille = ( $taille < 1048576 ) ? intval($taille/1024).' ko' : intval($taille/1048576).' Mo'; + // Options du select multiple d'accès + $select_protection = ' + + + + + + + + '; + // Protection des nouveaux répertoires = protection globale du répertoire + $p = $rep['protection']; + if ( ( $p == 0 ) || ( $p == 32 ) ) + $sel_protection = str_replace("\"$p\"","\"$p\" selected",$select_protection); + else { + $sel_protection = str_replace('"6"','"6" selected',$select_protection); + for ( $a=1; $a<6; $a++ ) + if ( ( ($p-1)>>($a-1) & 1 ) == 0 ) + $sel_protection = str_replace("\"$a\"","\"$a\" selected",$sel_protection); + } // Aide et formulaire d'ajout ?> - - - -Aide et explications
-Il est possible ici de modifier le contenu des répertoires et les propriétés des répertoires et des documents présents. Vous n'avez la possibilité de modifier que les documents « toutes matières » et les documents des matières qui vous sont associées. Pour modifier les matières qui vous sont associées, il faut aller sur la page de gestion des matières.
+Il est possible ici de modifier le contenu des répertoires et les propriétés des répertoires et des documents présents. Vous avez la possibilité de modifier les documents « toutes matières » ainsi que dans les matières qui vous sont associées. Le réglage de ces matières s'effectue à la gestion utilisateurs-matières.
Les noms des répertoires et documents contenus dans le répertoire affiché sur cette page sont modifiables directement, en cliquant sur le bouton situé dans la case encadrée de pointillés.
-Comme sur la partie visible par les visiteurs non connectés en tant que professeurs, les répertoires sont indiqués par l'icône (cliquer dessus affiche le répertoire correspondant), les documents par l'icône correspondant à leur type ( pour les pdf
, pour les textes doc
ou odt
...). Le contenu des répertoires et les principales propriétés des documents sont indiqués à droite.
Les répertoires sont indiqués par l'icône , cliquer dessus affiche le répertoire correspondant. Les documents sont indiqués par l'icône correspondant à leur type ( pour les pdf
, pour les textes doc
ou odt
...). Le contenu des répertoires et les principales propriétés des documents sont indiqués à droite.
La taille des fichiers envoyés est limitée à .
Actions possibles
Les différentes actions possibles sont :
- : ajouter un répertoire à l'intérieur du répertoire affiché sur cette page. Une aide sera disponible sur le formulaire qui s'affichera.
- : ajouter un document à l'intérieur du répertoire choisi. Une aide sera disponible sur le formulaire qui s'affichera. -
- : modifier les propriétés du répertoire ou du document choisi. Il est notamment possible de modifier individuellement l'accès à chaque répertoire/document (explications ci-dessous). Une aide sera disponible sur le formulaire qui s'affichera. +
- : modifier les propriétés du répertoire ou du document choisi. Il est notamment possible de modifier individuellement l'accès à chaque répertoire/document (explications ci-dessous) ou de vider un répertoire. Une aide sera disponible sur le formulaire qui s'affichera.
- : supprimer le répertoire ou document choisi (une confirmation sera demandée). Supprimer un répertoire supprime automatiquement tout son contenu (sous-répertoires et documents).
- : télécharger un document pour le voir.
Les liens vers les répertoires et les documents sont garantis : aucune modification (changement de nom, mise à jour de document, déplacement...) réalisée sur les répertoires ou les documents ne peut modifier ces liens. Si vous souhaitez mettre à jour un document, surtout ne le supprimez pas pour le recréer : cela changerait le lien, les liens existants ne seraient plus valables. Modifiez plutôt le document.
-Accès
-L'accès à chaque répertoire et chaque document peut être choisi parmi six possibilités. Le choix réalisé pour les répertoires/documents existants est directement visible sur cette page (uniquement lorsque vous êtes connecté en tant que professeur) avec un cadenas portant un numéro. Les choix possibles sont :
+Gestion de l'accès
+L'accès à chaque répertoire et chaque document peut être protégé. Trois choix sont possibles :
-
-
- Visible de tous (pas de marquage) : accessible de tout visiteur, sans identification. -
- Visible pour les connectés () : accessible de tout utilisateur mais uniquement après identification (utilisateurs de type invité, élève, colleur ou professeur). Pour les répertoires/documents associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Visible pour les élèves, colleurs, professeurs () : accessible uniquement par les utilisateurs de type élève, colleur ou professeur. Pour les répertoires/documents associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Visible pour les colleurs, professeurs () : accessible uniquement par les utilisateurs de type colleur ou professeur. Pour les répertoires/documents associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Visible pour les professeurs () : accessible uniquement par les utilisateurs de type professeur. Pour les répertoires/documents associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Non visible () : entièrement invisible pour les utilisateurs autres que les professeurs (éventuellement associés à la matière dont le répertoire peut dépendre). La différence avec le choix précédent est que le répertoire/document n'apparaît plus du tout sur le site pour ceux qui ne le voient pas. +
- Accès public : ressource accessible de tout visiteur, sans identification. +
- Utilisateurs identifiés : ressource accessible uniquement par les utilisateurs identifiés, en fonction de leur type de compte. Un cadenas est alors affiché à côté de l'icône de la ressource. Pour les répertoires/documents associés à une matière, seuls les utilisateurs associés à cette matière peuvent y accéder. Les associations entre utilisateurs et matières sont modifiables à la gestion utilisateurs-matières. +
- Répertoire/Document invisible : ressource entièrement invisible pour les utilisateurs autres que les professeurs (éventuellement associés à la matière dont la ressource peut dépendre). Un cadenas est alors affiché à côté de l'icône de la ressource.
Les répertoires/documents protégés (sauf Non visible) apparaissent même s'ils ne sont pas accessibles, marqués d'un petit cadenas. Le contenu des répertoires tient compte de cela : les répertoires/documents non visibles ne sont pas décomptés.
Liens dans le menu
Le lien dans le menu vers le répertoire racine de chaque matière est généré automatiquement. Il ne s'affiche que si ce répertoire est non vide :
-
-
- pour les utilisateurs non connectés, si des documents éventuellement protégés sont présents (les répertoires et documents protégés apparaissent avec un petit cadenas). -
- pour les utilisateurs connectés, si des documents sont présents et si le répertoire racine est accessible (accès pas trop élevé). +
- pour les visiteurs non identifiés, si des documents éventuellement protégés sont présents (les répertoires et documents protégés apparaissent avec un cadenas ). +
- pour les utilisateurs identifiés, si des documents sont présents et si le répertoire racine est accessible.
Il est possible de rajouter des liens dans le menu vers des sous-répertoires. C'est une des propriétés que vous pouvez modifier pour chaque répertoire en cliquant sur le bouton correspondant.
Aide et explications
-Ce formulaire permet de modifier les propriétés du répertoire choisi. Il sera validé par un clic sur , et abandonné (donc supprimé) par un clic sur .
+Ce formulaire permet de modifier les propriétés du répertoire concerné. Il sera validé par un clic sur , et abandonné (donc supprimé) par un clic sur .
Les répertoires racines des matières sont très peu modifiables : seul l'accès peut être modifié. Pour les autres répertoires, il est possible de les renommer, de les déplacer à l'intérieur d'un autre répertoire ou d'afficher un lien supplémentaire dans le menu.
Le nom du répertoire peut comporter des espaces, des accents... Vous pouvez donc l'écrire en français ! Ce nom est aussi modifiable directement en cliquant sur le bouton dans la case entourée de pointillés.
-Vous pouvez déplacer le répertoire dans un autre répertoire, qui peut éventuellement appartenir à une autre matière si elle vous est associée. La liste des répertoires où le déplacement est possible est dans le menu déroulant. L'ensemble du contenu du répertoire déplacé est bien sûr automatiquement déplacé.
-La case à cocher Affichage du répertoire dans le menu permet d'afficher un lien direct dans le menu vers la page correspondant au répertoire. Ce lien sera situé en-dessous du lien Documents à télécharger qui permet d'arriver sur cette page. Sa visibilité dépend du choix de l'accès explicité ci-dessous.
-L'accès à ce répertoire peut être choisi parmi six possibilités, visibles directement lorsque vous êtes connecté en tant que professeur :
+Vous pouvez déplacer le répertoire dans un autre répertoire, qui peut éventuellement appartenir à une autre matière si elle vous est associée. Le menu déroulant contient la liste des répertoires où le déplacement est possible. L'ensemble du contenu du répertoire déplacé est bien sûr automatiquement déplacé. L'accès n'est pas modifié.
+La case à cocher Affichage du répertoire dans le menu permet d'afficher un lien direct dans le menu vers la page correspondant au répertoire. Ce lien sera situé en-dessous du lien Documents à télécharger qui permet d'arriver sur cette page. Sa visibilité pour les utilisateurs dépend du choix de l'accès explicité ci-dessous.
+Boutons d'action
+Le bouton Propager le choix d'accès à chaque document/sous-répertoire permet de copier l'accès du répertoire à l'ensemble de son contenu. Attention : si vous venez de modifier la valeur dans la case accès, vous devez valider votre modification avant de propager le réglage.
+Le bouton Vider ce répertoire permet de supprimer l'ensemble du contenu du répertoire : sous-répertoires et documents. Une confirmation est demandée.
+Gestion de l'accès
+L'accès à ce répertoire peut être protégé. Trois choix sont possibles :
-
-
- Visible de tous (pas de marquage) : accessible de tout visiteur, sans identification. -
- Visible pour les connectés () : accessible de tout utilisateur mais uniquement après identification (utilisateurs de type invité, élève, colleur ou professeur). Pour les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Visible pour les élèves, colleurs, professeurs () : accessible uniquement par les utilisateurs de type élève, colleur ou professeur. Pour les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Visible pour les colleurs, professeurs () : accessible uniquement par les utilisateurs de type colleur ou professeur. Pour les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Visible pour les professeurs () : accessible uniquement par les utilisateurs de type professeur. Pour les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Non visible () : entièrement invisible pour les utilisateurs autres que les professeurs (éventuellement associés à la matière dont le répertoire peut dépendre). La différence avec le choix précédent est que le répertoire n'apparaît plus du tout sur le site pour ceux qui ne le voient pas. +
- Accès public : répertoire et son contenu accessibles de tout visiteur, sans identification. +
- Utilisateurs identifiés : répertoire et son contenu accessibles uniquement par les utilisateurs identifiés, en fonction de leur type de compte. Un cadenas est alors affiché à côté de l'icône du répertoire. Pour les répertoires associés à une matière, seuls les utilisateurs associés à cette matière peuvent y accéder. Les associations entre utilisateurs et matières sont modifiables à la gestion utilisateurs-matières. +
- Répertoire invisible : répertoire entièrement invisible pour les utilisateurs autres que les professeurs (éventuellement associés à la matière dont le répertoire peut dépendre). Un cadenas est alors affiché à côté de l'icône du répertoire.
Hormis le dernier choix, le répertoire apparaît pour tout visiteur (identifié ou non), éventuellement avec un petit cadenas gris indiquant qu'il est protégé. Avec le choix Non visible, le répertoire n'est plus du tout visible sans être connecté en tant que professeur.
-La case à cocher Propager le choix ci-dessus à chaque document/sous-répertoire permet de faire suivre le choix précédent à l'ensemble du contenu du répertoire. Si elle est décochée, aucune modification supplémentaire n'a lieu. Si elle est cochée, une action sera effectuée même si le choix d'accès n'a pas été modifié.
-Les comptes utilisateurs sont à définir ou modifier sur la page de gestion des utilisateurs. Les associations avec les matières sont modifiables sur la page de gestion des matières.
+À moins d'être invisible, le répertoire apparaît pour tout visiteur non identifié comme utilisateur identifié, éventuellement avec un cadenas indiquant qu'il est protégé. Un répertoire invisible n'est plus du tout visible sans être connecté en tant que professeur, éventuellement de la matière concernée.
+Les associations entre utilisateurs et matières sont modifiables à la gestion utilisateurs-matières.
Aide et explications
-Ce formulaire permet de créer un nouveau répertoire au sein du répertoire dont le contenu est affiché sur cette page. Il sera validé par un clic sur , et abandonné (donc supprimé) par un clic sur .
+Ce formulaire permet de créer un nouveau répertoire au sein du répertoire . Il sera validé par un clic sur , et abandonné (donc supprimé) par un clic sur .
Le nom du répertoire peut comporter des espaces, des accents... Vous pouvez donc l'écrire en français !
La case à cocher Affichage du répertoire dans le menu permet d'afficher un lien direct dans le menu vers la page correspondant au répertoire. Ce lien sera situé en-dessous du lien Documents à télécharger qui permet d'arriver sur cette page. Sa visibilité dépend du choix de l'accès explicité ci-dessous.
-L'accès à ce nouveau répertoire peut être choisi parmi six possibilités :
+Gestion de l'accès
+L'accès à ce répertoire peut être protégé. Trois choix sont possibles :
-
-
- Visible de tous : accessible de tout visiteur, sans identification. -
- Visible pour les connectés : accessible de tout utilisateur mais uniquement après identification (utilisateurs de type invité, élève, colleur ou professeur). Pour les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Visible pour les élèves, colleurs, professeurs : accessible uniquement par les utilisateurs de type élève, colleur ou professeur. Pour les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Visible pour les colleurs, professeurs : accessible uniquement par les utilisateurs de type colleur ou professeur. Pour les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Visible pour les professeurs : accessible uniquement par les utilisateurs de type professeur. Pour les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Non visible : entièrement invisible pour les utilisateurs autres que les professeurs (éventuellement associés à la matière dont le répertoire peut dépendre). La différence avec le choix précédent est que le répertoire n'apparaît plus du tout sur le site pour ceux qui ne le voient pas. +
- Accès public : répertoire et son contenu accessibles de tout visiteur, sans identification. +
- Utilisateurs identifiés : répertoire et son contenu accessibles uniquement par les utilisateurs identifiés, en fonction de leur type de compte. Un cadenas est alors affiché à côté de l'icône du répertoire. Pour les répertoires associés à une matière, seuls les utilisateurs associés à cette matière peuvent y accéder. Les associations entre utilisateurs et matières sont modifiables à la gestion utilisateurs-matières. +
- Répertoire invisible : répertoire entièrement invisible pour les utilisateurs autres que les professeurs (éventuellement associés à la matière dont le répertoire peut dépendre). Un cadenas est alors affiché à côté de l'icône du répertoire.
Hormis le dernier choix, le répertoire apparaîtra pour tout visiteur (identifié ou non), éventuellement avec un petit cadenas gris indiquant qu'il est protégé. Avec le choix Non visible, le répertoire n'est plus du tout visible sans être connecté en tant que professeur.
-Les comptes utilisateurs sont à définir ou modifier sur la page de gestion des utilisateurs. Les associations avec les matières sont modifiables sur la page de gestion des matières.
+À moins d'être invisible, le répertoire apparaît pour tout visiteur non identifié comme utilisateur identifié, éventuellement avec un cadenas indiquant qu'il est protégé. Un répertoire invisible n'est plus du tout visible sans être connecté en tant que professeur, éventuellement de la matière concernée.
Aide et explications
-Ce formulaire permet de modifier les propriétés du document choisi. Il sera validé par un clic sur , et abandonné (donc supprimé) par un clic sur .
-Le nom du document peut comporter des espaces, des accents... Vous pouvez donc l'écrire en français ! Ce nom est aussi modifiable directement en cliquant sur le bouton dans la case entourée de pointillés. Il ne doit pas comporter l'extension, qui est ajoutée lorsque l'on le télécharge.
+Ce formulaire permet de modifier les propriétés du document concerné. Il sera validé par un clic sur , et abandonné (donc supprimé) par un clic sur .
+Le nom du document peut comporter des espaces, des accents... Vous pouvez donc l'écrire en français ! Ce nom est aussi modifiable directement en cliquant sur le bouton dans la case entourée de pointillés. Il ne doit pas comporter l'extension, qui est ajoutée lorsqu'on le télécharge.
Vous pouvez mettre à jour le document en envoyant un nouveau fichier. C'est bien mieux que de supprimer/recréer le document, car les liens existants restent valables. Une fois le formulaire validé, le document apparaîtra à nouveau tout en haut des informations récentes, comme s'il venait d'être envoyé. La date et la taille du document seront modifiées.
La taille maximale du fichier envoyé est . Le fichier envoyé doit être de même extension que le fichier originel.
Vous pouvez déplacer le document dans un autre répertoire, qui peut éventuellement appartenir à une autre matière si elle vous est associée. La liste des répertoires où le déplacement est possible est dans le menu déroulant.
-L'accès à ce document peut être choisi parmi six possibilités, visibles directement lorsque vous êtes connecté en tant que professeur :
+Gestion de l'accès
+L'accès à ce document peut être protégé. Trois choix sont possibles :
-
-
- Visible de tous (pas de marquage) : accessible de tout visiteur, sans identification. -
- Visible pour les connectés () : accessible de tout utilisateur mais uniquement après identification (utilisateurs de type invité, élève, colleur ou professeur). Dans les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Visible pour les élèves, colleurs, professeurs () : accessible uniquement par les utilisateurs de type élève, colleur ou professeur. Dans les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Visible pour les colleurs, professeurs () : accessible uniquement par les utilisateurs de type colleur ou professeur. Dans les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Visible pour les professeurs () : accessible uniquement par les utilisateurs de type professeur. Dans les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Non visible () : entièrement invisible pour les utilisateurs autres que les professeurs (éventuellement associés à la bonne matière). La différence avec le choix précédent est que le document n'apparaît plus du tout sur le site pour ceux qui ne le voient pas, notamment dans le décompte du répertoire le contenant. +
- Accès public : document téléchargeable de tout visiteur, sans identification. +
- Utilisateurs identifiés : document téléchargeable uniquement par les utilisateurs identifiés, en fonction de leur type de compte, simplement visible pour les autres. Un cadenas est alors affiché à côté de l'icône du document. Pour les documents associés à une matière, seuls les utilisateurs associés à cette matière peuvent y accéder. Les associations entre utilisateurs et matières sont modifiables à la gestion utilisateurs-matières. +
- Document invisible : document entièrement invisible pour les utilisateurs autres que les professeurs (éventuellement associés à la matière dont le document peut dépendre). Un cadenas est alors affiché à côté de l'icône du document.
Hormis le dernier choix, le document apparaît pour tout visiteur (identifié ou non), éventuellement avec un petit cadenas gris indiquant qu'il est protégé. Avec le choix Non visible, le document n'est plus du tout visible sans être connecté en tant que professeur.
-Les comptes utilisateurs sont à définir ou modifier sur la page de gestion des utilisateurs. Les associations avec les matières sont modifiables sur la page de gestion des matières.
+À moins d'être invisible, le document est listé pour tout visiteur non identifié comme utilisateur identifié, éventuellement avec un cadenas indiquant qu'il est protégé. Un document invisible n'est plus du tout visible sans être connecté en tant que professeur, éventuellement de la matière concernée.
Aide et explications
-Ce formulaire permet d'ajouter un document dans le répertoire choisi. Il sera validé par un clic sur , et abandonné (donc supprimé) par un clic sur .
+Ce formulaire permet d'ajouter un document dans le répertoire concerné. Il sera validé par un clic sur , et abandonné (donc supprimé) par un clic sur .
La taille maximale du fichier envoyé est .
Le nom à afficher du document peut comporter des espaces, des accents... Vous pouvez donc l'écrire en français !
-L'accès à ce document peut être choisi parmi six possibilités, visibles directement lorsque vous êtes connecté en tant que professeur :
+Gestion de l'accès
+L'accès à ce document peut être protégé. Trois choix sont possibles :
-
-
- Visible de tous (pas de marquage) : accessible de tout visiteur, sans identification. -
- Visible pour les connectés () : accessible de tout utilisateur mais uniquement après identification (utilisateurs de type invité, élève, colleur ou professeur). Dans les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Visible pour les élèves, colleurs, professeurs () : accessible uniquement par les utilisateurs de type élève, colleur ou professeur. Dans les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Visible pour les colleurs, professeurs () : accessible uniquement par les utilisateurs de type colleur ou professeur. Dans les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Visible pour les professeurs () : accessible uniquement par les utilisateurs de type professeur. Dans les répertoires associés à une matière, seuls les utilisateurs associés à cette matière ou à toutes les matières peuvent y accéder. -
- Non visible () : entièrement invisible pour les utilisateurs autres que les professeurs (éventuellement associés à la bonne matière). La différence avec le choix précédent est que le document n'apparaît plus du tout sur le site pour ceux qui ne le voient pas, notamment dans le décompte du répertoire le contenant. +
- Accès public : document téléchargeable de tout visiteur, sans identification. +
- Utilisateurs identifiés : document téléchargeable uniquement par les utilisateurs identifiés, en fonction de leur type de compte, simplement visible pour les autres. Un cadenas est alors affiché à côté de l'icône du document. Pour les documents associés à une matière, seuls les utilisateurs associés à cette matière peuvent y accéder. Les associations entre utilisateurs et matières sont modifiables à la gestion utilisateurs-matières. +
- Document invisible : document entièrement invisible pour les utilisateurs autres que les professeurs (éventuellement associés à la matière dont le document peut dépendre). Un cadenas est alors affiché à côté de l'icône du document.
Hormis le dernier choix, le document apparaît pour tout visiteur (identifié ou non), éventuellement avec un petit cadenas gris indiquant qu'il est protégé. Avec le choix Non visible, le document n'est plus du tout visible sans être connecté en tant que professeur.
-Les comptes utilisateurs sont à définir ou modifier sur la page de gestion des utilisateurs. Les associations avec les matières sont modifiables sur la page de gestion des matières.
+À moins d'être invisible, le document est listé pour tout visiteur non identifié comme utilisateur identifié, éventuellement avec un cadenas indiquant qu'il est protégé. Un document invisible n'est plus du tout visible sans être connecté en tant que professeur, éventuellement de la matière concernée.
Nouveau \',\'
Mise à jour du \')';
+ // Modification de la protection : pas de changement de date de l'info récente
+ elseif ( isset($prop['protection']) )
+ $requete = "protection = ${prop['protection']}";
break;
}
requete('recents',"UPDATE recents SET $requete WHERE id=".($type*1000+$id),$mysqli);
@@ -211,7 +389,7 @@
$resultat->free();
$titre = $r[0];
$d = date(DATE_RSS);
- $site = ( $GLOBALS['https'] ) ? "https://${GLOBALS['site']}" : "http://${GLOBALS['site']}";
+ $site = "https://${GLOBALS['site']}";
$preambule = <<$titre