[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/var/www/se3/parcs/ -> wolstop_station.php (source)

   1  <?php
   2  
   3  
   4     /**
   5     
   6     * Stop - start les machines clientes
   7     * @Version $Id: wolstop_station.php 6459 2011-07-12 00:35:05Z keyser $ 
   8     
   9     * @Projet LCS / SambaEdu 
  10     
  11     * @auteurs Equipe Tice academie de Caen
  12     * @auteurs Sandrine Dangreville
  13  
  14     * @Licence Distribue selon les termes de la licence GPL
  15     
  16     * @note modifie par jean navarro - Carip Lyon introduction du choix de l'ordre de tri de l'affichage des connexions
  17     
  18     */
  19  
  20     /**
  21  
  22     * @Repertoire: parcs/
  23     * file: wolstop_station.php
  24     */        
  25  
  26  
  27  
  28  require_once  ("lang.inc.php");
  29  bindtextdomain('se3-parcs',"/var/www/se3/locale");
  30  textdomain ('se3-parcs');
  31  
  32  
  33  ?>
  34  <script type="text/javascript">
  35  window.onload=montre;
  36  
  37  /**
  38  
  39  * Montre
  40  * @language Javascript
  41  * @Parametres  
  42  * @Return
  43  */
  44  
  45  
  46  function montre(id) {
  47  var d = document.getElementById(id);
  48    for (var i = 1; i<=10; i++) {
  49      if (document.getElementById('smenu'+i)) {document.getElementById('smenu'+i).style.display='none';}
  50    }
  51  if (d) {d.style.display='block';}
  52  }
  53  
  54  /**
  55  
  56  * Valide l'arret
  57  * @language Javascript
  58  * @Parametres  
  59  * @Return
  60  */
  61  
  62  function okshutdown()
  63  {
  64      resultat=confirm('Confirmez l\'arret des postes');
  65      if(resultat !="1")
  66      window.history.back()
  67  }
  68  //==================================
  69  /**
  70  
  71  * Valide le reboot
  72  * @language Javascript
  73  * @Parametres  
  74  * @Return
  75  */
  76  
  77  function okreboot()
  78  {
  79      resultat=confirm('Confirmez le reboot des postes');
  80      if(resultat !="1")
  81      window.history.back()
  82  }
  83  //==================================
  84  
  85  /**
  86  
  87  * Valide le demarrge
  88  * @language Javascript
  89  * @Parametres  
  90  * @Return
  91  */
  92  
  93  function okwol()
  94  {
  95      resultat=confirm('Confirmez l\'allumage des postes');
  96      if(resultat !="1")
  97      window.history.back()
  98  }
  99  
 100  </script>
 101  
 102  
 103  <?php
 104  include  "entete.inc.php";
 105  require_once  "ihm.inc.php";
 106  require_once  "ldap.inc.php";
 107  require_once "fonc_parc.inc.php";
 108  require_once "fonc_outils.inc.php";
 109  
 110  //aide
 111  $_SESSION["pageaide"]="Gestion_des_parcs#Action_sur_parcs";
 112  
 113  //***************Definition des droits de lecture  et aide en ligne
 114  
 115  // Verifie les droits
 116  if ((is_admin("computers_is_admin",$login)=="Y") or (is_admin("parc_can_view",$login)=="Y") or (is_admin("parc_can_manage",$login)=="Y") or (is_admin("inventaire_can_read",$login)=="Y")) {
 117  
 118  
 119      echo "<h1>".gettext("Action sur parc")."</h1>";
 120  
 121  
 122      //affichage de la suite
 123      // echo "<div id=main>";
 124  
 125      //*****************cas des parcs delegues***********************************/
 126      if ((is_admin("computers_is_admin",$login)=="N") and ((is_admin("parc_can_view",$login)=="Y") or (is_admin("parc_can_manage",$login)=="Y"))) {
 127          echo "<h3>".gettext("Votre d&#233;l&#233;gation a &#233;t&#233; prise en compte pour l'affichage de cette page.</h3>");
 128          $acces_restreint=1;
 129  
 130      }
 131  
 132      /************************* Declaration des variables ************************************/
 133      $action=$_POST['action'];
 134      if (!$action) { $action=$_GET['action'];}
 135  
 136      $parc=$_POST['parc'];
 137      if (!$parc) { $parc=$_GET['parc'];}
 138      if (!$parc) { echo "<div id=main>choisir un parc</div>"; exit; }
 139      if ($acces_restreint)  {  if ((!this_parc_delegate($login,$parc,"manage")) and (!this_parc_delegate($login,$parc,"view"))) { exit; } }
 140  
 141      //$force=$_POST['force'];
 142  
 143      //echo "action : $action";
 144      switch ($action) {
 145      
 146      // Arret de toutes les machines
 147      case "stop":
 148          if (($parc)  and ($parc<>"SELECTIONNER")) {
 149              if ($acces_restreint)  {  if ((!this_parc_delegate($login,$parc,"manage")) and (!this_parc_delegate($login,$parc,"view"))) { continue; } }
 150              echo "<HEAD><META HTTP-EQUIV=\"refresh\" CONTENT=\"15; URL=action_parc.php?parc=$parc&action=detail\">";
 151              echo "</HEAD>".gettext("Commandes prises en compte pour le parc")." <b>$parc</b><br>";
 152  //                echo gettext("! <br>");
 153                  //echo gettext(" Commandes prises en compte ! ");
 154                  echo "<h3>".gettext("Arr&#234;t lanc&#233; pour le parc")." <b>$parc</b></h3>\n";
 155              echo"<br>";
 156  //            echo gettext("(Ne concerne que les machines XP/2000)");
 157              $commandes=start_parc("shutdown", $parc);
 158  
 159           } else { echo gettext("Vous devez choisir un parc"); }
 160      break;
 161          //==============================
 162      // Reboot de toutes les machines
 163      case "reboot":
 164          if (($parc)  and ($parc<>"SELECTIONNER")) {
 165              if ($acces_restreint)  {  if ((!this_parc_delegate($login,$parc,"manage")) and (!this_parc_delegate($login,$parc,"view"))) { continue; } }
 166              echo "<HEAD><META HTTP-EQUIV=\"refresh\" CONTENT=\"15; URL=action_parc.php?parc=$parc&action=detail\">";
 167              echo "</HEAD>".gettext("Commandes prises en compte pour le parc")." <b>$parc</b><br>";
 168  //                echo gettext(" Commandes prises en compte ! <br>");
 169                  echo "<h3>".gettext("Reboot lanc&#233; pour le parc")." <b>$parc</b></h3>\n";
 170              echo "<br>";
 171  //            echo gettext("(Ne concerne que les machines XP/2000)");
 172              $commandes=start_parc("reboot", $parc);
 173  
 174           } else { echo gettext("Vous devez choisir un parc"); }
 175      break;
 176      //==============================
 177  
 178      // Essaye de demarrer les machines
 179      case "start":
 180          if (($parc)  and ($parc<>"SELECTIONNER")) {
 181              if ($acces_restreint)  {  if ((!this_parc_delegate($login,$parc,"manage")) and (!this_parc_delegate($login,$parc,"view"))) { continue; } }
 182                echo "<HEAD><META HTTP-EQUIV=\"refresh\" CONTENT=\"15; URL=action_parc.php?parc=$parc&action=detail\">";
 183              echo "</HEAD>".gettext("Commandes prises en compte pour le parc")." <b>$parc</b><br>";
 184  //            echo "Commandes prises en compte ! ";
 185              echo "<br>";
 186              echo "<h3>".gettext("Demarrage effectu&#233; pour le parc")." <b>$parc</b>. ".gettext("(Ne concerne que les machines equip&#233;es du syst&#232;me 'wake on lan')</h3>\n<br>");
 187  
 188               $commandes=start_parc("wol", $parc);
 189          } else { echo gettext("Vous devez choisir un parc"); }
 190      break;
 191  
 192  
 193  
 194      case "pose_heure":
 195          //pour obliger a passer par le formulaire
 196          //if ($force<>"pose_heure_wol") { exit; }
 197  
 198          //si parc non defini
 199          if ((!$parc) or ($parc=="SELECTIONNER")) { echo "<h1 align=center>".gettext("Vous devez choisir un parc!")."</h1>"; exit;}
 200  
 201          //si la personne n'a pas le droit d'effectuer cette action
 202          if ($acces_restreint)  {  if ((!this_parc_delegate($login,$parc,"manage")) and (!this_parc_delegate($login,$parc,"view"))) { continue; } }
 203  
 204          $result_delete=mysql_query("DELETE FROM `actionse3` WHERE action='wol' and parc='$parc';", $authlink) or die(gettext("Impossible d'effectuer la requete 1"));
 205          $result_delete=mysql_query("DELETE FROM `actionse3` WHERE action='stop' and parc='$parc';", $authlink) or die(gettext("Impossible d'effectuer la requete 2"));
 206  
 207          $wol=$_POST['wol'];
 208          $stop=$_POST['stop'];
 209          $heure_jour_wol=$_POST['time_day_wol'];
 210          $heure_jour_stop=$_POST['time_day_stop'];
 211  
 212          $jours=array('l','ma','me','j','v','s','d');
 213          foreach ($jours as $jour) {
 214  
 215              if ($wol[$jour]) {
 216                  //echo "<br>3 $jour:INSERT INTO actionse3 values ('wol','$parc','$jour','$heure_jour_wol[$jour]');<br>";
 217  
 218                  $result_insert=mysql_query("INSERT INTO actionse3 values ('wol','$parc','$jour','$heure_jour_wol[$jour]');", $authlink) or die(gettext("Impossible d'effectuer la requete 3 pour le jour")." $jour ");
 219              }
 220  
 221          if ($stop[$jour]) {
 222              //echo "4: $jour INSERT INTO actionse3 values ('stop','$parc','$jour','$heure_jour_stop[$jour]');<br>";
 223  
 224              $result_insert=mysql_query("INSERT INTO actionse3 values ('stop','$parc','$jour','$heure_jour_stop[$jour]');", $authlink) or die(gettext("Impossible d'effectuer la requete 4 pour le jour")." $jour");
 225          }
 226      }
 227  
 228      echo "<div id=main_txt>".gettext("Modifications enregistr&#233;es")."</div>";
 229      //break;
 230  
 231  // On affiche le tableau avec la possibilite de programmer les arrets 
 232  // et demarrages des stations
 233  case "timing" :
 234  
 235  
 236          $list_parcs=search_machines("objectclass=groupOfNames","parcs");
 237              if ( count($list_parcs)>0) {
 238                      sort($list_parcs);
 239                  echo "<CENTER>";
 240                  echo "<FORM method=\"post\" action=\"wolstop_station.php\">\n";
 241              echo "<input type=\"hidden\" name=\"action\" value=\"timing\" />\n";
 242              echo "<SELECT NAME=\"parc\" SIZE=\"1\" onchange=submit()>";
 243                  echo "<option value=\"SELECTIONNER\">S&#233;lectionner</option>";
 244              if ($acces_restreint=="1") {
 245                  $list_delegate=list_parc_delegate($login);
 246                  foreach ($list_delegate as $info_parc_delegate) {
 247                      echo "<option value=\"$info_parc_delegate\"";
 248                      if ($parc==$info_parc_delegate) { echo " selected"; }
 249                      echo ">$info_parc_delegate</option>";
 250                  }
 251              } else {    
 252                      for ($loop=0; $loop < count($list_parcs); $loop++) {
 253                          echo "<option value=\"".$list_parcs[$loop]["cn"]."\"";
 254                              if ($parc==$list_parcs[$loop]["cn"]) { echo " selected"; }
 255                              echo ">".$list_parcs[$loop]["cn"]."\n";
 256                              echo "</option>";
 257                         }
 258              }    
 259              echo "</SELECT>&nbsp;&nbsp;\n";
 260              echo "<u onmouseover=\"return escape".gettext("('S&#233;lectionner un parc.')")."\"><img name=\"action_image2\"  src=\"../elements/images/system-help.png\" alt=\"help\"></u> ";
 261              // echo "<input type=\"submit\" value=\"".gettext("Valider")."\">\n";
 262              echo "</FORM>\n";
 263              echo "</CENTER>\n";
 264              echo "<br>";
 265          } else {
 266              echo "<br><center>";
 267              echo gettext("Il n'existe pas encore de parc");
 268              echo "</center>\n";
 269          }    
 270  
 271  
 272          if (($parc!="") && ($parc!="SELECTIONNER")) {
 273              echo "<CENTER><table align=center><tr>\n";
 274              echo "<td><form action=\"wolstop_station.php\" method=\"post\">\n";
 275                 echo "<input type=\"hidden\" name=\"wolstop_station.php\" value=\"shutdown\" />";
 276                echo "<input type=\"hidden\" name=\"parc\" value=\"$parc\" />";
 277                echo "<input type=\"hidden\" name=\"action\" value=\"stop\" />";
 278                echo "<input  type=\"submit\" value=\"".gettext("Eteindre tous les postes")."\" onclick=\"if (window.confirm('Etes-vous sur de vouloir &#233;teindre le parc $parc ?')) {return true;} else {return false;}\"/>";
 279                 echo"</form></td>";
 280                     echo "<td><form action=\"wolstop_station.php\" method=\"post\">\n";
 281                 echo "<input type=\"hidden\" name=\"action_poste\" value=\"wol\" />";
 282                 echo "<input type=\"hidden\" name=\"parc\" value=\"$parc\" />";
 283                 echo "<input type=\"hidden\" name=\"action\" value=\"start\" />";
 284              echo "<input  type=\"submit\" value=\"".gettext("Allumer tous les postes")."\" />";
 285                 echo "</form></td>";
 286                     echo "<td><form action=\"action_parc.php\" method=\"post\">\n";
 287                 echo "<input type=\"hidden\" name=\"parc\" value=\"$parc\" />";
 288              echo "<input type=\"submit\" value=\"".gettext("Contr&#244;ler")."\" />";
 289                 echo"</form>\n";
 290          
 291          
 292              echo "</td></tr></table>\n";
 293              echo "<br>";    
 294          }
 295      echo "<table align=center width=\"60%\">\n";
 296      echo "<tr><TD height=\"30\" align=\"center\" class=\"menuheader\" >\n";
 297            echo gettext("Allumer les postes ( uniquement avec l'option wake on lan )")."</TD></tr>\n";
 298          echo "<TR><TD height=\"30\" align=\"center\" class=\"menuheader\" >".gettext("Eteindre les postes ( uniquement postes XP/2000 )")."</TD></TR>\n";
 299      echo "</table>\n";
 300  
 301      $type_action="wol";
 302      $type_action2="stop";
 303  
 304      echo "<script language='javascript' type='text/javascript'>
 305  	function coche_jours(mode,statut){
 306          for(k=0;k<7;k++){
 307              if(document.getElementById(mode+'_'+k)){
 308                  document.getElementById(mode+'_'+k).checked=statut;
 309              }
 310          }
 311      }
 312  
 313  	function recopie_heure(wakeorstop){
 314          index=document.getElementById('time_'+wakeorstop+'_0').selectedIndex;
 315          for(k=1;k<7;k++){
 316              document.getElementById('time_'+wakeorstop+'_'+k).selectedIndex=index;
 317          }
 318      }
 319      </script>\n";
 320  
 321      echo "<form action=\"wolstop_station.php\" method=\"post\">\n";
 322  
 323      echo "<CENTER><TABLE border=\"1\" width=\"60%\">\n";
 324      echo "<TR><TD  height=\"30\" align=\"center\"  class=\"menuheader\">";
 325      echo gettext("Planification par semaine : ");
 326      echo "</TD>\n<td  class=\"menuheader\" align=\"center\">";
 327      echo gettext("Allumage");
 328      echo "<br />\n";
 329      echo "<a href=\"javascript:coche_jours('allumage',true)\">";
 330      echo "<img src='../elements/images/enabled.png' alt='Cocher tout' title='Cocher tout' border='0' /></a>";
 331      echo " / \n";
 332      echo "<a href=\"javascript:coche_jours('allumage',false)\">";
 333      echo "<img src='../elements/images/disabled.png' alt='D&#233;cocher tout' title='D&#233;cocher tout' border='0' /></a>\n";
 334      echo "</td>\n";
 335      echo "<td  class=\"menuheader\" align=\"center\">";
 336      echo gettext("Heure");
 337      echo "<br />\n";
 338      echo "<a href=\"javascript:recopie_heure('wake');\">";
 339      echo "<img src='../elements/images/magic.png' alt='Recopie de l heure du lundi' title='Recopie de l heure du lundi' border='0' />";
 340      echo "</a>";
 341      echo " </td>\n";
 342      echo "<td  class=\"menuheader\" align=\"center\">".gettext("Extinction");
 343      echo "<br />\n";
 344      echo "<a href=\"javascript:coche_jours('extinction',true)\">";
 345      echo "<img src='../elements/images/enabled.png' alt='Cocher tout' title='Cocher tout' border='0' /></a>";
 346      echo " / \n";
 347      echo "<a href=\"javascript:coche_jours('extinction',false)\">";
 348      echo "<img src='../elements/images/disabled.png' alt='D&#233;cocher tout' title='D&#233;cocher tout' border='0' /></a>\n";
 349      echo "</td>\n";
 350      echo "<td  class=\"menuheader\" align=\"center\">".gettext("Heure");
 351      echo "<br />\n";
 352      echo "<a href=\"javascript:recopie_heure('stop');\">";
 353      echo "<img src='../elements/images/magic.png' alt='Recopie de l heure du lundi' title='Recopie de l heure du lundi' border='0' />";
 354      echo "</a>";
 355      echo " </td></tr>\n";
 356  
 357      echo "<tr><td align=\"center\">".gettext("Lundi")."</td>\n";
 358      echo "<td align=\"center\"><input type=\"checkbox\" id='allumage_0' name=\"wol[l]\" value=\"l\" ".jour_check($parc,"l",$type_action)."/></td>\n";
 359      echo "<td align=\"center\"><select id='time_wake_0' name=\"time_day_wol[l]\" size=\"1\">\n";
 360      heure_deroulante($parc,"l",$type_action);
 361      echo "</select></td>\n";
 362      echo "<td align=\"center\"><input type=\"checkbox\" id='extinction_0' name=\"stop[l]\" value=\"l\" ".jour_check($parc,"l",$type_action2)."/></td>\n";
 363      echo "<td align=\"center\"><select id='time_stop_0' name=\"time_day_stop[l]\" size=\"1\">\n";
 364      heure_deroulante($parc,"l",$type_action2);
 365      echo "</select></td></tr>\n";
 366      echo "<tr ><td align=\"center\">".gettext("Mardi")."</td><td align=\"center\"><input type=\"checkbox\" id='allumage_1' name=\"wol[ma]\" value=\"ma\" ".jour_check($parc,"ma",$type_action)."/></td>\n";
 367      echo "<td align=\"center\"><select id='time_wake_1' name=\"time_day_wol[ma]\" size=\"1\">\n";
 368      heure_deroulante($parc,"ma",$type_action);
 369      echo "</select></td>\n";
 370      echo "<td align=\"center\"><input type=\"checkbox\" id='extinction_1' name=\"stop[ma]\" value=\"l\" ".jour_check($parc,"ma",$type_action2)."/></td>\n";
 371      echo "<td align=\"center\"><select id='time_stop_1' name=\"time_day_stop[ma]\" size=\"1\">\n";
 372      heure_deroulante($parc,"ma",$type_action2);
 373      echo "</select></td></tr>\n";
 374      echo "<tr ><td align=\"center\">".gettext("Mercredi")."</td><td align=\"center\"><input type=\"checkbox\" id='allumage_2' name=\"wol[me]\" value=\"me\" ".jour_check($parc,"me",$type_action)."/></td>\n";
 375      echo "<td align=\"center\"><select id='time_wake_2' name=\"time_day_wol[me]\" size=\"1\">\n";
 376      heure_deroulante($parc,"me",$type_action);
 377      echo "</select></td>\n";
 378      echo "<td align=\"center\"><input type=\"checkbox\" id='extinction_2' name=\"stop[me]\" value=\"l\" ".jour_check($parc,"me",$type_action2)."/></td>\n";
 379      echo "<td align=\"center\"><select id='time_stop_2' name=\"time_day_stop[me]\" size=\"1\">\n";
 380      heure_deroulante($parc,"me",$type_action2);
 381      echo "</select></td></tr>\n";
 382      echo "<tr><td align=\"center\">".gettext("Jeudi")."</td><td align=\"center\"><input type=\"checkbox\" id='allumage_3' name=\"wol[j]\" value=\"j\" ".jour_check($parc,"j",$type_action)."/></td>\n";
 383      echo "<td align=\"center\"><select id='time_wake_3' name=\"time_day_wol[j]\" size=\"1\">\n";
 384      heure_deroulante($parc,"j",$type_action);
 385      echo "</select></td>\n";
 386      echo "<td align=\"center\"><input type=\"checkbox\" id='extinction_3' name=\"stop[j]\" value=\"l\" ".jour_check($parc,"j",$type_action2)."/></td>\n";
 387      echo "<td align=\"center\"><select id='time_stop_3' name=\"time_day_stop[j]\" size=\"1\">\n";
 388      heure_deroulante($parc,"j",$type_action2);
 389      echo "</select></td></tr>\n";
 390      echo "<tr><td align=\"center\">".gettext("Vendredi")."</td><td align=\"center\"><input type=\"checkbox\" id='allumage_4' name=\"wol[v]\" value=\"v\" ".jour_check($parc,"v",$type_action)."/></td>\n";
 391      echo "<td align=\"center\"><select id='time_wake_4' name=\"time_day_wol[v]\" size=\"1\">\n";
 392      heure_deroulante($parc,"v",$type_action);
 393      echo "</select></td>\n";
 394      echo "<td align=\"center\"><input type=\"checkbox\" id='extinction_4' name=\"stop[v]\" value=\"l\" ".jour_check($parc,"v",$type_action2)."/></td>";
 395      echo "<td align=\"center\"><select id='time_stop_4' name=\"time_day_stop[v]\" size=\"1\">\n";
 396      heure_deroulante($parc,"v",$type_action2);
 397      echo "</select></td></tr>";
 398  
 399      echo "<tr><td align=\"center\">".gettext("Samedi")."</td><td align=\"center\"><input type=\"checkbox\" id='allumage_5' name=\"wol[s]\" value=\"s\" ".jour_check($parc,"s",$type_action)."/></td>";
 400  
 401      echo "<td align=\"center\"><select id='time_wake_5' name=\"time_day_wol[s]\" size=\"1\">\n";
 402      heure_deroulante($parc,"s",$type_action);
 403      echo "</select></td>\n";
 404      echo "<td align=\"center\"><input type=\"checkbox\" id='extinction_5' name=\"stop[s]\" value=\"l\" ".jour_check($parc,"s",$type_action2)."/></td>";
 405      echo "<td align=\"center\"><select id='time_stop_5' name=\"time_day_stop[s]\" size=\"1\">\n";
 406      heure_deroulante($parc,"s",$type_action2);
 407      echo "</select></td></tr>\n";
 408      echo "<tr><td align=\"center\">".gettext("Dimanche")."</td><td align=\"center\"><input type=\"checkbox\" id='allumage_6' name=\"wol[d]\" value=\"d\" ".jour_check($parc,"d",$type_action)."/></td>";
 409  
 410      echo "<td align=\"center\"><select id='time_wake_6' name=\"time_day_wol[d]\" size=\"1\">\n";
 411      heure_deroulante($parc,"d",$type_action);
 412  
 413      echo "</select></td>\n";
 414      echo "<td align=\"center\"><input type=\"checkbox\" id='extinction_6' name=\"stop[d]\" value=\"l\" ".jour_check($parc,"d",$type_action2)."/></td>";
 415      echo "<td align=\"center\"><select id='time_stop_6' name=\"time_day_stop[d]\" size=\"1\">\n";
 416      heure_deroulante($parc,"d",$type_action2);
 417      echo "</select></td></tr>\n";
 418  
 419      echo "</tr><table>\n";
 420  
 421  
 422      echo "<input type=\"hidden\" name=\"parc\" value=\"$parc\" />\n";
 423      echo "<input type=\"hidden\" name=\"action\" value=\"pose_heure\" />\n";
 424       echo "</td></tr>\n";
 425      echo "<tr><td align=center><input type=\"hidden\" name=\"force\" value=\"pose_heure_wol\" />";
 426      echo "<input type=\"submit\" value=\"".gettext("Enregistrer mes modifications")."\" />";
 427      echo "</form><br><br></td></tr>\n";
 428      echo "</table>\n";
 429  
 430  break;
 431  
 432  
 433  }
 434  
 435  //echo "</div>";
 436  
 437  if ($detail) {  detail_parc($parc); }
 438  
 439  }
 440  
 441  require ("pdp.inc.php");
 442  ?>


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