/utilisateurs/creer_statut.php
https://github.com/jjocal/gepi · PHP · 478 lines · 301 code · 118 blank · 59 comment · 51 complexity · 5bca452e9be3ae6e1373b678666a65e1 MD5 · raw file
- <?php
- /**
- *
- * Modif table `droits` : ALTER TABLE `droits` ADD `autre` VARCHAR( 1 ) NOT NULL DEFAULT 'F' AFTER `secours` ;
- * @version $Id$
- * @copyright 2008
- */
- $affiche_connexion = 'yes';
- $niveau_arbo = 1;
- // Initialisations files
- require_once("../lib/initialisations.inc.php");
- // Resume session
- $resultat_session = $session_gepi->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();
- }
- // Sécurité
- if (!checkAccess()) {
- header("Location: ../logout.php?auto=2");
- die();
- }
- //debug_var();
- if (getSettingValue("statuts_prives") != "y") {
- trigger_error('Impossible d\'accéder ŕ ce module de Gepi.', E_USER_ERROR);
- }
- // ========================================= Variables ============================
- $action = isset($_POST["action"]) ? $_POST["action"] : NULL;
- $nouveau_statut = isset($_POST["news"]) ? $_POST["news"] : NULL;
- $login_user = isset($_POST["userid"]) ? $_POST["userid"] : NULL;
- $statut_user = isset($_POST["userstat"]) ? $_POST["userstat"] : NULL;
- $msg = $msg2 = $msg3 = NULL;
- // Ces tableaux définissent les différents fichiers ŕ autoriser en fonction du statut
- $values_b = '';
- // La liste des fichiers ŕ traiter
- require_once('./creer_statut_autorisation.php');
- //print_r($autorise);
- // Fonction qui permet d'afficher le selected de l'affichage
- function verifChecked($id){
- // On utilise les variables définies dans /creer_statut_autorisation.php
- global $autorise;
- global $iter;
- for($i = 1 ; $i < $iter ; $i++){
- // On récupčre les droits de ce statut privé
- $sql_ds = "SELECT autorisation FROM droits_speciaux WHERE id_statut = '".$id."' AND nom_fichier = '".$autorise[$i][0]."'";
- $query_ds = mysql_query($sql_ds) OR trigger_error('Erreur dans la fonction verifChecked ', E_USER_ERROR);
- $count = mysql_num_rows($query_ds);
- if ($count >= 1) {
- $rep = mysql_result($query_ds, 0,"autorisation");
- }else{
- $rep = 'F';
- }
- // echo $sql_ds.' '.$rep.'<br />'; // debug
- if ($rep == 'V') {
- $retour[$i] = ' checked="checked"';
- }else{
- $retour[$i] = '';
- }
- }
- return $retour;
- }
- if ($action == 'ajouter') {
- check_token();
- // on fait quelques vérifications sur le nom du statut (si il existe déjŕ, longueur du nom, enlever les ' et les ",...)
- // On ne garde que les 12 premičres lettres
- $stat_1 = substr(trim($nouveau_statut), 0, 12);
- // On enlčve les accents, les apostrophes et les guillemets
- $stat_2 = str_replace("\\", "", $stat_1);
- $stat_2b = str_replace('"', '', $stat_2);
- $stat_3 = remplace_accents($stat_2b, "all");
- // On refait une ultime vérification
- $insert_statut = htmlentities($stat_3, ENT_QUOTES);
- // On ajoute le statut privé aprčs avoir vérifié qu'il n'existe pas déjŕ
- $query_v = mysql_query("SELECT id FROM droits_statut WHERE nom_statut = '".$insert_statut."'");
- $verif = mysql_num_rows($query_v);
- if ($verif >= 1) {
- $msg .= "<h3 class='red'>Ce statut privé existe déjà !</h3>";
- }else{
- $sql = "INSERT INTO droits_statut (id, nom_statut) VALUES ('', '".$insert_statut."')";
- $enregistre = mysql_query($sql) OR trigger_error('Impossible d\'enregistrer ce nouveau statut', E_USER_WARNING);
- $cherche_id = mysql_query("SELECT id FROM droits_statut WHERE nom_statut = '".$insert_statut."'");
- $last_id = mysql_result($cherche_id, 0,"id");
- if ($enregistre) {
- // On enregistre les droits généraux adéquats avec la virgule qui va bien entre chaque value
- // Chaque droit correspond ŕ un ensemble d'autorisations sur un ou plusieurs fichiers
- // Pour ajouter des droits, il suffit d'ajouter des branches au tableau $autorise du fichier creer_statut_autorisation avec tous les fichiers utiles
- for($a = 0 ; $a < $iter ; $a++){ // $iter est définie dans creer_statut_autorisation.php
- $nbre = count($autorise[$a]);
- // On met V pour les autorisations de base mais F pour les autres
- if ($a != 0) {
- $vf = 'F';
- }else{
- $vf = 'V';
- }
- for($c = 0 ; $c < $nbre ; $c++){
- $values_b .= '("", "'.$last_id.'", "'.$autorise[$a][$c].'", "'.$vf.'")';
- if ($c <= ($nbre - 2)) {
- $values_b .= ', ';
- }
- }
- // On ajoute une virgule entre chaque droit sauf ŕ la fin
- if ($a < ($iter - 1)) {
- $values_b .= ', ';
- }
- }
- $autorise_b = mysql_query("INSERT INTO droits_speciaux (id, id_statut, nom_fichier, autorisation) VALUES ".$values_b."")
- OR trigger_error('Impossible d\'enregistrer : '.$values_b.' : '.mysql_error(), E_USER_WARNING);
- if ($autorise_b) {
- $msg .= '<h4 style="color: green;">Ce statut est enregistré !</h4>';
- }
- }
- }
- } // if ($action == 'ajouter')
- if ($action == 'modifier') {
- check_token();
- // On initialise toutes les variables envoyées
- $sql = "SELECT id, nom_statut FROM droits_statut ORDER BY nom_statut";
- //echo "$sql<br />";
- $query = mysql_query($sql) OR trigger_error('Erreur '.$sql, E_USER_ERROR);
- $nbre = mysql_num_rows($query);
- $test=array();
- for($a = 0; $a < $nbre; $a++){
- $b = mysql_result($query, $a, "id");
- $test[$a][0] = isset($_POST["suppr|".$b]) ? $_POST["suppr|".$b] : NULL;
- $test[$a][1] = isset($_POST["ne|".$b]) ? $_POST["ne|".$b] : NULL;
- $test[$a][2] = isset($_POST["bs|".$b]) ? $_POST["bs|".$b] : NULL;
- $test[$a][3] = isset($_POST["va|".$b]) ? $_POST["va|".$b] : NULL;
- $test[$a][4] = isset($_POST["sa|".$b]) ? $_POST["sa|".$b] : NULL;
- $test[$a][5] = isset($_POST["cdt|".$b]) ? $_POST["cdt|".$b] : NULL;
- $test[$a][6] = isset($_POST["cdt_visa|".$b]) ? $_POST["cdt_visa|".$b] : NULL;
- $test[$a][7] = isset($_POST["ee|".$b]) ? $_POST["ee|".$b] : NULL;
- $test[$a][8] = isset($_POST["te|".$b]) ? $_POST["te|".$b] : NULL;
- $test[$a][9] = isset($_POST["pa|".$b]) ? $_POST["pa|".$b] : NULL;
- $test[$a][10] = isset($_POST["ve|".$b]) ? $_POST["ve|".$b] : NULL;
- $test[$a][11] = isset($_POST["vre|".$b]) ? $_POST["vre|".$b] : NULL;
- $test[$a][12] = isset($_POST["vee|".$b]) ? $_POST["vee|".$b] : NULL;
- $test[$a][13] = isset($_POST["vne|".$b]) ? $_POST["vne|".$b] : NULL;
- $test[$a][14] = isset($_POST["vbe|".$b]) ? $_POST["vbe|".$b] : NULL;
- $test[$a][15] = isset($_POST["vae|".$b]) ? $_POST["vae|".$b] : NULL;
- $test[$a][16] = isset($_POST["anna|".$b]) ? $_POST["anna|".$b] : NULL;
- $test[$a][17] = isset($_POST["tr|".$b]) ? $_POST["tr|".$b] : NULL;
- $test[$a][18] = isset($_POST["dsi|".$b]) ? $_POST["dsi|".$b] : NULL;
- $test[$a][19] = isset($_POST["abs|".$b]) ? $_POST["abs|".$b] : NULL;
- $test[$a][20] = isset($_POST["abs_saisie|".$b]) ? $_POST["abs_saisie|".$b] : NULL;
- $test[$a][21] = isset($_POST["abs_bilan|".$b]) ? $_POST["abs_bilan|".$b] : NULL;
- $test[$a][22] = isset($_POST["abs_totaux|".$b]) ? $_POST["abs_totaux|".$b] : NULL;
- // On assure les différents traitements
- if ($test[$a][0] == 'on') {
- // On supprime le statut demandé
- $sql_d = "DELETE FROM droits_statut WHERE id = '".$b."'";
- $query_d = mysql_query($sql_d) OR trigger_error('Impossible de supprimer ce statut : '.mysql_error(), E_USER_NOTICE);
- // Il faut aussi effacer toutes les références ŕ ce statut dans les autres tables
- $sql_d = "DELETE FROM droits_utilisateurs WHERE id_statut = '".$b."'";
- $query_d = mysql_query($sql_d) OR trigger_error('Impossible de supprimer ce statut du : '.mysql_error(), E_USER_NOTICE);
- $sql_d = "DELETE FROM droits_speciaux WHERE id_statut = '".$b."'";
- $query_d = mysql_query($sql_d) OR trigger_error('Impossible de supprimer ce statut ds : '.mysql_error(), E_USER_NOTICE);
- }else{
- // On va vérifier les droits un par un
- // ne = notes élčves ; bs = bulletins simplifiés ; va = voir absences ; sa = saisir absences
- // cdt = cahier de textes ; ee = emploi du temps des élčves ; te = tous les emplois du temps
- for($m = 1 ; $m < $iter ; $m++){
- $nbre2 = count($autorise[$m]);
- // On vérifie si le droit est coché ou non
- if ($test[$a][$m] == 'on') {
- $vf = 'V';
- }else{
- $vf = 'F';
- }
- // On n'oublie pas de mettre ŕ jour tous les fichiers adéquats
- for($i = 0 ; $i < $nbre2 ; $i++){
- //$sql_maj = "UPDATE droits_speciaux SET autorisation = '".$vf."' WHERE id_statut = '".$b."' AND nom_fichier = '".$autorise[$m][$i]."'";
- //$query_maj = mysql_query($sql_maj) OR trigger_error("Mauvaise mise ŕ jour : ".mysql_error(), E_USER_WARNING);
- $query_select = mysql_query("SELECT id FROM droits_speciaux WHERE id_statut = '".$b."' AND nom_fichier = '".$autorise[$m][$i]."'");
- $result = mysql_fetch_array($query_select);
- if (!empty ($result)){
- $query_maj = mysql_query("UPDATE droits_speciaux SET autorisation = '".$vf."' WHERE id_statut = '".$b."' AND nom_fichier = '".$autorise[$m][$i]."'");
- }else{
- $query2_maj = mysql_query("INSERT INTO `droits_speciaux` VALUES ('','".$b."','".$autorise[$m][$i]."','".$vf."')");
- }
- if (!$query_maj) {
- $msg3 .= '<span class="red">Erreur</span>';
- }
- }
- } // for($m = 1 ; $m < $iter ; $m++){
- }
- }
- //print_r($test);
- // On assure un message de confirmation si les modifications se sont bien passées
- if ($msg3 === NULL) {
- $msg3 .= '<p style="color: green">Les modifications sont bien enregistrées.</p>';
- }
- }
- // On récupčre tous les statuts nouveaux qui existent
- $aff_tableau = $aff_select = $aff_users = $selected = '';
- $sql = "SELECT id, nom_statut FROM droits_statut ORDER BY nom_statut";
- $query = mysql_query($sql);
- $nbre_statuts = mysql_num_rows($query);
- if ($query) {
- for($b = 0 ; $b <= $iter ; $b++){
- if ($b == 0) {
- $aff_tableau2[$b] = '<tr style="border: 1px solid white; text-align: center;"><td style="font-weight: bold;">Liste des droits</td>';
- }elseif($b == $iter){
- // On ajoute une ligne pour la suppression
- $aff_tableau2[$b] = '<tr style="border: 1px solid white; background-color: silver; text-align: center;"><td>Supprimer ce statut</td>';
- }else{
- $aff_tableau2[$b] = '<tr style="border: 1px solid white; text-align: center;"><td>'.$menu_accueil[$b][1].'</td>';
- }
- }
- while($rep = mysql_fetch_array($query)){
- // On vérifie s'il faut le cocher par défaut ou pas
- $checked = verifChecked($rep["id"]);
- // On affiche les droits des statuts personnalisés verticalement
- for($b = 0 ; $b <= $iter ; $b++){
- if ($b == 0) {
- $aff_tableau2[$b] .= '<td style="font-weight: bold; color: red;">'.$rep["nom_statut"].'</td>';
- }elseif($b == $iter){
- // On ajoute une ligne pour la suppression
- $aff_tableau2[$b] .= '<td><input type="checkbox" name="suppr|'.$rep["id"].'" /></td>';
- }else{
- $aff_tableau2[$b] .= '<td><input type="checkbox" name="'.$menu_accueil[$b][2].'|'.$rep["id"].'"'.$checked[$b].' /></td>';
- }
- }
- }
- for($b = 0 ; $b <= $iter ; $b++){
- // $aff_tableau2[$b] .= '</tr>'."\n";
- $aff_tableau .= $aff_tableau2[$b].'</tr>
- <tr style="background-color: white;"><td colspan="'.($nbre_statuts + 1).'"></td></tr>'."\n";
- }
- }
- // On traite la partie sur les utilisateurs 'autre' pour leur définir le bon statut
- // On traite les demandes de l'admin sur la définition des statuts des utilisateurs 'autre'
- if ($action == "defStatut") {
- check_token();
- // On vérifie si cet utilisateur existe déjŕ
- $query_v2 = mysql_query("SELECT id_statut FROM droits_utilisateurs WHERE login_user = '".$login_user."'")
- OR trigger_error('Impossible de vérifier le statut privé de cet utilisateur.', E_USER_WARNING);
- $verif_v2 = mysql_num_rows($query_v2);
- if ($verif_v2 >= 1) {
- // alors le statut de cet utilisateur existe, on va donc le mettre ŕ jour
- $sql_d = "UPDATE droits_utilisateurs SET id_statut = '".$statut_user."' WHERE login_user = '".$login_user."'";
- }else{
- $sql_d = "INSERT INTO droits_utilisateurs (id, id_statut, login_user) VALUES ('', '".$statut_user."', '".$login_user."')";
- }
- $query_statut = mysql_query($sql_d) OR trigger_error('Impossible d\'enregistrer dans la base.'.mysql_error(), E_USER_WARNING);
- if ($query_statut) {
- $msg2 .= '<h4 style="color: green;">Modification enregistrée.</h4>';
- }
- }
- // On récupčre les utilisateurs qui ont un statut 'autre'
- $sql_u = "SELECT nom, prenom, login FROM utilisateurs
- WHERE statut = 'autre'
- AND etat = 'actif'
- ORDER BY nom, prenom";
- $query_u = mysql_query($sql_u);
- // On affiche la liste des utilisateurs avec un select des statuts privés
- $i = 1;
- while($tab = mysql_fetch_array($query_u)){
- // On récupčre son statut s'il existe
- $query_s = mysql_query("SELECT id_statut FROM droits_utilisateurs WHERE login_user = '".$tab["login"]."'");
- $statut = mysql_fetch_array($query_s);
- $aff_users .= '
- <tr>
- <td>'.$tab["nom"].' '.$tab["prenom"].'</td>
- <td>
- <form id="form'.$i.'" action="creer_statut.php" method="post">'."\n";
- $aff_users .= add_token_field();
- $aff_users .= '
- <p><input type="hidden" name="action" value="defStatut" />
- <input type="hidden" name="userid" value="'.$tab["login"].'" />
- <select name="userstat" onchange=\'document.getElementById("form'.$i.'").submit();\'>
- <option value="rien">Choix du statut</option>';
- $sql = "SELECT id, nom_statut FROM droits_statut ORDER BY nom_statut";
- $query = mysql_query($sql);
- while($rep = mysql_fetch_array($query)){
- if ($statut["id_statut"] == $rep["id"]) {
- $selected = ' selected="selected"';
- }else{
- $selected = '';
- }
- $aff_users .= '
- <option value="'.$rep["id"].'"'.$selected.'>'.$rep["nom_statut"].'</option>';
- }
- $aff_users .= '
- </select></p>
- </form>
- </td></tr>';
- $i++;
- }
- // include("utilisateurs.class.php");
- //======================================================
- $titre_page = 'Gestion des statuts personnalisés';
- $style_specifique = "utilisateurs/style_statut";
- include("../lib/header.inc");
- //======================================================
- //debug_var();
- ?>
- <!-- Début de la page sur les statut privés -->
- <br />
- <p class="bold">
- <a href="index.php?mode=personnels"><img src='../images/icons/back.png' alt='Retour' class='back_link'/> Retour</a>
- </p>
- <p>Vous pouvez définir des statuts personnalisés, ayant une combinaison particuličre de droits.
- Pour pouvoir ensuite attribuer (ci-dessous) un statut personnalisé ŕ un utilisateur, il faut d'abord l'enregistrer avec un statut générique "autre"
- (<a href="./modify_user.php">CREER un personnel</a> ou <a href="./index.php?mode=personnels">MODIFIER un personnel</a>).</p>
- <!-- Quel statut pour quelle personne ? -->
- <div style="width: 350px; -moz-border-radius: 20px; background-color: lightblue; padding: 5px; position: absolute; margin-left: 880px; margin-top: 10px;">
- <div id="userStatut" style="border: 5px solid silver; width: 22em; margin: 5px 5px 5px 5px;">
- <p style="text-align: right; font-style: italic; color: grey; background-color: lightblue;">Gestion des statuts personnalisés </p>
- <table>
- <?php echo $aff_users; ?>
- </table>
- <?php echo $msg2; ?>
- </div>
- </div>
- <div style="background-color: lightblue; width: 850px; -moz-border-radius: 20px; padding: 5px;">
- <p style="color: grey; text-align: right; font-style: italic;">Gestion des droits des statuts personnalisés </p>
- <form action="creer_statut.php" method="post">
- <?php
- echo add_token_field();
- ?>
- <p><input type="hidden" name="action" value="modifier" /></p>
- <table style="border: 1px solid white; background: #CCFFFF;">
- <thead>
- <tr><th> </th><th colspan="<?php echo $nbre_statuts; ?>"> </th></tr>
- </thead>
- <tfoot>
- <tr><td><?php echo $msg3; ?></td><td colspan="<?php echo $nbre_statuts; ?>"><input type="submit" name="modifier" value="Enregistrer et mettre à jour" /></td></tr>
- </tfoot>
- <tbody>
- <?php echo $aff_tableau; ?>
- <tr style="background-color: white;"><td colspan="<?php echo ($nbre_statuts + 1); ?>"></td></tr>
- </tbody>
- </table>
- </form>
- </div>
- <br />
- <p class="ajoutSt" onclick="changementDisplay('ajoutStatut', '');">Ajouter un statut personnalisé</p>
- <div id="ajoutStatut" style="display: none;">
- <form action="creer_statut.php" method="post">
- <?php
- echo add_token_field();
- ?>
- <p>
- <label for="new">Nom du nouveau statut</label>
- <input type="text" id="new" name="news" value="" />
- <input type="hidden" name="action" value="ajouter" />
- <input type="submit" name="Ajouter" value="Ajouter" />
- </p>
- <p style="color: grey; font-style: italic; margin-left: 10em;">Lettres et chiffres uniquement. Longueur maximum : 12 caractères.</p>
- </form>
- </div>
- <br />
- <hr />
- <br />
- <?php
- require("../lib/footer.inc.php");