[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3master/var/www/se3/infos/ -> quota_visu.php (source)

   1  <?php
   2  
   3     /**
   4     
   5     * Page permettant de visualiser des quotas en dur pour les utilisateurs de se3 
   6     * @Version $Id: quota_visu.php 8556 2015-03-15 13:00:59Z plouf $ 
   7     
   8     * @Projet LCS / SambaEdu 
   9     
  10     * @auteur : Olivier Lacroix (Olikin)
  11  
  12     * @Licence Distribue selon les termes de la licence GPL
  13     
  14     * @note Utilise le script quota_fixer_mysql.sh (qui appelle quota.sh) et des fichiers generes par warn_quota.sh
  15     * @note contributions: Franck Molle, Stephane Boireau. Remerciements tous particuliers a Franck Molle. ;-)
  16     
  17     */
  18  
  19     /**
  20  
  21     * @Repertoire: infos
  22     * file: quota_visu.php
  23  
  24    */    
  25  
  26  
  27  require("entete.inc.php");
  28  
  29  //Vrification existence utilisateur dans l'annuaire
  30  require("config.inc.php");
  31  require ("ldap.inc.php");
  32  
  33  //permet l'authentification is_admin
  34  require("ihm.inc.php");
  35  
  36  // Internationalisation
  37  require_once  ("lang.inc.php");
  38  bindtextdomain('se3-infos',"/var/www/se3/locale");
  39  textdomain ('se3-infos');
  40  
  41  //aide
  42  $_SESSION["pageaide"]="Quotas#Gestion_des_quotas";
  43  
  44  //AUTHENTIFICATION
  45  if (is_admin("system_is_admin",$login)!="Y")
  46     die (gettext("Vous n'avez pas les droits suffisants pour acc&#233;der &#224; cette fonction")."</BODY></HTML>");
  47  
  48  
  49  $partition=$_POST['partition'];
  50  if($partition=="") { $partition=$_GET['partition']; }
  51  $classe_gr=$_POST['classe_gr'];
  52  $equipe_gr=$_POST['equipe_gr'];
  53  $matiere_gr=$_POST['matiere_gr'];
  54  $autres_gr=$_POST['autres_gr'];
  55  $user=$_POST['user'];
  56  
  57  
  58  if ( file_exists("/tmp/tmp_quota_K") or file_exists("/tmp/tmp_quota_H")) {
  59  //J'utilise le script warn_quota.sh en le patchant a deux endroits pour creer un fichier dans /tmp: ce fichier est efface immediatement si l'admin n'avait pas fixe d'avertissement en cas de depassement de quota... Pas elegant mais cela ecomise un script et warnquota.sh est rapide...
  60  // AFFICHAGE D'ALERTE DES USERS en depassement de quota
  61          exec("sudo /usr/share/se3/scripts/warn_quota.sh");
  62          
  63        echo "<h1>".gettext("Attention!")."</h1>";
  64  
  65        $arr = array("/home", "/var/se3");
  66        foreach ($arr as $partit) { 
  67          if ( $partit == "/home" ) { $disque="K"; }
  68              else 
  69                {$disque="H"; }
  70      
  71              if (file_exists("/tmp/tmp_quota_$disque")) {
  72                    echo "<h2>".gettext("Liste des utilisateurs en d&#233;passement de quota sur")." $partit : <u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Visualisation de tous les utilisateurs en p&#233;riode de gr&#226;ce (orange) ou ayant leur p&#233;riode de gr&#226;ce expir&#233;e (rouge): ces derniers ne peuvent plus rien &#233;crire sur")." $partit ".gettext("d\'o&#151; maints dysfontionnements possibles...')")."\"><img name=\"action_image2\"  src=\"../elements/images/system-help.png\"></u></h2>";
  73                    echo "<TABLE  align='center' border='1'>\n";
  74                    echo "<TR><TD  class='menuheader'> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Utilisateur&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </TD>
  75              <TD  class='menuheader'> &nbsp;&nbsp;&nbsp;".gettext("Espace utilis&#233; &nbsp;(Mo)")."&nbsp;&nbsp;&nbsp; </TD>
  76              <TD  class='menuheader'> &nbsp;&nbsp;&nbsp;&nbsp;".gettext("Quota fix&#233; &nbsp;(Mo)")."&nbsp;&nbsp;&nbsp;</TD>
  77              <TD  class='menuheader'> &nbsp;&nbsp;&nbsp;".gettext("D&#233;lai de gr&#226;ce &nbsp;(Jours)")."&nbsp;&nbsp;&nbsp; </TD></TR>";
  78              if ( $partit == "/home" ) {
  79                      exec("cat /tmp/tmp_quota_$disque|gawk -F \"\t\"  '{print \"<tr align='center'><td><a name=ancre_\"$1\"_alerte href=#ancre_\"$1\"_alerte onclick=REPERE1 \"$1\" REPERE2> \" $1 \"</a></td><td> \" $2 \"</td><td> \" $3 \"</td><td bgcolor=#FF8C00>\" $5 \"</td></tr>\"}'| sed -e \"s+#FF8C00>Expire+#FF0000>Expir\&#233;+g\" | sed -e \"s+<td bgcolor=#FF8C00>-+<td>-+g\" > /tmp/result_quota");
  80                      exec("sed -i /tmp/result_quota -e \"s!REPERE1 !popuprecherche(\'stats_user.php?partition=$partit\&uid=!\"");
  81                      exec("sed -i /tmp/result_quota -e \"s! REPERE2!','popuprecherche','width=800,height=500');!\"");
  82                      system("cat /tmp/result_quota");
  83                      exec("rm /tmp/result_quota");
  84                  } else {
  85                  system("cat /tmp/tmp_quota_$disque|gawk -F \"\t\"  '{print \"<tr align='center'><td> \" $1 \"</td><td> \" $2 \"</td><td> \" $3 \"</td><td bgcolor=#FF8C00>\" $5 \"</td></tr>\"}'| sed -e \"s+#FF8C00>Expire+#FF0000>Expir\&#233;+g\" | sed -e \"s+<td bgcolor=#FF8C00>-+<td>-+g\"");
  86                  }
  87                    
  88              echo "</table>";
  89                }
  90        }
  91  } else {
  92  //effacer les messages d'avertissements crees en trop par ce script si non desires
  93  exec("sudo /usr/share/se3/scripts/warn_quota.sh");
  94  }
  95  
  96  echo "<h1>".gettext("Visualisation des quotas effectivement attribu&#233;s")."</h1>";
  97  
  98  //FILTRAGE
  99  echo "<FORM ACTION=\"quota_visu.php\" METHOD=\"post\">
 100   <h2>".gettext("Quotas sur")." &nbsp;
 101      <select name=\"partition\">
 102       <option>/home</option>
 103       <option>/var/se3</option>
 104      </select>
 105   </h2> ";
 106  
 107  echo "<h2>".gettext("Filtrer les membres des groupes suivants :")." <u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape".gettext("('Pour afficher tous les quotas, valider directement.')")."\"><img name=\"action_image2\"  src=\"../elements/images/system-help.png\"></u></h2>";
 108  
 109  //echo "<h3>( Pour afficher tous les quotas, valider directement. )</h3>";
 110  // Etablissement des listes des groupes disponibles
 111  $list_groups=search_groups("(&(cn=*) $filter )");
 112  // Etablissement des sous listes de groupes :
 113  $j =0; $k =0; $l = 0; $m = 0;
 114  for ($loop=0; $loop < count ($list_groups) ; $loop++) {
 115      
 116      // Classe
 117      if ( preg_match ("/Classe_/", $list_groups[$loop]["cn"]) ) {
 118          $classe[$j]["cn"] = $list_groups[$loop]["cn"];
 119          $classe[$j]["description"] = $list_groups[$loop]["description"];
 120          $j++;
 121      }
 122      
 123      // Equipe
 124      elseif ( preg_match ("/Equipe_/", $list_groups[$loop]["cn"]) ) {
 125          $equipe[$k]["cn"] = $list_groups[$loop]["cn"];
 126          $equipe[$k]["description"] = $list_groups[$loop]["description"];
 127          $k++;
 128      }
 129      
 130      //Matiere
 131      elseif ( preg_match ("/Matiere_/", $list_groups[$loop]["cn"]) ) {
 132          $matiere[$l]["cn"] = $list_groups[$loop]["cn"];
 133          $matiere[$l]["description"] = $list_groups[$loop]["description"];
 134          $l++;
 135      }
 136  
 137      // Autres
 138      elseif (!preg_match ("/^overfill/", $list_groups[$loop]["cn"]) && !preg_match ("/^lcs-users/", $list_groups[$loop]["cn"]) &&
 139      //!preg_match ("/^admins/", $list_groups[$loop]["cn"]) &&
 140      !preg_match ("/Cours_/", $list_groups[$loop]["cn"]) &&
 141      //!preg_match ("/Matiere_/", $list_groups[$loop]["cn"]) &&
 142      !preg_match ("/^slis/", $list_groups[$loop]["cn"]) &&
 143      !preg_match ("/^system/", $list_groups[$loop]["cn"]) &&
 144      !preg_match ("/^machines/", $list_groups[$loop]["cn"])) {
 145          $autres[$m]["cn"] = $list_groups[$loop]["cn"];
 146          $autres[$m]["description"] = $list_groups[$loop]["description"];
 147          $m++;
 148      }
 149  }
 150  
 151  
 152  // Affichage des boites de slection des groupes + choix d'un user spcifique
 153  ?>
 154  <table align='center' border="0" cellspacing="10">
 155  <thead>
 156  <tr>
 157  <td><?php echo gettext("Classes"); ?></td>
 158  <td><?php echo gettext("Equipes"); ?></td>
 159  <td><?php echo gettext("Mati&#232;res"); ?></td>
 160  <td><?php echo gettext("Autres"); ?></td>
 161  <td><?php echo gettext("Utilisateur sp&#233;cifique"); ?></td>
 162  </tr>
 163  </thead>
 164  <tbody>
 165  <tr>
 166  <td valign="top">
 167  <?php
 168  echo "<select name= \"classe_gr[]\" size=\"5\" multiple=\"multiple\">\n";
 169  for ($loop=0; $loop < count ($classe) ; $loop++) {
 170      echo "<option value=".$classe[$loop]["cn"].">".$classe[$loop]["cn"];
 171  }
 172  echo "</select>";
 173  echo "</td>";
 174  echo "<td valign=\"top\">\n";
 175  echo "<select name= \"equipe_gr[]\"  size=\"5\" multiple=\"multiple\">\n";
 176  for ($loop=0; $loop < count ($equipe) ; $loop++) {
 177  echo "<option value=".$equipe[$loop]["cn"].">".$equipe[$loop]["cn"];
 178  }
 179  echo "</select></td>\n";
 180  echo "<td valign=\"top\">\n";
 181  echo "<select name= \"matiere_gr[]\" size=\"5\" multiple=\"multiple\">\n";
 182  for ($loop=0; $loop < count ($matiere) ; $loop++) {
 183      echo "<option value=".$matiere[$loop]["cn"].">".$matiere[$loop]["cn"];
 184  }
 185  echo "</select></td>\n";
 186  echo "<td valign=\"top\">";
 187  echo "<select name=\"autres_gr[]\" size=\"5\" multiple=\"multiple\">";
 188  for ($loop=0; $loop < count ($autres) ; $loop++) {
 189      echo "<option value=".$autres[$loop]["cn"].">".$autres[$loop]["cn"];
 190  }
 191  echo "</select></td>";
 192  echo "<td valign=\"top\"><INPUT TYPE=\"TEXT\" NAME=\"user\" size=20></td></tr></table>";
 193  echo "<div align='center'><input type=\"submit\" value=\"".gettext("Valider")."\">
 194  <input type=\"reset\" value=\"".gettext("R&#233;initialiser")."\"></div>";
 195  echo "</form>";
 196  
 197  //echo "<FORM METHOD=\"post\" action=\"quota_visu.php?liste_rouge=yes\">";
 198  //echo "<h2>Utilisateurs en depassement de quota : <u onmouseover=\"this.T_SHADOWWIDTH=5;this.T_STICKY=1;return escape('Permet de visualiser tous les utilisateurs en p&#233;riode de grace (orange) ou ayant leur p&#233;riode de grace expir&#233;e (rouge)...')\"><img name=\"action_image2\"  src=\"../elements/images/system-help.png\"></u> ";
 199  //echo " <input type=\"submit\" value=\"Afficher\"></h2>";
 200  // echo "</form>";
 201  
 202  if ($partition<>"") {
 203      //AFFICHAGE DES RESULTATS
 204      echo "<hr>";
 205  
 206      //tableau des quotas: un tableau par groupe selection
 207  
 208      if ($classe_gr=="" and $equipe_gr=="" and $matiere_gr == "" and $autres_gr=="" and $user=="") {
 209          //si aucun filtre
 210          echo "<h3>".gettext("Le traitement des quotas pour la totalit&#233; de l'annuaire est en cours: veuillez patienter...")."</h3>";
 211          echo "<h3>P&#233;riode de gr&#226;ce actuelle sur $partition : ";
 212          system("sudo repquota $partition|grep \"Block grace time\"|cut -b19-25|sed -e \"s/ //g\"|sed -e \"s/days/ jour(s)/g\"|sed -e \"s/;//g\"");
 213          echo "</h3>";
 214  
 215          echo "<h2>".gettext("Liste de tous les quotas actuels sur")." $partition :</h2>";
 216          echo "<TABLE  align='center' border='1'>\n";
 217          echo "<TR><TD  class='menuheader'> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".gettext("Utilisateur")."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </TD>
 218          <TD  class='menuheader'> &nbsp;&nbsp;&nbsp;".gettext("Espace utilis&#233; &nbsp;(Mo)")."&nbsp;&nbsp;&nbsp; </TD>
 219          <TD  class='menuheader'> &nbsp;&nbsp;&nbsp;&nbsp;".gettext("Quota fix&#233; &nbsp;(Mo)")."&nbsp;&nbsp;&nbsp;</TD>
 220          <TD  class='menuheader'> &nbsp;&nbsp;&nbsp;".gettext("D&#233;lai de gr&#226;ce &nbsp;(Jours)")."&nbsp;&nbsp;&nbsp; </TD></TR>";
 221          //filtre pour garder les lignes intressantes: suppr entte du script repquota_filtre.sh <=> les 7 1res lignes!
 222          //le script lui, filtre certains utilisateurs comme : root, www-se3 et trie par ordre alpha => voir commentaires script
 223          exec("sudo /usr/share/se3/scripts/repquota_filtre.sh $partition |tail +7 >/tmp/quota_filtre");
 224  
 225          //filtre les tabulations et les remplace par les balises du tableau
 226          //pour pouvoir mettre la couleur orange des qu'il y a un nombre, je la mets par defaut et la trnnsforme en rouge si delai expire, en transparent si on a un tiret: obligatoire car il y a plein de tiret dans le tableau non distingables
 227          if ($partition=="/home"){
 228              //affiche lien vers statistiques d'occupation pour /home
 229                          //filtre les tabulations et les remplace par les balises du tableau
 230                          //pour pouvoir mettre la couleur orange des qu'il y a un nombre, je la mets par defaut et la trnnsforme en rouge si delai expire, en transparent si on a un tiret: obligatoire car il y a plein de tiret dans le tableau non distingables
 231              exec("cat /tmp/quota_filtre|gawk -F \"\t\"  '{print \"<tr align='center'><td><a name=ancre_\"$1\" href=#ancre_\"$1\" onclick=REPERE1 \"$1\" REPERE2> \" $1 \"</a></td><td> \" $2 \"</td><td> \" $3 \"</td><td bgcolor=#FF8C00>\" $5 \"</td></tr>\"}'| sed -e \"s+#FF8C00>Expire+#FF0000>Expir\&#233;+g\" | sed -e \"s+<td bgcolor=#FF8C00>-+<td>-+g\" > /tmp/result_quota");
 232              exec("sed -i /tmp/result_quota -e \"s!REPERE1 !popuprecherche(\'stats_user.php?partition=$partition\&uid=!\"");
 233              exec("sed -i /tmp/result_quota -e \"s! REPERE2!','popuprecherche','width=800,height=500');!\"");
 234              system("cat /tmp/result_quota");
 235              exec("rm /tmp/result_quota");
 236          } else {
 237              //pas de lien car script stat_user.sh non valide sur /var/se3
 238              system("cat /tmp/quota_filtre|gawk -F \"\t\"  '{print \"<tr align='center'><td> \" $1 \"</td><td> \" $2 \"</td><td> \" $3 \"</td><td bgcolor=#FF8C00>\" $5 \"</td></tr>\"}'| sed -e \"s+#FF8C00>Expire+#FF0000>Expir\&#233;+g\" | sed -e \"s+<td bgcolor=#FF8C00>-+<td>-+g\"");
 239          }
 240  
 241          echo "</table>";
 242      } else { //si il y a eu une demande de filtrage
 243  
 244          //concatne tous les groupes cherchs dans le tableau liste_sel
 245          $i =0;
 246          $liste_sel = array();
 247          for ($loop=0; $loop < count ($classe_gr) ; $loop++) {
 248              $liste_sel[$i] = $classe_gr[$loop];
 249              $i++;
 250          }
 251          for ($loop=0; $loop < count ($equipe_gr) ; $loop++) {
 252              $liste_sel[$i] = $equipe_gr[$loop];
 253              $i++;
 254          }
 255          for ($loop=0; $loop < count ($matiere_gr) ; $loop++) {
 256              $liste_sel[$i] = $matiere_gr[$loop];
 257              $i++;
 258          }
 259          for ($loop=0; $loop < count ($autres_gr) ; $loop++) {
 260              $liste_sel[$i] = $autres_gr[$loop];
 261              $i++;
 262          }
 263  
 264          $liste_sel[$i] = $user;
 265  
 266          //cherche user pour savoir s'il existe ensuite
 267          $tabresult=search_people("uid=$user");
 268  
 269          echo "<h3>P&#233;riode de gr&#226;ce actuelle sur $partition : ";
 270          system("sudo repquota $partition|grep \"Block grace time\"|cut -b19-25|sed -e \"s/ //g\"|sed -e \"s/days/ jours/g\"|sed -e \"s/;//g\"");
 271          echo "</h3>";
 272  
 273          //affiche tous les tableaux demands
 274          foreach ($liste_sel as $grp){
 275  
 276              //TESTE si $user EXISTE  OU si $grp est un utilisateur d'un groupe (et non $user) => il faut afficher le tableau!
 277              if(count($tabresult)!=0 or $grp!=$user){
 278                  if ($grp!=$user){
 279                      echo "<h2>Liste des quotas actuels sur $partition pour $grp :</h2>";
 280                  } else {
 281                      echo "<h2>Quota actuel sur $partition pour l'utilisateur $grp :</h2>";
 282                  }
 283  
 284                  echo "<TABLE  align='center' border='1'>\n";
 285                  echo "<TR><TD  class='menuheader'> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".gettext("Utilisateur")."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </TD>
 286                  <TD  class='menuheader'> &nbsp;&nbsp;&nbsp;".gettext("Espace utilis&#233;")." &nbsp;(Mo)&nbsp;&nbsp;&nbsp; </TD>
 287                  <TD  class='menuheader'> &nbsp;&nbsp;&nbsp;&nbsp;".gettext("Quota fix&#233;")." &nbsp;(Mo)&nbsp;&nbsp;&nbsp;</TD>
 288                  <TD  class='menuheader'> &nbsp;&nbsp;&nbsp;".gettext("D&#233;lai de gr&#226;ce &nbsp;(Jours)")."&nbsp;&nbsp;&nbsp; </TD></TR>";
 289  
 290                  //filtre pour garder les lignes intressantes: suppr entte du script repquota_filtre.sh <=> les 7 1res lignes!
 291                  //le script lui, filtre certains utilisateurs comme : root, www-se3 et trie par ordre alpha => voir commentaires script
 292                  //filtre les tabulations et les remplace par les balises du tableau
 293  
 294                  exec("sudo /usr/share/se3/scripts/repquota_filtre.sh $partition $grp|tail +7 > /tmp/quota_filtre ");
 295  
 296                  //filtre les tabulations et les remplace par les balises du tableau
 297                  //pour pouvoir mettre la couleur orange des qu'il y a un nombre, je la mets par defaut et la trnnsforme en rouge si delai expire, en transparent si on a un tiret
 298  
 299                  if ($partition=="/home"){
 300                      //affiche lien vers statistiques d'occupation sur /home
 301                      exec("cat /tmp/quota_filtre|gawk -F \"\t\"  '{print \"<tr align='center'><td><a name=ancre_\"$1\"_$grp href=#ancre_\"$1\"_$grp onclick=REPERE1 \"$1\" REPERE2> \" $1 \"</a></td><td> \" $2 \"</td><td> \" $3 \"</td><td bgcolor=#FF8C00>\" $5 \"</td></tr>\"}'| sed -e \"s+#FF8C00>Expire+#FF0000>Expir\&#233;+g\" | sed -e \"s+<td bgcolor=#FF8C00>-+<td>-+g\" > /tmp/result_quota");
 302                      exec("sed -i /tmp/result_quota -e \"s!REPERE1 !popuprecherche(\'stats_user.php?partition=$partition\&uid=!\"");
 303                      exec("sed -i /tmp/result_quota -e \"s! REPERE2!','popuprecherche','width=800,height=500');!\"");
 304                      system("cat /tmp/result_quota");
 305                      exec("rm /tmp/result_quota");
 306  
 307                  } else {
 308                      //pas de stat sur /var/se3 car script stat_user.sh non valide pour cette partition
 309                      system("cat /tmp/quota_filtre|gawk -F \"\t\"  '{print \"<tr align='center'><td> \" $1 \"</td><td> \" $2 \"</td><td> \" $3 \"</td><td bgcolor=#FF8C00>\" $5 \"</td></tr>\"}'| sed -e \"s+#FF8C00>Expire+#FF0000>Expir\&#233;+g\" | sed -e \"s+<td bgcolor=#FF8C00>-+<td>-+g\"");
 310                  }
 311                  echo "</table>";
 312              } else { //si utilisateur non valide
 313                  if ($user != "") echo "<h2>".gettext("L'utilisateur sp&#233;cifi&#233;")." \"$user\" ".gettext("n'est pas valide!")."</h2>";
 314              }
 315          }//fin du foreach ($liste_sel...
 316      }//fin du else du if ($classe_gr=="" and $equipe_gr=="" and $autres_gr=="" and $user=="")
 317  
 318      //SUPPRIME LE FICHIER TEMPORAIRE quota_filtre CREE:
 319      exec("rm /tmp/quota_filtre");
 320      //fin de visualisation des quotas demande
 321  
 322  }//fin du if($partition <> "") et donc de l'affichage des tableaux
 323  
 324  include ("pdp.inc.php");
 325  ?>
 326  


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