security_check();
if ($resultat_session == 'c') {
header("Location: ../utilisateurs/mon_compte.php?change_mdp=yes");
die();
} else if ($resultat_session == '0') {
header("Location: ../logout.php?auto=1");
die();
}
if (!checkAccess()) {
header("Location: ../logout.php?auto=1");
die();
}
$orderby = isset($_GET['orderby']) ? $_GET['orderby'] : (isset($_POST['orderby']) ? $_POST["orderby"] : 'priority,nom_complet');
if ($orderby != "nom_court" AND $orderby != "nom_complet" AND $orderby != "priority, nom_court") {
$orderby = "priority,nom_complet";
}
$msg = null;
if (isset($_POST['action'])) {
check_token();
$error = false;
if ($_POST['action'] == "add") {
// On enregistre une nouvelle catégorie
// On filtre un peu
if (!is_numeric($_POST['priority'])) $_POST['priority'] = "0";
// Le reste passera sans soucis, mais on coupe quand même si jamais c'est trop long
if (mb_strlen($_POST['nom_court']) > 250) $_POST['nom_court'] = mb_substr($_POST['nom_court'], 0, 250);
if (mb_strlen($_POST['nom_complet']) > 250) $_POST['nom_complet'] = mb_substr($_POST['nom_complet'], 0, 250);
// On enregistre
if ($_POST['nom_court'] == '') {
$msg .= "Le nom court ne peut pas être vide.
";
$error = true;
$res = false;
}
if (my_strtolower($_POST['nom_court']) == 'aucune') {
$msg .= "Le nom court ne peut pas être 'Aucune'.
";
$error = true;
$res = false;
}
if ($_POST['nom_complet'] == '') {
$msg .= "L'intitulé ne peut pas être vide.
";
$error = true;
$res = false;
}
if (!$error) {
$res = mysqli_query($GLOBALS["mysqli"], "INSERT INTO matieres_categories SET nom_court = '" . ($_POST['nom_court']) . "', nom_complet = '" . ($_POST['nom_complet']) . "', priority = '" . $_POST["priority"] . "'");
}
if (!$res) {
$msg .= "Erreur lors de l'enregistrement de la nouvelle catégorie.";
echo mysqli_error($GLOBALS["mysqli"]);
}
} elseif ($_POST['action'] == "edit") {
// On met à jour une catégorie
// On filtre un peu
if (!is_numeric($_POST['priority'])) $_POST['priority'] = "0";
if (!is_numeric($_POST['categorie_id'])) $_POST['categorie_id'] = "0";
// Le reste passera sans soucis, mais on coupe quand même si jamais c'est trop long
if (mb_strlen($_POST['nom_court']) > 250) $_POST['nom_court'] = mb_substr($_POST['nom_court'], 0, 250);
if (mb_strlen($_POST['nom_complet']) > 250) $_POST['nom_complet'] = mb_substr($_POST['nom_complet'], 0, 250);
if ($_POST['nom_court'] == '') {
$msg .= "Le nom court ne peut pas être vide.
";
$error = true;
$res = false;
}
if (my_strtolower($_POST['nom_court']) == 'aucune') {
$msg .= "Le nom court ne peut pas être 'Aucune'.
";
$error = true;
$res = false;
}
if ($_POST['nom_complet'] == '') {
$msg .= "L'intitulé ne peut pas être vide.
";
$error = true;
$res = false;
}
if (!$error) {
// On enregistre
$res = mysqli_query($GLOBALS["mysqli"], "UPDATE matieres_categories SET nom_court = '" . ($_POST['nom_court']) . "', nom_complet = '" . ($_POST['nom_complet']) . "', priority = '" . $_POST["priority"] . "' WHERE id = '".$_POST['categorie_id']."'");
}
if (!$res) $msg .= "Erreur lors de la mise à jour de la catégorie.";
} elseif($_POST['action']=='modif_ordre_categories') {
check_token();
$tab_priorites_categories=array();
$tab_priorites_categories2=array();
$temoin_pb_ordre_categories="n";
foreach($_POST as $key => $value) {
if(preg_match("/^priority_/", $key)) {
if(in_array($value, $tab_priorites_categories)) {
$temoin_pb_ordre_categories="y";
$value=max($tab_priorites_categories)+1;
}
$tab_priorites_categories[]=$value;
$cat_id=preg_replace("/^priority_/", "", $key);
$sql="UPDATE matieres_categories SET priority = '" . $value . "' WHERE id = '".$cat_id."';";
//echo "$sql
";
$res = mysqli_query($GLOBALS["mysqli"], $sql);
if (!$res) $msg .= "Erreur lors de la mise à jour de la catégorie.";
$tab_priorites_categories2[$cat_id]=$value;
}
}
if(isset($_POST['forcer_ordre_categories_toutes_classes'])) {
$sql="SELECT id FROM classes;";
//echo "$sql
";
$res_clas=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res_clas)>0) {
while($lig_clas=mysqli_fetch_object($res_clas)) {
foreach($tab_priorites_categories2 as $cat_id => $priorite) {
$sql="SELECT * FROM j_matieres_categories_classes WHERE classe_id='".$lig_clas->id."' AND categorie_id='".$cat_id."';";
//echo "$sql
";
$res_cat_clas=mysqli_query($GLOBALS["mysqli"], $sql);
if (mysqli_num_rows($res_cat_clas)==0) {
$sql="INSERT INTO j_matieres_categories_classes SET classe_id='".$lig_clas->id."', categorie_id='".$cat_id."', priority='".$priorite."';";
//echo "$sql
";
$insert=mysqli_query($GLOBALS["mysqli"], $sql);
if(!$insert) {
$msg.="Erreur lors de la définition de l'ordre de la catégorie n°".$cat_id." pour la classe ".get_nom_classe($lig_clas->id)."
";
}
} else {
$sql="UPDATE j_matieres_categories_classes SET priority='".$priorite."' WHERE (classe_id='".$lig_clas->id."' and categorie_id='".$cat_id."');";
//echo "$sql
";
$update=mysqli_query($GLOBALS["mysqli"], $sql);
if(!$update) {
$msg.="Erreur lors de la mise à jour de l'ordre de la catégorie n°".$cat_id." pour la classe ".get_nom_classe($lig_clas->id)."
";
}
}
}
}
}
}
if($temoin_pb_ordre_categories=="y") {
$msg.="
Anomalie : Les catégories de matières ne doivent pas avoir le même rang.
Cela risque de provoquer des problèmes sur les bulletins.
Des mesures ont été prises pour imposer des ordres différents, mais il se peut que l'ordre ne vous convienne pas.
\n";
}
else {
$msg.="Modifications enregistrées.
";
}
} elseif ($_POST['action'] == "delete") {
// On teste d'abord l'ID
if (!is_numeric($_POST['categorie_id'])) {
// Inutile d'en dire plus...
$msg .= "Erreur.";
} else {
// On a un ID valide.
// Si c'est l'ID 1, on ne supprime pas. C'est la catégorie par défaut
if ($_POST['categorie_id'] == 1) {
$msg .= "Vous ne pouvez pas supprimer la catégorie par défaut !";
} else {
// On teste l'utilisation de cette catégorie
$res = mysqli_query($GLOBALS["mysqli"], "SELECT matiere FROM matieres WHERE categorie_id = '" . $_POST['categorie_id'] ."'");
$test = mysqli_num_rows($res);
//$res2 = mysql_query("SELECT DISTINCT id_groupe, c.id, c.classe FROM j_groupes_classes jgc, classes c WHERE c.id=jgc.id_classe AND categorie_id='".$_POST['categorie_id']."'");
$res2 = mysqli_query($GLOBALS["mysqli"], "SELECT DISTINCT c.id, c.classe FROM j_groupes_classes jgc, classes c WHERE c.id=jgc.id_classe AND categorie_id='".$_POST['categorie_id']."'");
$test2 = mysqli_num_rows($res2);
if ($test>0) {
// On a des entrées... la catégorie a déjà été associée à des matières, donc on ne la supprime pas.
$liste_matieres_associees="";
while($lig=mysqli_fetch_object($res)) {
if($liste_matieres_associees!='') {$liste_matieres_associees.=", ";}
$liste_matieres_associees.="".$lig->matiere."";
}
$msg .= "La catégorie n'a pas pu être supprimée, car elle a déjà été associée à des matières ($liste_matieres_associees).
";
}
elseif ($test2>0) {
$liste_classes_associees="";
while($lig=mysqli_fetch_object($res2)) {
if($liste_classes_associees!='') {$liste_classes_associees.=", ";}
$liste_classes_associees.="".get_class_from_id($lig->id)."";
}
$msg .= "La catégorie n'a pas pu être supprimée, car elle a déjà été associée à des enseignements pour des classes ($liste_classes_associees).
";
}
else {
$res = mysqli_query($GLOBALS["mysqli"], "DELETE FROM matieres_categories WHERE id = '" . $_POST['categorie_id']."'");
if (!$res) {
$msg .= "Erreur lors de la suppression de la catégorie.
";
} else {
$msg .= "La catégorie a bien été supprimée.
";
}
}
}
}
}
}
elseif((isset($_GET['action']))&&($_GET['action'] == "corrige_accents_html")) {
check_token();
$tab = array_flip (get_html_translation_table(HTML_ENTITIES));
$sql="SELECT * FROM matieres_categories;";
$res=mysqli_query($GLOBALS["mysqli"], $sql);
if(mysqli_num_rows($res)>0) {
while($lig=mysqli_fetch_object($res)) {
$correction=ensure_utf8(strtr($lig->nom_complet, $tab));
if($lig->nom_complet!=$correction) {
$sql="UPDATE matieres_categories SET nom_complet='$correction' WHERE id='$lig->id';";
//echo "$sql
";
$update=mysqli_query($GLOBALS["mysqli"], $sql);
if($update) {
$msg .= "Correction de l'encodage d'un nom de catégorie de matière en '$correction'
";
}
else {
$msg .= "Erreur lors de la correction de l'encodage du nom de catégorie de matière '$lig->nom_complet' en '$correction'
";
}
}
}
}
unset($_GET['action']);
}
//**************** EN-TETE **************************************
$titre_page = "Gestion des catégories de matières";
require_once("../lib/header.inc.php");
//**************** FIN EN-TETE **********************************
//debug_var();
if (isset($_GET['action'])) {
// On a une action : soit on ajoute soit on édite soit on delete
?>
Nom court (utilisé dans les outils de configuration) :
"; echo "Intitulé complet (utilisé sur les documents officiels) :
"; echo "Priorité d'affichage par défaut : "; echo ""; echo "
"; echo ""; echo "
"; echo ""; } elseif ($_GET['action'] == "edit") { // On édite la catégorie existante if (!is_numeric($_GET['categorie_id'])) $_GET['categorie_id'] == 0; $res = mysqli_query($GLOBALS["mysqli"], "SELECT id, nom_court, nom_complet, priority FROM matieres_categories WHERE id = '" . $_GET['categorie_id'] . "'"); $current_cat = mysqli_fetch_array($res, MYSQLI_ASSOC); if ($current_cat) { if($current_cat["nom_court"]=='Aucune') { echo "ANOMALIE : Il ne devrait pas exister de catégorie intitulée 'Aucune'.
Voir http://www.sylogix.org/wiki/gepi/Enseignement_invisible et http://www.sylogix.org/wiki/gepi/Suppr_Cat_Aucune pour des explications
Retour | Ajouter une catégorie
Anomalie : Les catégories de matières ne doivent pas avoir le même rang.
Cela risque de provoquer des problèmes sur les bulletins.
Vous devriez corriger.
ANOMALIE : Il ne devrait pas exister de catégorie intitulée 'Aucune'.
Voir http://www.sylogix.org/wiki/gepi/Enseignement_invisible et http://www.sylogix.org/wiki/gepi/Suppr_Cat_Aucune pour des explications
Attention : Une ou des catégories ont des accents HTML dans leur nom complet (accents enregistrés sous forme HTML dans la base de données).
Cela peut perturber l'affichage des noms de catégories de matières dans les bulletins PDF (et ailleurs peut-être)
Vous pouvez corriger d'un clic ce problème.
\n"; } } echo "NOTES :
La catégorie par défaut ne peut pas être supprimée.
Elle est automatiquement associée aux matières existantes et aux nouvelles matières, et pour tous les groupes.
Vous pouvez la renommer (Autres, Hors catégories, etc.), mais laissez toujours un nom générique.
L'ordre des catégories défini ici est pris en compte comme ordre par défaut pour les nouvelles classes.
Pour les classes existantes, vous pouvez modifier l'ordre dans :
Gestion des bases/Gestion des classes/<Telle_classe> Paramètres
Vous pouvez aussi effectuer ce paramétrage par lots de classes :
Gestion des bases/Gestion des classes/Paramétrage des classes par lots