[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-ocs/sources/www/ -> tele_stats.php (source)

   1  <?
   2  $_GET["sessid"] = isset( $_POST["sessid"] ) ? $_POST["sessid"] : $_GET["sessid"];
   3  if( isset($_GET["sessid"])){
   4      session_id($_GET["sessid"]);
   5      session_start();
   6      
   7      if( !isset($_SESSION["loggeduser"]) ) {
   8          die("FORBIDDEN");
   9      }
  10  }
  11  else
  12      die("FORBIDDEN");
  13  
  14  require  ('preferences.php');
  15  
  16  if( isset($_GET["delsucc"]) ) {    
  17      
  18      $resSupp = mysql_query("DELETE FROM devices WHERE name='DOWNLOAD' AND tvalue LIKE 'SUCCESS%' AND 
  19      ivalue = (SELECT id FROM download_enable WHERE fileid='".$_GET["stat"]."')", $_SESSION["writeServer"]);
  20  }
  21  
  22  $resStats = mysql_query("SELECT COUNT(id) as 'nb', tvalue as 'txt' FROM devices d, download_enable e WHERE e.fileid='".$_GET["stat"]."'
  23   AND e.id=d.ivalue AND name='DOWNLOAD' GROUP BY tvalue", $_SESSION["readServer"]);
  24  
  25  if( @mysql_num_rows( $resStats ) == 0 ) {
  26      echo "<center>".$l->g(526)."</center>";
  27      die();    
  28  }
  29  
  30  if( ! function_exists( "imagefontwidth") ) {
  31      echo "<br><center><font color=red><b>ERROR: GD for PHP is not properly installed.<br>Try uncommenting \";extension=php_gd2.dll\" (windows) by removing the semicolon in file php.ini, or try installing the php4-gd package.</b></font></center>";
  32      die();
  33  }
  34  else if( isset($_GET["generatePic"]) ) {
  35      $tot = 0;
  36      $quartiers = array();
  37      $coul = array( 0x0091C3, 0xFFCB03  ,0x33CCCC, 0xFF9900,  0x969696,  0x339966, 0xFF99CC, 0x99CC00);
  38      $i = 0;
  39      while( $valStats = mysql_fetch_array( $resStats ) ) {
  40          $tot += $valStats["nb"];
  41          if( $valStats["txt"] =="" )
  42              $valStats["txt"] = $l->g(482);
  43          $quartiers[] = array( $valStats["nb"], $coul[ $i ], $valStats["txt"]." (".$valStats["nb"].")" );    
  44          $i++;
  45          if( $i > sizeof( $coul ) )
  46              $i=0;
  47      }
  48      camembert($quartiers);
  49  }
  50  else {
  51      ?>
  52      <html>
  53      <head>
  54      <TITLE>OCS Inventory Stats</TITLE>
  55      <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
  56      <META HTTP-EQUIV="Expires" CONTENT="-1">
  57      <LINK REL='StyleSheet' TYPE='text/css' HREF='css/ocsreports.css'>
  58      </HEAD>
  59      <BODY>
  60  
  61      <?
  62      
  63      $resStats = mysql_query("SELECT COUNT(DISTINCT HARDWARE_ID) as 'nb' FROM devices d, download_enable e WHERE e.fileid='".$_GET["stat"]."'
  64      AND e.id=d.ivalue AND name='DOWNLOAD'", $_SESSION["readServer"]);
  65  
  66      $valStats = mysql_fetch_array( $resStats );
  67      
  68      echo "<br><img src='tele_stats.php?generatePic=1&sessid=".$_GET["sessid"]."&stat=".$_GET["stat"]."'>";
  69      echo "<center><b>".$l->g(28).": ".$valStats["nb"]."</b><br><br><a href='tele_stats.php?delsucc=1&sessid=".$_GET["sessid"]."&stat=".$_GET["stat"]."'>".$l->g(483)."</a>";    
  70      ?>
  71      </BODY>
  72      </HTML>
  73      <?
  74  }
  75  
  76     function camembert($arr)
  77     {    
  78        $size=3; /* taille de la police, largeur du caractère */
  79        $ifw=imagefontwidth($size);                            
  80         
  81        $w=800; /* largeur de l'image */
  82        $h=500; /* hauteur de l'image */
  83        $a=200; /* grand axe du camembert */
  84        $b=$a/2; /* 60 : petit axe du camembert */
  85        $d=$a/2; /* 60 : "épaisseur" du camembert */
  86        $cx=$w/2-1; /* abscisse du "centre" du camembert */
  87        $cy=($h-$d)/2; /* 95 : ordonnée du "centre" du camembert */
  88         
  89        $A=138+80; /* grand axe de l'ellipse "englobante" */
  90        $B=102+80; /* petit axe de l'ellipse "englobante" */
  91        $oy=-$d/2; /* -30 : du "centre" du camembert à celui de l'ellipse "englobante"*/
  92      
  93        $img=imagecreate($w,$h);
  94        $bgcolor=imagecolorallocate($img,0xCD,0xCD,0xCD);    
  95        imagecolortransparent($img,$bgcolor);
  96        $black=imagecolorallocate($img,0,0,0);
  97                                  /* calcule la somme des données */
  98        for ($i=$sum=0,$n=count($arr);$i<$n;$i++) $sum+=$arr[$i][0];    
  99         
 100        /* fin des préliminaires : on peut vraiment commencer! */
 101        for ($i=$v[0]=0,$x[0]=$cx+$a,$y[0]=$cy,$doit=true;$i<$n;$i++) {                                                        
 102           for ($j=0,$k=16;$j<3;$j++,$k-=8) $t[$j]=($arr[$i][1]>>$k) & 0xFF;
 103                                  /* détermine les "vraies" couleurs */
 104           $color[$i]=imagecolorallocate($img,$t[0],$t[1],$t[2]);
 105                                  /* calcule l'angle des différents "secteurs" */
 106           $v[$i+1]=$v[$i]+round($arr[$i][0]*360/$sum);    
 107                                                             
 108           if ($doit) { /* détermine les couleurs "ombrées" */
 109              $shade[$i]=imagecolorallocate($img,max(0,$t[0]-50),max(0,$t[1]-50),max(0,$t[2]-50));
 110                                                             
 111              if ($v[$i+1]<180) { /* calcule les coordonnées des différents parallélogrammes */
 112                 $x[$i+1]=$cx+$a*cos($v[$i+1]*M_PI/180);        
 113                 $y[$i+1]=$cy+$b*sin($v[$i+1]*M_PI/180);    
 114              }                                        
 115              else {
 116                 $m=$i+1;
 117                 $x[$m]=$cx-$a; /* c'est comme si on remplaçait $v[$i+1] par 180° */
 118                 $y[$m]=$cy;    
 119                 $doit=false; /* indique qu'il est inutile de continuer! */
 120              }
 121           }
 122        }
 123         
 124        /* dessine la "base" du camembert */
 125        for ($i=0;$i<$m;$i++) imagefilledarc($img,$cx,$cy+$d,2*$a,2*$b,$v[$i],$v[$i+1],$shade[$i],IMG_ARC_PIE);
 126         
 127        /* dessine la partie "verticale" du camembert */                                                        
 128        for ($i=0;$i<$m;$i++) {                        
 129           $area=array($x[$i],$y[$i]+$d,$x[$i],$y[$i],$x[$i+1],$y[$i+1],$x[$i+1],$y[$i+1]+$d);
 130           imagefilledpolygon($img,$area,4,$shade[$i]);            
 131        }
 132         
 133        /* dessine le dessus du camembert */
 134        for ($i=0;$i<$n;$i++) imagefilledarc($img,$cx,$cy,2*$a,2*$b,$v[$i],$v[$i+1],$color[$i],IMG_ARC_PIE);
 135      
 136        /*imageellipse($img,$cx,$cy-$oy,2*$A,2*$B,$black);    // dessine l'ellipse "englobante" */
 137         
 138        /* dessine les "flêches" et met en place le texte */
 139        for ($i=0,$AA=$A*$A,$BB=$B*$B;$i<$n;$i++) if ($arr[$i][0]) {
 140           $phi=($v[$i+1]+$v[$i])/2;
 141                                  /* intersection des "flêches" avec l'ellipse "englobante" */
 142           $px=$a*3*cos($phi*M_PI/180)/4;        
 143           $py=$b*3*sin($phi*M_PI/180)/4;        
 144                                  /* équation du 2ème degré avec 2 racines réelles et distinctes */    
 145           $U=$AA*$py*$py+$BB*$px*$px;
 146           $V=$AA*$oy*$px*$py;                        
 147           $W=$AA*$px*$px*($oy*$oy-$BB);    
 148                                  /* calcule le pourcentage à afficher */
 149           $value=number_format(100*$arr[$i][0]/$sum,2,",","")."%";
 150                                  /* écrit le texte à droite */    
 151           if ($phi<=90 || $phi>270) {
 152              $root=(-$V+sqrt($V*$V-$U*$W))/$U;
 153              imageline($img,$px+$cx,$py+$cy,$qx=$root+$cx,$qy=$root*$py/$px+$cy,$black);
 154              imageline($img,$qx,$qy,$qx+10,$qy,$black);        
 155             
 156              imagestring($img,$size,$qx+14,$qy-12,$arr[$i][2],$black);
 157              imagestring($img,$size,$qx+14,$qy-2,$value,$black);
 158           }
 159           else { /* écrit le texte à gauche */
 160              $root=(-$V-sqrt($V*$V-$U*$W))/$U;
 161              imageline($img,$px+$cx,$py+$cy,$qx=$root+$cx,$qy=$root*$py/$px+$cy,$black);
 162              imageline($img,$qx,$qy,$qx-10,$qy,$black);        
 163                          
 164              imagestring($img,$size,$qx-12-$ifw*strlen($arr[$i][2]),$qy-12,$arr[$i][2],$black);
 165              imagestring($img,$size,$qx-12-$ifw*strlen($value),$qy-2,$value,$black);
 166          }
 167       }
 168     
 169       header("Content-type: image/png");
 170       imagepng($img);
 171       imagedestroy($img);
 172    }
 173    
 174  ?>


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