[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 3 4 /** 5 6 * Gestion des comptes orphelins 7 * @Version $Id: ldap_cleaner.php 7047 2012-03-29 14:39:06Z crob $ 8 9 * @Projet LCS / SambaEdu 10 11 * @auteurs jLCF jean-luc.chretien@tice.ac-caen.fr Equipe Tice academie de Caen 12 13 * @Licence Distribue selon les termes de la licence GPL 14 15 * @note 16 * @sudo /usr/share/se3/scripts/delHome.pl 17 */ 18 19 /** 20 21 * @Repertoire: annu 22 * file: ldap_cleaner.php 23 */ 24 25 26 27 28 include "entete.inc.php"; 29 include "ldap.inc.php"; 30 include "ihm.inc.php"; 31 include "crob_ldap_functions.php"; 32 33 34 if (ldap_get_right("se3_is_admin",$login)!="Y") 35 die (gettext("Vous n'avez pas les droits suffisants pour accéder à cette fonction")."</BO 36 DY></HTML>"); 37 38 39 40 41 42 $DEBUG=="false"; 43 44 45 function draw_table_result ( $msg_cat, $type1, $type2, $type3, $mode="" ) { 46 $html="<table style='margin-left: 200px; text-align: left; width: 450px;' border='1' cellpadding='1' cellspacing='1'>\n"; 47 $html.="<tbody>\n"; 48 $html.="<tr>\n"; 49 $html.="<td style='text-align: center; width: 300px; height: 20px; ' colspan='1' rowspan='2'>Utilisateur</td>\n"; 50 $html.="<td style='text-align: center; width: 150px; height: 20px; ' colspan='3' rowspan='1'>$msg_cat</td>\n"; 51 $html.="</tr>\n"; 52 $html.="<tr>\n"; 53 if($mode=='') { 54 $html.="<td style='text-align: center; width: 50px; height: 20px; '>$type1</td>\n"; 55 $html.="<td style='text-align: center; width: 50px; height: 20px;'>$type2</td>\n"; 56 $html.="<td style='text-align: center; width: 50px; height: 20px;'>$type3</td>\n"; 57 } 58 else { 59 $html.="<td style='text-align: center; width: 50px; height: 20px; '>$type1<br />"; 60 $html.="<a href='#' onclick=\"coche('1');return false;\"><img src='../elements/images/enabled.png' border='0' /></a>"; 61 $html.=" / "; 62 $html.="<a href='#' onclick=\"decoche('1');return false;\"><img src='../elements/images/disabled.png' border='0' /></a>"; 63 $html.="</td>\n"; 64 65 $html.="<td style='text-align: center; width: 50px; height: 20px; '>$type2<br />"; 66 $html.="<a href='#' onclick=\"coche('2');return false;\"><img src='../elements/images/enabled.png' border='0' /></a>"; 67 $html.=" / "; 68 $html.="<a href='#' onclick=\"decoche('2');return false;\"><img src='../elements/images/disabled.png' border='0' /></a>"; 69 $html.="</td>\n"; 70 71 $html.="<td style='text-align: center; width: 50px; height: 20px; '>$type3<br />"; 72 $html.="<a href='#' onclick=\"coche('3');return false;\"><img src='../elements/images/enabled.png' border='0' /></a>"; 73 $html.=" / "; 74 $html.="<a href='#' onclick=\"decoche('3');return false;\"><img src='../elements/images/disabled.png' border='0' /></a>"; 75 $html.="</td>\n"; 76 } 77 $html.="</tr>\n"; 78 $html.="<tr>\n"; 79 echo $html; 80 } // Fin function draw_table_result 81 82 83 84 /** 85 * Fonction qui affiche les info-bulles 86 * @Parametres msg le n du message a afficher 87 * @return l'info-bulle 88 */ 89 90 91 function msgaide($msg) { 92 return (" <u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('".$msg."')")."\"><img name=\"action_image2\" src=\"../elements/images/system-help.png\"></u>"); 93 } 94 $msg1="Recherche les comptes des utilisateurs qui ne sont plus affectés à un groupe principal et transfert ces comptes à la corbeille."; 95 $msg2="Visualise la liste des comptes transférés dans la corbeille."; 96 $msg3="Permet de réactiver un ou des comptes sous reserve que les uid et/ou les uidNumber de ces comptes soient encore libre."; 97 $msg4="Efface les répertoires homes des utilisateurs situés dans la corbeille."; 98 99 $msg4bis="Déplace les répertoires homes des utilisateurs situés dans la corbeille vers le dossier temporaire <br>/home/admin/_Trash_users.<br>"; 100 $msg4bis.="Cela donne un délais avant effacement et laisse la place libre dans /home/ pour un nouveau compte de meme uid."; 101 102 $msg5="Supprime les comptes de la corbeille !<br/><strong>ATTENTION</strong> : Ne supprimer les comptes de la corbeille que lorsque vous avez effectué l\'effacement des homes sur l\'ensemble des serveurs qui partagent votre annuaire avec votre LCS ou votre SE3.<br>"; 103 $msg5 .="Le système lance ensuite une recherche des fichiers n\'appartenant plus à personne sur les ressources partagées de /var/se3 "; 104 $msg6="Ce compte, n\'est pas récupérable car il possède un uid ou un uidnumber désormais occupé."; 105 $msg7="Programme un scanne des partitions de stockage /home et /var/se3 à 20h00. le scanne recherche les fichiers qui n\'appartiennent plus à personne. Cela arrive lorsqu\'un utilsateur est parti mais qu\'il a laissé des fichiers en place."; 106 $msg8="Supprime le répertoire temporaire <br>/home/admin/_Trash_users dans lequel sont stockés d\'anciens homes."; 107 108 // Messages 109 $msg_confirm = "Avant de vider la corbeille, assurez-vous d'avoir préalablement nettoyé les homes des comptes orphelins sur l'ensemble des serveurs qui partagent votre annuaire avec SE3.<br>"; 110 $msg_confirm .= "<a href=\"ldap_cleaner.php?do=4&phase=1\" target=\"main\">Nettoyage !</a>"; 111 112 echo "<html>\n"; 113 echo " <head>\n"; 114 echo " <title>...::: Interface d'administration Serveur SE3 :::...</title>\n"; 115 116 // Initialisation variables : 117 $PHP_SELF = $_SERVER['PHP_SELF']; 118 // Methode POST 119 $filtre = $_POST['filtre']; 120 //$filter_type = $_POST['filter']; 121 $filter_type = $_POST['filter_type']; 122 $nbr = $_POST['nbr']; 123 $cat = $_POST['cat']; 124 // Methodes POST ou GET 125 if ( isset($_POST['phase']) ) 126 $phase = $_POST['phase']; 127 elseif ( isset($_GET['phase']) ) 128 $phase = $_GET['phase']; 129 130 if ( isset($_POST['do']) ) 131 $do = $_POST['do']; 132 elseif ( isset($_GET['do']) ) 133 $do = $_GET['do']; 134 135 $mode_clean=isset($_POST['mode_clean']) ? $_POST['mode_clean'] : (isset($_GET['mode_clean']) ? $_GET['mode_clean'] : NULL); 136 137 // Redirection vers phase suivante, gestion du sablier 138 ### DEBUG echo "debug1 do:$do phase:$phase<br>"; 139 // Cas 1 : Transfert des utilisateurs dans la Trash 140 if( $do==1 && $phase!=1 ) { 141 ### DEBUG echo "debug2 do:$do phase:$phase<br>"; 142 echo "<meta HTTP-EQUIV=\"Refresh\" CONTENT=\"1;url='$PHP_SELF?do=1&phase=1'\">\n"; 143 } 144 // Cas 2 : Examiner le contenu de la corbeille 145 if( $do==2 && $phase!=1 ) { 146 ### DEBUG echo "debug2 do:$do phase:$phase<br>"; 147 echo "<meta HTTP-EQUIV=\"Refresh\" CONTENT=\"1;url='$PHP_SELF?do=2&phase=1'\">\n"; 148 } 149 // Cas 3 : Effacer les homes des comptes orphelins 150 if( $do==3 && $phase!=1 ) { 151 ### DEBUG echo "debug2 do:$do phase:$phase<br>"; 152 if(isset($mode_clean)) { 153 echo "<meta HTTP-EQUIV=\"Refresh\" CONTENT=\"1;url='$PHP_SELF?do=3&phase=1&mode_clean=$mode_clean'\">\n"; 154 } 155 else { 156 echo "<meta HTTP-EQUIV=\"Refresh\" CONTENT=\"1;url='$PHP_SELF?do=3&phase=1'\">\n"; 157 } 158 } 159 // Cas 4 : Vider la corbeille 160 if( $do==4 && $phase==1 ) { 161 ### DEBUG echo "debug2 do:$do phase:$phase<br>"; 162 echo "<meta HTTP-EQUIV=\"Refresh\" CONTENT=\"1;url='$PHP_SELF?do=4&phase=2'\">\n"; 163 } 164 // Cas 10 : Recuperation des utilisateurs de Trash vers People 165 if( $do==10 && $phase==2 ) { 166 ### DEBUG echo "debug2 $do $phase<br>"; 167 echo "<meta HTTP-EQUIV=\"Refresh\" CONTENT=\"1;url='$PHP_SELF?do=10&phase=3'\">\n"; 168 } 169 // Fin traitement des redirections 170 echo " </head>\n"; 171 echo " <body>\n"; 172 173 //if (is_admin("se3_is_admin",$login)=="Y") { 174 175 //Aide 176 $_SESSION["pageaide"]="Annuaire#Nettoyage_des_comptes"; 177 178 179 $html = "<div style=\"margin-bottom: 15%\"><H1>Gestion des comptes orphelins</H1>\n"; 180 $html .= "<H3>Opérations courantes</H3>\n"; 181 182 if ($do !="1") $html .= "<li><a href=\"ldap_cleaner.php?do=1\" target=\"main\">Transfert des comptes orphelins dans la corbeille</a>".msgaide($msg1)."</li>\n"; 183 if ($do !="2") $html .= "<li><a href=\"ldap_cleaner.php?do=2\" target=\"main\">Examiner le contenu de la corbeille</a>".msgaide($msg2)."</li>\n"; 184 $html .= "<li><a href=\"ldap_cleaner.php?do=10\" target=\"main\">Récupération de comptes orphelins depuis la corbeille</a>".msgaide($msg3)."</li>\n"; 185 //if ($do !="3") $html .= "<li><a href=\"ldap_cleaner.php?do=3\" target=\"main\">Effacer les homes des comptes orphelins</a>".msgaide($msg4)."</li>\n"; 186 if ($do !="3") { 187 $html .= "<li><a href=\"ldap_cleaner.php?do=3\" onclick=\"return getconfirm();\" target=\"main\">Effacer les «homes» des comptes orphelins</a>".msgaide($msg4)."ou <a href=\"ldap_cleaner.php?do=3&mode_clean=mv\" target=\"main\">les deplacer vers un dossier temporaire _Trash_users</a>".msgaide($msg4bis)."</li>\n"; 188 $html .= "<li><a href=\"ldap_cleaner.php?do=6\" target=\"main\">Supprimer le dossier temporaire _Trash_users</a>".msgaide($msg8)."</li>\n"; 189 190 } 191 if ($do !="4") $html .= "<li><a href=\"ldap_cleaner.php?do=4\" target=\"main\">Vider la corbeille et purger les fichiers inutiles sur /var/se3</a>".msgaide($msg5)."</li><br>\n"; 192 $html .= "<H3>Résolution de problème</H3>\n"; 193 $html .= "<li><a href=\"ldap_cleaner.php?do=5\" target=\"main\">Programmer la recherche et la suppression des fichiers utilisateurs obsolètes sur les partitions de stockage</a>".msgaide($msg7)."</li>\n"; 194 195 $html .="<p></p>"; 196 197 echo $html; 198 199 // Actions 200 switch ($do) { 201 case 1: 202 // Transfert des comptes orphelins dans la corbeille 203 if ( $phase != 1 ) 204 // Affichage du sablier 205 echo "<div align='center'><img src=\"images/wait.gif\" title=\"Patientez...\" align=\"middle\" border=\"0\"> Transfert des comptes orphelins dans la corbeille en cours. Veuillez patienter...</div>"; 206 else { 207 // On commence par controler s'il n'y a pas des utilisateurs qui ne sont plus ni dans Profs ni dans Eleves alors qu'ils ont le droit no_Trash_user 208 209 $tmp_tab_no_Trash_user=gof_members("no_Trash_user","rights",1); 210 if(count($tmp_tab_no_Trash_user)>0) { 211 echo "<p>Controle des titulaires du droit no_Trash_user avant d'effectuer le transfert des comptes orphelins.</p>\n"; 212 echo "<blockquote>\n"; 213 $cpt_retablissement_no_trash=0; 214 $attribut=array("cn"); 215 for($loop=0;$loop<count($tmp_tab_no_Trash_user);$loop++) { 216 $uid=$tmp_tab_no_Trash_user[$loop]; 217 //echo "\$tmp_tab_no_Trash_user[$loop]=$uid<br />"; 218 219 /* 220 $grp_no_Trash=""; 221 $tabtmp=get_tab_attribut("groups", "(&(cn=Profs)(memberuid=$uid))", $attribut); 222 if(count($tabtmp)>0) { 223 $grp_no_Trash="Profs"; 224 } 225 else { 226 $tabtmp=get_tab_attribut("groups", "(&(cn=Eleves)(memberuid=$uid))", $attribut); 227 if(count($tabtmp)>0) { 228 $grp_no_Trash="Eleves"; 229 } 230 } 231 */ 232 // S'ils ont ete supprimes de Eleves et Profs, on ne peut plus les reaffecter dans le bon groupe 233 // Par defaut, on les declare Profs (parce qu'il y a plus de chance qu'on mette un Prof en no_Trash_user qu'un eleve) et on alerte. 234 $grp_no_Trash="Profs"; 235 //echo "\$grp_no_Trash=$grp_no_Trash<br />"; 236 237 //if($grp_no_Trash!="") { 238 if(($grp_no_Trash!="")&&($uid!="admin")) { 239 $attribut=array("uid"); 240 $compte_existe=get_tab_attribut("people", "uid=$uid", $attribut); 241 if(count($compte_existe)==0) { 242 // Le compte n'existe plus... et on a oublie de nettoyer no_Trash_user 243 $attributs=array(); 244 $attributs["member"]="uid=$uid,".$dn["people"]; 245 246 echo "Le compte $uid n'existe plus.<br />Suppression de l'association de $uid au droit no_Trash_user: "; 247 if(modify_attribut("cn=no_Trash_user", "rights", $attributs, "del")) { 248 echo "<font color='green'>SUCCES</font>"; 249 } 250 else { 251 echo "<font color='red'>ECHEC</font>"; 252 } 253 } 254 else { 255 // On controle si le compte est membre du groupe $grp_no_Trash 256 $attribut=array("memberuid"); 257 $memberUid=get_tab_attribut("groups", "(&(cn=$grp_no_Trash)(memberuid=$uid))", $attribut); 258 if(count($memberUid)>0) { 259 echo "$uid est deja membre du groupe $grp_no_Trash."; 260 } 261 else { 262 echo "Rétablissement de $uid comme membre du groupe $grp_no_Trash: "; 263 $attributs=array(); 264 $attributs["memberuid"]=$uid; 265 if(modify_attribut ("cn=$grp_no_Trash", "groups", $attributs, "add")) { 266 echo "<font color='green'>SUCCES</font>"; 267 } 268 else { 269 echo "<font color='red'>ECHEC</font>"; 270 } 271 $cpt_retablissement_no_trash++; 272 } 273 } 274 echo "<br />\n"; 275 } 276 } 277 if($cpt_retablissement_no_trash>0) { 278 echo "<p>Un ou des utilisateurs ont été rétablis comme membres du groupe Profs pour éviter une mise à la corbeille.<br />Si ce n'était pas leur groupe d'appartenance initiale, il faudra corriger manuellement dans Annuaire/Accès à l'annuaire</p>\n"; 279 } 280 echo "</blockquote>\n"; 281 } 282 283 284 // Transfert des comptes orphelins dans la corbeille 285 exec ("/usr/share/se3/sbin/searchAndDelete.pl" ,$AllOutPut,$ReturnValue); 286 if ($ReturnValue == "0") 287 echo "Le transfert des comptes orphelins dans la corbeille s'est déroulé avec succès.<br>"; 288 else 289 echo "<div class=error_msg>Echec du tansfert des comptes orphelins dans la corbeille !</div>"; 290 } 291 break; 292 case 2 : 293 //Examiner le contenu de la corbeille 294 if ( $phase != 1 ) 295 // Affichage du sablier 296 echo "<div align='center'><img src=\"images/wait.gif\" title=\"Patientez...\" align=\"middle\" border=\"0\"> Examen du contenu de la poubelle. Veuillez patienter...</div>"; 297 else { 298 $users = search_people_trash ("cn=*"); 299 echo "<p><img src=\"images/"; 300 if (count($users) == 0 ) echo "Poubelle_vide.png"; 301 else echo "Poubelle_pleine.png"; 302 echo "\" alt=\"Corbeille\" width=\"51\" height=\"65\" align=\"middle\" border=\"0\"> Il y a <STRONG>".count($users)."</STRONG> utilisateur"; 303 if (count($users) > 1 ) echo "s"; 304 echo " dans la corbeille.</p>\n"; 305 echo "<UL>\n"; 306 for ($loop=0; $loop<count($users);$loop++) 307 echo "<LI>".utf8_decode($users[$loop]["cn"])."</LI>\n"; 308 echo "</UL>\n"; 309 } 310 break; 311 312 313 314 315 case 3 : 316 // Nettoyage des repertoires home 317 if ( $phase != 1 ) 318 // Affichage du sablier 319 echo "<div align='center'><img src=\"images/wait.gif\" title=\"Patientez...\" align=\"middle\" border=\"0\"> Le nettoyage des répertoires «homes» est en cours. Veuillez patienter...</div>"; 320 else { 321 //echo "\$_GET['mode_clean']=".$_GET['mode_clean']."<br />"; 322 if($mode_clean=='mv') { 323 echo "<h4>Déplacement des homes des comptes orhelins en cours...</h4>"; 324 system ("/usr/bin/sudo /usr/share/se3/scripts/clean_homes.sh -m" ,$ReturnValue); 325 //echo "\$ReturnValue=$ReturnValue<br />"; 326 if($ReturnValue!="0") {echo "<div class='error_msg'>Une erreur s'est produite !</div>";} 327 for($loop=0;$loop<count($AllOutPut);$loop++) { 328 //echo "\$AllOutPut[$loop]=".$AllOutPut[$loop]."<br />"; 329 echo $AllOutPut[$loop]." "; 330 } 331 echo "<p>Terminé.</p>\n"; 332 } 333 else { 334 system ("/usr/bin/sudo /usr/share/se3/scripts/clean_homes.sh -d" ,$ReturnValue); 335 if ($ReturnValue == "0") { 336 echo "Le nettoyage des répertoires «homes» s'est déroulé avec succès.<br>"; 337 } 338 else { 339 echo "<div class='error_msg'>Echec du nettoyage des répertoires «homes» !</div>"; 340 } 341 } 342 } 343 break; 344 case 4; 345 // Vidage de la corbeille 346 if ( $phase != 1 && $phase != 2 ) 347 // Affichage du message de confirmation 348 echo "<div class=error_msg>$msg_confirm</div>"; 349 elseif ($phase == 1 ) 350 // Affichage du sablier 351 echo "<div align='center'><img src=\"images/wait.gif\" title=\"Patientez...\" align=\"middle\" border=\"0\"> Vidage de la corbeille en cours. Veuillez patienter...</div>"; 352 elseif ($phase == 2 ) { 353 //echo "Le nettoyage de la corbeille s'est déroulé avec succès.<br>"; 354 $users = search_people_trash ("cn=*"); 355 for ($loop=0; $loop<count($users);$loop++) { 356 $entry="uid=".$users[$loop]["uid"].",".$dn["trash"]; 357 exec ("/usr/share/se3/sbin/entryDel.pl $entry" ,$AllOutPut,$ReturnValue); 358 } 359 $users = search_people_trash ("cn=*"); 360 if (count($users) == 0 ) { 361 echo "Le nettoyage de la corbeille s'est déroulé avec succès.<br><br>"; 362 echo "Une recherche sur les ressources partagées pour suppression des fichiers obsolètes a été lancée en arrière plan.<br>"; 363 echo "Un mail récapitulatif vous sera envoyé"; 364 system ("/usr/bin/sudo /usr/share/se3/scripts/clean_homes.sh -sv " ,$ReturnValue); 365 // if ($ReturnValue == "0") { 366 // echo "<br>Le nettoyage de /var/se3 s'est déroulé avec succès.<br>"; 367 // } 368 // else { 369 // echo "<div class='error_msg'>Echec du nettoyage des répertoires «/var/se3» !</div>"; 370 // } 371 372 } 373 else echo "<div class=error_msg>Echec du nettoyage de la corbeille !</div>"; 374 } 375 break; 376 377 case 5 : 378 //Grand menage !! 379 380 381 echo "<h4>Grand ménage : suppression des fichiers obsolètes sur /home et /var/se3</h4>"; 382 system ("/usr/bin/sudo /usr/share/se3/scripts/clean_homes.sh -sc" ,$ReturnValue); 383 //echo "\$ReturnValue=$ReturnValue<br />"; 384 if($ReturnValue!="0") {echo "<div class='error_msg'>Une erreur s'est produite???</div>";} 385 else { 386 echo "<div class='text'>Programmation pour 20h00 effectuée, un mail récapitulatif vous sera envoyé.</div>"; 387 } 388 break; 389 echo "Un mail récapitulatif vous sera envoyé"; 390 391 case 6 : 392 //Supression de trash_users !! 393 394 395 echo "<h4>Supression du dossier /home/admin/Trash_users en cours....</h4>"; 396 system ("/usr/bin/sudo /usr/share/se3/scripts/clean_homes.sh -t" ,$ReturnValue); 397 //echo "\$ReturnValue=$ReturnValue<br />"; 398 if($ReturnValue!="0") { 399 echo "<div class='error_msg'>Une erreur s'est produite !</div>"; } 400 else { 401 echo "<div class='text'>Suppression Ok !</div>"; 402 } 403 break; 404 405 case 10; 406 // Recuperation de comptes orphelins 407 // Choix d'un filtre de recherche 408 if ( $phase != 1 && $phase != 2 && $phase != 3) { 409 $html="<p><u>Recherche des comptes orphelins à transférer</u> :</p>\n"; 410 $html.="<div style='margin-left: 40px'>\n"; 411 $html.="<form action='ldap_cleaner.php?do=10' method = 'post'>\n"; 412 $html.="Filtre de recherche "; 413 $html.="<select name='filter_type'>\n"; 414 $html.="<option value='contient'>contient</option>\n"; 415 $html.="<option value='commence'>commence par</option>\n"; 416 $html.="<option value='finit'>finit par</option>\n"; 417 $html.="</select>\n"; 418 $html.="<input type='text' name='filtre'>\n"; 419 $html.="<input type='hidden' name='phase' Value='1'>\n"; 420 $html.="<input type='submit' Value='Rechercher'>\n"; 421 $html.="</form></div>\n"; 422 echo $html; 423 } elseif ( $phase == 1 ) { 424 // Affichage de la liste des comptes orphelins 425 // Interpretation du type de filtre 426 if ($filter_type == "contient" ) if ($filtre!="*") $filtre="*".$filtre."*"; 427 if ($filter_type == "commence" ) $filtre=$filtre."*"; 428 if ($filter_type == "finit" ) $filtre="*".$filtre; 429 // Recherche des utilisateurs repondant au critere 430 $users = search_people_trash ("cn=$filtre"); 431 echo "<div align='center'><img src=\"images/"; 432 if (count($users) == 0 ) echo "Poubelle_vide.png"; 433 else echo "Poubelle_pleine.png"; 434 echo "\" alt=\"Corbeille\" width=\"51\" height=\"65\" align=\"middle\" border=\"0\"> Il y a <STRONG>".count($users)."</STRONG> utilisateur"; 435 if ( count($users) >= 2 ) echo "s"; 436 echo " dans la corbeille qui répond"; 437 if ( count($users) >= 2 ) echo "ent"; 438 echo " au <em>filtre</em> de recherche.</div>\n"; 439 // Affichage de la liste des utilisateurs a recuperer 440 if ( count($users) > 0) { 441 $html="<form action='ldap_cleaner.php?do=10' method = 'post'>\n"; 442 // Tableau d'affichage des resultats 443 draw_table_result ("Catégorie", "Eleve", "Professeur", "Administratif","waouh"); 444 for ($loop=0; $loop<count($users);$loop++) { 445 $html.="<tr><td style='width: 300px;'>".utf8_decode( $users[$loop]["cn"] )."</td>\n"; 446 $NoRecup = false; 447 # test si on peut recuperer le compte 448 $attribut[0]="uidnumber"; 449 $tab=get_tab_attribut("people", "uid=*", $attribut); 450 for($i=0;$i<count($tab);$i++){ 451 if ( $tab[$i] == $users[$loop]["uidnumber"] ) { 452 $NoRecup = true; 453 break; 454 } 455 } 456 unset($attribut,$tab); 457 $attribut[0]="uid"; 458 $tab=get_tab_attribut("people", "uid=*", $attribut); 459 for($i=0;$i<count($tab);$i++){ 460 if ( $tab[$i] == $users[$loop]["uid"] ) { 461 $NoRecup = true; 462 break; 463 } 464 } 465 if($users[$loop]["employeenumber"]!="") { 466 unset($attribut,$tab); 467 $attribut[0]="employeenumber"; 468 $tab=get_tab_attribut("people", "uid=*", $attribut); 469 for($i=0;$i<count($tab);$i++){ 470 if ( $tab[$i] == $users[$loop]["employeenumber"] ) { 471 $NoRecup = true; 472 break; 473 } 474 } 475 } 476 if ( $NoRecup ) { 477 $html.="<td colspan='3' style='text-align: center; width: 150px; font-size:0.7em; font-weight:bold; color:#FDAF4E;'> Ce compte n'est pas récupérable. ".msgaide($msg6)."</td>\n"; 478 } else { 479 $html.="<td style='text-align: center; width: 50px;'><input type='radio' id='cat_1_".$loop."' name='cat[$loop]' value='".$users[$loop]["uid"]."@@Eleves'></td>\n"; 480 $html.="<td style='text-align: center; width: 50px;'><input type='radio' id='cat_2_".$loop."' name='cat[$loop]' value='".$users[$loop]["uid"]."@@Profs'></td>\n"; 481 $html.="<td style='text-align: center; width: 50px;'><input type='radio' id='cat_3_".$loop."' name='cat[$loop]' value='".$users[$loop]["uid"]."@@Administratifs'></td></tr>\n"; 482 } 483 } 484 $html.="</tbody>\n</table>\n"; 485 $html.="<input type='hidden' name='phase' Value='2'>\n"; 486 $html.="<input type='hidden' name='nbr' Value='$loop'>\n"; 487 $html.="<div style='margin-left: 200px'>\n"; 488 $html.="<input type='submit' Value='Récupérer'>\n"; 489 $html.=" <input type='reset' Value='Réinitialiser'>\n"; 490 $html.="</form></div>\n"; 491 492 $html.="<script type='text/javascript'> 493 function coche(col) { 494 for(i=0;i<".$loop.";i++) { 495 if(document.getElementById('cat_'+col+'_'+i)) { 496 document.getElementById('cat_'+col+'_'+i).checked=true; 497 } 498 } 499 } 500 501 function decoche(col) { 502 for(i=0;i<".$loop.";i++) { 503 if(document.getElementById('cat_'+col+'_'+i)) { 504 document.getElementById('cat_'+col+'_'+i).checked=false; 505 } 506 } 507 } 508 </script>\n"; 509 510 } else $html = "<div class='alert_msg'>Pas de transfert à effectuer !</div>\n"; 511 echo $html; 512 } elseif ( $phase == 2 ) { 513 // Transfert des comptes de trash -> peoples et positionnement des groupes principaux 514 // Transfert des utilisateurs selectionne dans /tmp/list_recup 515 for ($loop=0; $loop<$nbr;$loop++) { 516 if ( isset($cat[$loop]) ) { 517 $tmp = $cat[$loop]; 518 exec ("echo $tmp >> /tmp/list_recup"); 519 } 520 } 521 // Affichage du sablier 522 echo "<div align='center'><img src=\"images/wait.gif\" title=\"Patientez...\" align=\"middle\" border=\"0\"> Récupération des comptes orphelins en cours. Veuillez patienter...</div>"; 523 } elseif ( $phase == 3 ) { 524 // Recuperation des utilisateurs selectionnes 525 if ( file_exists("/tmp/list_recup") ) { 526 $fd = fopen("/tmp/list_recup", "r"); 527 draw_table_result ("Récupération dans la catégorie", "Eleve", "Professeur", "Administratif"); 528 while ( !feof($fd) ) { 529 $tmp = fgets($fd, 255); 530 $trash_member=explode("@@", $tmp); 531 // Nettoyage des espaces dans trash_member[1] 532 $categorie=trim($trash_member[1]); 533 // uid => $trash_member[0] 534 // Categorie $trash_member[1] 535 if ( $trash_member[0] != "" ) { 536 // Lecture des params de l'utilisateur selectionne dans la trash 537 $user = search_people_trash ("uid=$trash_member[0]"); 538 // Positionnement des constantes "objectclass" 539 $user[0]["sambaacctflags"]="[U ]"; 540 $user[0]["objectclass"][0]="top"; 541 $user[0]["objectclass"][1]="posixAccount"; 542 $user[0]["objectclass"][2]="shadowAccount"; 543 $user[0]["objectclass"][3]="person"; 544 $user[0]["objectclass"][4]="inetOrgPerson"; 545 $user[0]["objectclass"][5]="sambaAccount"; 546 $user[0]["objectclass"][5]="sambaSamAccount"; 547 ### DEBUG 548 if ( $DEBUG=="true" ) { 549 echo "------------------------------------------<br>"; 550 echo "sambaacctflags :".$user[0]["sambaacctflags"]."<br>"; 551 echo "sambapwdmustchange :".$user[0]["sambapwdmustchange"]."<br>"; 552 echo "sambantpassword :".$user[0]["sambantpassword"]."<br>"; 553 echo "sambalmpassword :".$user[0]["sambalmpassword"]."<br>"; 554 echo "sambaSID :".$user[0]["sambasid"]."<br>"; 555 echo "SambaprimaryGroup".$user[0]["sambaprimarygroupsid"]."<br>"; 556 echo "userPassword :".$user[0]["userpassword"]."<br>"; 557 echo "gecos :".$user[0]["gecos"]."<br>"; 558 echo "employeenumber :".$user[0]["employeenumber"]."<br>"; 559 echo "homedirectory :".$user[0]["homedirectory"]."<br>"; 560 echo "gidnumber :".$user[0]["gidnumber"]."<br>"; 561 echo "uidnumber :".$user[0]["uidnumber"]."<br>"; 562 echo "loginshell :".$user[0]["loginshell"]."<br>"; 563 echo "objectclass :".$user[0]["objectclass"][0]."<br>"; 564 echo "objectclass :".$user[0]["objectclass"][1]."<br>"; 565 echo "objectclass :".$user[0]["objectclass"][2]."<br>"; 566 echo "objectclass :".$user[0]["objectclass"][3]."<br>"; 567 echo "objectclass :".$user[0]["objectclass"][4]."<br>"; 568 echo "objectclass :".$user[0]["objectclass"][5]."<br>"; 569 echo "mail :".$user[0]["mail"]."<br>"; 570 echo "sn :".$user[0]["sn"]."<br>"; 571 echo "givenname :".$user[0]["givenname"]."<br>"; 572 echo "cn :".$user[0]["cn"]."<br>"; 573 echo "uid :".$user[0]["uid"]."<br>"; 574 echo "------------------------------------------<br>"; 575 } 576 ### FIN DEBUG 577 // Modification de l'entree dn ou=Trash -> ou=People 578 $ds = @ldap_connect ( $ldap_server, $ldap_port ); 579 if ( $ds ) { 580 $r = @ldap_bind ( $ds, $adminDn, $adminPw ); // Bind en admin 581 if ($r) { 582 // Ajout dans la branche people 583 if ( @ldap_add ($ds, "uid=".$user[0]["uid"].",".$dn["people"],$user[0] ) ) { 584 // Suppression de la branche Trash 585 @ldap_delete ($ds, "uid=".$user[0]["uid"].",".$dn["trash"] ); 586 // Ajout au groupe principal 587 @exec ("/usr/share/se3/sbin/groupAddUser.pl $trash_member[0] $categorie"); 588 $recup=true; 589 } else $recup=false; 590 } 591 } 592 ldap_close ( $ds ); 593 // Affichage des utilisateurs recuperes 594 $html="<tr><td style='width: 300px;'>"; 595 if ( $recup ) $html.="<a href='people.php?uid=".$user[0]["uid"]."'>"; 596 $html.=utf8_decode( $user[0]["cn"] ); 597 if ( $recup ) $html.="</a>"; 598 $html.="</td>\n"; 599 if ( $recup ) { 600 $html.="<td style='text-align: center; width: 50px;'>"; 601 if ( $categorie == "Eleves" ) $html.="<b>X</b>"; else $html.=" "; 602 $html.="</td>\n"; 603 $html.="<td style='text-align: center; width: 50px;'>"; 604 if ( $categorie == "Profs" ) $html.="<b>X</b>"; else $html.=" "; 605 $html.="</td>\n"; 606 $html.="<td style='text-align: center; width: 50px;'>"; 607 if ( $categorie == "Administratifs" ) $html.="<b>X</b>"; else $html.=" "; 608 $html.="</td></tr>\n"; 609 } else $html.="<td colspan='3' style='color: red; text-align: center; width: 50px;'>Compte irrécupérable !</td></tr>\n"; 610 echo $html; 611 } 612 } 613 fclose($fd); 614 unlink ("/tmp/list_recup"); 615 echo "</tbody>\n</table>\n"; 616 } else echo "<div class=error_msg>Vous n'avez pas sélectionné d'utilisateur(s) à récupérer!</div>"; 617 } 618 break; // Fin case 619 } 620 //} else echo "Vous n'avez pas les droits nécessaires pour cette action..."; 621 include ("pdp.inc.php"); 622 ?>
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 |