PageRenderTime 53ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/visualisation/draw_graphe_star.php

https://github.com/jjocal/gepi
PHP | 874 lines | 559 code | 158 blank | 157 comment | 91 complexity | 92d5a2efa790fd5e3ce1a7e5d3ce23ad MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1
  1. <?php
  2. /*
  3. $Id: draw_graphe_star.php 6729 2011-03-30 09:33:15Z crob $
  4. */
  5. header("Content-type:image/png");
  6. // On précise de ne pas traiter les données avec la fonction anti_inject
  7. $traite_anti_inject = 'no';
  8. // En quoi cela consiste-t-il?
  9. // Initialisations files
  10. require_once("../lib/initialisations.inc.php");
  11. // Récupération des valeurs:
  12. //$nb_data = $_GET['nb_data'];
  13. $nb_series= $_GET['nb_series'];
  14. if((strlen(preg_replace("/[0-9]/","",$nb_series))!=0)||($nb_series=="")){
  15. exit;
  16. }
  17. //$eleves= $_GET['eleves'];
  18. $id_classe=$_GET['id_classe'];
  19. if((strlen(preg_replace("/[0-9]/","",$id_classe))!=0)||($id_classe=="")){
  20. exit;
  21. }
  22. for($i=1;$i<=$nb_series;$i++){
  23. $mgen[$i]=isset($_GET['mgen'.$i]) ? $_GET['mgen'.$i] : "";
  24. }
  25. function writinfo($chemin,$type,$chaine){
  26. //$debug=1;
  27. $debug=0;
  28. if($debug==1){
  29. $fich=fopen($chemin,$type);
  30. fwrite($fich,$chaine);
  31. fclose($fich);
  32. }
  33. }
  34. /*
  35. // Fonction déplacée vers /lib/share.inc.php avec ajout du remplacement des espaces et apostrophes par des tirets '_'
  36. function remplace_accents($chaine){
  37. //$retour=strtr(my_ereg_replace("ź","OE",my_ereg_replace("˝","oe",$chaine)),"ŔÄÂÉČĘËÎĎÔÖŮŰÜÇçŕäâéčęëîďôöůűü","AAAEEEEIIOOUUUCcaaaeeeeiioouuu");
  38. //$retour=strtr(my_ereg_replace("Ć","AE",my_ereg_replace("ć","ae",my_ereg_replace("ź","OE",my_ereg_replace("˝","oe","$chaine"))))," 'ÂÄŔÁĂÄĹÇĘËČÉÎĎĚÍŃÔÖŇÓŐŚŰÜŮÚÝž´áŕâäăĺçéčęëîďěíńôöđňóő¨űüůúý˙¸","__AAAAAAACEEEEIIIINOOOOOSUUUUYYZaaaaaaceeeeiiiinoooooosuuuuyyz");
  39. $retour=strtr(my_ereg_replace("Ć","AE",my_ereg_replace("ć","ae",my_ereg_replace("ź","OE",my_ereg_replace("˝","oe","$chaine")))),"ÂÄŔÁĂÄĹÇĘËČÉÎĎĚÍŃÔÖŇÓŐŚŰÜŮÚÝž´áŕâäăĺçéčęëîďěíńôöđňóő¨űüůúý˙¸","AAAAAAACEEEEIIIINOOOOOSUUUUYYZaaaaaaceeeeiiiinoooooosuuuuyyz");
  40. return $retour;
  41. }
  42. */
  43. //============================================
  44. writinfo('/tmp/infos_graphe.txt','w+',"Avant la récupération des moyennes.\n");
  45. // Récupération des moyennes:
  46. $moytmp=array();
  47. $moyenne=array();
  48. //$nb_series=$nb_data-1;
  49. //$nb_series=2;
  50. for($k=1;$k<=$nb_series;$k++){
  51. $moytmp[$k]=array();
  52. $moytmp[$k]=explode("|",$_GET['temp'.$k]);
  53. $moyenne[$k]=array();
  54. // On décale pour commencer ŕ compter ŕ 1:
  55. for($i=1;$i<=count($moytmp[$k]);$i++){
  56. $moyenne[$k][$i]=$moytmp[$k][$i-1];
  57. //fwrite($fich,"\$moyenne[$k][$i]=".$moyenne[$k][$i]."\n");
  58. // PROBLEME: en register_global=on, les 2čme, 3čme,... séries ne sont pas récupérées.
  59. // On obtient juste moyenne[2][1]=- et rien aprčs.
  60. writinfo('/tmp/infos_graphe.txt','a+',"\$moyenne[$k][$i]=".$moyenne[$k][$i]."\n");
  61. }
  62. }
  63. //============================================
  64. writinfo('/tmp/infos_graphe.txt','a+',"\n");
  65. $periode=isset($_GET['periode']) ? $_GET['periode'] : '';
  66. // Valeurs en dur, ŕ modifier par la suite...
  67. //$largeurTotale=700;
  68. //$hauteurTotale=600;
  69. $largeurTotale=isset($_GET['largeur_graphe']) ? $_GET['largeur_graphe'] : '700';
  70. if((strlen(preg_replace("/[0-9]/","",$largeurTotale))!=0)||($largeurTotale=="")){
  71. $largeurTotale=700;
  72. }
  73. $hauteurTotale=isset($_GET['hauteur_graphe']) ? $_GET['hauteur_graphe'] : '600';
  74. if((strlen(preg_replace("/[0-9]/","",$hauteurTotale))!=0)||($hauteurTotale=="")){
  75. $hauteurTotale=600;
  76. }
  77. $tronquer_nom_court=isset($_GET['tronquer_nom_court']) ? $_GET['tronquer_nom_court'] : '0';
  78. writinfo('/tmp/infos_graphe.txt','a+',"\$tronquer_nom_court=$tronquer_nom_court\n");
  79. if((!ctype_digit($tronquer_nom_court))||($tronquer_nom_court<0)||($tronquer_nom_court>10)){
  80. $tronquer_nom_court=0;
  81. }
  82. writinfo('/tmp/infos_graphe.txt','a+',"\$tronquer_nom_court=$tronquer_nom_court\n");
  83. //settype($largeurTotale,'integer');
  84. //settype($hauteurTotale,'integer');
  85. // $taille_police de 1 ŕ 6
  86. //$taille_police=3;
  87. $taille_police=isset($_GET['taille_police']) ? $_GET['taille_police'] : '3';
  88. if((strlen(preg_replace("/[0-9]/","",$taille_police))!=0)||($taille_police<1)||($taille_police>6)||($taille_police=="")){
  89. $taille_police=3;
  90. }
  91. if($taille_police>1){
  92. $taille_police_inf=$taille_police-1;
  93. }
  94. else{
  95. $taille_police_inf=$taille_police;
  96. }
  97. //$epaisseur_traits=2;
  98. $epaisseur_traits=isset($_GET['epaisseur_traits']) ? $_GET['epaisseur_traits'] : '2';
  99. if((strlen(preg_replace("/[0-9]/","",$epaisseur_traits))!=0)||($epaisseur_traits<1)||($epaisseur_traits>6)||($epaisseur_traits=="")){
  100. $epaisseur_traits=2;
  101. }
  102. writinfo('/tmp/infos_graphe.txt','a+',"\$epaisseur_traits=$epaisseur_traits\n");
  103. $epaisseur_axes=2;
  104. $epaisseur_grad=1;
  105. writinfo('/tmp/infos_graphe.txt','a+',"\nAvant la récupération des matičres.\n");
  106. $eleve=array();
  107. $legendy = array();
  108. //============================================
  109. // Récupération des matičres:
  110. $mattmp=explode("|", $_GET['etiquette']);
  111. for($i=1;$i<=count($mattmp);$i++){
  112. $matiere[$i]=$mattmp[$i-1];
  113. $call_matiere = mysql_query("SELECT nom_complet FROM matieres WHERE matiere = '".$matiere[$i]."'");
  114. $matiere_nom_long[$i] = mysql_result($call_matiere, "0", "nom_complet");
  115. $matiere_nom_long[$i]=remplace_accents($matiere_nom_long[$i],'simple');
  116. writinfo('/tmp/infos_graphe.txt','a+',"\$matiere[$i]=".$matiere[$i]."\n");
  117. $matiere[$i]=remplace_accents($matiere[$i],'simple');
  118. writinfo('/tmp/infos_graphe.txt','a+',"\$matiere[$i]=".$matiere[$i]."\n");
  119. }
  120. writinfo('/tmp/infos_graphe.txt','a+',"\nAvant les titres...\n");
  121. $titre = unslashes($_GET['titre']);
  122. $k = 1;
  123. //while ($k < $nb_data) {
  124. //while ($k<=$nb_series) {
  125. for($k=1;$k<=2;$k++){
  126. if (isset($_GET['v_legend'.$k])) {
  127. $legendy[$k] = unslashes($_GET['v_legend'.$k]);
  128. } else {
  129. $legendy[$k]='' ;
  130. }
  131. // $eleve peut en fait ętre une moyenne de classe ou męme un trimestre...
  132. $eleve[$k]=$legendy[$k];
  133. writinfo('/tmp/infos_graphe.txt','a+',"\$eleve[$k]=".$eleve[$k]."\n");
  134. //$k++;
  135. }
  136. //============================================
  137. $eleve1=$_GET['v_legend1'];
  138. $sql="SELECT * FROM eleves WHERE login='$eleve1'";
  139. $resultat_infos_eleve1=mysql_query($sql);
  140. $ligne=mysql_fetch_object($resultat_infos_eleve1);
  141. //$nom_eleve1=$ligne->nom." ".$ligne->prenom;
  142. $nom_eleve[1]=$ligne->nom." ".$ligne->prenom;
  143. if($periode!=''){
  144. $nom_eleve[1]=$nom_eleve[1]." ($periode)";
  145. }
  146. $nom_eleve[1]=remplace_accents($nom_eleve[1],'simple');
  147. // Variable destinée ŕ tenir compte de la moyenne annuelle...
  148. $nb_series_bis=$nb_series;
  149. if($legendy[2]=='Toutes_les_périodes'){
  150. $eleve2="";
  151. $sql="SELECT * FROM periodes WHERE id_classe='$id_classe' ORDER BY num_periode";
  152. $result_periode=mysql_query($sql);
  153. $nb_periode=mysql_num_rows($result_periode);
  154. $cpt=1;
  155. while($lign_periode=mysql_fetch_object($result_periode)){
  156. $nom_periode[$cpt]=$lign_periode->nom_periode;
  157. $nom_periode[$cpt]=remplace_accents($nom_periode[$cpt],'simple');
  158. $cpt++;
  159. }
  160. // Si la moyenne annuelle est demandée, on calcule:
  161. if(isset($_GET['affiche_moy_annuelle'])){
  162. writinfo('/tmp/infos_graphe.txt','a+',"\nAvant la moyenne annuelle...\n");
  163. // La moyenne annuelle amčne une série de plus:
  164. $nb_series_bis++;
  165. $moy_annee=array();
  166. for($i=1;$i<=count($matiere);$i++){
  167. $cpt=0;
  168. $total_tmp[$i]=0;
  169. // Boucle sur les périodes...
  170. for($k=1;$k<=$nb_periode;$k++){
  171. //if((strlen(preg_replace("/[0-9]/","",$largeur_imposee_photo))!=0)||($largeur_imposee_photo=="")){$largeur_imposee_photo=100;}
  172. writinfo('/tmp/infos_graphe.txt','a+',"strlen(preg_replace(\"/[0-9.]/\",\"\",\$moyenne[".$k."][".$i."]))=strlen(preg_replace(\"/[0-9.]/\",\"\",".$moyenne[$k][$i]."))=".strlen(preg_replace("/[0-9\.]/","",$moyenne[$k][$i]))."\n");
  173. //if((strlen(preg_replace("/[0-9]/","",$moyenne[$k][$i]))!=0)&&($moyenne[$k][$i]!="")){
  174. if(($moyenne[$k][$i]!='-')&&(strlen(preg_replace("/[0-9\.]/","",$moyenne[$k][$i]))==0)&&($moyenne[$k][$i]!="")){
  175. $total_tmp[$i]=$total_tmp[$i]+$moyenne[$k][$i];
  176. $cpt++;
  177. }
  178. }
  179. if($cpt>0){
  180. $moy_annee[$i]=round($total_tmp[$i]/$cpt,1);
  181. }
  182. else{
  183. $moy_annee[$i]="-";
  184. }
  185. $moyenne[$nb_periode+1][$i]=$moy_annee[$i];
  186. $indice_per_suppl=$nb_periode+1;
  187. writinfo('/tmp/infos_graphe.txt','a+',"\$moyenne[".$indice_per_suppl."][$i]=".$moyenne[$indice_per_suppl][$i]."\n");
  188. }
  189. }
  190. }
  191. else{
  192. // Récupération des noms des élčves.
  193. $eleve2=$_GET['v_legend2'];
  194. switch($eleve2){
  195. case 'moyclasse':
  196. //$nom_eleve2="Moyennes de la classe";
  197. $nom_eleve[2]="Moyennes de la classe";
  198. break;
  199. case 'moymin':
  200. //$nom_eleve2="Moyennes minimales";
  201. $nom_eleve[2]="Moyennes minimales";
  202. break;
  203. case 'moymax':
  204. //$nom_eleve2="Moyennes maximales";
  205. $nom_eleve[2]="Moyennes maximales";
  206. break;
  207. default:
  208. $sql="SELECT * FROM eleves WHERE login='$eleve2'";
  209. $resultat_infos_eleve2=mysql_query($sql);
  210. $ligne=mysql_fetch_object($resultat_infos_eleve2);
  211. //$nom_eleve2=$ligne->nom." ".$ligne->prenom;
  212. $nom_eleve[2]=$ligne->nom." ".$ligne->prenom;
  213. break;
  214. }
  215. $nom_eleve[2]=remplace_accents($nom_eleve[2],'simple');
  216. }
  217. writinfo('/tmp/infos_graphe.txt','a+',"\nAvant seriemin, seriemax,...\n");
  218. // Récupération des moyennes minimales et maximales
  219. // si elles ont été transmises:
  220. if(isset($_GET['seriemin'])){
  221. $seriemin=$_GET['seriemin'];
  222. $moy_min_tmp=explode("|", $_GET['seriemin']);
  223. // On décale pour commencer ŕ compter ŕ 1:
  224. for($i=1;$i<=count($moy_min_tmp);$i++){
  225. $moy_min[$i]=$moy_min_tmp[$i-1];
  226. writinfo('/tmp/infos_graphe.txt','a+',"\$moy_min[$i]=".$moy_min[$i]."\n");
  227. }
  228. }
  229. if(isset($_GET['seriemax'])){
  230. $seriemax=$_GET['seriemax'];
  231. $moy_max_tmp=explode("|", $_GET['seriemax']);
  232. // On décale pour commencer ŕ compter ŕ 1:
  233. for($i=1;$i<=count($moy_max_tmp);$i++){
  234. $moy_max[$i]=$moy_max_tmp[$i-1];
  235. writinfo('/tmp/infos_graphe.txt','a+',"\$moy_max[$i]=".$moy_max[$i]."\n");
  236. }
  237. }
  238. //============================================
  239. //Création de l'image:
  240. $img=imageCreate($largeurTotale,$hauteurTotale);
  241. // Epaisseur initiale des traits...
  242. imagesetthickness($img,2);
  243. //============================================
  244. writinfo('/tmp/infos_graphe.txt','a+',"\nAprčs imageCreate, imagethickness...\n");
  245. //============================================
  246. // A récupérer d'une table MySQL... d'aprčs un choix de l'utilisateur...
  247. $tab=array('Fond','Bande_1','Bande_2','Axes','Eleve_1','Eleve_2','Moyenne_classe','Periode_1','Periode_2','Periode_3');
  248. $comp=array('R','V','B');
  249. $tabcouleurs=array();
  250. $tabcouleurs['Fond']=array();
  251. $tabcouleurs['Fond']['R']=255;
  252. $tabcouleurs['Fond']['V']=255;
  253. $tabcouleurs['Fond']['B']=255;
  254. $tabcouleurs['Bande_1']=array();
  255. $tabcouleurs['Bande_1']['R']=255;
  256. $tabcouleurs['Bande_1']['V']=255;
  257. $tabcouleurs['Bande_1']['B']=255;
  258. $tabcouleurs['Bande_2']=array();
  259. $tabcouleurs['Bande_2']['R']=255;
  260. $tabcouleurs['Bande_2']['V']=255;
  261. $tabcouleurs['Bande_2']['B']=133;
  262. $tabcouleurs['Axes']=array();
  263. $tabcouleurs['Axes']['R']=0;
  264. $tabcouleurs['Axes']['V']=0;
  265. $tabcouleurs['Axes']['B']=0;
  266. $tabcouleurs['Eleve_1']=array();
  267. $tabcouleurs['Eleve_1']['R']=0;
  268. $tabcouleurs['Eleve_1']['V']=100;
  269. $tabcouleurs['Eleve_1']['B']=255;
  270. $tabcouleurs['Eleve_2']=array();
  271. $tabcouleurs['Eleve_2']['R']=0;
  272. $tabcouleurs['Eleve_2']['V']=255;
  273. $tabcouleurs['Eleve_2']['B']=0;
  274. $tabcouleurs['Moyenne_classe']=array();
  275. $tabcouleurs['Moyenne_classe']['R']=100;
  276. $tabcouleurs['Moyenne_classe']['V']=100;
  277. $tabcouleurs['Moyenne_classe']['B']=100;
  278. $tabcouleurs['Periode_1']=array();
  279. $tabcouleurs['Periode_1']['R']=0;
  280. $tabcouleurs['Periode_1']['V']=100;
  281. $tabcouleurs['Periode_1']['B']=255;
  282. $tabcouleurs['Periode_2']=array();
  283. $tabcouleurs['Periode_2']['R']=255;
  284. $tabcouleurs['Periode_2']['V']=0;
  285. $tabcouleurs['Periode_2']['B']=0;
  286. $tabcouleurs['Periode_3']=array();
  287. $tabcouleurs['Periode_3']['R']=255;
  288. $tabcouleurs['Periode_3']['V']=0;
  289. $tabcouleurs['Periode_3']['B']=0;
  290. for($i=0;$i<count($tab);$i++){
  291. for($j=0;$j<count($comp);$j++){
  292. $sql="SELECT value FROM setting WHERE name='couleur_".$tab[$i]."_".$comp[$j]."'";
  293. $res_couleur=mysql_query($sql);
  294. if(mysql_num_rows($res_couleur)>0){
  295. $tmp=mysql_fetch_object($res_couleur);
  296. $tabcouleurs[$tab[$i]][$comp[$j]]=$tmp->value;
  297. }
  298. }
  299. $couleur[$tab[$i]]=imageColorAllocate($img,$tabcouleurs[$tab[$i]]['R'],$tabcouleurs[$tab[$i]]['V'],$tabcouleurs[$tab[$i]]['B']);
  300. }
  301. $fond=$couleur['Fond'];
  302. $bande1=$couleur['Bande_1'];
  303. $bande2=$couleur['Bande_2'];
  304. $couleureleve[1]=$couleur['Eleve_1'];
  305. $couleureleve[2]=$couleur['Eleve_2'];
  306. $transp=$bande1;
  307. if($legendy[2]=='Toutes_les_périodes'){
  308. $couleureleve[1]=$couleur['Periode_1'];
  309. $couleureleve[2]=$couleur['Periode_2'];
  310. $couleureleve[3]=$couleur['Periode_3'];
  311. }
  312. $i=4;
  313. if(($legendy[2]=='Toutes_les_périodes')&&($nb_series>=4)){
  314. for($i=4;$i<=$nb_series;$i++){
  315. for($j=0;$j<count($comp);$j++){
  316. $sql="SELECT value FROM setting WHERE name='couleur_Periode_".$i."_".$comp[$j]."'";
  317. $res_couleur=mysql_query($sql);
  318. if(mysql_num_rows($res_couleur)>0){
  319. $tmp=mysql_fetch_object($res_couleur);
  320. $tabcouleurs["Periode_".$i][$comp[$j]]=$tmp->value;
  321. }
  322. else{
  323. $tabcouleurs["Periode_".$i][$comp[$j]]=0;
  324. }
  325. }
  326. $couleur["Periode_".$i]=imageColorAllocate($img,$tabcouleurs["Periode_".$i]['R'],$tabcouleurs["Periode_".$i]['V'],$tabcouleurs["Periode_".$i]['B']);
  327. $couleureleve[$i]=$couleur["Periode_".$i];
  328. }
  329. }
  330. $couleurmoyenne=$couleur['Moyenne_classe'];
  331. $axes=$couleur['Axes'];
  332. // IL FAUT UNE COULEUR DE PLUS POUR LA MOYENNE ANNUELLE...
  333. $couleureleve[$i]=$couleur['Moyenne_classe'];
  334. //============================================
  335. // On force la couleur pour les moyennes classe/min/max
  336. if(($eleve2=='moyclasse')||($eleve2=='moymin')||($eleve2=='moymax')){
  337. $couleureleve[2]=$couleurmoyenne;
  338. }
  339. //===========================================
  340. $nbMat=count($matiere);
  341. //===========================================
  342. //===========================================
  343. //===========================================
  344. // Rayon en pixels du cercle pour aller de 0 ŕ 20:
  345. //$L=200;
  346. //$L=round(($hauteurTotale-3*(ImageFontHeight($taille_police)+5))/2);
  347. //$L=round(($hauteurTotale-4*(ImageFontHeight($taille_police)+5))/2);
  348. //$x0=round($largeurTotale/2);
  349. //$y0=round($hauteurTotale/2);
  350. $x0=round($largeurTotale/2);
  351. if($legendy[2]=='Toutes_les_périodes'){
  352. $L=round(($hauteurTotale-6*(ImageFontHeight($taille_police)+5))/2);
  353. //$y0=round(3*(ImageFontHeight($taille_police))+5)+$L;
  354. $y0=round(4*(ImageFontHeight($taille_police))+5)+$L;
  355. }
  356. else{
  357. $L=round(($hauteurTotale-4*(ImageFontHeight($taille_police)+5))/2);
  358. $y0=round(2*(ImageFontHeight($taille_police))+5)+$L;
  359. }
  360. writinfo('/tmp/infos_graphe.txt','a+',"\$x0=$x0\n");
  361. writinfo('/tmp/infos_graphe.txt','a+',"\$y0=$y0\n");
  362. $pi=pi();
  363. function coordcirc($note,$angle) {
  364. // $note sur 20 (s'assurer qu'il y a le point pour séparateur et non la virgule)
  365. // $angle en degrés
  366. global $pi;
  367. global $L;
  368. global $x0;
  369. global $y0;
  370. $x=round($note*$L*cos($angle*$pi/180)/20)+$x0;
  371. $y=round($note*$L*sin($angle*$pi/180)/20)+$y0;
  372. return array($x,$y);
  373. }
  374. //=================================
  375. // Epaisseur des traits
  376. imagesetthickness($img,1);
  377. //=================================
  378. //=================================
  379. // Polygone 20/20
  380. unset($tab20);
  381. $tab20=array();
  382. for($i=0;$i<$nbMat;$i++){
  383. $angle=round($i*360/$nbMat);
  384. //writinfo('/tmp/infos_graphe.txt','a+',"\$angle=$angle\n");
  385. $tab=coordcirc(20,$angle);
  386. $tab20[]=$tab[0];
  387. $tab20[]=$tab[1];
  388. }
  389. ImageFilledPolygon($img,$tab20,count($tab20)/2,$bande2);
  390. //=================================
  391. //=================================
  392. // Polygone 15/20
  393. unset($tab15);
  394. $tab15=array();
  395. for($i=0;$i<$nbMat;$i++){
  396. $angle=round($i*360/$nbMat);
  397. //writinfo('/tmp/infos_graphe.txt','a+',"\$angle=$angle\n");
  398. $tab=coordcirc(15,$angle);
  399. $tab15[]=$tab[0];
  400. $tab15[]=$tab[1];
  401. }
  402. ImageFilledPolygon($img,$tab15,count($tab15)/2,$bande1);
  403. //=================================
  404. //=================================
  405. // Polygone 10/20
  406. unset($tab10);
  407. $tab10=array();
  408. for($i=0;$i<$nbMat;$i++){
  409. $angle=round($i*360/$nbMat);
  410. //writinfo('/tmp/infos_graphe.txt','a+',"\$angle=$angle\n");
  411. $tab=coordcirc(10,$angle);
  412. $tab10[]=$tab[0];
  413. $tab10[]=$tab[1];
  414. }
  415. ImageFilledPolygon($img,$tab10,count($tab10)/2,$bande2);
  416. //=================================
  417. //=================================
  418. // Polygone 5/20
  419. unset($tab5);
  420. $tab5=array();
  421. for($i=0;$i<$nbMat;$i++){
  422. $angle=round($i*360/$nbMat);
  423. //writinfo('/tmp/infos_graphe.txt','a+',"\$angle=$angle\n");
  424. $tab=coordcirc(5,$angle);
  425. $tab5[]=$tab[0];
  426. $tab5[]=$tab[1];
  427. }
  428. ImageFilledPolygon($img,$tab5,count($tab5)/2,$bande1);
  429. //=================================
  430. //=================================
  431. // Axes
  432. for($i=0;$i<count($tab20)/2;$i++){
  433. imageline ($img,$x0,$y0,$tab20[2*$i],$tab20[2*$i+1],$axes);
  434. if($i>0){
  435. imageline ($img,$tab20[2*($i-1)],$tab20[2*($i-1)+1],$tab20[2*$i],$tab20[2*$i+1],$axes);
  436. }
  437. else{
  438. //imageline ($img,$tab20[2*count($tab20)/2],$tab20[2*count($tab20)/2+1],$tab20[2*$i],$tab20[2*$i+1],$axes);
  439. }
  440. }
  441. imageline ($img,$tab20[0],$tab20[1],$tab20[2*($i-1)],$tab20[2*($i-1)+1],$axes);
  442. //=================================
  443. //Epaisseur des traits:
  444. imagesetthickness($img,$epaisseur_traits);
  445. //=================================
  446. // Tracé des courbes des séries
  447. for($k=1;$k<=$nb_series_bis;$k++){
  448. $xprec="";
  449. $yprec="";
  450. $temoin_prec="";
  451. // On place les points
  452. $tab_x=array();
  453. $tab_y=array();
  454. for($i=1;$i<$nbMat+1;$i++){
  455. if(($moyenne[$k][$i]!="")&&($moyenne[$k][$i]!="-")&&($moyenne[$k][$i]!="N.NOT")&&($moyenne[$k][$i]!="ABS")&&($moyenne[$k][$i]!="DIS")){
  456. $angle=round(($i-1)*360/$nbMat);
  457. $tab=coordcirc($moyenne[$k][$i],$angle);
  458. imageFilledRectangle($img,$tab[0]-2,$tab[1]-2,$tab[0]+2,$tab[1]+2,$couleureleve[$k]);
  459. $tab_x[]=$tab[0];
  460. $tab_y[]=$tab[1];
  461. }
  462. else{
  463. $tab_x[]="";
  464. $tab_y[]="";
  465. }
  466. }
  467. // On joint ces points
  468. $xprec="";
  469. $yprec="";
  470. for($i=0;$i<count($tab_x);$i++){
  471. if($i==0){
  472. if(($tab_x[$i]!="")&&($tab_x[count($tab_x)-1]!="")){
  473. imageline ($img,$tab_x[$i],$tab_y[$i],$tab_x[count($tab_x)-1],$tab_y[count($tab_y)-1],$couleureleve[$k]);
  474. }
  475. }
  476. if($tab_x[$i]!=""){
  477. if(isset($tab_x[$i+1])){
  478. if($tab_x[$i+1]!=""){
  479. imageline ($img,$tab_x[$i],$tab_y[$i],$tab_x[$i+1],$tab_y[$i+1],$couleureleve[$k]);
  480. }
  481. }
  482. }
  483. }
  484. }
  485. //=================================
  486. //=================================
  487. // Légendes Matičres:
  488. for($i=0;$i<count($tab20)/2;$i++){
  489. $angle=round($i*360/$nbMat);
  490. writinfo('/tmp/infos_graphe.txt','a+',"\$angle=$angle\n");
  491. //$texte=$matiere[$i+1];
  492. $texte=$matiere_nom_long[$i+1];
  493. $tmp_taille_police=$taille_police;
  494. if($angle==0){
  495. $x=$tab20[2*$i]+5;
  496. $x_verif=$x+strlen($texte)*ImageFontWidth($taille_police);
  497. if($x_verif>$largeurTotale){
  498. for($j=$taille_police;$j>1;$j--){
  499. $x_verif=$x+strlen($texte)*ImageFontWidth($j);
  500. writinfo('/tmp/infos_graphe.txt','a+',"\$j=$j et \$x_verif=$x_verif\n");
  501. if($x_verif<=$largeurTotale){
  502. break;
  503. }
  504. }
  505. if($x_verif>$largeurTotale){
  506. $j=1;
  507. }
  508. $tmp_taille_police=$j;
  509. }
  510. $y=round($tab20[2*$i+1]+$angle*(ImageFontHeight($taille_police)+2)/90);
  511. }
  512. elseif(($angle>0)&&($angle<90)){
  513. $x=$tab20[2*$i]+5;
  514. $x_verif=$x+strlen($texte)*ImageFontWidth($taille_police);
  515. if($x_verif>$largeurTotale){
  516. for($j=$taille_police;$j>1;$j--){
  517. $x_verif=$x+strlen($texte)*ImageFontWidth($j);
  518. writinfo('/tmp/infos_graphe.txt','a+',"\$j=$j et \$x_verif=$x_verif\n");
  519. if($x_verif<=$largeurTotale){
  520. break;
  521. }
  522. }
  523. if($x_verif>$largeurTotale){
  524. $j=1;
  525. }
  526. $tmp_taille_police=$j;
  527. }
  528. $y=round($tab20[2*$i+1]+$angle*(ImageFontHeight($taille_police)+2)/90);
  529. }
  530. elseif($angle==90){
  531. $x=round($tab20[2*$i]-strlen($texte)*ImageFontWidth($taille_police)/2);
  532. $y=$tab20[2*$i+1]+ImageFontHeight($taille_police)+2;
  533. }
  534. elseif(($angle>90)&&($angle<180)){
  535. $x=$tab20[2*$i]-(strlen($texte)*ImageFontWidth($taille_police)+5);
  536. if($x<0){
  537. for($j=$taille_police;$j>1;$j--){
  538. $x=$tab20[2*$i]-(strlen($texte)*ImageFontWidth($j)+5);
  539. writinfo('/tmp/infos_graphe.txt','a+',"\$j=$j et \$x=$x\n");
  540. if($x>=0){
  541. break;
  542. }
  543. }
  544. if($x<0){
  545. $x=1;
  546. $j=1;
  547. }
  548. $tmp_taille_police=$j;
  549. }
  550. $y=round($tab20[2*$i+1]+($angle-90)*(ImageFontHeight($taille_police)-2)/90);
  551. }
  552. elseif($angle==180){
  553. $x=$tab20[2*$i]-strlen($texte)*ImageFontWidth($taille_police)-5;
  554. if($x<0){
  555. for($j=$taille_police;$j>1;$j--){
  556. $x=$tab20[2*$i]-strlen($texte)*ImageFontWidth($j)-5;
  557. writinfo('/tmp/infos_graphe.txt','a+',"\$j=$j et \$x=$x\n");
  558. if($x>=0){
  559. break;
  560. }
  561. }
  562. if($x<0){
  563. $x=1;
  564. $j=1;
  565. }
  566. $tmp_taille_police=$j;
  567. }
  568. $y=round($tab20[2*$i+1]-ImageFontHeight($taille_police)/2);
  569. }
  570. elseif(($angle>180)&&($angle<270)){
  571. $x=$tab20[2*$i]-(strlen($texte)*ImageFontWidth($taille_police)+5);
  572. if($x<0){
  573. for($j=$taille_police;$j>1;$j--){
  574. $x=$tab20[2*$i]-(strlen($texte)*ImageFontWidth($j)+5);
  575. writinfo('/tmp/infos_graphe.txt','a+',"\$j=$j et \$x=$x\n");
  576. if($x>=0){
  577. break;
  578. }
  579. }
  580. if($x<0){
  581. $x=1;
  582. $j=1;
  583. }
  584. $tmp_taille_police=$j;
  585. }
  586. $y=round($tab20[2*$i+1]-($angle-180)*(ImageFontHeight($taille_police)-2)/90);
  587. }
  588. elseif($angle==270){
  589. $x=round($tab20[2*$i]-strlen($texte)*ImageFontWidth($taille_police)/2);
  590. //$y=$tab20[2*$i+1]-ImageFontHeight($taille_police)-2;
  591. $y=$tab20[2*$i+1]-2*ImageFontHeight($taille_police)-2;
  592. }
  593. else{
  594. $x=$tab20[2*$i]+5;
  595. $x_verif=$x+strlen($texte)*ImageFontWidth($taille_police);
  596. if($x_verif>$largeurTotale){
  597. for($j=$taille_police;$j>1;$j--){
  598. $x_verif=$x+strlen($texte)*ImageFontWidth($j);
  599. writinfo('/tmp/infos_graphe.txt','a+',"\$j=$j et \$x_verif=$x_verif\n");
  600. if($x_verif<=$largeurTotale){
  601. break;
  602. }
  603. }
  604. if($x_verif>$largeurTotale){
  605. $j=1;
  606. }
  607. $tmp_taille_police=$j;
  608. }
  609. $y=round($tab20[2*$i+1]-(90-($angle-270))*(ImageFontHeight($taille_police)-2)/90);
  610. }
  611. writinfo('/tmp/infos_graphe.txt','a+',"\$x=$x\n");
  612. writinfo('/tmp/infos_graphe.txt','a+',"\$y=$y\n");
  613. //imagestring ($img, $taille_police, $x, $y, strtr($texte,"_"," "), $axes);
  614. //imagestring ($img, $tmp_taille_police, $x, $y, strtr($angle." ".$texte,"_"," "), $axes);
  615. imagestring ($img, $tmp_taille_police, $x, $y, strtr($texte,"_"," "), $axes);
  616. // Ajout des notes sous le nom de matičre:
  617. $ytmp=$y+2+ImageFontHeight($taille_police);
  618. //**************
  619. // A FAIRE:
  620. // Correctif ŕ arranger... pour positionner au mieux en fonction de l'angle
  621. if(($angle>270)&&($angle<360)){$xtmp=$x+30;}else{$xtmp=$x;}
  622. //**************
  623. for($k=1;$k<=$nb_series_bis;$k++){
  624. //imagestring ($img, $taille_police, $xtmp, $ytmp, $moyenne[$k][$i+1], $couleureleve[$k]);
  625. imagestring ($img, $taille_police, $xtmp, $ytmp, nf($moyenne[$k][$i+1]), $couleureleve[$k]);
  626. //imagestring ($img, $taille_police, $xtmp, $ytmp, "A", $couleureleve[$k]);
  627. //$xtmp=$xtmp+strlen($moyenne[$k][$i+1]." - ")*ImageFontWidth($taille_police);
  628. $xtmp=$xtmp+strlen(nf($moyenne[$k][$i+1])." ")*ImageFontWidth($taille_police_inf);
  629. }
  630. }
  631. //=================================
  632. //=================================
  633. // Titre de l'image,...
  634. if($legendy[2]=='Toutes_les_périodes'){
  635. $chaine=$nom_periode;
  636. }
  637. else{
  638. //$chaine=$eleve;
  639. $chaine=$nom_eleve;
  640. }
  641. // Calcul de la largeur occupée par les noms d'élčves:
  642. //$total_largeur_eleves=0;
  643. $total_largeur_chaines=0;
  644. //for($k=1;$k<$nb_data;$k++){
  645. for($k=1;$k<=$nb_series;$k++){
  646. //$largeur_eleve[$k] = strlen($eleve[$k]) * ImageFontWidth($taille_police);
  647. //$total_largeur_eleves=$total_largeur_eleves+$largeur_eleve[$k];
  648. //$largeur_chaine[$k] = strlen($chaine[$k]) * ImageFontWidth($taille_police);
  649. //$largeur_chaine[$k] = strlen($chaine[$k]." (".nf($mgen[$k]).")") * ImageFontWidth($taille_police);
  650. if($mgen[$k]!="") {
  651. $chaine_mgen=" (".nf($mgen[$k]).")";
  652. }
  653. else {
  654. $chaine_mgen="";
  655. }
  656. $largeur_chaine[$k] = strlen($chaine[$k].$chaine_mgen) * ImageFontWidth($taille_police);
  657. $total_largeur_chaines=$total_largeur_chaines+$largeur_chaine[$k];
  658. }
  659. // Calcul de l'espace entre ces noms d'élčves:
  660. // Espace équilibré comme suit:
  661. // espace|Eleve1|espace|Eleve2|espace
  662. // Il faudrait ętre sűr que l'espace ne va pas devenir négatif...
  663. //$espace=($largeur-$total_largeur_eleves)/($nb_series+1);
  664. //$espace=($largeur-$total_largeur_chaines)/($nb_series+1);
  665. $espace=($largeurTotale-$total_largeur_chaines)/($nb_series+1);
  666. if($legendy[2]=='Toutes_les_périodes'){
  667. $chaine=$nom_periode;
  668. imagestring ($img, $taille_police, round(($largeurTotale-strlen($nom_eleve[1]) * ImageFontWidth($taille_police))/2), 5, $nom_eleve[1], $axes);
  669. // Positionnement des noms d'élčves:
  670. //$xtmp=$largeurGrad;
  671. $xtmp=0;
  672. //for($k=1;$k<$nb_data;$k++){
  673. for($k=1;$k<=$nb_series;$k++){
  674. $xtmp=$xtmp+$espace;
  675. //imagestring ($img, $taille_police, $xtmp, 5, $eleve[$k], $couleureleve[$k]);
  676. //$xtmp=$xtmp+$largeur_eleve[$k];
  677. //imagestring ($img, $taille_police, $xtmp, ImageFontHeight($taille_police)+5, strtr($chaine[$k],"_"," "), $couleureleve[$k]);
  678. //imagestring ($img, $taille_police, $xtmp, ImageFontHeight($taille_police)+5, strtr($chaine[$k],"_"," ")." (".nf($mgen[$k]).")", $couleureleve[$k]);
  679. if($mgen[$k]!="") {
  680. $chaine_mgen=" (".nf($mgen[$k]).")";
  681. }
  682. else {
  683. $chaine_mgen="";
  684. }
  685. imagestring ($img, $taille_police, $xtmp, ImageFontHeight($taille_police)+5, strtr($chaine[$k],"_"," ").$chaine_mgen, $couleureleve[$k]);
  686. $xtmp=$xtmp+$largeur_chaine[$k];
  687. }
  688. }
  689. else{
  690. //$chaine=$eleve;
  691. $chaine=$nom_eleve;
  692. // Positionnement des noms d'élčves:
  693. //$xtmp=$largeurGrad;
  694. $xtmp=0;
  695. //for($k=1;$k<$nb_data;$k++){
  696. for($k=1;$k<=$nb_series;$k++){
  697. $xtmp=$xtmp+$espace;
  698. //imagestring ($img, $taille_police, $xtmp, 5, $eleve[$k], $couleureleve[$k]);
  699. //$xtmp=$xtmp+$largeur_eleve[$k];
  700. //imagestring ($img, $taille_police, $xtmp, 5, strtr($chaine[$k],"_"," "), $couleureleve[$k]);
  701. //imagestring ($img, $taille_police, $xtmp, 5, strtr($chaine[$k],"_"," ")." (".nf($mgen[$k]).")", $couleureleve[$k]);
  702. if($mgen[$k]!="") {
  703. $chaine_mgen=" (".nf($mgen[$k]).")";
  704. }
  705. else {
  706. $chaine_mgen="";
  707. }
  708. imagestring ($img, $taille_police, $xtmp, 5, strtr($chaine[$k],"_"," ").$chaine_mgen, $couleureleve[$k]);
  709. $xtmp=$xtmp+$largeur_chaine[$k];
  710. }
  711. }
  712. //=================================
  713. imagePNG($img);
  714. imageDestroy($img);
  715. exit();
  716. ?>