[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/var/www/se3/partages/ -> rep_classes.php (source)

   1  <?php
   2  /**
   3  * Creation des repertoires classes et mise en place des ACL
   4  * @Version $Id: rep_classes.php 7868 2013-09-25 20:28:39Z christian.westphal $ 
   5  * @Projet LCS / SambaEdu 
   6  * @auteurs Philippe Chadefaux, denis bonnenfant
   7  * @Licence Distribue selon les termes de la licence GPL
   8  * @note 
   9  */
  10  
  11  /**
  12  * @Repertoire: partages/
  13  * file: rep_classes.php
  14  */
  15  
  16  include  "entete.inc.php";
  17  include  "ldap.inc.php";
  18  include  "ihm.inc.php";
  19  
  20  require_once  ("lang.inc.php");
  21  bindtextdomain('se3-partages',"/var/www/se3/locale");
  22  textdomain ('se3-partages');
  23  
  24  //aide
  25  $_SESSION["pageaide"]="Ressources_et_partages";
  26  
  27  
  28  $texte_alert="Vous allez supprimer tout le repertoire classe. Voulez vous vraiment continuer ?";
  29  ?>
  30  <script type="text/javascript">
  31  
  32  /**
  33  * Affiche une boite de dialogue pour demander confirmation
  34  * @language Javascript
  35  * @Parametres
  36  * @return 
  37  */
  38  
  39  function areyousure() {
  40      var messageb = "<?php echo "$texte_alert"; ?>";
  41      if (confirm(messageb)) {
  42          return true;
  43      }
  44      else {
  45          return false;
  46      }
  47  }
  48  </script>
  49  
  50  <?php
  51  if ((is_admin("se3_is_admin",$login)=="Y") or
  52  (is_admin("annu_is_admin",$login)=="Y")) {
  53  
  54  	function my_echo_debug($chaine) {
  55          $debug=0;
  56          if($debug==1) {
  57              echo "<span style='color:red'>".$chaine."</span><br />\n";
  58          }
  59      }
  60  
  61      echo "<h1>".gettext("Cr&#233;ation des r&#233;pertoires classes")."</h1>\n";
  62      
  63      // On ajoute les classes
  64      if($_POST['create_folders_classes']) {
  65          $new_folders_classes=$_POST['new_folders_classes'];
  66          for ($loop=0; $loop < count($new_folders_classes); $loop++) {
  67              list($Classe,$Niveau)=preg_split("/Classe_/",$new_folders_classes[$loop]);
  68  
  69              // On fait le test avant le updateClasses.pl parce qu'updateClasses.pl fait sauter les droits Profs
  70              $commande="cd /var/se3/Classes; /usr/bin/getfacl . | grep default:group:Profs >/dev/null && echo 1";
  71              my_echo_debug("Test: $commande");
  72              $acl_group_profs_classes = exec($commande);
  73              my_echo_debug("\$acl_group_profs_classe=$acl_group_profs_classes");
  74  
  75              $commande="/usr/bin/sudo /usr/share/se3/scripts/updateClasses.pl -c $Niveau";
  76              my_echo_debug("<p>Creation du dossier de classe $Niveau : ".$commande);
  77              system($commande);
  78              $rep_niveau = "/var/se3/Classes/Classe_".$Niveau;
  79  
  80              if ($acl_group_profs_classes=="1") {
  81                  // Il existe deja des droits pour le groupe Profs dans /var/se3/Classes
  82                  // On va remettre les droits Profs en tenant compte des ajouts de dossiers effectues
  83  
  84                  echo "Attribution des droits au groupe Profs.<br />";
  85                  $commande="/usr/bin/sudo /usr/share/se3/scripts/se3_droits_profs_sur_classes.sh";
  86                  my_echo_debug($commande);
  87                  system ($commande);
  88              }
  89  
  90              if (is_dir("$rep_niveau")) {
  91                  echo "R&#233;pertoire classe ".$Niveau. " cr&#233;&#233;.<br />\n";
  92              } else {
  93                  echo "Echec : Cr&#233;ation du r&#233;pertoire classe ".$Niveau."<br />\n";
  94                  echo "V&#233;rifier que le groupe Equipe correspondant &#224; la Classe existe.<br />\n";
  95              }
  96          }
  97      }
  98  
  99      // On supprime les classes
 100      if($_POST['delete_folders_classes']) {
 101          $old_RessourcesClasses=$_POST['old_RessourcesClasses'];    
 102              for ($loop=0; $loop < count($old_RessourcesClasses); $loop++) {
 103              list($Classe,$Niveau)=preg_split("/Classe_/",$old_RessourcesClasses[$loop]);
 104              system ("/usr/bin/sudo /usr/share/se3/scripts/deleteClasses.sh $Niveau");
 105              $rep_niveau = "/var/se3/Classes/Classe_".$Niveau;
 106              
 107              if ( ! is_dir("$rep_niveau")) {
 108                  echo "Suppression du r&#233;pertoire classe ".$Niveau."<br />\n";
 109              } else {
 110                  echo "Echec : Suppression du r&#233;pertoire classe ".$Niveau."<br />\n";
 111              }
 112          }
 113      }
 114  
 115      // On rafaichit on ne sait jamais, cela replace les acl
 116      if($_POST['refresh_folders_classes']) {
 117          $dirClasses = dir ("/var/se3/Classes");
 118          $indice=0;
 119          while ( $Entry = $dirClasses ->read() ) {
 120              if ( preg_match("/^Classe_/", $Entry) ) {
 121                  $RessourcesClasses[$indice] = $Entry;
 122                  list($Classe,$Niveau)=preg_split("/Classe_/",$RessourcesClasses[$indice]);
 123                  //echo "Rafraichissement du r&#233;pertoire classe ".$Niveau."<br />\n";
 124                  $commande="/usr/bin/sudo /usr/share/se3/scripts/updateClasses.pl -c $Niveau";
 125                  my_echo_debug($commande);
 126                  system ($commande);
 127                  $indice++;
 128              }
 129          }
 130  
 131          // Dans le cas ou on donne le droit a tous les profs sur les repertoires classes
 132          if ($_POST['acl_group_profs']) {
 133              $commande="/usr/bin/sudo /usr/share/se3/scripts/se3_droits_profs_sur_classes.sh";
 134              my_echo_debug($commande);
 135              system ($commande);
 136  
 137          } else {
 138              // Effacement du droit Profs sur les fichiers et dossiers existants
 139              $commande="/usr/bin/sudo /usr/share/se3/scripts/se3_droits_profs_sur_classes.sh droits=n";
 140              my_echo_debug($commande);
 141              system ($commande);
 142          }
 143          echo "<br /><br /><center>\n";
 144          echo "<a href=rep_classes.php>Continuez</a>\n";
 145          echo "</center>\n";
 146          include ("pdp.inc.php");
 147          exit;
 148      }
 149  
 150      // On rafaichit les classes selectionnees
 151      if($_POST['refresh_classes']||$_POST['clean_classes']) {
 152          $refresh_RessourcesClasses=$_POST['old_RessourcesClasses'];    
 153          if ( count($refresh_RessourcesClasses) > 0 ) {
 154              for ($loop=0; $loop < count($refresh_RessourcesClasses); $loop++) {
 155                  list($Classe,$Niveau)=preg_split("/Classe_/",$refresh_RessourcesClasses[$loop]);
 156                  if($_POST['refresh_classes']) {
 157  
 158                      // On fait le test avant le updateClasses.pl parce qu'updateClasses.pl fait sauter les droits Profs
 159                      $commande="cd /var/se3/Classes/$refresh_RessourcesClasses[$loop]; /usr/bin/getfacl . | grep default:group:Profs >/dev/null && echo 1";
 160                      my_echo_debug("Test: $commande");
 161                      $acl_group_profs_classe = exec($commande);
 162                      my_echo_debug("\$acl_group_profs_classe=$acl_group_profs_classe");
 163  
 164                      // Rafraichissement de la classe:
 165                      //echo "<b>rafraichissement de la classe : $Niveau</b><br />\n";
 166                      $commande="/usr/bin/sudo /usr/share/se3/scripts/updateClasses.pl -c $Niveau ";
 167                      my_echo_debug($commande);
 168                      system ($commande);
 169              
 170                      // Dans le cas ou on donne le droit a tous les profs sur les repertoires classes
 171                      if ($_POST['acl_group_profs']) {
 172                          $commande="/usr/bin/sudo /usr/share/se3/scripts/se3_droits_profs_sur_classes.sh classe=".$refresh_RessourcesClasses[$loop];
 173                          my_echo_debug($commande);
 174                          system ($commande);
 175                      }
 176                      else {
 177                          if ($acl_group_profs_classe=="1") {
 178  
 179                              echo "<b>Rafraichissement de la classe : ".$refresh_RessourcesClasses[$loop]."</b><br />\n";
 180  
 181                              $commande="/usr/bin/sudo /usr/share/se3/scripts/se3_droits_profs_sur_classes.sh classe=".$refresh_RessourcesClasses[$loop]." droits=n";
 182                              my_echo_debug($commande);
 183                              system ($commande);
 184                              echo "Suppression des droits pour le groupe Profs (<em>seuls les profs de l'equipe ont encore les droits</em>).<br />\n";
 185                          }
 186                          else {
 187                              // Vérification au cas ou le script updateClasses.pl serait modifie entre temps
 188                              $commande="cd /var/se3/Classes/$refresh_RessourcesClasses[$loop]; /usr/bin/getfacl . | grep default:group:Profs >/dev/null && echo 1";
 189                              my_echo_debug("Test: $commande");
 190                              $acl_group_profs_classe = exec($commande);
 191                              my_echo_debug("\$acl_group_profs_classe=$acl_group_profs_classe");
 192  
 193                              if ($acl_group_profs_classe!="1") {
 194                                  echo "Le groupe Profs n'a pas de droits sur le dossier (<em>seuls les profs de l'equipe ont les droits</em>).<br />\n";
 195                              }
 196                          }
 197                      }
 198                  } elseif($_POST['clean_classes']) {
 199                      echo "<b>Nettoyage de la classe : $Niveau</b><br />\n";
 200                      $commande="/usr/bin/sudo /usr/share/se3/scripts/cleanClasses.pl $Niveau ";
 201                      my_echo_debug($commande);
 202                      system ($commande);
 203                  }
 204              }
 205          }
 206          echo "<br /><br /><center>\n";
 207          echo "<a href=rep_classes.php>Continuez</a>\n";
 208          echo "</center>\n";
 209          include ("pdp.inc.php");
 210          exit;
 211      }
 212  
 213      echo "<br />\n";
 214      // configuration mono serveur  : determination des parametres du serveur
 215      $serveur=search_machines ("(l=maitre)", "computers");
 216      $cn_srv= $serveur[0]["cn"];
 217      $stat_srv = $serveur[0]["l"];
 218      $ipHostNumber =  $serveur[0]["ipHostNumber"];
 219  
 220      // Recherche de la liste des classes dans l'annuaire
 221      $list_classes=search_groups("cn=Classe_*");
 222      // Recherche des sous dossiers classes d&#233;ja existant sur le serveur selectionn&#233;
 223  
 224      // Constitution d'un tableau avec les ressources deja existantes
 225      $dirClasses = dir ("/var/se3/Classes");
 226      $indice=0;
 227      while ( $Entry = $dirClasses ->read() ) {
 228          if (( preg_match("/^Classe_/", $Entry) ) && (!preg_match("/^Classe_grp/", $Entry) )) {
 229              $RessourcesClasses[$indice] = $Entry;
 230              $indice++;
 231          }
 232      }
 233      if(isset($RessourcesClasses)) {
 234          array_multisort($RessourcesClasses, SORT_STRING);    
 235      }
 236  
 237      // Creation d'un tableau des nouvelles ressources a cr&#233;er  par
 238      // elimination des ressources deja existantes
 239      $k=0;
 240      for ($i=0; $i < count($list_classes); $i++ ) {
 241          for ($j=0; $j < count($RessourcesClasses); $j++ ) {
 242              if (  $list_classes[$i]["cn"] ==  $RessourcesClasses[$j])  {
 243                  $exist = true;
 244                  break;
 245              } else { $exist = false; }
 246          }
 247          
 248          if (!$exist) {
 249              $list_new_classes[$k]["cn"]= $list_classes[$i]["cn"];
 250              $k++;
 251          }
 252      }
 253  
 254      // Affichage de la table
 255      echo "<H3>Gestion des ressources classes</H3>\n";
 256      echo "<br />\n";
 257      echo "<table BORDER=1 CELLPADDING=3 CELLSPACING=1 RULES=COLS>\n";
 258      echo "<tr class=\"menuheader\" height=\"30\">\n";
 259      echo "<td align=\"center\">Classes &#224; cr&#233;er ";
 260      echo "<u onmouseover=\"return escape".gettext("('Classes disponibles dans l\'annuaire, mais dont le r&#233;pertoire n\'a pas encore &#233;t&#233; cr&#233;&#233; sur le serveur.<br /><b>Remarque :</b> Un r&#233;pertoire peut &#234;tre cr&#233;&#233;, que si il existe une &#233;quipe correspondante.')")."\"><IMG style=\"border: 0px solid ;\" SRC=\"../elements/images/system-help.png\"></u></td>\n";
 261      echo "<td align=\"center\">Classes cr&#233;&#233;es ";
 262          echo "</td></tr>\n";
 263          echo "<tr><td align=\"center\">\n";
 264          // Affichage menu de s&#233;lection des sous-dossiers classes a cr&#233;er
 265          if   ( count($list_new_classes)>15) $size=15; else $size=count($list_new_classes);
 266          if ( count($list_new_classes)>0) {
 267              echo "<form action=\"rep_classes.php\" method=\"post\">\n";
 268              echo "<select size=\"".$size."\" name=\"new_folders_classes[]\" multiple=\"multiple\">\n";
 269              for ($loop=0; $loop < count($list_new_classes); $loop++) {
 270                  echo "<option value=".$list_new_classes[$loop]["cn"].">".$list_new_classes[$loop]["cn"]."\n";
 271              }
 272              echo "</select><br />\n";
 273              echo "<input type=\"hidden\" name=\"create_folders_classes\" value=\"true\">\n";
 274              // echo "<input type=\"hidden\" name=\"cn_srv\" value=\"$cn_srv\">\n";
 275              // echo "<input type=\"hidden\" name=\"ipHostNumber\" value=\"$ipHostNumber\">\n";
 276  
 277              echo "<input type=\"submit\" value=\"".gettext("Cr&#233;er")."\">\n";
 278              echo "</form>\n";
 279          
 280          // V&#233;rification selection d'au moins une classe
 281              if ( $create_folders_classes && count($new_folders_classes)==0 ) {
 282                  echo "<div class='error_msg'>".gettext("Vous devez s&#233lectionner au moins une classe !")."</div>\n";
 283              }
 284          } else {
 285              echo "<div class='error_msg'>".gettext("Pas de nouvelles classes !")."</div>\n";
 286          }
 287          
 288      echo "</td><td align=\"center\">\n";
 289          if   ( count($RessourcesClasses)>15) $size=15; else $size=count($RessourcesClasses);
 290          if ( count($RessourcesClasses)>0) {
 291              echo "<form action=\"rep_classes.php\" method=\"post\">\n";
 292              echo "<select size=\"".$size."\" name=\"old_RessourcesClasses[]\" multiple=\"multiple\">\n";
 293              for ($loop=0; $loop < count($RessourcesClasses); $loop++) {
 294                  echo "<option value=".$RessourcesClasses[$loop].">".$RessourcesClasses[$loop]."\n";
 295              }
 296              echo "</select><br />\n";
 297  //            echo "<input type=\"hidden\" name=\"refresh_classes\" value=\"true\">\n";
 298              echo "<input type=\"submit\" name=\"refresh_classes\" value=\"".gettext("Rafraichir")."\">\n";
 299              echo "<u onmouseover=\"return escape".gettext("('Choisir les classes que l\'on souhaite rafra&#238;chir,<br />par exemple suite &#224; l\'ajout de nouveaux &#233;l&#232;ves.<br /> En Cas de migration d\'une ann&#233;e &#224; une autre, les dossiers de l\ann&#233;e pr&#233;c&#233;dente des &#233;l&#232;ves seront copi&#233;s dans un sous-dossier Archive dans le dossier de la nouvelle ann&#233;e.<br /> Si l\'&#233;l&#232;ve n\'est plus dans l\'&#233;tablissement, son dossier est cach&#233;.<br />')")."\"><IMG style=\"border: 0px solid ;\" SRC=\"../elements/images/system-help.png\"></u>\n";
 300              echo "<input type=\"submit\" name=\"clean_classes\" value=\"".gettext("Nettoyer")."\">\n";
 301              echo "<u onmouseover=\"return escape".gettext("('Choisir les classes que l\'on souhaite nettoyer, par exemple suite &#224; l\'ajout de nouveaux &#233;l&#232;ves.<br /> En Cas de migration d\'une ann&#233;e &#224; une autre, les dossiers de l\ann&#233;e pr&#233;c&#233;dente des &#233;l&#232;ves seront copi&#233;s dans un sous-dossier Archive dans le dossier de la nouvelle ann&#233;e.<br /> Si l\'&#233;l&#232;ve n\'est plus dans l\'&#233;tablissement, son dossier est cach&#233;.<br />')")."\"><IMG style=\"border: 0px solid ;\" SRC=\"../elements/images/system-help.png\"></u>\n";
 302  //            echo "<input type=\"hidden\" name=\"delete_folders_classes\" value=\"true\">\n";
 303              echo "<input type=\"submit\" name=\"delete_folders_classes\" onClick=\"return areyousure()\" value=\"".gettext("Supprimer")."\">\n";
 304              echo "<u onmouseover=\"return escape".gettext("('<br /><b>Attention, la suppression entrainera la perte des donn&#233;es de la classe.</b>')")."\"><IMG style=\"border: 0px solid ;\" SRC=\"../elements/images/system-help.png\"></u>\n";
 305              echo "</form>\n";
 306          // V&#233;rification selection d'au moins une classe
 307              if ( ($refresh_classes || $delete_folders_classes || $clean_classes) && count($old_RessourcesClasses)==0 ) {
 308                  echo "<div class='error_msg'>".gettext("Vous devez s&#233lectionner au moins une classe !")."</div>\n";
 309              }
 310      }
 311  /*    echo "</td><td align=\"center\">\n";
 312          if   ( count($RessourcesClasses)>15) $size=15; else $size=count($RessourcesClasses);
 313          if ( count($RessourcesClasses)>0) {
 314              echo "<form action=\"rep_classes.php\" method=\"post\">\n";
 315              echo "<select size=\"".$size."\" name=\"refresh_RessourcesClasses[]\" multiple=\"multiple\">\n";
 316              for ($loop=0; $loop < count($RessourcesClasses); $loop++) {
 317                  echo "<option value=".$RessourcesClasses[$loop].">".$RessourcesClasses[$loop]."\n";
 318              }
 319              echo "</select><br />\n";
 320              echo "<input type=\"hidden\" name=\"refresh_classes\" value=\"true\">\n";
 321              echo "<input type=\"submit\" value=\"".gettext("Rafraichir")."\">\n";
 322              echo "</form>\n";
 323      }
 324  */
 325      echo "</td></tr>\n";
 326      echo "</table>\n";
 327      
 328      echo "<br />\n";
 329      echo "<H3>Rafraichir les r&#233;pertoires classes existants</H3>\n";
 330      echo "<form action=\"rep_classes.php\" method=\"post\">\n";
 331      $acl_group_profs_classes = exec("cd /var/se3/Classes; /usr/bin/getfacl . | grep group:Profs >/dev/null && echo 1");
 332      if ($acl_group_profs_classes=="1") {
 333          $CHECKED="checked";
 334      }    
 335      echo "Droits du groupe Profs : ";
 336      echo "<input type=\"checkbox\" name=\"acl_group_profs\" $CHECKED>\n";
 337      echo "<u onmouseover=\"return escape".gettext("('Permet de donner tous les droits (ACL) sur les classes existantes &#224; tous les membres du groupe Profs. Tous les profs ont tous les droits sur toutes les classes.<br />Si vous souhaitez donner un droit au groupe Profs sur une classe particuli&#232;re, vous devez passer par <i>Droits sur fichiers</i><br /><b>Attention : Le fonctionnement normal est d\'avoir la case non coch&#233;e. Les profs ont alors les droits uniquement sur leurs classes.</b>')")."\"><IMG style=\"border: 0px solid ;\" SRC=\"../elements/images/system-help.png\"></u>\n";
 338          echo "<br /><br />\n";
 339      echo "<input type=\"hidden\" name=\"refresh_folders_classes\" value=\"true\">\n";
 340          echo "<input type=\"submit\" onClick=\"alert('Cette op&#233;ration peut &#234;tre tr&#232;s longue !')\"  value=\"".gettext("Rafraichir toutes les classes")."\">\n";
 341      echo "<u onmouseover=\"return escape".gettext("('Permet de reforcer les droits (ACL) sur les classes existantes.<br /><b>Attention : Cette op&#233;ration peut &#234;tre longue.</b>')")."\"><IMG style=\"border: 0px solid ;\" SRC=\"../elements/images/system-help.png\"></u>\n";
 342          echo "</form>\n";
 343  
 344  
 345  } // Fin if is_admin
 346  include ("pdp.inc.php");
 347  ?>


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1