[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
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éder à 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é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ériode de grâce (orange) ou ayant leur période de grâce expirée (rouge): ces derniers ne peuvent plus rien écrire sur")." $partit ".gettext("d\'o— 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'> Utilisateur </TD> 75 <TD class='menuheader'> ".gettext("Espace utilisé (Mo)")." </TD> 76 <TD class='menuheader'> ".gettext("Quota fixé (Mo)")." </TD> 77 <TD class='menuheader'> ".gettext("Délai de grâce (Jours)")." </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\é+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\é+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és")."</h1>"; 97 98 //FILTRAGE 99 echo "<FORM ACTION=\"quota_visu.php\" METHOD=\"post\"> 100 <h2>".gettext("Quotas sur")." 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ères"); ?></td> 160 <td><?php echo gettext("Autres"); ?></td> 161 <td><?php echo gettext("Utilisateur spé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é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ériode de grace (orange) ou ayant leur période de grace expiré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é de l'annuaire est en cours: veuillez patienter...")."</h3>"; 211 echo "<h3>Période de grâ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'> ".gettext("Utilisateur")." </TD> 218 <TD class='menuheader'> ".gettext("Espace utilisé (Mo)")." </TD> 219 <TD class='menuheader'> ".gettext("Quota fixé (Mo)")." </TD> 220 <TD class='menuheader'> ".gettext("Délai de grâce (Jours)")." </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\é+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\é+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ériode de grâ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'> ".gettext("Utilisateur")." </TD> 286 <TD class='menuheader'> ".gettext("Espace utilisé")." (Mo) </TD> 287 <TD class='menuheader'> ".gettext("Quota fixé")." (Mo) </TD> 288 <TD class='menuheader'> ".gettext("Délai de grâce (Jours)")." </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\é+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\é+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écifié")." \"$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
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Tue Mar 17 22:47:18 2015 | Cross-referenced by PHPXref 0.7.1 |