[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-clonage/sources/www/tftp/ -> action_unattend_xp_tftp.php (source)

   1  <?php
   2  /* $Id: action_unattend_xp_tftp.php 6533 2011-10-21 16:45:49Z olikin $
   3  ===========================================
   4     Projet SE3
   5     Dispositif SE3+TFTP+Sauvegarde/Restauration/Clonage
   6     Stephane Boireau
   7     Distribué selon les termes de la licence GPL
   8  =============================================
   9  */
  10  
  11  // loading libs and init
  12  include  "entete.inc.php";
  13  include  "ldap.inc.php";
  14  include  "ihm.inc.php";
  15  //require_once "../dhcp/dhcpd.inc.php";
  16  include  "printers.inc.php";
  17  
  18  require ("lib_action_tftp.php");
  19  
  20  //aide
  21  $_SESSION["pageaide"]="Le_module_Clonage_des_stations#Unattend_XP";
  22  
  23  // On active les rapports d'erreurs:
  24  //error_reporting(E_ALL);
  25  
  26  // Bibliothèque prototype Ajax pour afficher en décalé l'état des machines:
  27  echo "<script type='text/javascript' src='../includes/prototype.js'></script>\n";
  28  
  29  // CSS pour mes tableaux:
  30  echo "<link type='text/css' rel='stylesheet' href='tftp.css' />\n";
  31  
  32  if (is_admin("system_is_admin",$login)=="Y")
  33  {
  34      // Choix des parcs:
  35      $parc=isset($_POST['parc']) ? $_POST['parc'] : (isset($_GET['parc']) ? $_GET['parc'] : NULL);
  36      // Choix des machines:
  37      $id_machine=isset($_POST['id_machine']) ? $_POST['id_machine'] : (isset($_GET['id_machine']) ? $_GET['id_machine'] : NULL);
  38  
  39      $parametrage_action=isset($_POST['parametrage_action']) ? $_POST['parametrage_action'] : (isset($_GET['parametrage_action']) ? $_GET['parametrage_action'] : NULL);
  40  
  41  
  42      // Création de la table dès que possible:
  43      creation_tftp_tables();
  44  
  45      // Paramètres SliTaz:
  46      /*
  47      $nom_image=isset($_POST['nom_image']) ? $_POST['nom_image'] : (isset($_GET['nom_image']) ? $_GET['nom_image'] : NULL);
  48      $src_part=isset($_POST['src_part']) ? $_POST['src_part'] : (isset($_GET['src_part']) ? $_GET['src_part'] : NULL);
  49      $dest_part=isset($_POST['dest_part']) ? $_POST['dest_part'] : (isset($_GET['dest_part']) ? $_GET['dest_part'] : NULL);
  50      */
  51      //$auto_reboot=isset($_POST['auto_reboot']) ? $_POST['auto_reboot'] : (isset($_GET['auto_reboot']) ? $_GET['auto_reboot'] : NULL);
  52      //$delais_reboot=isset($_POST['delais_reboot']) ? $_POST['delais_reboot'] : (isset($_GET['delais_reboot']) ? $_GET['delais_reboot'] : NULL);
  53  
  54      // Paramètres concernant l'action immédiate sur les machines choisies:
  55      $wake=isset($_POST['wake']) ? $_POST['wake'] : (isset($_GET['wake']) ? $_GET['wake'] : "n");
  56      $shutdown_reboot=isset($_POST['shutdown_reboot']) ? $_POST['shutdown_reboot'] : (isset($_GET['shutdown_reboot']) ? $_GET['shutdown_reboot'] : NULL);
  57  
  58  
  59      echo "<h1>".gettext("Action Unattend XP")."</h1>\n";
  60  
  61      if(!isset($parc)){
  62          echo "<p>Cette page doit vous permettre de programmer une installation de XP via Unattended sur les machines choisies.</p>\n";
  63  
  64          echo "<p>Choisissez un ou des parcs:</p>\n";
  65  
  66          $list_parcs=search_machines("objectclass=groupOfNames","parcs");
  67          if ( count($list_parcs)==0) {
  68              echo "<br><br>";
  69              echo gettext("Il n'existe aucun parc. Vous devez d'abord créer un parc");
  70              include ("pdp.inc.php");
  71              exit;
  72          }
  73          sort($list_parcs);
  74  
  75          echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n";
  76  
  77          // Affichage des parcs sur 3/4 colonnes
  78          $nb_parcs_par_colonne=round(count($list_parcs)/3);
  79          echo "<table border='0'>\n";
  80          echo "<tr valign='top'>\n";
  81          echo "<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>\n";
  82          echo "<td align='left'>\n";
  83          for ($loop=0; $loop < count($list_parcs); $loop++) {
  84              if(($loop>0)&&(round($loop/$nb_parcs_par_colonne)==$loop/$nb_parcs_par_colonne)){
  85                  echo "</td>\n";
  86                  echo "<td align='left'>\n";
  87              }
  88  
  89              echo "<label for='parc_$loop'><input type='checkbox' id='parc_$loop' name='parc[]' value=\"".$list_parcs[$loop]["cn"]."\" />".$list_parcs[$loop]["cn"]."</label>\n";
  90              echo "<br />\n";
  91          }
  92  
  93          echo "</td>\n";
  94          echo "</tr>\n";
  95          echo "</table>\n";
  96  
  97          echo "<p align='center'><input type=\"submit\" name=\"submit\" value=\"Valider\" /></p>\n";
  98  
  99          echo "</form>\n";
 100  
 101          echo "<p><a href='index.php'>Retour à l'index</a>.</p>\n";
 102      }
 103      else {
 104          if(!isset($_POST['parametrage_action'])){
 105  
 106              echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n";
 107              echo "<input type=\"hidden\" name=\"parametrage_action\" value=\"1\" />\n";
 108              $max_eff_parc=0;
 109              for($i=0;$i<count($parc);$i++){
 110  
 111                  echo "<h2>Parc $parc[$i]</h2>\n";
 112                  echo "<input type=\"hidden\" name=\"parc[]\" value=\"$parc[$i]\" />\n";
 113  
 114                  $mp=gof_members($parc[$i],"parcs",1);
 115                  $nombre_machine=count($mp);
 116                  sort($mp);
 117  
 118                  //echo "<table border='1'>\n";
 119                  echo "<table class='crob'>\n";
 120                  echo "<tr>\n";
 121  
 122                  echo "<th>Nom</th>\n";
 123                  echo "<th>Etat</th>\n";
 124                  echo "<th>Session</th>\n";
 125                  echo "<th>Config DHCP</th>\n";
 126  
 127                  //echo "<th>Sauvegarde</th>\n";
 128                  echo "<th>Install XP unattend<br />\n";
 129                  echo "<a href='#' onclick='check_machine($i,\"check\");return false'><img src=\"../elements/images/enabled.gif\" border='0' alt=\"Tout cocher\" title=\"Tout cocher\" /></a>\n";
 130                  echo " / <a href='#' onclick='check_machine($i,\"uncheck\");return false'><img src=\"../elements/images/disabled.gif\" border='0' alt=\"Tout décocher\" title=\"Tout décocher\" /></a>\n";
 131                  echo "</th>\n";
 132                  echo "<th>Actions programmées</th>\n";
 133                  echo "</tr>\n";
 134  
 135                  for ($loop=0; $loop < count($mp); $loop++) {
 136                      $mpenc=urlencode($mp[$loop]);
 137  
 138                      // Test si on a une imprimante ou une machine
 139                      $resultat=search_imprimantes("printer-name=$mpenc","printers");
 140                      $suisje_printer="non";
 141                      for ($loopp=0; $loopp < count($resultat); $loopp++) {
 142                          if ($mpenc==$resultat[$loopp]['printer-name']) {
 143                              $suisje_printer="yes";
 144                              continue;
 145                          }
 146                      }
 147  
 148                      if($suisje_printer=="non") {
 149                          // Réinitialisation:
 150                          $id_machine="";
 151  
 152                          echo "<tr>\n";
 153                          echo "<td width='20%'>".$mp[$loop]."</td>\n";
 154  
 155                          // Etat: allumé ou éteint
 156                          echo "<td width='20%'>";
 157                          $mp_curr=search_machines2("(&(cn=$mpenc)(objectClass=ipHost))","computers");
 158                          if ($mp_curr[0]["ipHostNumber"]) {
 159                              $iphost=$mp_curr[0]["ipHostNumber"];
 160  
 161                              echo "<div id='divip$loop'>Patientez</div>\n";
 162                              echo "<script type='text/javascript'>
 163                                  // <![CDATA[
 164                                  new Ajax.Updater($('divip$loop'),'ajax_lib.php?ip=$iphost&mode=ping_ip',{method: 'get'});
 165                                  //]]>
 166                              </script>\n";
 167                          }
 168                          echo "</td>\n";
 169  
 170  
 171                          // Session: ouverte ou pas... sous quelle identité
 172                          echo "<td width='20%'>\n";
 173                          echo "<div id='divsession$loop'>Patientez</div>\n";
 174                          echo "<script type='text/javascript'>
 175                              // <![CDATA[
 176                              new Ajax.Updater($('divsession$loop'),'ajax_lib.php?nom_machine=".$mp[$loop]."&mode=session',{method: 'get'});
 177                              //]]>
 178                          </script>\n";
 179                          echo "</td>\n";
 180  
 181  
 182                          // Etat config DHCP:
 183                          // Par la suite il ne faudra pas prendre les IP dans l'annuaire,
 184                          // mais dans la config DHCP parce que ce sont ces IP qui seront attribuées lors du boot PXE
 185                          echo "<td width='20%'>\n";
 186                          //$mp_curr=search_machines("(&(cn=$mpenc)(objectClass=ipHost))","computers");
 187                          if ($mp_curr[0]["macAddress"]) {
 188                              $sql="SELECT * FROM se3_dhcp WHERE mac='".$mp_curr[0]["macAddress"]."';";
 189                              // mp_curr[0]["macAddress"] correspond à une adresse mac recherchée dans l'annuaire LDAP.
 190                              // Si les machines ont été changées et que l'on a ré-attribué le nom, il faut penser à nettoyer l'entrée dans l'annuaire:
 191                              // source /usr/share/se3/sbin/variables_admin_ldap.sh
 192                              // ldapdelete -x -D $ROOTDN -w $PASSDN cn=NOM_MACHINE,ou=Computers,$BASEDN
 193                              // Et se reconnecter une fois sur la machine pour que le connexion.pl renseigne une nouvelle entrée cn=NOM_MACHINE
 194                              //echo "$sql<br />";
 195                              $res=mysql_query($sql);
 196                              if(mysql_num_rows($res)>0) {
 197                                  $lig=mysql_fetch_object($res);
 198                                  $id_machine=$lig->id;
 199  
 200                                  //echo $lig->ip;
 201                                  echo "<img src=\"../elements/images/enabled.gif\" border='0' alt=\"$lig->ip\" title=\"$lig->ip\" />";
 202                              }
 203                              else {
 204                                  echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'adresse IP attribuée\" title=\"Pas d'adresse IP attribuée\" />";
 205                              }
 206                          }
 207                          else {
 208                              echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'adresse MAC dans l'annuaire???\" title=\"Pas d'adresse MAC dans l'annuaire???\" />";
 209                          }
 210                          echo "</td>\n";
 211  
 212  
 213                          // Sélection des machines à sauvegarder:
 214                          echo "<td width='20%'>\n";
 215                          /*
 216                          foreach($mp_curr[0] as $champ => $valeur) {
 217                              echo "\$mp_curr[0]['$champ']=$valeur<br />";
 218                          }
 219                          */
 220                          if($id_machine!=""){
 221                              echo "<input type='checkbox' name='id_machine[]' id='machine_".$i."_".$loop."' value='$id_machine' />\n";
 222                          }
 223                          else {
 224                              echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Il faut commencer par effectuer la configuration DHCP\" title=\"Il faut commencer par effectuer la configuration DHCP\" />";
 225                          }
 226                          echo "</td>\n";
 227  
 228  
 229                          // Action programmée
 230                          echo "<td>\n";
 231                          if($id_machine!=""){
 232                              $sql="SELECT * FROM se3_tftp_action WHERE id='".$id_machine."';";
 233                              $res=mysql_query($sql);
 234                              if(mysql_num_rows($res)>0) {
 235                                  $lig=mysql_fetch_object($res);
 236                                  echo "<a href='visu_action.php?id_machine=$id_machine' target='_blank'>$lig->type programmé(e)</a>";
 237                              }
 238                              else {
 239                                  echo "<img src=\"../elements/images/disabled.gif\" border='0' alt=\"Pas d'action programmée\" title=\"Pas d'action programmée\" />";
 240                              }
 241                          }
 242                          echo "</td>\n";
 243  
 244                          echo "</tr>\n";
 245                      }
 246                  }
 247                  echo "</table>\n";
 248                  if($max_eff_parc<$loop) {$max_eff_parc=$loop;}
 249              }
 250  
 251              echo "<script type='text/javascript'>
 252  	function check_machine(num_parc,mode) {
 253          for(i=0;i<$max_eff_parc;i++){
 254              if(document.getElementById('machine_'+num_parc+'_'+i)){
 255                  if(mode=='check'){
 256                      document.getElementById('machine_'+num_parc+'_'+i).checked=true;
 257                  }
 258                  else{
 259                      document.getElementById('machine_'+num_parc+'_'+i).checked=false;
 260                  }
 261              }
 262          }
 263      }
 264  </script>\n";
 265  
 266              echo "<p align='center'><input type=\"submit\" name=\"submit\" value=\"Valider\" /></p>\n";
 267              echo "</form>\n";
 268  
 269  
 270          }
 271          else {
 272              $validation_parametres=isset($_POST['validation_parametres']) ? $_POST['validation_parametres'] : (isset($_GET['validation_parametres']) ? $_GET['validation_parametres'] : NULL);
 273              if(!isset($validation_parametres)) {
 274                  echo "<h2>Paramétrage du lancement de l'installation</h2>\n";
 275  
 276                  $nombre_machines=count($id_machine);
 277                  if($nombre_machines==0){
 278                      echo "<p>ERREUR: Il faut choisir au moins une machine.</p>\n";
 279  
 280                      echo "<p><a href='#' onclick='history.go(-1);'>Retour au choix des machines sur lesquelles installer XP.</a>.</p>\n";
 281  
 282                      echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour au choix du/des parc(s)</a>.</p>\n";
 283                      include ("pdp.inc.php");
 284                      exit();
 285                  }
 286  
 287                  echo "<form method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">\n";
 288                  echo "<input type=\"hidden\" name=\"parametrage_action\" value=\"1\" />\n";
 289                  // Liste des parcs:
 290                  for($i=0;$i<count($parc);$i++){
 291                      echo "<input type=\"hidden\" name=\"parc[]\" value=\"$parc[$i]\" />\n";
 292                  }
 293  
 294                  // Liste des machines sur lesquelles lancer l'install:
 295                  $chaine="";
 296                  for($i=0;$i<count($id_machine);$i++){
 297                      if($i>0) {$chaine.=", ";}
 298                      $sql="SELECT * FROM se3_dhcp WHERE id='".$id_machine[$i]."';";
 299                      //echo "$sql<br />";
 300                      $res=mysql_query($sql);
 301                      if(mysql_num_rows($res)>0) {
 302                          $lig=mysql_fetch_object($res);
 303                          $chaine.=$lig->name;
 304                          echo "<input type=\"hidden\" name=\"id_machine[]\" value=\"$id_machine[$i]\" />\n";
 305                      }
 306                  }
 307                  if(count($id_machine)>1){$s="s";}else{$s="";}
 308                  echo "<p>Machine$s concernée$s: $chaine</p>\n";
 309  
 310  
 311                  // Date pour le nom de l'image à générer:
 312                  $aujourdhui = getdate();
 313                  $mois_se3 = sprintf("%02d",$aujourdhui['mon']);
 314                  $jour_se3 = sprintf("%02d",$aujourdhui['mday']);
 315                  $annee_se3 = $aujourdhui['year'];
 316                  $heure_se3 = sprintf("%02d",$aujourdhui['hours']);
 317                  $minute_se3 = sprintf("%02d",$aujourdhui['minutes']);
 318                  $seconde_se3 = sprintf("%02d",$aujourdhui['seconds']);
 319  
 320                  $date_se3=$annee_se3.$mois_se3.$jour_se3;
 321  
 322                  echo "<p>Choisissez les paramètres pour le lancement de l'installation: <br />\n";
 323  
 324  echo "<style type='text/css'>
 325  table.crob {
 326      border-style: solid;
 327      border-width: 1px;
 328      border-color: black;
 329      border-collapse: collapse;
 330  }
 331  
 332  .crob th {
 333      border-style: solid;
 334      border-width: 1px;
 335      border-color: black;
 336      background-color: khaki;
 337      font-weight:bold;
 338      text-align:center;
 339      vertical-align: middle;
 340  }
 341  
 342  .crob td {
 343      text-align:center;
 344      vertical-align: middle;
 345      border-style: solid;
 346      border-width: 1px;
 347      border-color: black;
 348  }
 349  
 350  .crob .lig-1 {
 351      background-color: #6699cc;
 352  }
 353  .crob .lig1 {
 354      background-color: #FFFFFF;
 355  }
 356  </style>\n";
 357  
 358                  echo "<table border='1' class='crob'>\n";
 359  
 360  //===========================================================
 361  echo "<tr>\n";
 362  echo "<td valign='top'>Partitionnement</td>\n";
 363  echo "<td valign='top'>\n";
 364      echo "<table>\n";
 365      echo "<tr>\n";
 366  
 367      echo "<td valign='top'>Partitionnement :</td>\n";
 368      echo "<td style='text-align:left;'>\n";
 369      echo "<input type='radio' name='fdisk_cmds' id='fdisk_cmds0' value='0' checked /><label for='fdisk_cmds0'> Supprimer toutes les partitions et créer une unique partition NTFS</label><br />\n";
 370      echo "<input type='radio' name='fdisk_cmds' id='fdisk_cmds1' value='1' /><label for='fdisk_cmds1'> Formater puis installer sur la première partition principale sans toucher à la table de partitions</label><br />\n";
 371      echo "<input type='radio' name='fdisk_cmds' id='fdisk_cmds2' value='2' /><label for='fdisk_cmds2'> Formater puis installer sur la deuxième partition principale sans toucher à la table de partitions</label><br />\n";
 372      echo "</td>\n";
 373      echo "</tr>\n";
 374      
 375      echo "<tr>\n";
 376      echo "<td valign='top'>Ecraser le MBR :</td>\n";
 377      echo "<td style='text-align:left;'>\n";
 378      echo "<input type='radio' name='replace_mbr' id='replace_mbr1' value='1' checked /><label for='replace_mbr1'> Oui</label><br />\n";
 379      echo "<input type='radio' name='replace_mbr' id='replace_mbr0' value='0' /><label for='replace_mbr0'> Non</label><br />\n";
 380      echo "</td>\n";
 381      echo "</tr>\n";
 382      echo "</table>\n";
 383  
 384  echo "</td>\n";
 385  echo "</tr>\n";
 386  //===========================================================
 387  echo "<tr>\n";
 388  echo "<td valign='top'>Display</td>\n";
 389  echo "<td align='left'>\n";
 390      echo "<table>\n";
 391      echo "<tr>\n";
 392  
 393      echo "<td valign='top'>Nombre de couleurs :</td>\n";
 394      echo "<td style='text-align:left;'>\n";
 395      echo "<input type='radio' name='BitsPerPel' id='BitsPerPel0' value='16' checked /><label for='BitsPerPel0'> 16</label><br />\n";
 396      echo "<input type='radio' name='BitsPerPel' id='BitsPerPel1' value='32' /><label for='BitsPerPel1'> 32</label><br />\n";
 397      echo "</td>\n";
 398      echo "</tr>\n";
 399      
 400      echo "<tr>\n";
 401      echo "<td valign='top'>Résolution :</td>\n";
 402      echo "<td style='text-align:left;'>\n";
 403      echo "<input type='radio' name='Xresolution' id='Xresolution800' value='800' /><label for='Xresolution800'> 800*600</label><br />\n";
 404      echo "<input type='radio' name='Xresolution' id='Xresolution1024' value='1024' checked /><label for='Xresolution1024'> 1024*768</label><br />\n";
 405      echo "<input type='radio' name='Xresolution' id='Xresolution1280' value='1280' /><label for='Xresolution1280'> 1280*800</label><br />\n";
 406      echo "</td>\n";
 407      echo "</tr>\n";
 408      echo "</table>\n";
 409  
 410  echo "</td>\n";
 411  echo "</tr>\n";
 412  //===========================================================
 413  echo "<tr>\n";
 414  echo "<td valign='top'>Mises à jour</td>\n";
 415  echo "<td align='left'>\n";
 416      echo "<table>\n";
 417      echo "<tr>\n";
 418  /*
 419  DisableDynamicUpdates=Yes
 420  Si vous mettez la valeur " Yes ", vous obligerez Windows à ne pas se connecter à Windows Update lors de son installation.
 421  */
 422      echo "<td valign='top'>Ne pas se connecter à Windows Update lors de l'installation :</td>\n";
 423      echo "<td style='text-align:left;'>\n";
 424      echo "<input type='radio' name='DisableDynamicUpdates' id='DisableDynamicUpdatesYes' value='yes' /><label for='DisableDynamicUpdatesYes'> Oui</label><br />\n";
 425      echo "<input type='radio' name='DisableDynamicUpdates' id='DisableDynamicUpdatesNo' value='no' checked /><label for='DisableDynamicUpdatesNo'> Non</label><br />\n";
 426      echo "</td>\n";
 427      echo "</tr>\n";
 428      
 429      echo "<tr>\n";
 430      echo "<td valign='top'>Activer les mises à jour automatiques de Windows :</td>\n";
 431      echo "<td style='text-align:left;'>\n";
 432      echo "<input type='radio' name='AutomaticUpdates' id='AutomaticUpdatesYes' value='yes' checked /><label for='AutomaticUpdatesYes'> Oui</label><br />\n";
 433      echo "<input type='radio' name='AutomaticUpdates' id='AutomaticUpdatesNo' value='no' /><label for='AutomaticUpdatesNo'> Non</label><br />\n";
 434      echo "</td>\n";
 435      echo "</tr>\n";
 436      echo "</table>\n";
 437  
 438  echo "</td>\n";
 439  echo "</tr>\n";
 440  //===========================================================
 441  /*
 442  echo "<tr>\n";
 443  echo "<td colspan='2' bgcolor='grey'>\n";
 444  echo "&nbsp;";
 445  echo "</td>\n";
 446  echo "</tr>\n";
 447  */
 448  //===========================================================
 449  echo "<tr>\n";
 450  echo "<td valign='top'><p>Composants Windows XP</p></td>\n";
 451  echo "<td style='text-align:left;'>\n";
 452  
 453      /*
 454      echo "<table>\n";
 455      echo "<tr>\n";
 456      echo "<td></td>\n";
 457      echo "<td>\n";
 458      echo "</td>\n";
 459      echo "</tr>\n";
 460      echo "</table>\n";
 461      */
 462      echo "<a name='win_components'></a>";
 463      echo "<p><a href='#win_components' onclick='display_div_components();'>Sélection des composants à installer</a></p>\n";
 464  
 465      echo "<div id='div_components'>\n";
 466      echo "<table>\n";
 467  /*
 468      echo "<tr>
 469            <td width='67%'>Options d'accessibilit&eacute;s</td>
 470            <td width='33%' style='text-align:left;'>
 471              <select name='accessopt' id='accessopt'>
 472                  <option value='on' selected='selected'>oui</option>
 473                  <option value='off'>non</option>
 474              </select>
 475            </div></td>
 476          </tr>
 477          <tr>
 478            <td style='text-align:left;'>Calculatrice</td>
 479            <td style='text-align:center;'>
 480              <select name='calc' id='calc'>
 481  
 482                  <option value='on' selected='selected'>oui</option>
 483                  <option value='off'>non</option>
 484              </select>
 485            </div></td>
 486          </tr>
 487          <tr>
 488            <td style='text-align:left;'>Table des caract&egrave;res sp&eacute;ciaux </td>
 489  
 490            <td style='text-align:center;'>
 491              <select name='charmap' id='charmap'>
 492                  <option value='on' selected='selected'>oui</option>
 493                  <option value='off'>non</option>
 494              </select>
 495            </div></td>
 496          </tr>
 497  
 498          <tr>
 499            <td style='text-align:left;'>Hyper Terminal</td>
 500  
 501            <td style='text-align:center;'>
 502              <select name='hypertrm' id='hypertrm'>
 503                  <option value='on' selected='selected'>oui</option>
 504                  <option value='off'>non</option>
 505              </select>
 506            </div></td>
 507          </tr>
 508  
 509          <tr>
 510            <td style='text-align:left;'>Chat (rien avoir avec windows messenger; utile pour les popup)</td>
 511            <td style='text-align:center;'>
 512              <select name='chat' id='chat'>
 513                  <option value='on' selected='selected'>oui</option>
 514                  <option value='off'>non</option>
 515              </select>
 516            </div></td>
 517  
 518          </tr>
 519  
 520          <tr>
 521            <td style='text-align:left;'>Fonds d' &eacute;cran standards de windows </td>
 522            <td style='text-align:center;'>
 523              <select name='deskpaper' id='deskpaper'>
 524                  <option value='on'>oui</option>
 525                  <option value='off' selected='selected'>non</option>
 526  
 527              </select>
 528            </div></td>
 529          </tr>
 530  
 531          <tr>
 532            <td style='text-align:left;'>Utilitaire de D&eacute;bogage de Microsoft </td>
 533            <td style='text-align:center;'>
 534              <select name='iisdbg' id='iisdbg'>
 535                  <option value='on'>oui</option>
 536                  <option value='off' selected='selected'>non</option>
 537              </select>
 538            </div></td>
 539          </tr>
 540          <tr>
 541            <td style='text-align:left;'>Service d' indexation des fichiers</td>
 542            <td style='text-align:center;'>
 543              <select name='indexsrv_system' id='indexsrv_system'>
 544                  <option value='on'>oui</option>
 545                  <option value='off' selected='selected'>non</option>
 546  
 547              </select>
 548            </div></td>
 549          </tr>
 550  
 551          <tr>
 552            <td style='text-align:left;'>Fichiers sons suppl&eacute;mentaires </td>
 553            <td style='text-align:center;'>
 554              <select name='media_clips' id='media_clips'>
 555                  <option value='on'>oui</option>
 556  
 557                  <option value='off' selected='selected'>non</option>
 558              </select>
 559            </div></td>
 560          </tr>
 561          <tr>
 562            <td style='text-align:left;'>Fichiers sons du mod&egrave;le Utopia</td>
 563            <td style='text-align:center;'>
 564  
 565              <select name='media_utopia' id='media_utopia'>
 566                  <option value='on'>oui</option>
 567                  <option value='off' selected='selected'>non</option>
 568              </select>
 569            </div></td>
 570          </tr>
 571          <tr>
 572            <td style='text-align:left;'>Diff&eacute;rents pointeurs de la souris</td>
 573            <td style='text-align:center;'>
 574              <select name='mousepoint' id='mousepoint'>
 575                  <option value='on'>oui</option>
 576                  <option value='off' selected='selected'>non</option>
 577              </select>
 578            </div></td>
 579          </tr>
 580  
 581          <tr>
 582            <td style='text-align:left;'>Windows Media Player</td>
 583            <td style='text-align:center;'>
 584              <select name='mplay' id='mplay'>
 585                  <option value='on' selected='selected'>oui</option>
 586                  <option value='off'>non</option>
 587              </select>
 588            </div></td>
 589          </tr>
 590  
 591          <tr>
 592            <td style='text-align:left;'>Wordpad</td>
 593            <td style='text-align:center;'>
 594              <select name='mswordpad' id='mswordpad'>
 595                  <option value='on' selected='selected'>oui</option>
 596  
 597                  <option value='off'>non</option>
 598              </select>
 599            </div></td>
 600          </tr>
 601          <tr>
 602            <td style='text-align:left;'>Microsoft Paint</td>
 603            <td style='text-align:center;'>
 604              <select name='paint' id='paint'>
 605                  <option value='on' selected='selected'>oui</option>
 606                  <option value='off'>non</option>
 607              </select>
 608            </div></td>
 609          </tr>
 610  
 611          <tr>
 612            <td style='text-align:left;'>Magn&eacute;tophone</td>
 613            <td style='text-align:center;'>
 614              <select name='rec' id='rec'>
 615                  <option value='on' selected='selected'>oui</option>
 616                  <option value='off'>non</option>
 617              </select>
 618            </div></td>
 619  
 620          </tr>
 621          <tr>
 622            <td style='text-align:left;'>Utilitaire de r&eacute;glage du volume du son.</td>
 623            <td style='text-align:center;'>
 624  
 625              <select name='vol' id='vol'>
 626                  <option value='on' selected='selected'>oui</option>
 627                  <option value='off'>non</option>
 628              </select>
 629            </div></td>
 630          </tr>
 631  
 632          <tr>
 633            <td style='text-align:left;'>Diff&eacute;rents raccourcis d' Internet exploreur.</td>
 634            <td style='text-align:center;'>
 635              <select name='IEAccess' id='IEAccess'>
 636                  <option value='on'>oui</option>
 637                  <option value='off' selected='selected'>non</option>
 638              </select>
 639            </div></td>
 640          </tr>
 641  
 642          <tr>
 643            <td style='text-align:left;'>MSN Explorer 4.7</td>
 644            <td style='text-align:center;'>
 645              <select name='msnexplr' id='msnexplr'>
 646                  <option value='on'>oui</option>
 647                  <option value='off' selected='selected'>non</option>
 648              </select>
 649            </div></td>
 650          </tr>
 651          <tr>
 652            <td style='text-align:left;'>Installer Messenger 4.6</td>
 653            <td style='text-align:center;'>
 654              <select name='msmsgs' id='msmsgs'>
 655                  <option value='on'>oui</option>
 656                  <option value='off' selected='selected'>non</option>
 657              </select>
 658            </div></td>
 659          </tr>
 660  
 661          <tr><td colspan='2' bgcolor='#6699cc'>Jeux (Soyez s&eacute;rieux...SVP)</td></tr>
 662          <tr>
 663            <td style='text-align:left;'>Jeu &quot; Freecel &quot; </td>
 664            <td style='text-align:center;'>
 665              <select name='freecell' id='freecell'>
 666  
 667                  <option value='on'>oui</option>
 668                  <option value='off' selected='selected'>non</option>
 669              </select>
 670            </div></td>
 671          </tr>
 672          <tr>
 673            <td style='text-align:left;'>Jeu &quot; le d&eacute;mineur&quot;</td>
 674            <td style='text-align:center;'>
 675              <select name='minesweeper' id='minesweeper'>
 676                  <option value='on'>oui</option>
 677                  <option value='off' selected='selected'>non</option>
 678              </select>
 679            </div></td>
 680          </tr>
 681          <tr>
 682            <td style='text-align:left;'>Jeu &quot; pinball &quot; </td>
 683  
 684            <td style='text-align:center;'>
 685              <select name='pinball' id='pinball'>
 686                  <option value='on'>oui</option>
 687                  <option value='off' selected='selected'>non</option>
 688              </select>
 689            </div></td>
 690          </tr>
 691          <tr>
 692            <td style='text-align:left;'>Jeu &quot; le Solitaire &quot; </td>
 693            <td style='text-align:center;'>
 694              <select name='solitaire' id='solitaire'>
 695                  <option value='on'>oui</option>
 696                  <option value='off' selected='selected'>non</option>
 697              </select>
 698            </div></td>
 699          </tr>        <tr>
 700            <td style='text-align:left;'>Jeu &quot; Dame de pique &quot; </td>
 701  
 702            <td style='text-align:center;'>
 703              <select name='hearts' id='hearts'>
 704                  <option value='on'>oui</option>
 705                  <option value='off' selected='selected'>non</option>
 706              </select>
 707            </div></td>
 708          </tr>
 709          <tr>
 710            <td style='text-align:left;'>Jeu &quot; Spider Solitaire &quot; </td>
 711            <td style='text-align:center;'>
 712              <select name='spider' id='spider'>
 713  
 714                  <option value='on'>oui</option>
 715                  <option value='off' selected='selected'>non</option>
 716              </select>
 717            </div></td>
 718          </tr>
 719          <tr>
 720            <td style='text-align:left;'>Jeux sur internet &quot; </td>
 721  
 722            <td style='text-align:center;'>
 723              <select name='zonegames' id='zonegames'>
 724                  <option value='on'>oui</option>
 725                  <option value='off' selected='selected'>non</option>
 726              </select>
 727            </div></td>
 728          </tr>";
 729  */
 730      echo "<tr>
 731  <td style='text-align:left;'>Options d'accessibilit&eacute;s</td>
 732  <td style='text-align:center;'>
 733  <input type='radio' name='accessopt' id='accessopton' value='on' checked /><label for='accessopton'> oui</label>
 734  <br />
 735  <input type='radio' name='accessopt' id='accessoptoff' value='off' /><label for='accessoptoff'> non</label>
 736  <br />
 737  </div></td>
 738  </tr>
 739  <tr>
 740  <td style='text-align:left;'>Calculatrice</td>
 741  <td style='text-align:center;'>
 742  <input type='radio' name='calc' id='calcon' value='on' checked /><label for='calcon'> oui</label>
 743  <br />
 744  <input type='radio' name='calc' id='calcoff' value='off' /><label for='calcoff'> non</label>
 745  <br />
 746  </div></td>
 747  </tr>
 748  <tr>
 749  <td style='text-align:left;'>Table des caract&egrave;res sp&eacute;ciaux </td>
 750  <td style='text-align:center;'>
 751  <input type='radio' name='charmap' id='charmapon' value='on' checked /><label for='charmapon'> oui</label>
 752  <br />
 753  <input type='radio' name='charmap' id='charmapoff' value='off' /><label for='charmapoff'> non</label>
 754  <br />
 755  </div></td>
 756  </tr>
 757  <tr>
 758  <td style='text-align:left;'>Hyper Terminal</td>
 759  <td style='text-align:center;'>
 760  <input type='radio' name='hypertrm' id='hypertrmon' value='on' checked /><label for='hypertrmon'> oui</label>
 761  <br />
 762  <input type='radio' name='hypertrm' id='hypertrmoff' value='off' /><label for='hypertrmoff'> non</label>
 763  <br />
 764  </div></td>
 765  </tr>
 766  <tr>
 767  <td style='text-align:left;'>Chat (rien avoir avec windows messenger; utile pour les popup)</td>
 768  <td style='text-align:center;'>
 769  <input type='radio' name='chat' id='chaton' value='on' checked /><label for='chaton'> oui</label>
 770  <br />
 771  <input type='radio' name='chat' id='chatoff' value='off' /><label for='chatoff'> non</label>
 772  <br />
 773  </div></td>
 774  </tr>
 775  <tr>
 776  <td style='text-align:left;'>Fonds d' &eacute;cran standards de windows </td>
 777  <td style='text-align:center;'>
 778  <input type='radio' name='deskpaper' id='deskpaperon' value='on' /><label for='deskpaperon'> oui</label>
 779  <br />
 780  <input type='radio' name='deskpaper' id='deskpaperoff' value='off' checked /><label for='deskpaperoff'> non</label>
 781  <br />
 782  </div></td>
 783  </tr>
 784  <tr>
 785  <td style='text-align:left;'>Utilitaire de D&eacute;bogage de Microsoft </td>
 786  <td style='text-align:center;'>
 787  <input type='radio' name='iisdbg' id='iisdbgon' value='on' /><label for='iisdbgon'> oui</label>
 788  <br />
 789  <input type='radio' name='iisdbg' id='iisdbgoff' value='off' checked /><label for='iisdbgoff'> non</label>
 790  <br />
 791  </div></td>
 792  </tr>
 793  <tr>
 794  <td style='text-align:left;'>Service d' indexation des fichiers</td>
 795  <td style='text-align:center;'>
 796  <input type='radio' name='indexsrv_system' id='indexsrv_systemon' value='on' /><label for='indexsrv_systemon'> oui</label>
 797  <br />
 798  <input type='radio' name='indexsrv_system' id='indexsrv_systemoff' value='off' checked /><label for='indexsrv_systemoff'> non</label>
 799  <br />
 800  </div></td>
 801  </tr>
 802  <tr>
 803  <td style='text-align:left;'>Fichiers sons suppl&eacute;mentaires </td>
 804  <td style='text-align:center;'>
 805  <input type='radio' name='media_clips' id='media_clipson' value='on' /><label for='media_clipson'> oui</label>
 806  <br />
 807  <input type='radio' name='media_clips' id='media_clipsoff' value='off' checked /><label for='media_clipsoff'> non</label>
 808  <br />
 809  </div></td>
 810  </tr>
 811  <tr>
 812  <td style='text-align:left;'>Fichiers sons du mod&egrave;le Utopia</td>
 813  <td style='text-align:center;'>
 814  <input type='radio' name='media_utopia' id='media_utopiaon' value='on' /><label for='media_utopiaon'> oui</label>
 815  <br />
 816  <input type='radio' name='media_utopia' id='media_utopiaoff' value='off' checked /><label for='media_utopiaoff'> non</label>
 817  <br />
 818  </div></td>
 819  </tr>
 820  <tr>
 821  <td style='text-align:left;'>Diff&eacute;rents pointeurs de la souris</td>
 822  <td style='text-align:center;'>
 823  <input type='radio' name='mousepoint' id='mousepointon' value='on' /><label for='mousepointon'> oui</label>
 824  <br />
 825  <input type='radio' name='mousepoint' id='mousepointoff' value='off' checked /><label for='mousepointoff'> non</label>
 826  <br />
 827  </div></td>
 828  </tr>
 829  <tr>
 830  <td style='text-align:left;'>Windows Media Player</td>
 831  <td style='text-align:center;'>
 832  <input type='radio' name='mplay' id='mplayon' value='on' checked /><label for='mplayon'> oui</label>
 833  <br />
 834  <input type='radio' name='mplay' id='mplayoff' value='off' /><label for='mplayoff'> non</label>
 835  <br />
 836  </div></td>
 837  </tr>
 838  <tr>
 839  <td style='text-align:left;'>Wordpad</td>
 840  <td style='text-align:center;'>
 841  <input type='radio' name='mswordpad' id='mswordpadon' value='on' checked /><label for='mswordpadon'> oui</label>
 842  <br />
 843  <input type='radio' name='mswordpad' id='mswordpadoff' value='off' /><label for='mswordpadoff'> non</label>
 844  <br />
 845  </div></td>
 846  </tr>
 847  <tr>
 848  <td style='text-align:left;'>Microsoft Paint</td>
 849  <td style='text-align:center;'>
 850  <input type='radio' name='paint' id='painton' value='on' checked /><label for='painton'> oui</label>
 851  <br />
 852  <input type='radio' name='paint' id='paintoff' value='off' /><label for='paintoff'> non</label>
 853  <br />
 854  </div></td>
 855  </tr>
 856  <tr>
 857  <td style='text-align:left;'>Magn&eacute;tophone</td>
 858  <td style='text-align:center;'>
 859  <input type='radio' name='rec' id='recon' value='on' checked /><label for='recon'> oui</label>
 860  <br />
 861  <input type='radio' name='rec' id='recoff' value='off' /><label for='recoff'> non</label>
 862  <br />
 863  </div></td>
 864  </tr>
 865  <tr>
 866  <td style='text-align:left;'>Utilitaire de r&eacute;glage du volume du son.</td>
 867  <td style='text-align:center;'>
 868  <input type='radio' name='vol' id='volon' value='on' checked /><label for='volon'> oui</label>
 869  <br />
 870  <input type='radio' name='vol' id='voloff' value='off' /><label for='voloff'> non</label>
 871  <br />
 872  </div></td>
 873  </tr>
 874  <tr>
 875  <td style='text-align:left;'>Diff&eacute;rents raccourcis d' Internet exploreur.</td>
 876  <td style='text-align:center;'>
 877  <input type='radio' name='IEAccess' id='IEAccesson' value='on' /><label for='IEAccesson'> oui</label>
 878  <br />
 879  <input type='radio' name='IEAccess' id='IEAccessoff' value='off' checked /><label for='IEAccessoff'> non</label>
 880  <br />
 881  </div></td>
 882  </tr>
 883  <tr>
 884  <td style='text-align:left;'>MSN Explorer 4.7</td>
 885  <td style='text-align:center;'>
 886  <input type='radio' name='msnexplr' id='msnexplron' value='on' /><label for='msnexplron'> oui</label>
 887  <br />
 888  <input type='radio' name='msnexplr' id='msnexplroff' value='off' checked /><label for='msnexplroff'> non</label>
 889  <br />
 890  </div></td>
 891  </tr>
 892  <tr>
 893  <td style='text-align:left;'>Installer Messenger 4.6</td>
 894  <td style='text-align:center;'>
 895  <input type='radio' name='msmsgs' id='msmsgson' value='on' /><label for='msmsgson'> oui</label>
 896  <br />
 897  <input type='radio' name='msmsgs' id='msmsgsoff' value='off' checked /><label for='msmsgsoff'> non</label>
 898  <br />
 899  </div></td>
 900  </tr>
 901  <tr><td colspan='2' bgcolor='#6699cc'>Jeux (Soyez s&eacute;rieux...SVP)</td></tr>
 902  <tr>
 903  <td style='text-align:left;'>Jeu &quot; Freecel &quot; </td>
 904  <td style='text-align:center;'>
 905  <input type='radio' name='freecell' id='freecellon' value='on' /><label for='freecellon'> oui</label>
 906  <br />
 907  <input type='radio' name='freecell' id='freecelloff' value='off' checked /><label for='freecelloff'> non</label>
 908  <br />
 909  </div></td>
 910  </tr>
 911  <tr>
 912  <td style='text-align:left;'>Jeu &quot; le d&eacute;mineur&quot;</td>
 913  <td style='text-align:center;'>
 914  <input type='radio' name='minesweeper' id='minesweeperon' value='on' /><label for='minesweeperon'> oui</label>
 915  <br />
 916  <input type='radio' name='minesweeper' id='minesweeperoff' value='off' checked /><label for='minesweeperoff'> non</label>
 917  <br />
 918  </div></td>
 919  </tr>
 920  <tr>
 921  <td style='text-align:left;'>Jeu &quot; pinball &quot; </td>
 922  <td style='text-align:center;'>
 923  <input type='radio' name='pinball' id='pinballon' value='on' /><label for='pinballon'> oui</label>
 924  <br />
 925  <input type='radio' name='pinball' id='pinballoff' value='off' checked /><label for='pinballoff'> non</label>
 926  <br />
 927  </div></td>
 928  </tr>
 929  <tr>
 930  <td style='text-align:left;'>Jeu &quot; le Solitaire &quot; </td>
 931  <td style='text-align:center;'>
 932  <input type='radio' name='solitaire' id='solitaireon' value='on' /><label for='solitaireon'> oui</label>
 933  <br />
 934  <input type='radio' name='solitaire' id='solitaireoff' value='off' checked /><label for='solitaireoff'> non</label>
 935  <br />
 936  </div></td>
 937  </tr>
 938  <tr>
 939  <td style='text-align:left;'>Jeu &quot; Dame de pique &quot; </td>
 940  <td style='text-align:center;'>
 941  <input type='radio' name='hearts' id='heartson' value='on' /><label for='heartson'> oui</label>
 942  <br />
 943  <input type='radio' name='hearts' id='heartsoff' value='off' checked /><label for='heartsoff'> non</label>
 944  <br />
 945  </div></td>
 946  </tr>
 947  <tr>
 948  <td style='text-align:left;'>Jeu &quot; Spider Solitaire &quot; </td>
 949  <td style='text-align:center;'>
 950  <input type='radio' name='spider' id='spideron' value='on' /><label for='spideron'> oui</label>
 951  <br />
 952  <input type='radio' name='spider' id='spideroff' value='off' checked /><label for='spideroff'> non</label>
 953  <br />
 954  </div></td>
 955  </tr>
 956  <tr>
 957  <td style='text-align:left;'>Jeux sur internet </td>
 958  <td style='text-align:center;'>
 959  <input type='radio' name='zonegames' id='zonegameson' value='on' /><label for='zonegameson'> oui</label>
 960  <br />
 961  <input type='radio' name='zonegames' id='zonegamesoff' value='off' checked /><label for='zonegamesoff'> non</label>
 962  <br />
 963  </div></td>
 964  </tr>\n";
 965  
 966      echo "</table>\n";
 967      echo "</div>\n";
 968  
 969      echo "<script type='text/javascript'>
 970  var alt=1;
 971  function display_div_components() {
 972      alt=alt*-1;
 973      if(alt==1) {
 974          document.getElementById('div_components').style.display='block';
 975      }
 976      else {
 977          document.getElementById('div_components').style.display='none';
 978      }
 979  }
 980  display_div_components();
 981  </script>\n";
 982  
 983  //echo "<input type='radio' name='fdisk_cmds' id='fdisk_cmds0' value='0' /><label for='fdisk_cmds0'> détruire la première partition principale</label><br />\n";
 984  //echo "<input type='radio' name='fdisk_cmds' id='fdisk_cmds1' value='1' /><label for='fdisk_cmds1'> installer sur la première partition principale sans toucher à la table de partitions</label><br />\n";
 985  
 986  echo "</td>\n";
 987  echo "</tr>\n";
 988  //===========================================================
 989  echo "<tr>\n";
 990  echo "<td>Firewall de Windows XP</td>\n";
 991  echo "<td style='text-align:left;'>\n";
 992  /*
 993  echo "D&eacute;sactiver le Firewall int&eacute;gr&eacute; &agrave; Windows: 
 994  <select name='firewall' id='firewall'>
 995      <option value='1' selected='selected'>oui</option>
 996      <option value='0'>non</option>
 997  </select>\n";
 998  */
 999  echo "D&eacute;sactiver le Firewall int&eacute;gr&eacute; &agrave; Windows: 
1000  <input type='radio' id='firewall1' name='firewall' value='1' checked /><label for='firewall1'> Oui </label>
1001  ou <label for='firewall0'> Non </label>
1002  <input type='radio' id='firewall0' name='firewall' value='0' />\n";
1003  
1004  echo "</td>\n";
1005  echo "</tr>\n";
1006  //===========================================================
1007  
1008  
1009                  echo "<tr><td valign='top'>Pour la ou les machines sélectionnées: </td>\n";
1010                  echo "<td>\n";
1011                      echo "<table border='0'>\n";
1012                      echo "<tr><td valign='top'><input type='checkbox' id='wake' name='wake' value='y' checked /> </td><td style='text-align:left;'><label for='wake'>Démarrer les machines par Wake-On-Lan/etherwake<br />si elles sont éteintes.</label></td></tr>\n";
1013                      echo "<tr><td valign='top'><input type='radio' id='shutdown_reboot_wait1' name='shutdown_reboot' value='wait1' /> </td><td style='text-align:left;'><label for='shutdown_reboot_wait1'>Attendre le reboot des machines<br />même si aucune session n'est ouverte,</label></td></tr>\n";
1014                      echo "<tr><td valign='top'><input type='radio' id='shutdown_reboot_wait2' name='shutdown_reboot' value='wait2' checked /> </td><td style='text-align:left;'><label for='shutdown_reboot_wait2'>Redémarrer les machines sans session ouverte<br />et attendre le reboot pour les machines<br />qui ont des sessions ouvertes,</label></td></tr>\n";
1015                      echo "<tr><td valign='top'><input type='radio' id='shutdown_reboot_reboot' name='shutdown_reboot' value='reboot' /> </td><td style='text-align:left;'><label for='shutdown_reboot_reboot'>Redémarrer les machines<br />même si une session est ouverte (<i>pô cool</i>).</label></td></tr>\n";
1016                      echo "</table>\n";
1017                  echo "</td></tr>\n";
1018  
1019                  echo "</table>\n";
1020  
1021                  echo "<p align='center'><input type=\"submit\" name=\"validation_parametres\" value=\"Valider\" /></p>\n";
1022                  echo "</form>\n";
1023  
1024  
1025                  echo "<p><i>NOTES:</i></p>\n";
1026                  echo "<ul>\n";
1027                  //echo "<li>Ce choix nécessite une partition de sauvegarde sur la machine.</li>\n";
1028                  /*
1029                  echo "<li><b>Attention:</b > Le délai avant reboot ajouté au temps de l'opération lancée doit dépasser la périodicité du script controle_actions_tftp.sh en crontab.<br />
1030                  Ce délai doit aussi permettre de récupérer en http://IP_CLIENT/~hacker/Public/*.txt des informations sur le succès ou l'échec de l'opération.<br />
1031                  Une tâche cron se charge d'effectuer le 'wget' sur les infos, puis le remplissage d'une table MySQL.<br />
1032                  La tâche cron est lancée toutes les 60s.</li>\n";
1033                  */
1034                  echo "<li>Pour que l'opération puisse être entièrement provoquée depuis le serveur, il faut que les postes clients soient configurés pour booter en PXE (<i>ou au moins s'éveiller (wol) en bootant sur le réseau</i>).<br />Dans le cas contraire, vous devrez passer sur les postes et presser F12 pour choisir de booter en PXE.</li>\n";
1035                  echo "</ul>\n";
1036  
1037              }
1038              else {
1039                  echo "<h2>Validation des paramètres du lancement de l'installation XP unattended</h2>\n";
1040  
1041                  //debug_var();
1042                  //while read A;do B=$(echo "$A"|cut -d"'" -f2);echo "\$$B=isset($A) ? $A : 'on';";done < liste_champs.txt
1043                  //while read A;do B=$(echo "$A"|cut -d"'" -f2);echo "$B=\$$B";done < liste_champs.txt
1044  
1045                  //=========================
1046                  // Partitionnement
1047                  $fdisk_cmds=isset($_POST['fdisk_cmds']) ? $_POST['fdisk_cmds'] : 0;
1048                  $replace_mbr=isset($_POST['replace_mbr']) ? $_POST['replace_mbr'] : 0;
1049                  //=========================
1050  
1051                  //=========================
1052                  // Mises à jour
1053                  $DisableDynamicUpdates=isset($_POST['DisableDynamicUpdates']) ? $_POST['DisableDynamicUpdates'] : "no";
1054                  $AutomaticUpdates=isset($_POST['AutomaticUpdates']) ? $_POST['AutomaticUpdates'] : 'yes';
1055                  //=========================
1056  
1057                  //=========================
1058                  // Composants W$
1059                  $accessopt=isset($_POST['accessopt']) ? $_POST['accessopt'] : 'on';
1060                  $calc=isset($_POST['calc']) ? $_POST['calc'] : 'on';
1061                  $charmap=isset($_POST['charmap']) ? $_POST['charmap'] : 'on';
1062                  $chat=isset($_POST['chat']) ? $_POST['chat'] : 'on';
1063                  $deskpaper=isset($_POST['deskpaper']) ? $_POST['deskpaper'] : 'off';
1064                  $hypertrm=isset($_POST['hypertrm']) ? $_POST['hypertrm'] : 'on';
1065  
1066                  $iisdbg=isset($_POST['iisdbg']) ? $_POST['iisdbg'] : 'off';
1067                  $indexsrv_system=isset($_POST['indexsrv_system']) ? $_POST['indexsrv_system'] : 'off';
1068                  $media_clips=isset($_POST['media_clips']) ? $_POST['media_clips'] : 'off';
1069                  $media_utopia=isset($_POST['media_utopia']) ? $_POST['media_utopia'] : 'off';
1070                  $mousepoint=isset($_POST['mousepoint']) ? $_POST['mousepoint'] : 'off';
1071  
1072                  $mplay=isset($_POST['mplay']) ? $_POST['mplay'] : 'off';
1073  
1074                  $mswordpad=isset($_POST['mswordpad']) ? $_POST['mswordpad'] : 'on';
1075                  $paint=isset($_POST['paint']) ? $_POST['paint'] : 'on';
1076  
1077                  $rec=isset($_POST['rec']) ? $_POST['rec'] : 'on';
1078                  $vol=isset($_POST['vol']) ? $_POST['vol'] : 'on';
1079  
1080                  $IEAccess=isset($_POST['IEAccess']) ? $_POST['IEAccess'] : 'on';
1081  
1082                  $msnexplr=isset($_POST['msnexplr']) ? $_POST['msnexplr'] : 'off';
1083                  $msmsgs=isset($_POST['msmsgs']) ? $_POST['msmsgs'] : 'off';
1084  
1085                  // Jeux
1086                  $freecell=isset($_POST['freecell']) ? $_POST['freecell'] : 'off';
1087                  $hearts=isset($_POST['hearts']) ? $_POST['hearts'] : 'off';
1088                  $minesweeper=isset($_POST['minesweeper']) ? $_POST['minesweeper'] : 'off';
1089                  $pinball=isset($_POST['pinball']) ? $_POST['pinball'] : 'off';
1090                  $solitaire=isset($_POST['solitaire']) ? $_POST['solitaire'] : 'off';
1091                  $spider=isset($_POST['spider']) ? $_POST['spider'] : 'off';
1092                  $zonegames=isset($_POST['zonegames']) ? $_POST['zonegames'] : 'off';
1093  
1094                  $firewall=isset($_POST['firewall']) ? $_POST['firewall'] : 1;
1095                  // Contrôler les valeurs: on/off, 0/1
1096                  //=========================
1097  
1098                  //=========================
1099                  // Display:
1100                  $BitsPerPel=isset($_POST['BitsPerPel']) ? $_POST['BitsPerPel'] : 16;
1101                  if(($BitsPerPel!=16)&&($BitsPerPel!=32)) {$BitsPerPel=16;}
1102  
1103                  $Xresolution=isset($_POST['Xresolution']) ? $_POST['Xresolution'] : 1024;
1104                  if(($Xresolution!=800)&&($Xresolution!=1024)&&($Xresolution!=1280)) {$Xresolution=1024;}
1105                  if($Xresolution=800) {$Yresolution=600;}
1106                  elseif($Xresolution=1024) {$Yresolution=768;}
1107                  elseif($Xresolution=1280) {$Yresolution=800;}
1108                  //=========================
1109  
1110                  //=========================
1111                  // Serveur TFTP
1112                  $dhcp_tftp_server=$_SERVER["SERVER_ADDR"];
1113  
1114                  $sql="SELECT value FROM params WHERE name='dhcp_tftp_server';";
1115                  $res=mysql_query($sql);
1116                  if(mysql_num_rows($res)>0) {
1117                      $lig=mysql_fetch_object($res);
1118                      if($lig->value!="") {$dhcp_tftp_server=$lig->value;}
1119                      // Il faudrait contrôler que l'adresse est valide, non?
1120                  }
1121                  //=========================
1122  
1123                  //=========================
1124                  // Serveur de temps NTP
1125                  $dhcp_ntp="91.121.73.63";
1126                  /*
1127                  $ host fr.pool.ntp.org
1128                  fr.pool.ntp.org has address 91.121.73.63
1129                  fr.pool.ntp.org has address 81.25.192.148
1130                  fr.pool.ntp.org has address 87.98.146.16
1131                  fr.pool.ntp.org has address 88.191.23.205
1132                  fr.pool.ntp.org has address 88.178.32.159
1133                  */
1134                  $sql="SELECT value FROM params WHERE name='dhcp_ntp';";
1135                  $res=mysql_query($sql);
1136                  if(mysql_num_rows($res)>0) {
1137                      $lig=mysql_fetch_object($res);
1138                      if($lig->value!="") {$dhcp_ntp=$lig->value;}
1139                      // Il faudrait contrôler que l'adresse est valide, non?
1140                  }
1141                  //=========================
1142  
1143                  //=========================
1144                  // M$IE
1145                  $Home_Page="http://www.mozilla.com/en-US/";
1146                  $sql="select valeur from corresp where chemin='HKEY_CURRENT_USER\\software\\microsoft\\Internet Explorer\\Main\\Start Page';";
1147                  $res=mysql_query($sql);
1148                  if(mysql_num_rows($res)>0) {
1149                      $lig=mysql_fetch_object($res);
1150                      if($lig->value!="") {$Home_Page=$lig->valeur;}
1151                  }
1152  
1153                  $Help_Page="http://www.mozilla.com/en-US/";
1154                  $Search_Page="http://www.google.fr/firefox";
1155                  //=========================
1156  
1157                  echo "<p>";
1158                  /*
1159                  for ($i=0;$i<count($parc);$i++) {
1160                      echo "Génération du fichier /var/se3/unattended/install/site/$parc[$i]/unattend.txt<br />\n";
1161      
1162                      $dossier_unattend_txt="/var/se3/unattended/install/site/$parc[$i]";
1163                      if(!file_exists($dossier_unattend_txt)) {mkdir($dossier_unattend_txt);}
1164                      $fu=fopen("$dossier_unattend_txt/unattend.txt","w+");
1165                      if(!$fu) {
1166                          echo "<p>ERREUR lors de la création de $dossier_unattend_txt/unattend.txt</p>\n";
1167                          include ("pdp.inc.php");
1168                          die();
1169                      }
1170                  */
1171                  for($i=0;$i<count($id_machine);$i++) {
1172                      $sql="SELECT * FROM se3_dhcp WHERE id='".$id_machine[$i]."';";
1173                      //echo "$sql<br />";
1174                      $res=mysql_query($sql);
1175                      if(mysql_num_rows($res)==0) {
1176                          echo "<span style='color:red;'>La machine d'identifiant $id_machine[$i] n'existe pas dans 'se3_dhcp'.</span><br />\n";
1177                      }
1178                      else {
1179  
1180                          $lig=mysql_fetch_object($res);
1181                          //$mac_machine=$lig->mac;
1182                          $nom_machine=$lig->name;
1183  
1184                          $dossier_unattend_txt="/var/se3/unattended/install/site/";
1185                          if(!file_exists($dossier_unattend_txt)) {mkdir($dossier_unattend_txt);}
1186                          $fu=fopen("$dossier_unattend_txt/$nom_machine.txt","w+");
1187                          if(!$fu) {
1188                              echo "<p>ERREUR lors de la création de $dossier_unattend_txt/$nom_machine.txt</p>\n";
1189                              include ("pdp.inc.php");
1190                              die();
1191                          }
1192                          fwrite($fu,"[GuiUnattended]\r
1193  ; Fichier genere automatiquement par se3 pour $nom_machine \r
1194  ; ne pas modifier \r
1195  ; \r
1196  TimeZone=105\r
1197  OEMSkipRegional=1\r
1198  OemSkipWelcome=1\r
1199  EncryptedAdminPassword=No\r
1200  AutoLogon=Yes\r
1201  \r
1202  [Unattended]\r
1203  UnattendMode=FullUnattended\r
1204  FileSystem=ConvertNTFS\r
1205  ExtendOemPartition=1\r
1206  OemSkipEula=Yes\r
1207  OemPreinstall=Yes\r
1208  AutomaticUpdates=$AutomaticUpdates\r
1209  OemPnpDriversPath=\\D\r
1210  TargetPath=\"\\WINDOWS\"\r
1211  AutoActivate=Yes\r
1212  DisableDynamicUpdates=$DisableDynamicUpdates\r
1213  ; Needed for XP - see <http://support.microsoft.com/?kbid=294801>.\r
1214  UnattendSwitch=Yes\r
1215  DriverSigningPolicy=Ignore\r
1216  Hibernation=No\r
1217  NtUpgrade=No\r
1218  Win9xUpgrade=No\r
1219  \r
1220  [Display]\r
1221  BitsPerPel=$BitsPerPel\r
1222  Xresolution=$Xresolution\r
1223  YResolution=$Yresolution\r
1224  Vrefresh=60\r
1225  \r
1226  [URL]\r
1227  Home_Page=\"$Home_Page\"\r
1228  Help_Page=\"$Help_Page\"\r
1229  Search_Page=\"$Search_Page\"\r
1230  \r
1231  [Proxy]\r
1232  ; le proxy est inactif par defaut : l admin l'active via les clefs si besoin\r
1233  Proxy_Enable=0\r
1234  Use_Same_Proxy=1\r
1235  \r
1236  [Networking]\r
1237  InstallDefaultComponents=Yes\r
1238  \r
1239  [NetOptionalComponents]\r
1240  ; Install Print Services for UNIX\r
1241  LPDSVC=1\r
1242  \r
1243  [_meta]\r
1244  ntinstall_cmd = \"nt5x-install\"\r
1245  fdisk_lba=1\r
1246  fdisk_confirm=0\r
1247  edit_files=0\r
1248  middle=\"\"\r
1249  bottom=\"\"\r
1250  local_admins=\"\"\r\n");
1251          
1252                          if($fdisk_cmds==0) {
1253                              fwrite($fu,"fdisk_cmds=\"fdisk /clear 1;fdisk /pri:8000;fdisk /activate:1\"\r\n");
1254                              fwrite($fu,"format_cmd=\"format /y /z:seriously /q /u /a /v: c:\"\r\n");
1255                          }
1256                          elseif($fdisk_cmds==1) {
1257                              fwrite($fu,";fdisk_cmds=\"echo On ne modifie pas les partitions; installation sur la premiere partition principale\"\r\n");
1258                              fwrite($fu,"format_cmd=\"format /y /z:seriously /q /u /a /v: c:\"\r\n");
1259                          }
1260                          elseif($fdisk_cmds==2) {
1261                              fwrite($fu,";fdisk_cmds=\"echo On ne modifie pas les partitions; installation sur la deuxieme partition principale\"\r\n");
1262                              fwrite($fu,"format_cmd=\"format /y /z:seriously /q /u /a /v: d:\"\r\n");
1263                          }
1264          
1265      
1266                          fwrite($fu,"replace_mbr=$replace_mbr\r
1267  local_admins=\"\"\r
1268  ntp_servers=\"$dhcp_ntp\"\r
1269  z_path=\"\\\\$dhcp_tftp_server\\install\"\r
1270  netlogon_dir=\"\\\\$se3ip\\netlogon\\domscripts\"\r
1271  autolog=\"autolog.pl --logon=1 --user=administrateur --password=wawa\"\r
1272  \r
1273  [RegionalSettings]\r
1274  ; In french in the text\r
1275  LanguageGroup=1\r
1276  SystemLocale=0000040c\r
1277  UserLocale=0000040c\r
1278  InputLocale=040c:0000040c\r
1279  \r
1280  [Branding]\r
1281  BrandIEUsingUnattended=Yes\r
1282  \r
1283  [Components]\r
1284  accessopt=$accessopt\r
1285  calc=$calc\r
1286  charmap=$charmap\r
1287  chat=$chat\r
1288  deskpaper=$deskpaper\r
1289  hypertrm=$hypertrm\r
1290  iisdbg=$iisdbg\r
1291  indexsrv_system=$indexsrv_system\r
1292  media_clips=$media_clips\r
1293  media_utopia=$media_utopia\r
1294  mousepoint=$mousepoint\r
1295  mplay=$mplay\r
1296  mswordpad=$mswordpad\r
1297  paint=$paint\r
1298  rec=$rec\r
1299  vol=$vol\r
1300  ; Jeux\r
1301  freecell=$freecell\r
1302  hearts=$hearts\r
1303  minesweeper=$minesweeper\r
1304  pinball=$pinball\r
1305  solitaire=$solitaire\r
1306  spider=$spider\r
1307  zonegames=$zonegames\r
1308  IEAccess=$IEAccess\r
1309  msnexplr=$msnexplr\r
1310  \r
1311  hearts=off\r
1312  IEAccess=off\r
1313  \r
1314  ; Install IIS by default\r
1315  iis_common=Off\r
1316  iis_inetmgr=Off\r
1317  iis_www=off\r
1318  ; Docs suggest iis_pwmgr only works on Win2k, but include it\r
1319  ; anyway\r
1320  iis_pwmgr=Off\r
1321  ; Include docs\r
1322  iis_doc=Off\r
1323  \r\n");
1324                          if($firewall==1) {
1325                              fwrite($fu,"[WindowsFirewall]\r
1326  Profiles=WindowsFirewall.TurnOffFirewall\r
1327  \r
1328  [WindowsFirewall.TurnOffFirewall]\r
1329  Mode=0\r\n");
1330                          }
1331                          else {
1332                              fwrite($fu,"[WindowsFirewall]\r
1333  Profiles=WindowsFirewall.TurnOnFirewall\r
1334  \r
1335  [WindowsFirewall.TurnOnFirewall]\r
1336  Mode=1\r\n");
1337                          }
1338                          fclose($fu);
1339                      }
1340                  }
1341  
1342                  echo "<p>Génération des fichiers dans /tftpboot/pxelinux.cfg/ pour l'installation XP unattended.<br />\n";
1343  
1344                  // BOUCLE SUR LA LISTE DES $id_machine[$i]
1345  
1346                  // Numéro de l'opération de remontée de rapport:
1347                  $num_op=get_free_se3_action_tftp_num_op();
1348                  for($i=0;$i<count($id_machine);$i++) {
1349                      $sql="SELECT * FROM se3_dhcp WHERE id='".$id_machine[$i]."';";
1350                      //echo "$sql<br />";
1351                      $res=mysql_query($sql);
1352                      if(mysql_num_rows($res)==0) {
1353                          echo "<span style='color:red;'>La machine d'identifiant $id_machine[$i] n'existe pas dans 'se3_dhcp'.</span><br />\n";
1354                      }
1355                      else {
1356                          $temoin_erreur="n";
1357  
1358                          $lig=mysql_fetch_object($res);
1359                          $mac_machine=$lig->mac;
1360                          $nom_machine=$lig->name;
1361                          $ip_machine=$lig->ip;
1362  
1363                          echo "Génération pour $nom_machine: ";
1364  
1365                          $corrige_mac=strtolower(strtr($mac_machine,":","-"));
1366  
1367                          $chemin="/usr/share/se3/scripts";
1368                          $resultat=exec("/usr/bin/sudo $chemin/pxe_gen_cfg.sh 'unattend_xp' '$corrige_mac' '$ip_machine' '$nom_machine'", $retour);
1369                          // patch devenu inutile car integre a pxe_gen_cfg.sh
1370                          // patch pour lancer unattended-generate.sh lorsque l'on personnalise les unattend.txt
1371                          //$nomscript=date(Y_m_d_H_i_s");
1372                          //$nomscript="tmp_unattended_$nomscript.sh";
1373                          //system("echo \"#!/bin/bash\n\" > /tmp/$nomscript");
1374                          //chmod ("/tmp/$nomscript",0700);
1375                          //system("echo \"sudo /usr/share/se3/scripts/unattended_generate.sh\n\" >> /tmp/$nomscript");
1376                          //system("echo \"rm -f /tmp/$nomscript \n\" >> /tmp/$nomscript");
1377                          //exec("at -f /tmp/$nomscript now + 1 minute");
1378                          // fin du patch pour lancer unattended-generate.sh
1379                          
1380                          if(count($retour)>0){
1381                              //echo "<p>";
1382                              //echo "<span style='color:red;'>Il semble que la génération du fichier ait échoué...</span><br />\n";
1383                              echo "<span style='color:red;'>ECHEC de la génération du fichier</span><br />\n";
1384                              for($j=0;$j<count($retour);$j++){
1385                                  echo "$retour[$j]<br />\n";
1386                              }
1387                              $temoin_erreur="y";
1388                              //echo "</p>\n";
1389                          }
1390                          else {
1391                              $sql="DELETE FROM se3_tftp_action WHERE id='$id_machine[$i]';";
1392                              $suppr=mysql_query($sql);
1393  
1394                              $timestamp=time();
1395                              $sql="INSERT INTO se3_tftp_action SET id='$id_machine[$i]',
1396                                                                      mac='$mac_machine',
1397                                                                      name='$nom_machine',
1398                                                                      date='$timestamp',
1399                                                                      type='unattend_xp',
1400                                                                      num_op='$num_op',
1401                                                                      infos='';";
1402                              $insert=mysql_query($sql);
1403                              if(!$insert) {
1404                                  echo "<span style='color:red;'>ECHEC de l'enregistrement dans 'se3_tftp_action'</span><br />\n";
1405                                  $temoin_erreur="y";
1406                              }
1407  
1408                              /*
1409                              // Génération du lanceur de récupération:
1410                              //$dossier="/var/se3/tmp/tftp/$id_machine[$i]";
1411                              $dossier="/etc/se3/www-tools/tftp/$id_machine[$i]";
1412                              if(!file_exists($dossier)) { mkdir($dossier,0700);}
1413                              $lanceur_recup="$dossier/lanceur_recup_rapport_action_tftp.sh";
1414                              $fich=fopen($lanceur_recup,"w+");
1415                              // On donne 4H pour que la récup soit effectuée:
1416                              $timestamp_limit=time()+4*3600;
1417                              //fwrite($fich,"/usr/share/se3/scripts/recup_rapport.php '$id_machine[$i]' '$ip_machine' 'rapport' '$timestamp_limit'");
1418                              fwrite($fich,"sudo /usr/share/se3/scripts/recup_rapport.php '$id_machine[$i]' '$ip_machine' 'rapport' '$timestamp_limit'");
1419                              fclose($fich);
1420                              chmod($lanceur_recup,0750);
1421  
1422                              // Ménage dans les tâches précédentes
1423                              @exec("sudo /usr/share/se3/scripts/se3_tftp_menage_atq.sh $id_machine[$i]",$retour);
1424  
1425                              // Planification de la tâche
1426                              //@exec("at -f $lanceur_recup now + 1 minute 2>/dev/null",$retour);
1427                              @exec("at -f $lanceur_recup now + 1 minute 2>$dossier/at.txt",$retour);
1428                              //passthru("at -f $lanceur_recup now + 1 minute",$retour);
1429                              if($retour) {
1430                                  echo "<span style='color:red;'>ECHEC de la planification de la tâche.</span><br />\n";
1431                                  for($j=0;$j<count($retour);$j++){echo "$retour[$j]<br />\n";}
1432                                  //echo "$retour<br />\n";
1433                                  $temoin_erreur="y";
1434                              }
1435                              */
1436  
1437                              /*
1438                              // Avec ça on arrive à récupérer l'info:
1439                              //    -warning: commands will be executed using /bin/sh -
1440                              //    -job 1572 at 2008-03-01 15:13 -
1441                              // Mais une fois le at repoussé, ce n'est plus www-se3, mais root qui en est proprio...
1442                              if(file_exists("$dossier/at.txt")) {
1443                                  $fp=fopen("$dossier/at.txt","r");
1444                                  while(!feof($fp)) {
1445                                      $ligne=fgets($fp,4096);
1446                                      echo "<p>-".$ligne."-</p>";
1447                                  }
1448                                  fclose($fp);
1449                              }
1450                              */
1451  
1452                              /*
1453                              $fp=popen("at -f $lanceur_recup now + 1 minute","r");
1454                              while(!feof($fp)) {
1455                                  $ligne=fgets($fp,4096);
1456                                  echo "<p>-".$ligne."-</p>";
1457                              }
1458                              fclose($fp);
1459                              */
1460  
1461                              if($temoin_erreur=="n") {
1462                                  //echo "<span style='color:green;'>OK</span><br />\n";
1463                                  echo "<span style='color:green;'>OK</span>\n";
1464                                  // Application de l'action choisie:
1465                                  echo " <span id='wake_shutdown_or_reboot_$i'></span>";
1466  
1467                                  echo "<script type='text/javascript'>
1468                                      // <![CDATA[
1469                                      new Ajax.Updater($('wake_shutdown_or_reboot_$i'),'ajax_lib.php?ip=$ip_machine&nom=$nom_machine&mode=wake_shutdown_or_reboot&wake=$wake&shutdown_reboot=$shutdown_reboot',{method: 'get'});
1470                                      //]]>
1471                                  </script>\n";
1472  
1473  
1474                                  echo "<br />\n";
1475                              }
1476                          }
1477                      }
1478                  }
1479  
1480                  // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
1481                  // POUVOIR TAGUER DANS LA TABLE se3_dhcp LES MACHINES QUI PEUVENT BOOTER EN PXE
1482                  // Ajouter un champ?
1483                  // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
1484  
1485  
1486                  // On n'affiche le fichier que pour le dernier (à titre d'info):
1487                  if(isset($corrige_mac)) {
1488                      //$fich=fopen("/tftpboot/pxelinux.cfg/01-$lig1->mac","r");
1489                      $fich=fopen("/tftpboot/pxelinux.cfg/01-$corrige_mac","r");
1490                      if($fich) {
1491                          echo "<p>Pour information, voici le contenu du fichier généré:<br />\n";
1492                          echo "<pre style='border:1px solid black; color:green;'>";
1493                          while(!feof($fich)) {
1494                              $ligne=fgets($fich,4096);
1495                              echo htmlentities($ligne);
1496                          }
1497                          echo "</pre>\n";
1498                          fclose($fich);
1499                      }
1500                      else {
1501                          echo "<p style='color:red;'>Il n'a pas été possible d'ouvrir le fichier /tftpboot/pxelinux.cfg/01-$corrige_mac</p>\n";
1502                      }
1503                  }
1504              }
1505          }
1506          echo "<p><a href='".$_SERVER['PHP_SELF']."'>Retour au choix du/des parc(s)</a>.</p>\n";
1507      }
1508  }
1509  else {
1510      print (gettext("Vous n'avez pas les droits nécessaires pour ouvrir cette page..."));
1511  }
1512  
1513  // Footer
1514  include ("pdp.inc.php");
1515  ?>


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