[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
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éation des ré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épertoire classe ".$Niveau. " créé.<br />\n"; 92 } else { 93 echo "Echec : Création du répertoire classe ".$Niveau."<br />\n"; 94 echo "Vérifier que le groupe Equipe correspondant à 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épertoire classe ".$Niveau."<br />\n"; 109 } else { 110 echo "Echec : Suppression du ré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é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éja existant sur le serveur selectionné 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é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 à créer "; 260 echo "<u onmouseover=\"return escape".gettext("('Classes disponibles dans l\'annuaire, mais dont le répertoire n\'a pas encore été créé sur le serveur.<br /><b>Remarque :</b> Un répertoire peut être créé, que si il existe une équipe correspondante.')")."\"><IMG style=\"border: 0px solid ;\" SRC=\"../elements/images/system-help.png\"></u></td>\n"; 261 echo "<td align=\"center\">Classes créées "; 262 echo "</td></tr>\n"; 263 echo "<tr><td align=\"center\">\n"; 264 // Affichage menu de sélection des sous-dossiers classes a cré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éer")."\">\n"; 278 echo "</form>\n"; 279 280 // Vé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électionner 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îchir,<br />par exemple suite à l\'ajout de nouveaux élèves.<br /> En Cas de migration d\'une année à une autre, les dossiers de l\année précédente des élèves seront copiés dans un sous-dossier Archive dans le dossier de la nouvelle année.<br /> Si l\'élève n\'est plus dans l\'établissement, son dossier est caché.<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 à l\'ajout de nouveaux élèves.<br /> En Cas de migration d\'une année à une autre, les dossiers de l\année précédente des élèves seront copiés dans un sous-dossier Archive dans le dossier de la nouvelle année.<br /> Si l\'élève n\'est plus dans l\'établissement, son dossier est caché.<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ées de la classe.</b>')")."\"><IMG style=\"border: 0px solid ;\" SRC=\"../elements/images/system-help.png\"></u>\n"; 305 echo "</form>\n"; 306 // Vé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électionner 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é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 à 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ère, vous devez passer par <i>Droits sur fichiers</i><br /><b>Attention : Le fonctionnement normal est d\'avoir la case non coché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ération peut être trè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ération peut ê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 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |