[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 3 4 /** 5 6 * Permet de creer les partages Classe 7 * @Version $Id: create_folders_classes.php 6176 2011-02-27 23:00:23Z dbo $ 8 9 * @Projet LCS / SambaEdu 10 11 * @auteurs jLCF >:> jean-luc.chretien@tice.ac-caen.fr 12 * @auteurs Equipe TICE Crdp de Caen 13 * @auteurs Olivier LECLUSE 14 15 * @Licence Distribue selon les termes de la licence GPL 16 17 * @note Ce script est conserve pour le cas d'un serveur esclave avec repertoires classes deportes (utilise admind) 18 * @note Remplace par rep_classe.php 19 */ 20 21 /** 22 23 * @Repertoire: partages/ 24 * file: synchro_folders_classes.php 25 26 */ 27 28 29 include "entete.inc.php"; 30 include "ldap.inc.php"; 31 include "ihm.inc.php"; 32 33 require_once ("lang.inc.php"); 34 bindtextdomain('se3-partages',"/var/www/se3/locale"); 35 textdomain ('se3-partages'); 36 37 38 if (is_admin("se3_is_admin",$login)=="Y") { 39 // Aide en ligne 40 $titre=gettext("Aide en ligne"); 41 $texte=gettext("Vous êtes administrateur du serveur SE3.<BR>Avec le menu ci-dessous, vous pouvez créer des ressources pour chacune des classes de votre annuaire.<BR>Une ressource classe, se présente comme un sous dossier du partage Classes (H:).Dans le sous dossier d'une classe, vous trouverez :\n<ul><li>un sous dossier par eleve de la classe,<li>un sous dossier «_profs» à usage des membres de l'équipe pédagogique de cette classe,<li>un sous dossier «_travail» qui est un espace d'échange entre les professeurs et les élèves de la classe.</ul><p>Droits d'accès aux sous dossiers :<ul><li> <u>Les élèves accèdent </u> :<ul><li> En rw- a leur sous dossier personnel,<li> En r-- au dossier travail,</ul><li> <u>Les élèves n'accédent pas</u> :<ul><li>Aux sous-dossiers des autres élèves de la classe.<li>Aux sous-dossiers «_profs» des professeurs.</ul></ul><ul><li> <u>Les professeurs accèdent </u> : en rw- sur l'ensemble de l'arborescence de leurs classes.</ul>"); 42 mkhelp($titre,$texte); 43 // Fin Aide en ligne 44 45 echo "<h1>".gettext("Création des répertoires classes")."</h1>"; 46 47 // Definition des messages d'alerte 48 $alerte_1="<div class='error_msg'>".gettext("Votre demande de création de nouvelles ressources classes n'a pas été prise en compte car une tâche d'administration est en cours sur le serveur")." <b>"; 49 $alerte_2="</b>,".gettext(" veuillez réitérer votre demande plus tard. Si le problème persiste, veuillez contacter le super-utilisateur du serveur SE3.")."</div><BR>\n"; 50 $alerte_3="<div class='error_msg'>".gettext("Votre demande de création de nouvelles ressources classes a échouée. Si le problème persiste, veuillez contacter le super-utilisateur du serveur SE3.")."</div><BR>\n"; 51 // Definition des messages d'info 52 $info_1 = gettext("Cette tâche est ordonnancée, vous recevrez un mail de confirmation de création dans quelques instants..."); 53 54 #------------------------------------------ 55 // Prepositionnement variables 56 $mono_srv = false; 57 $multi_srv = false; 58 // Recherche de la nature mono ou multi serveur de la plateforme SE3 59 $master=search_machines ("(l=maitre)", "computers"); 60 $slaves= search_machines ("(l=esclave)", "computers"); 61 if ( count($master) == 0 ) { 62 echo "<P>".gettext("ERREUR : Il n'y a pas de serveur maitre déclaré dans l'annuaire ! <BR>Veuillez contacter le super utilisateur du serveur SE3.")."</P>"; 63 } elseif ( count($master) == 1 && count($slaves) == 0 ) { 64 // Plateforme mono-serveur 65 $mono_srv = true; 66 } elseif ( count($master) == 1 && count($slaves) > 0 ) { 67 $multi_srv = true; 68 } 69 // Fin Recherche de la nature mono ou multi serveur de la plateforme SE3 70 if ( $mono_srv ) { 71 // configuration mono serveur : determination des parametres du serveur 72 $serveur=search_machines ("(l=maitre)", "computers"); 73 $cn_srv= $serveur[0]["cn"]; 74 $stat_srv = $serveur[0]["l"]; 75 $ipHostNumber = $serveur[0]["ipHostNumber"]; 76 } elseif ($multi_srv) { 77 // configuration multi-serveurs : presentation d'un form de selection du serveur 78 if ( !$selected_srv && !$create_folders_classes) { 79 echo "<H3>".gettext("Sélection du serveur ou vous souhaitez créer des ressources classes:")." </H3>"; 80 $servers=search_computers ("(|(l=esclave)(l=maitre))"); 81 echo "<form action=\"create_folders_classes.php\" method=\"post\">\n"; 82 for ($loop=0; $loop < count($servers); $loop++) { 83 echo $servers[$loop]["description"]." ".$servers[$loop]["cn"]." <input type=\"radio\" name=\"cn_srv\" value =\"".$servers[$loop]["cn"]."\""; 84 if ($loop==0) echo "checked"; 85 echo "><BR>\n"; 86 } 87 $form="<input type=\"reset\" value=\"".gettext("Réinitialiser la sélection")."\">\n"; 88 $form ="<input type=\"hidden\" name=\"selected_srv\" value=\"true\">\n"; 89 $form.="<input type=\"submit\" value=\"".gettext("Valider")."\">\n"; 90 $form.="</form>\n"; 91 echo $form; 92 } elseif ( $selected_srv && $multi_srv) { 93 // configuration multi serveurs : determination des parametres du serveur 94 $serveur=search_machines ("(cn=$cn_srv)", "computers"); 95 $stat_srv = $serveur[0]["l"]; 96 $ipHostNumber = $serveur[0]["ipHostNumber"]; 97 } 98 } 99 // Fin selection et recherche des caracteristiques du serveur 100 101 if ( (!$create_folders_classes && ($stat_srv == "maitre" || $stat_srv == "esclave") ) || ( $create_folders_classes && count($new_folders_classes)==0 ) ) { 102 // Recherche de la liste des classes dans l'annuaire 103 $list_classes=search_groups("cn=Classe_*"); 104 // Recherche des sous dossiers classes deja existant sur le serveur selectionne 105 // Si serveur maitre 106 if ($stat_srv == "maitre" ) { 107 // Constitution d'un tableau avec les ressources deja existantes 108 $dirClasses = dir ("/var/se3/Classes"); 109 $indice=0; 110 while ( $Entry = $dirClasses ->read() ) { 111 if ( preg_match("/^Classe_/", $Entry) ) { 112 $RessourcesClasses[$indice] = $Entry; 113 $indice++; 114 } 115 } 116 } else { 117 // Si serveur esclave 118 exec ("ssh -l remote_adm $ipHostNumber 'ls /var/se3/Classes'", $RessourcesClasses, $ReturnValue); 119 } 120 // Creation d'un tableau des nouvelles ressources a creer par 121 // elimination des ressources deja existantes 122 $k=0; 123 for ($i=0; $i < count($list_classes); $i++ ) { 124 for ($j=0; $j < count($RessourcesClasses); $j++ ) { 125 if ( $list_classes[$i]["cn"] == $RessourcesClasses[$j]) { 126 $exist = true; 127 break; 128 } else { $exist = false; } 129 } 130 if (!$exist) { 131 $list_new_classes[$k]["cn"]= $list_classes[$i]["cn"]; 132 $k++; 133 } 134 } 135 // Affichage menu de selection des sous-dossiers classes a creer 136 if ( count($list_new_classes)>10) $size=10; else $size=count($list_new_classes); 137 if ( count($list_new_classes)>0) { 138 echo "<form action=\"create_folders_classes.php\" method=\"post\">\n"; 139 echo "<h3>".gettext("Création de ressources Classes sur")." $cn_srv : </h3>\n"; 140 echo "<p>".gettext("Sélectionnez les ressources classes à créer :")."</p>\n"; 141 echo "<select size=\"".$size."\" name=\"new_folders_classes[]\" multiple=\"multiple\">\n"; 142 for ($loop=0; $loop < count($list_new_classes); $loop++) { 143 echo "<option value=".$list_new_classes[$loop]["cn"].">".$list_new_classes[$loop]["cn"]."\n"; 144 } 145 echo "</select><br>\n"; 146 echo "<input type=\"hidden\" name=\"create_folders_classes\" value=\"true\">\n"; 147 echo "<input type=\"hidden\" name=\"cn_srv\" value=\"$cn_srv\">\n"; 148 echo "<input type=\"hidden\" name=\"stat_srv\" value=\"$stat_srv\">\n"; 149 echo "<input type=\"hidden\" name=\"ipHostNumber\" value=\"$ipHostNumber\">\n"; 150 echo "<input type=\"reset\" value=\"".gettext("Réinitialiser la sélection")."\">\n"; 151 echo "<input type=\"submit\" value=\"".gettext("Valider")."\">\n"; 152 echo "</form>\n"; 153 // Verification selection d'au moins une classe 154 if ( $create_folders_classes && count($new_folders_classes)==0 ) { 155 echo "<div class='error_msg'>".gettext("Vous devez sélectionner au moins une classe !")."</div>\n"; 156 } 157 } else { 158 echo "<div class='error_msg'>".gettext("Il n'y a pas de nouvelles classes à ajouter !")."</div>\n"; 159 } 160 } elseif ($create_folders_classes) { 161 // Creation du script bash 162 echo "<H3>".gettext("Vous avez sélectionné "). count($new_folders_classes).gettext(" classe(s) à créer sur le serveur")." $stat_srv <b>$cn_srv</b></H3>\n"; 163 // Construction du script admin.sh 164 $commandes = "#!/bin/bash\n"; 165 for ($loop=0; $loop < count($new_folders_classes); $loop++) { 166 $classe=$new_folders_classes[$loop]; 167 $folder_classe="/var/se3/Classes/".$new_folders_classes[$loop]; 168 // Creation du repertoire Classe 169 $commandes .="#".gettext("Creation du repertoire Classe")." $classe\n"; 170 $commandes .="mkdir $folder_classe\n"; 171 $commandes.="chown admin:nogroup $folder_classe\n"; 172 $commandes.="chmod 700 $folder_classe\n"; 173 174 // Application des acl posix pour le groupe de cette classe 175 $commandes.="#".gettext("Application des acl posix pour le groupe")." $classe\n"; 176 $commandes.="setfacl -m d:m::rwx $folder_classe\n"; 177 $commandes.="setfacl -m m::rwx $folder_classe\n"; 178 $commandes.="setfacl -m g:$classe:rx $folder_classe\n"; 179 180 // Application acl posix pour le groupe admins 181 $commandes.="\n#".gettext("Application des acl posix pour le groupe admins SE3 sur l'ensemble de l'arborescence")."\n"; 182 $commandes.="setfacl -m d:g:admins:rwx $folder_classe\n"; 183 $commandes.="setfacl -m g:admins:rwx $folder_classe\n"; 184 185 // Application acl posix pour le groupe Equipe_ de cette classe 186 $equipe = preg_replace("/Classe_/","Equipe_",$classe); 187 $commandes.="#".gettext("Application des acl posix pour le groupe")." $equipe\n"; 188 $commandes.="setfacl -m d:g:$equipe:rwx $folder_classe\n"; 189 $commandes.="setfacl -m g:$equipe:rx $folder_classe\n"; 190 191 // Recherche des eleves de cette classe 192 $uids = search_uids ("(cn=".$classe.")", "half"); 193 $commandes.="#Creation des sous dossiers eleves\n"; 194 for ($i=0; $i < count($uids); $i++) { 195 $eleve = $uids[$i]["uid"]; 196 $commandes.="mkdir $folder_classe/$eleve\n"; 197 $commandes.="chown admin:nogroup $folder_classe/$eleve\n"; 198 $commandes.="chmod 700 $folder_classe/$eleve\n"; 199 $commandes.="setfacl -m u:$eleve:rwx $folder_classe/$eleve\n"; 200 $commandes.="setfacl -m d:u:$eleve:rwx $folder_classe/$eleve\n"; 201 $commandes.="setfacl -m m::rwx $folder_classe/$eleve\n"; 202 $commandes.="\n"; 203 } 204 // Creation du sous dossier Profs 205 $commandes.="#".gettext("Creation du sous dossier professeurs")."\n"; 206 $commandes.="mkdir $folder_classe/_profs\n"; 207 $commandes.="chown admin:nogroup $folder_classe/_profs\n"; 208 $commandes.="chmod 700 $folder_classe/_profs\n"; 209 $commandes.="setfacl -m m::rwx $folder_classe/_profs\n"; 210 211 $commandes.="\n"; 212 // Creation du sous dossier travail 213 $commandes.="#".gettext("Creation du sous dossier travail")."\n"; 214 $commandes.="mkdir $folder_classe/_travail\n"; 215 $commandes.="chown admin:nogroup $folder_classe/_travail\n"; 216 $commandes.="chmod 700 $folder_classe/_travail\n"; 217 $commandes.="setfacl -m d:g:$classe:rx $folder_classe/_travail\n"; 218 $commandes.="setfacl -m g:$classe:rx $folder_classe/_travail \n"; 219 $commandes.="setfacl -m m::rwx $folder_classe/_travail\n"; 220 $commandes.="\n"; 221 } 222 // mel CR de creation ressources Classes 223 $Subject=gettext("[SE3 Tâche d'administration] Création de ressources Classes")."\n"; 224 list($user,$groups)=people_get_variables("admin", true); 225 $mel_adm=$user["email"]; 226 227 $commandes.="\n#".gettext("Mel CR creation ressources Classes")."\n"; 228 $commandes.="cat > /tmp/admind.tmp <<-EOF\n"; 229 $commandes.= gettext("La création des ressources Classes suivantes :")."\n"; 230 for ($loop=0; $loop < count($new_folders_classes); $loop++) { 231 $commandes.=$new_folders_classes[$loop]."\n"; 232 } 233 $commandes.= gettext("sur le serveur")." $cn_srv ".gettext("a été effectuée avec succès.")."\n"; 234 $commandes.= "\n"; 235 $commandes.= "EOF\n"; 236 $commandes.= "mail -s \"$Subject\" $mel_adm < /tmp/admind.tmp\n"; 237 //leb 238 $commandes1 = $commandes; 239 #echo "<tt>".str_replace("\n", "<br>\n",$commandes1)."</tt>"; 240 //leb 241 // Creation du script tmp_$stat_srv.sh sur le serveur maitre 242 $fp=@fopen("/var/remote_adm/tmp_".$stat_srv.".sh","w"); 243 if($fp) { 244 fputs($fp,$commandes."\n"); 245 fclose($fp); 246 chmod ("/var/remote_adm/tmp_$stat_srv.sh", 0600); 247 // Si creation sur le maitre 248 if ( $stat_srv == "maitre" ) { 249 // Si pas de presence de admin.sh 250 if ( !is_file("/var/remote_adm/admin.sh") ) { 251 // Renommage et chmod +x du script sur le maitre 252 rename ("/var/remote_adm/tmp_".$stat_srv.".sh", "/var/remote_adm/admin.sh"); 253 chmod ("/var/remote_adm/admin.sh", 0750); 254 if (file_exists("/var/remote_adm/admin.sh")) 255 echo $info_1; 256 else echo $alerte_3; 257 } else { 258 // Message d'alerte : Presence d'un admin.sh !! 259 echo $alerte_1.$stat_srv." ".$cn_srv.$alerte_2; 260 } 261 // Si creation sur un esclave copie du maitre vers l'esclave 262 } elseif ( $stat_srv == "esclave" ) { 263 // Recherche de la presence d'un admin.sh sur le serveur esclave 264 exec ("ssh -v -l remote_adm $ipHostNumber 'ls /var/remote_adm/admin.sh'", $AllOutput, $ReturnValue); 265 // Si pas de presence de admin.sh sur l'esclave 266 if (! $AllOutput[0]) { 267 // Copie du script sur l'esclave avec scp 268 exec ("/usr/bin/scp /var/remote_adm/tmp_$stat_srv.sh remote_adm@$ipHostNumber:tmp_$stat_srv.sh", $AllOutput, $ReturnValue); 269 // chmod +x , renommage du script bash 270 exec ("ssh -l remote_adm $ipHostNumber 'chmod +x /var/remote_adm/tmp_$stat_srv.sh;mv /var/remote_adm/tmp_$stat_srv.sh /var/remote_adm/admin.sh'", $AllOutput, $ReturnValue); 271 if ($ReturnValue==0) { 272 // Effacement de tmp_esclave.sh cree sur le maitre 273 unlink ("/var/remote_adm/tmp_esclave.sh"); 274 echo $info_1; 275 } else echo $alerte_3; 276 } else { 277 // Message d'alerte : Presence d'un admin_esclave.sh !! 278 echo $alerte_1.$stat_srv." ".$cn_srv.$alerte_2; 279 } 280 } 281 } else { 282 echo "<div class='error_msg'>".gettext("ERREUR : Impossible de créer le fichier d'ordonnancement de création de ressources classes !"). "</div>\n"; 283 } 284 } // Fin creation du script bash 285 } // Fin if is_admin 286 include ("pdp.inc.php"); 287 ?>
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 |