/utilisateurs/creer_statut.php

https://github.com/jjocal/gepi · PHP · 478 lines · 301 code · 118 blank · 59 comment · 51 complexity · 5bca452e9be3ae6e1373b678666a65e1 MD5 · raw file

  1. <?php
  2. /**
  3. *
  4. * Modif table `droits` : ALTER TABLE `droits` ADD `autre` VARCHAR( 1 ) NOT NULL DEFAULT 'F' AFTER `secours` ;
  5. * @version $Id$
  6. * @copyright 2008
  7. */
  8. $affiche_connexion = 'yes';
  9. $niveau_arbo = 1;
  10. // Initialisations files
  11. require_once("../lib/initialisations.inc.php");
  12. // Resume session
  13. $resultat_session = $session_gepi->security_check();
  14. if ($resultat_session == 'c') {
  15. header("Location: ../utilisateurs/mon_compte.php?change_mdp=yes");
  16. die();
  17. } else if ($resultat_session == '0') {
  18. header("Location: ../logout.php?auto=1");
  19. die();
  20. }
  21. // Sécurité
  22. if (!checkAccess()) {
  23. header("Location: ../logout.php?auto=2");
  24. die();
  25. }
  26. //debug_var();
  27. if (getSettingValue("statuts_prives") != "y") {
  28. trigger_error('Impossible d\'accéder ŕ ce module de Gepi.', E_USER_ERROR);
  29. }
  30. // ========================================= Variables ============================
  31. $action = isset($_POST["action"]) ? $_POST["action"] : NULL;
  32. $nouveau_statut = isset($_POST["news"]) ? $_POST["news"] : NULL;
  33. $login_user = isset($_POST["userid"]) ? $_POST["userid"] : NULL;
  34. $statut_user = isset($_POST["userstat"]) ? $_POST["userstat"] : NULL;
  35. $msg = $msg2 = $msg3 = NULL;
  36. // Ces tableaux définissent les différents fichiers ŕ autoriser en fonction du statut
  37. $values_b = '';
  38. // La liste des fichiers ŕ traiter
  39. require_once('./creer_statut_autorisation.php');
  40. //print_r($autorise);
  41. // Fonction qui permet d'afficher le selected de l'affichage
  42. function verifChecked($id){
  43. // On utilise les variables définies dans /creer_statut_autorisation.php
  44. global $autorise;
  45. global $iter;
  46. for($i = 1 ; $i < $iter ; $i++){
  47. // On récupčre les droits de ce statut privé
  48. $sql_ds = "SELECT autorisation FROM droits_speciaux WHERE id_statut = '".$id."' AND nom_fichier = '".$autorise[$i][0]."'";
  49. $query_ds = mysql_query($sql_ds) OR trigger_error('Erreur dans la fonction verifChecked ', E_USER_ERROR);
  50. $count = mysql_num_rows($query_ds);
  51. if ($count >= 1) {
  52. $rep = mysql_result($query_ds, 0,"autorisation");
  53. }else{
  54. $rep = 'F';
  55. }
  56. // echo $sql_ds.' '.$rep.'<br />'; // debug
  57. if ($rep == 'V') {
  58. $retour[$i] = ' checked="checked"';
  59. }else{
  60. $retour[$i] = '';
  61. }
  62. }
  63. return $retour;
  64. }
  65. if ($action == 'ajouter') {
  66. check_token();
  67. // on fait quelques vérifications sur le nom du statut (si il existe déjŕ, longueur du nom, enlever les ' et les ",...)
  68. // On ne garde que les 12 premičres lettres
  69. $stat_1 = substr(trim($nouveau_statut), 0, 12);
  70. // On enlčve les accents, les apostrophes et les guillemets
  71. $stat_2 = str_replace("\\", "", $stat_1);
  72. $stat_2b = str_replace('"', '', $stat_2);
  73. $stat_3 = remplace_accents($stat_2b, "all");
  74. // On refait une ultime vérification
  75. $insert_statut = htmlentities($stat_3, ENT_QUOTES);
  76. // On ajoute le statut privé aprčs avoir vérifié qu'il n'existe pas déjŕ
  77. $query_v = mysql_query("SELECT id FROM droits_statut WHERE nom_statut = '".$insert_statut."'");
  78. $verif = mysql_num_rows($query_v);
  79. if ($verif >= 1) {
  80. $msg .= "<h3 class='red'>Ce statut priv&eacute; existe d&eacute;j&agrave; !</h3>";
  81. }else{
  82. $sql = "INSERT INTO droits_statut (id, nom_statut) VALUES ('', '".$insert_statut."')";
  83. $enregistre = mysql_query($sql) OR trigger_error('Impossible d\'enregistrer ce nouveau statut', E_USER_WARNING);
  84. $cherche_id = mysql_query("SELECT id FROM droits_statut WHERE nom_statut = '".$insert_statut."'");
  85. $last_id = mysql_result($cherche_id, 0,"id");
  86. if ($enregistre) {
  87. // On enregistre les droits généraux adéquats avec la virgule qui va bien entre chaque value
  88. // Chaque droit correspond ŕ un ensemble d'autorisations sur un ou plusieurs fichiers
  89. // Pour ajouter des droits, il suffit d'ajouter des branches au tableau $autorise du fichier creer_statut_autorisation avec tous les fichiers utiles
  90. for($a = 0 ; $a < $iter ; $a++){ // $iter est définie dans creer_statut_autorisation.php
  91. $nbre = count($autorise[$a]);
  92. // On met V pour les autorisations de base mais F pour les autres
  93. if ($a != 0) {
  94. $vf = 'F';
  95. }else{
  96. $vf = 'V';
  97. }
  98. for($c = 0 ; $c < $nbre ; $c++){
  99. $values_b .= '("", "'.$last_id.'", "'.$autorise[$a][$c].'", "'.$vf.'")';
  100. if ($c <= ($nbre - 2)) {
  101. $values_b .= ', ';
  102. }
  103. }
  104. // On ajoute une virgule entre chaque droit sauf ŕ la fin
  105. if ($a < ($iter - 1)) {
  106. $values_b .= ', ';
  107. }
  108. }
  109. $autorise_b = mysql_query("INSERT INTO droits_speciaux (id, id_statut, nom_fichier, autorisation) VALUES ".$values_b."")
  110. OR trigger_error('Impossible d\'enregistrer : '.$values_b.' : '.mysql_error(), E_USER_WARNING);
  111. if ($autorise_b) {
  112. $msg .= '<h4 style="color: green;">Ce statut est enregistr&eacute !</h4>';
  113. }
  114. }
  115. }
  116. } // if ($action == 'ajouter')
  117. if ($action == 'modifier') {
  118. check_token();
  119. // On initialise toutes les variables envoyées
  120. $sql = "SELECT id, nom_statut FROM droits_statut ORDER BY nom_statut";
  121. //echo "$sql<br />";
  122. $query = mysql_query($sql) OR trigger_error('Erreur '.$sql, E_USER_ERROR);
  123. $nbre = mysql_num_rows($query);
  124. $test=array();
  125. for($a = 0; $a < $nbre; $a++){
  126. $b = mysql_result($query, $a, "id");
  127. $test[$a][0] = isset($_POST["suppr|".$b]) ? $_POST["suppr|".$b] : NULL;
  128. $test[$a][1] = isset($_POST["ne|".$b]) ? $_POST["ne|".$b] : NULL;
  129. $test[$a][2] = isset($_POST["bs|".$b]) ? $_POST["bs|".$b] : NULL;
  130. $test[$a][3] = isset($_POST["va|".$b]) ? $_POST["va|".$b] : NULL;
  131. $test[$a][4] = isset($_POST["sa|".$b]) ? $_POST["sa|".$b] : NULL;
  132. $test[$a][5] = isset($_POST["cdt|".$b]) ? $_POST["cdt|".$b] : NULL;
  133. $test[$a][6] = isset($_POST["cdt_visa|".$b]) ? $_POST["cdt_visa|".$b] : NULL;
  134. $test[$a][7] = isset($_POST["ee|".$b]) ? $_POST["ee|".$b] : NULL;
  135. $test[$a][8] = isset($_POST["te|".$b]) ? $_POST["te|".$b] : NULL;
  136. $test[$a][9] = isset($_POST["pa|".$b]) ? $_POST["pa|".$b] : NULL;
  137. $test[$a][10] = isset($_POST["ve|".$b]) ? $_POST["ve|".$b] : NULL;
  138. $test[$a][11] = isset($_POST["vre|".$b]) ? $_POST["vre|".$b] : NULL;
  139. $test[$a][12] = isset($_POST["vee|".$b]) ? $_POST["vee|".$b] : NULL;
  140. $test[$a][13] = isset($_POST["vne|".$b]) ? $_POST["vne|".$b] : NULL;
  141. $test[$a][14] = isset($_POST["vbe|".$b]) ? $_POST["vbe|".$b] : NULL;
  142. $test[$a][15] = isset($_POST["vae|".$b]) ? $_POST["vae|".$b] : NULL;
  143. $test[$a][16] = isset($_POST["anna|".$b]) ? $_POST["anna|".$b] : NULL;
  144. $test[$a][17] = isset($_POST["tr|".$b]) ? $_POST["tr|".$b] : NULL;
  145. $test[$a][18] = isset($_POST["dsi|".$b]) ? $_POST["dsi|".$b] : NULL;
  146. $test[$a][19] = isset($_POST["abs|".$b]) ? $_POST["abs|".$b] : NULL;
  147. $test[$a][20] = isset($_POST["abs_saisie|".$b]) ? $_POST["abs_saisie|".$b] : NULL;
  148. $test[$a][21] = isset($_POST["abs_bilan|".$b]) ? $_POST["abs_bilan|".$b] : NULL;
  149. $test[$a][22] = isset($_POST["abs_totaux|".$b]) ? $_POST["abs_totaux|".$b] : NULL;
  150. // On assure les différents traitements
  151. if ($test[$a][0] == 'on') {
  152. // On supprime le statut demandé
  153. $sql_d = "DELETE FROM droits_statut WHERE id = '".$b."'";
  154. $query_d = mysql_query($sql_d) OR trigger_error('Impossible de supprimer ce statut : '.mysql_error(), E_USER_NOTICE);
  155. // Il faut aussi effacer toutes les références ŕ ce statut dans les autres tables
  156. $sql_d = "DELETE FROM droits_utilisateurs WHERE id_statut = '".$b."'";
  157. $query_d = mysql_query($sql_d) OR trigger_error('Impossible de supprimer ce statut du : '.mysql_error(), E_USER_NOTICE);
  158. $sql_d = "DELETE FROM droits_speciaux WHERE id_statut = '".$b."'";
  159. $query_d = mysql_query($sql_d) OR trigger_error('Impossible de supprimer ce statut ds : '.mysql_error(), E_USER_NOTICE);
  160. }else{
  161. // On va vérifier les droits un par un
  162. // ne = notes élčves ; bs = bulletins simplifiés ; va = voir absences ; sa = saisir absences
  163. // cdt = cahier de textes ; ee = emploi du temps des élčves ; te = tous les emplois du temps
  164. for($m = 1 ; $m < $iter ; $m++){
  165. $nbre2 = count($autorise[$m]);
  166. // On vérifie si le droit est coché ou non
  167. if ($test[$a][$m] == 'on') {
  168. $vf = 'V';
  169. }else{
  170. $vf = 'F';
  171. }
  172. // On n'oublie pas de mettre ŕ jour tous les fichiers adéquats
  173. for($i = 0 ; $i < $nbre2 ; $i++){
  174. //$sql_maj = "UPDATE droits_speciaux SET autorisation = '".$vf."' WHERE id_statut = '".$b."' AND nom_fichier = '".$autorise[$m][$i]."'";
  175. //$query_maj = mysql_query($sql_maj) OR trigger_error("Mauvaise mise ŕ jour : ".mysql_error(), E_USER_WARNING);
  176. $query_select = mysql_query("SELECT id FROM droits_speciaux WHERE id_statut = '".$b."' AND nom_fichier = '".$autorise[$m][$i]."'");
  177. $result = mysql_fetch_array($query_select);
  178. if (!empty ($result)){
  179. $query_maj = mysql_query("UPDATE droits_speciaux SET autorisation = '".$vf."' WHERE id_statut = '".$b."' AND nom_fichier = '".$autorise[$m][$i]."'");
  180. }else{
  181. $query2_maj = mysql_query("INSERT INTO `droits_speciaux` VALUES ('','".$b."','".$autorise[$m][$i]."','".$vf."')");
  182. }
  183. if (!$query_maj) {
  184. $msg3 .= '<span class="red">Erreur</span>';
  185. }
  186. }
  187. } // for($m = 1 ; $m < $iter ; $m++){
  188. }
  189. }
  190. //print_r($test);
  191. // On assure un message de confirmation si les modifications se sont bien passées
  192. if ($msg3 === NULL) {
  193. $msg3 .= '<p style="color: green">Les modifications sont bien enregistrées.</p>';
  194. }
  195. }
  196. // On récupčre tous les statuts nouveaux qui existent
  197. $aff_tableau = $aff_select = $aff_users = $selected = '';
  198. $sql = "SELECT id, nom_statut FROM droits_statut ORDER BY nom_statut";
  199. $query = mysql_query($sql);
  200. $nbre_statuts = mysql_num_rows($query);
  201. if ($query) {
  202. for($b = 0 ; $b <= $iter ; $b++){
  203. if ($b == 0) {
  204. $aff_tableau2[$b] = '<tr style="border: 1px solid white; text-align: center;"><td style="font-weight: bold;">Liste des droits</td>';
  205. }elseif($b == $iter){
  206. // On ajoute une ligne pour la suppression
  207. $aff_tableau2[$b] = '<tr style="border: 1px solid white; background-color: silver; text-align: center;"><td>Supprimer ce statut</td>';
  208. }else{
  209. $aff_tableau2[$b] = '<tr style="border: 1px solid white; text-align: center;"><td>'.$menu_accueil[$b][1].'</td>';
  210. }
  211. }
  212. while($rep = mysql_fetch_array($query)){
  213. // On vérifie s'il faut le cocher par défaut ou pas
  214. $checked = verifChecked($rep["id"]);
  215. // On affiche les droits des statuts personnalisés verticalement
  216. for($b = 0 ; $b <= $iter ; $b++){
  217. if ($b == 0) {
  218. $aff_tableau2[$b] .= '<td style="font-weight: bold; color: red;">'.$rep["nom_statut"].'</td>';
  219. }elseif($b == $iter){
  220. // On ajoute une ligne pour la suppression
  221. $aff_tableau2[$b] .= '<td><input type="checkbox" name="suppr|'.$rep["id"].'" /></td>';
  222. }else{
  223. $aff_tableau2[$b] .= '<td><input type="checkbox" name="'.$menu_accueil[$b][2].'|'.$rep["id"].'"'.$checked[$b].' /></td>';
  224. }
  225. }
  226. }
  227. for($b = 0 ; $b <= $iter ; $b++){
  228. // $aff_tableau2[$b] .= '</tr>'."\n";
  229. $aff_tableau .= $aff_tableau2[$b].'</tr>
  230. <tr style="background-color: white;"><td colspan="'.($nbre_statuts + 1).'"></td></tr>'."\n";
  231. }
  232. }
  233. // On traite la partie sur les utilisateurs 'autre' pour leur définir le bon statut
  234. // On traite les demandes de l'admin sur la définition des statuts des utilisateurs 'autre'
  235. if ($action == "defStatut") {
  236. check_token();
  237. // On vérifie si cet utilisateur existe déjŕ
  238. $query_v2 = mysql_query("SELECT id_statut FROM droits_utilisateurs WHERE login_user = '".$login_user."'")
  239. OR trigger_error('Impossible de vérifier le statut privé de cet utilisateur.', E_USER_WARNING);
  240. $verif_v2 = mysql_num_rows($query_v2);
  241. if ($verif_v2 >= 1) {
  242. // alors le statut de cet utilisateur existe, on va donc le mettre ŕ jour
  243. $sql_d = "UPDATE droits_utilisateurs SET id_statut = '".$statut_user."' WHERE login_user = '".$login_user."'";
  244. }else{
  245. $sql_d = "INSERT INTO droits_utilisateurs (id, id_statut, login_user) VALUES ('', '".$statut_user."', '".$login_user."')";
  246. }
  247. $query_statut = mysql_query($sql_d) OR trigger_error('Impossible d\'enregistrer dans la base.'.mysql_error(), E_USER_WARNING);
  248. if ($query_statut) {
  249. $msg2 .= '<h4 style="color: green;">Modification enregistrée.</h4>';
  250. }
  251. }
  252. // On récupčre les utilisateurs qui ont un statut 'autre'
  253. $sql_u = "SELECT nom, prenom, login FROM utilisateurs
  254. WHERE statut = 'autre'
  255. AND etat = 'actif'
  256. ORDER BY nom, prenom";
  257. $query_u = mysql_query($sql_u);
  258. // On affiche la liste des utilisateurs avec un select des statuts privés
  259. $i = 1;
  260. while($tab = mysql_fetch_array($query_u)){
  261. // On récupčre son statut s'il existe
  262. $query_s = mysql_query("SELECT id_statut FROM droits_utilisateurs WHERE login_user = '".$tab["login"]."'");
  263. $statut = mysql_fetch_array($query_s);
  264. $aff_users .= '
  265. <tr>
  266. <td>'.$tab["nom"].' '.$tab["prenom"].'</td>
  267. <td>
  268. <form id="form'.$i.'" action="creer_statut.php" method="post">'."\n";
  269. $aff_users .= add_token_field();
  270. $aff_users .= '
  271. <p><input type="hidden" name="action" value="defStatut" />
  272. <input type="hidden" name="userid" value="'.$tab["login"].'" />
  273. <select name="userstat" onchange=\'document.getElementById("form'.$i.'").submit();\'>
  274. <option value="rien">Choix du statut</option>';
  275. $sql = "SELECT id, nom_statut FROM droits_statut ORDER BY nom_statut";
  276. $query = mysql_query($sql);
  277. while($rep = mysql_fetch_array($query)){
  278. if ($statut["id_statut"] == $rep["id"]) {
  279. $selected = ' selected="selected"';
  280. }else{
  281. $selected = '';
  282. }
  283. $aff_users .= '
  284. <option value="'.$rep["id"].'"'.$selected.'>'.$rep["nom_statut"].'</option>';
  285. }
  286. $aff_users .= '
  287. </select></p>
  288. </form>
  289. </td></tr>';
  290. $i++;
  291. }
  292. // include("utilisateurs.class.php");
  293. //======================================================
  294. $titre_page = 'Gestion des statuts personnalis&eacute;s';
  295. $style_specifique = "utilisateurs/style_statut";
  296. include("../lib/header.inc");
  297. //======================================================
  298. //debug_var();
  299. ?>
  300. <!-- Début de la page sur les statut privés -->
  301. <br />
  302. <p class="bold">
  303. <a href="index.php?mode=personnels"><img src='../images/icons/back.png' alt='Retour' class='back_link'/> Retour</a>
  304. </p>
  305. <p>Vous pouvez définir des statuts personnalisés, ayant une combinaison particuličre de droits.
  306. Pour pouvoir ensuite attribuer (ci-dessous) un statut personnalisé ŕ un utilisateur, il faut d'abord l'enregistrer avec un statut générique "autre"
  307. (<a href="./modify_user.php">CREER un personnel</a> ou <a href="./index.php?mode=personnels">MODIFIER un personnel</a>).</p>
  308. <!-- Quel statut pour quelle personne ? -->
  309. <div style="width: 350px; -moz-border-radius: 20px; background-color: lightblue; padding: 5px; position: absolute; margin-left: 880px; margin-top: 10px;">
  310. <div id="userStatut" style="border: 5px solid silver; width: 22em; margin: 5px 5px 5px 5px;">
  311. <p style="text-align: right; font-style: italic; color: grey; background-color: lightblue;">Gestion des statuts personnalis&eacute;s&nbsp;&nbsp;</p>
  312. <table>
  313. <?php echo $aff_users; ?>
  314. </table>
  315. <?php echo $msg2; ?>
  316. </div>
  317. </div>
  318. <div style="background-color: lightblue; width: 850px; -moz-border-radius: 20px; padding: 5px;">
  319. <p style="color: grey; text-align: right; font-style: italic;">Gestion des droits des statuts personnalis&eacute;s&nbsp;&nbsp;</p>
  320. <form action="creer_statut.php" method="post">
  321. <?php
  322. echo add_token_field();
  323. ?>
  324. <p><input type="hidden" name="action" value="modifier" /></p>
  325. <table style="border: 1px solid white; background: #CCFFFF;">
  326. <thead>
  327. <tr><th>&nbsp;</th><th colspan="<?php echo $nbre_statuts; ?>">&nbsp;</th></tr>
  328. </thead>
  329. <tfoot>
  330. <tr><td><?php echo $msg3; ?></td><td colspan="<?php echo $nbre_statuts; ?>"><input type="submit" name="modifier" value="Enregistrer et mettre &agrave; jour" /></td></tr>
  331. </tfoot>
  332. <tbody>
  333. <?php echo $aff_tableau; ?>
  334. <tr style="background-color: white;"><td colspan="<?php echo ($nbre_statuts + 1); ?>"></td></tr>
  335. </tbody>
  336. </table>
  337. </form>
  338. </div>
  339. <br />
  340. <p class="ajoutSt" onclick="changementDisplay('ajoutStatut', '');">Ajouter un statut personnalis&eacute;</p>
  341. <div id="ajoutStatut" style="display: none;">
  342. <form action="creer_statut.php" method="post">
  343. <?php
  344. echo add_token_field();
  345. ?>
  346. <p>
  347. <label for="new">Nom du nouveau statut</label>
  348. <input type="text" id="new" name="news" value="" />
  349. <input type="hidden" name="action" value="ajouter" />
  350. <input type="submit" name="Ajouter" value="Ajouter" />
  351. </p>
  352. <p style="color: grey; font-style: italic; margin-left: 10em;">Lettres et chiffres uniquement. Longueur maximum : 12 caract&egrave;res.</p>
  353. </form>
  354. </div>
  355. <br />
  356. <hr />
  357. <br />
  358. <?php
  359. require("../lib/footer.inc.php");