[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/var/www/se3/annu/ -> ldap_cleaner.php (source)

   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&#233;der &#224; 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 ("&nbsp;<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&#233;s &#224; un groupe principal et transfert ces comptes &#224; la corbeille.";
  95  $msg2="Visualise la liste des comptes transf&#233;r&#233;s dans la corbeille.";
  96  $msg3="Permet de r&#233;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&#233;pertoires homes des utilisateurs situ&#233;s dans la corbeille.";
  98  
  99  $msg4bis="D&#233;place les r&#233;pertoires homes des utilisateurs situ&#233;s dans la corbeille vers le dossier temporaire <br>/home/admin/_Trash_users.<br>";
 100  $msg4bis.="Cela donne un d&#233;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&#233; l\'effacement des homes sur l\'ensemble des serveurs qui partagent votre annuaire avec votre LCS ou votre SE3.<br>";
 103  $msg5 .="Le syst&#232me lance ensuite une recherche des fichiers n\'appartenant plus &#224; personne sur les ressources partag&#233;es de /var/se3 ";
 104  $msg6="Ce compte, n\'est pas r&#233;cup&#233;rable car il poss&#232;de un uid ou un uidnumber d&#233;sormais occup&#233;.";
 105  $msg7="Programme un scanne des partitions de stockage /home et /var/se3 &#224; 20h00. le scanne recherche les fichiers qui n\'appartiennent plus &#224; personne. Cela arrive lorsqu\'un utilsateur est parti mais qu\'il a laiss&#233; des fichiers en place.";
 106  $msg8="Supprime le r&#233;pertoire temporaire <br>/home/admin/_Trash_users dans lequel sont stock&#233;s d\'anciens homes.";
 107  
 108  // Messages
 109  $msg_confirm = "Avant de vider la corbeille, assurez-vous d'avoir pr&#233;alablement nettoy&#233; 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&#233;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&#233;cup&#233;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 &#171;homes&#187; des comptes orphelins</a>".msgaide($msg4)."ou <a href=\"ldap_cleaner.php?do=3&amp;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&#233;solution de probl&#232;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&#232;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\">&nbsp;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&#233;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 &#233;t&#233; r&#233;tablis comme membres du groupe Profs pour &#233;viter une mise &#224; la corbeille.<br />Si ce n'&#233;tait pas leur groupe d'appartenance initiale, il faudra corriger manuellement dans Annuaire/Acc&#232;s &#224; 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&#233;roul&#233; avec succ&#232;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\">&nbsp;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\">&nbsp;Il y a <STRONG>".count($users)."</STRONG> utilisateur";
 303                       if (count($users) > 1 ) echo "s";
 304                       echo "&nbsp;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\">&nbsp;Le nettoyage des r&#233;pertoires &#171;homes&#187; 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&#233placement 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&#233;.</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&#233;pertoires &#171;homes&#187; s'est d&#233;roul&#233; avec succ&#232;s.<br>";
 337                      }
 338                      else {
 339                          echo "<div class='error_msg'>Echec du nettoyage des r&#233;pertoires &#171;homes&#187; !</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\">&nbsp;Vidage de la corbeille en cours. Veuillez patienter...</div>";
 352              elseif ($phase == 2 ) {
 353                  //echo "Le nettoyage de la corbeille s'est d&#233;roul&#233; avec succ&#232;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&#233;roul&#233; avec succ&#232;s.<br><br>";
 362                                      echo "Une recherche sur les ressources partag&#233;es pour suppression des fichiers obsol&#232;tes a &#233;t&#233; lanc&#233;e en arri&#232;re plan.<br>";
 363                                      echo "Un mail r&#233;capitulatif vous sera envoy&#233;";
 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&#233;roul&#233; avec succ&#232;s.<br>";
 367  //                                    }
 368  //                                    else {
 369  //                                        echo "<div class='error_msg'>Echec du nettoyage des r&#233;pertoires &#171;/var/se3&#187; !</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&#233;nage : suppression des fichiers obsol&#232;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&#233;e, un mail r&#233;capitulatif vous sera envoy&#233.</div>"; 
 387                          }
 388                      break;        
 389                echo "Un mail r&#233;capitulatif vous sera envoy&#233;";
 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 &#224; transf&#233;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&nbsp;";
 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\">&nbsp;Il y a <STRONG>".count($users)."</STRONG> utilisateur";
 435                  if ( count($users) >= 2 ) echo "s";
 436                  echo "&nbsp;dans la corbeille qui r&#233;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&#233;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;'>&nbsp;Ce compte n'est pas r&#233;cup&#233;rable.&nbsp;".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&#233;cup&#233;rer'>\n";
 489                      $html.=" <input type='reset' Value='R&#233;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 &#224; 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&#233;cup&#233;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&#233;cup&#233;ration dans la cat&#233;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.="&nbsp;";
 602                                  $html.="</td>\n";
 603                                  $html.="<td style='text-align: center; width: 50px;'>";
 604                                  if ( $categorie == "Profs" ) $html.="<b>X</b>"; else $html.="&nbsp;";
 605                                  $html.="</td>\n";
 606                                  $html.="<td style='text-align: center; width: 50px;'>";
 607                                  if ( $categorie == "Administratifs" ) $html.="<b>X</b>"; else $html.="&nbsp;";
 608                                  $html.="</td></tr>\n";
 609                              } else $html.="<td colspan='3' style='color: red; text-align: center; width: 50px;'>Compte irr&#233;cup&#233;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&#233;lectionn&#233; d'utilisateur(s) &#224; r&#233;cup&#233;rer!</div>";
 617              }
 618          break; // Fin case
 619      }
 620  //} else echo "Vous n'avez pas les droits n&#233;cessaires pour cette action...";
 621  include ("pdp.inc.php");
 622  ?>


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