Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
448 ddelon 1
<?php
2
 
3
/* 	*****************************  classe arbre  ***********************************
4
*	classe permettant la creation d'un arbre, elle est fonctionnelle en tant que module
5
*	de gsite (www.gsite.org).
6
*	L'arbre peut servir de representation graphique de donnees statistiques.
7
*	Copyright 2001 Tela Botanica
8
*	Auteurs : Daniel Mathieu, Nicolas Touillaud, Alexandre Granier
9
*	Cette bibliothèque est libre, vous pouvez la redistribuer et/ou la modifier
10
*	selon les termes de la Licence Publique Générale GNU publiée par la
11
*	Free Software Foundation.
12
*	Cette bibliothèque est distribuée car potentiellement utile, mais SANS
13
*	AUCUNE GARANTIE, ni explicite ni implicite, y compris les garanties de
14
*	commercialisation ou d'adaptation dans un but spécifique.
15
*
16
*	Derniere mise a jour : 10 decembre 2001
17
************************************************************************************/
18
error_reporting (E_ALL) ;
19
include 'api/arbre/tailles.php3' ;
20
 
21
define ("ARBRE_CHEMIN_IMAGES", 'api/arbre/images/') ;
22
 
23
 
24
function calc_xref_branche($xres_,$xfeuille_, $xtronc_)
25
 //calcule la taille de reference des branches
26
 {
27
  //global $xres, $xfeuille, $xtronc;
28
  $toto=round(($xres_-$xtronc_-(2*$xfeuille_))/2);
29
  return $toto;
30
 }
31
 
32
 
33
 
34
 //******************************************************
35
 // calcule l'espace vertical entre 2 branche d'un meme coté: si il n'y a pas la place -> 12 pixels
36
 function calc_esver()
37
 {
38
global $nbdroite ;
39
  if ($nbdroite != 1):
40
  {
41
   global $yres, $yfait, $yracine, $ybranche, $nbdroite;
42
   $toto=($yres-$yfait-$yracine-($nbdroite*$ybranche))/($nbdroite-1);
43
   if($toto<0):{$toto=12;} //on ne se place plus sur 1 ecran mais sur plus
44
   endif;
45
   return $toto;
46
  }
47
  else:{return 0;}
48
  endif;
49
 }
50
 //******************************************************
51
 
52
 $esver=calc_esver();
53
 
54
 //******************************************************
55
 //calcul la position en x de la branche
56
 function calcul_x_branche($adroite,$xreel)
57
 {
58
  global $xres, $xtronc, $xref_branche;
59
  $tempx=($xres+$xtronc)/2-2; //pour un bug
60
  if($adroite != 1):
61
  {
62
   $tempx=$tempx+2-$xtronc-($xreel);
63
  }
64
  endif;
65
  return round($tempx);
66
 }
67
 //******************************************************
68
 
69
 //Il est impératif d'afficher 1 branche d'un coté, puis de l'autre etc..
70
 
71
 //******************************************************
72
 //retourne la position y de la branche (et de la feuille) et met à jour la hauteur de la prochaine branche
73
 function calcul_y_branche()
74
 {
75
  global $esver, $hauteur, $ybranche;
76
  $toto=$hauteur;
77
  $hauteur=$hauteur+(($ybranche+$esver)/2);
78
  return $toto;
79
 }
80
 //******************************************************
81
 
82
 //******************************************************
83
 //retourne la position x du tronc
84
 function x_tronc()
85
 {
86
  global $xtronc, $xres;
87
  return ($xres-$xtronc)/2;
88
 }
89
 //******************************************************
90
 
91
 //******************************************************
92
 //retourne la position y du tronc
93
 function y_tronc()
94
 {
95
  global $yfait;
96
  return ($yfait);
97
 }
98
 //******************************************************
99
 
100
 //******************************************************
101
 // retourne la position x de la racine
102
 function x_racine()
103
 {
104
  global $xracine, $xres;
105
  return ($xres-$xracine)/2;
106
 }
107
 //******************************************************
108
 
109
 //******************************************************
110
 //retourne la taille du tronc en pixels
111
 function taille_tronc()
112
 {
113
  global $nbdroite, $esver, $ybranche;
114
  $toto=($nbdroite-1)*$esver+($nbdroite*$ybranche);
115
  return $toto;
116
 }
117
 //******************************************************
118
 
119
 //******************************************************
120
 //retourne la position x de la feuille en fonction des param de la branche
121
 function calcul_x_feuille($adroite, $pos_branche, $xreel_brch)  //xreel en %
122
 {
123
  global $xref_branche, $xfeuille;
124
  if($adroite !=1):
125
  {
126
   $toto=$pos_branche-$xfeuille;
127
  }
128
  else:
129
  {
130
   $toto=$pos_branche+($xreel_brch);
131
  }
132
  endif;
133
  return $toto;
134
 }
135
 //******************************************************
136
 
137
 //******************************************************
138
 // retourne la position y de la racine
139
 function y_racine()
140
 {
141
  global $yfait;
142
  $toto=$yfait+taille_tronc();
143
  return $toto;
144
 }
145
 //******************************************************
146
 
147
 
148
 //******************************************************
149
 //met 1 à 0 et inversement
150
 function dg($dte)
151
 {
152
  if($dte==1):{return 0;}
153
  else:{return 1;}
154
  endif;
155
 }
156
 //******************************************************
157
 
158
 //******************************************************
159
 //une fonction qui prend le % de vert *100 et qui sort la chaine html du vert correspondant
160
 function couleur_f($prc)
161
 {
162
  if ($prc==0) return ("#279C27");
163
  if (($prc>0) && ($prc<=16)) return ("#279C27");
164
  if (($prc>16) && ($prc<=32)) return ("#CCCC00");
165
  if (($prc>32) && ($prc<=48)) return ("#FFCC00");
166
  if (($prc>48) && ($prc<=64)) return ("#DD8D22");
167
  if (($prc>64) && ($prc<=80)) {
168
  			return "#FF6600" ;
169
			} else {
170
			return "#CC3300" ;
171
			}
172
}
173
//*****************************************************
174
 
175
//une fonction qui détermine si un entier est pair ou non
176
function est_pair($un_entier)
177
{
178
 return(($un_entier %2)==0);
179
}
180
 
181
 
182
class arbre {
183
 
184
	var $nbre_branche ;
185
	var $branche ;
186
	var $blanc_cime ;
187
 
188
/********************************************************************************
189
*	constructeur arbre(chaine $nom, chaine $lien_nom, entier $intensite,  chaine $lien_intensite,
190
*						chaine $lien_feuille)
191
*	crees une instance d'arbre, les parametres sont les informations du sommet de l'arbre
192
*	$nom : le texte du haut de l'arbre
193
*	$lien_nom : le lein associe
194
*	$intensite : le nombre a cote du nom
195
*	$lien_intensite : le lien sur l'intensite
196
*	$lien_feuille : le lien, lorsqu'on clique sur la feuille du haut de l'arbre
197
*********************************************************************************/
198
 
199
	function arbre() {}
200
 
201
	function cime($nom, $lien_nom, $intensite, $lien_intensite, $lien_feuille) {
202
	//global $nhi_xsommet, $nhi_ysommet,$ybranche,$yfeuille, $yres, $innerTableWidth ;
203
 
204
	// tailles.php3 contient les variables de tailles des fichiers graphiques associes
205
	// a l'arbre
206
    include 'api/arbre/tailles.php3' ;
207
 
208
	// Le blanc devant la cime de l'arbre
209
	$this->blanc_cime = round(($xres-$nhi_xsommet)/2);
210
 
211
	$res = '<tr>
212
  <td align="center"><a href="'.$lien_nom.'"><b><i>'.$nom.'</i></b></a> <a href="'.$lien_intensite.'"><b><i>('.$intensite.')</i></b></a></td>
213
 </tr>
214
 <tr>
215
  <td align="center"><table width="'.$xres.'" border="0" cellspacing="0" cellpadding="0" summary="">';
216
	// haut de l'arbre
217
	$res .= '<tr>
218
			 <td align="center"><table border="0" cellspacing="0" cellpadding="0" summary="">
219
				 <tr>
220
					<td><img alt="" width="'.$this->blanc_cime.'" height="1" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td>
221
					<td width="'.$nhi_xsommet.'" height="'.$nhi_ysommet.'" align="center"><a href="'.$lien_feuille.'" target="_blank" class="image_lien">
222
                    <img alt="" width="'.$nhi_xsommet.'" height="'.$nhi_ysommet.'" border="0" src="'.ARBRE_CHEMIN_IMAGES.'haut.gif" /></a></td>
223
					<td><img alt="" width="'.$this->blanc_cime.'" height="1" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td>
224
				 </tr>
225
				</table>
226
			 </td>
227
			</tr>';
228
	return $res ;
229
	}
230
 
231
 
232
/**************************  fonction addBranche  ******************************************
233
*	ajoute une branche a l'arbre
234
*
235
*	$nom : le label d'une branche
236
*	$lien_nom : le lien associe au label
237
*	$intensite : le nombre a droite du label
238
*	$lien_intensite : le lien sur le nombre
239
*	$lien feuille : le lien quand on clique sur la feuille
240
*	$intensite_feuille : un nombre compris entre 1 et 100, qui sera transforme en couleur
241
*	$longueur_branche : un nombre entre 1 et 100, pour la longueur de la branche*
242
********************************************************************************************/
243
	function addBranche($nom, $lien_nom, $intensite, $lien_intensite, $lien_feuille, $intensite_feuille, $longueur_branche) {
244
 
245
		$this->nbre_branche++ ;
246
 
247
		$this->branche["nom"][$this->nbre_branche] = $nom ;
248
		$this->branche["lien_nom"][$this->nbre_branche] = $lien_nom ;
249
		$this->branche["intensite"][$this->nbre_branche] = $intensite ;
250
		$this->branche["lien_intensite"][$this->nbre_branche] = $lien_intensite ;
251
		$this->branche["lien_feuille"][$this->nbre_branche] = $lien_feuille ;
252
		$this->branche["intensite_feuille"][$this->nbre_branche] = $intensite_feuille ;
253
		$this->branche["longueur_branche"][$this->nbre_branche] = $longueur_branche ;
254
 
255
	}
256
/************  fonction affBranche()   ajoute le code HTML des branches  ********************
257
*	ne renvoie rien
258
*********************************************************************************************/
259
	function affBranche() {
260
		$tb = "" ; $tb2 = "" ;
261
		//global $nhi_xsommet, $nhi_ysommet,$ybranche,$yfeuille, $xref_branche, $taille_mini;
262
		//global $xtronc, $espace_a_gauche, $xfeuille , $les_slashes, $xres, $innerTableWidth;
263
		include 'api/arbre/tailles.php3' ;
264
		$xref_branche = calc_xref_branche($xres,$xfeuille,$xtronc);
265
 
266
		$res = "<!-- xref_branche=$xref_branche -->";
267
 
268
		$yinv=$ybranche-$yfeuille; //Hauteur de la case vide sous la feuille
269
 
270
		//le tableau des branches
271
 
272
        //ici, la boucle
273
        //ajustement de la boucle: le nombre de tables doit être pair dans la boucle
274
        $la_limite_de_la_boucle = $this->nbre_branche;
275
 
276
        if(true != est_pair($la_limite_de_la_boucle)): //ajustement de la boucle
277
        {
278
        $la_limite_de_la_boucle-=1;
279
        }endif;
280
 
281
        $coul_ = '' ;
282
        for($i=0; $i < $la_limite_de_la_boucle ; $i += 2) {
283
 
284
            // informations concernant la branche gauche
285
 
286
            $coul_=couleur_f($this->branche["intensite_feuille"][$i+1]);
287
            $xrel=$this->branche["longueur_branche"][$i+2]/100;
288
            $tbr = round($xrel * $xref_branche);
289
            if($tbr < $taille_mini) $tbr = $taille_mini + $tbr ; //taille mini de la branche
290
 
291
            if(isset ($les_slashes) && $les_slashes == 1) {
292
                $this->branche["lien_nom"][$i+1] = stripslashes($this->branche["nom_lien"][$i+1]);
293
                $this->branche["lien_feuille"][$i+1] = stripslashes($this->branche["lien_feuille"][$i+1]);
294
                //$lien_puce2=stripslashes($lien_puce2);
295
            }
296
 
297
            // informations concernant la branche droite
298
            $coul_2=couleur_f($this->branche["intensite_feuille"][$i+2]);
299
            $xrel2 = $this->branche["longueur_branche"][$i+1]/100.0;
300
             $tbr2 = round($xrel2*$xref_branche);
301
             if($tbr2 < $taille_mini) $tbr2 = $taille_mini+$tbr2 ; //taille mini de la branche
302
 
303
            //pour des parametress de javascript, le addslash provient de appli_dessin_date
304
            if(isset ($les_slashes) && $les_slashes == 1) {
305
                $this->branche["lien_nom"][$i+2] = stripslashes($this->branche["lien_nom"][$i+2]);
306
                $this->branche["lien_feuille"][$i+2] = stripslashes($this->branche["lien_feuille"][$i+2]);
307
                //$lien_puce2=stripslashes($lien_puce2);
308
            }
309
 
310
            //espace à gauche
311
             $espace_a_gauche=round((($xres-$xtronc)/2)-$tbr2-$xfeuille);
312
 
313
            //espace à droite
314
             $espace_a_droite=round($xres-$xtronc-$tbr-$tbr2-2*$xfeuille-$espace_a_gauche);
315
 
316
             $res .= "<!-- Les noms des listes -->
317
    <tr>
318
		 <td>
319
		  <table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" summary=\"\">
320
			 <tr>
321
			  <td colspan=\"3\" align=\"right\"><a href=\"";
322
			  $res .= $this->branche["lien_nom"][$i+1];
323
			  $res .= '" class="lien_nom">';
324
			  $res .= $this->branche["nom"][$i+1];
325
			  $res .= "</a>";
326
              if($this->branche["intensite"][$i+1] != 0) {
327
			  	$res .= " <a href=\"" ;
328
				$res .= $this->branche["lien_intensite"][$i+1];
329
				$res .= '" class="lien_nom">(';
330
				$res .= $this->branche["intensite"][$i+1];
331
				$res .= ")</a>";
332
				}
333
			$res .= "&nbsp;&nbsp;&nbsp;&nbsp;</td>
334
<!-- Le tronc -->
335
        <td bgcolor=\"#663333\"><img alt=\"\" width=\"$xtronc\" height=\"20\" src=\"".ARBRE_CHEMIN_IMAGES."vide.gif\" /></td>
336
			  <td colspan=\"3\" align=\"left\">&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"";
337
			  $res .= $this->branche["lien_nom"][$i+2];
338
			  $res .= '" class="lien_nom">';
339
			  $res .= $this->branche["nom"][$i+2];
340
			  $res .= "</a>";
341
              if($this->branche["intensite"][$i+2] != 0) {
342
			  	$res .= " <a href=\"";
343
				$res .= $this->branche["lien_intensite"][$i+2];
344
				$res .= '" class="lien_nom">(';
345
				$res .= $this->branche["intensite"][$i+2];
346
				$res .= ")</a>";
347
				}
348
			$res .= "</td>
349
			 </tr>
350
 
351
<!-- Bloc de 2 branches -->
352
			 <tr>
353
<!-- Espace gauche -->
354
        <td rowspan=\"2\"><img alt=\"\" width=\"$espace_a_gauche\" height=\"1\" src=\"".ARBRE_CHEMIN_IMAGES."vide.gif\" /></td>
355
        <!-- Feuille gauche -->
356
				<td class=\"chiffre\" align=\"center\" bgcolor=\"$coul_2\" width=\"$xfeuille\" height=\"$yfeuille\">";
357
                if($this->branche["lien_feuille"][$i+1]!="") {
358
                $res .= '<a target="_blank" href="';
359
                $res .= $this->branche["lien_feuille"][$i+1] ;
360
                $res .= '" class="image_lien">';
361
                }
362
                $res .= "<img alt=\"\" width=\"$xfeuille\" height=\"$yfeuille\" border=\"0\" src=\"".ARBRE_CHEMIN_IMAGES."feuille_gauche.gif\" />";
363
                if($this->branche["lien_feuille"][$i+1]!=""):{$res .= "</a>";}endif;$res .= "</td>
364
<!-- Branche gauche: taille $tb2 % = $tbr2 pixels -->
365
				<td rowspan=\"2\"><img alt=\"\" width=\"$tbr2\" height=\"$ybranche\" src=\"".ARBRE_CHEMIN_IMAGES."branche_gauche.gif\" /></td>
366
                <!-- Le tronc -->
367
				<td rowspan=\"2\" bgcolor=\"#663333\"><img alt=\"\" width=\"$xtronc\" src=\"".ARBRE_CHEMIN_IMAGES."vide.gif\" /></td>
368
 
369
<!-- Branche droite: taille $tb % = $tbr pixels -->
370
				<td rowspan=\"2\"><img alt=\"\" width=\"$tbr\" height=\"$ybranche\" src=\"".ARBRE_CHEMIN_IMAGES."branche_droite.gif\" /></td>
371
<!-- Feuille droite -->
372
				<td class=\"chiffre\" align=\"center\" bgcolor=\"$coul_\" width=\"$xfeuille\" height=\"$yfeuille\">";
373
               if($this->branche["lien_feuille"][$i+2] != "") {
374
                    $res .= '<a target="_blank" href="';
375
                    $res .= $this->branche["lien_feuille"][$i+2];
376
                    $res .= '" class="image_lien">';
377
                    }
378
                $res .= "<img alt=\"\" width=\"$xfeuille\" height=\"$yfeuille\" border=\"0\" src=\"".ARBRE_CHEMIN_IMAGES."feuille_droite.gif\" />";
379
               if($this->branche["lien_feuille"][$i+2] !="") {
380
                    $res .= "</a>";
381
                    }
382
                $res .= '</td>
383
<!-- Espace droit -->
384
    <td rowspan="2"><img alt="" width="'.$espace_a_droite.'" height="1" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td>
385
			 </tr>
386
<!-- Les cases vides sous les feuilles -->
387
            <tr>
388
			  <td height="'.$yinv.'"><img alt="" width="1" height="'.$yinv.'" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td>
389
			  <td height="'.$yinv.'"><img alt="" width="1" height="'.$yinv.'" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td>
390
			 </tr>
391
			</table>
392
		 </td>
393
		</tr>
394
<!-- Fin du bloc de 2 branches -->';
395
 
396
 				}
397
				if(!est_pair($this->nbre_branche))	{
398
				$coul_2=couleur_f($this->branche["intensite_feuille"][$this->nbre_branche]);
399
				$xrel2 = $this->branche["longueur_branche"][$this->nbre_branche]/100.0;
400
  				 $tbr2 = round($xrel2*$xref_branche);
401
  				 if($tbr2 < $taille_mini) $tbr2 = $taille_mini+$tbr2 ; //taille mini de la branche
402
 
403
				//pour des parametress de javascript, le addslash provient de appli_dessin_date
404
				if(isset ($les_slashes) && $les_slashes==1) {
405
					$this->branche["lien_nom"][$this->nbre_branche] = stripslashes($this->branche["lien_nom"][$this->nbre_branche]);
406
					$this->branche["lien_feuille"][$this->nbre_branche] = stripslashes($this->branche["lien_feuille"][$this->nbre_branche]);
407
					//$lien_puce2=stripslashes($lien_puce2);
408
					}
409
 
410
				 //espace à gauche
411
		          $espace_a_gauche=round((($xres-$xtronc)/2)-$tbr2-$xfeuille);
412
 
413
				 $res .= '<!-- Le nom de la liste -->
414
    <tr>
415
		 <td>
416
		  <table border="0" cellspacing="0" cellpadding="0" align="left">
417
			 <tr>
418
			  <td colspan="3" align="right"><a href="';
419
			  $res .= $this->branche["lien_nom"][$this->nbre_branche] ;
420
			  $res .= '" class="lien_nom">';
421
			  $res .= $this->branche["nom"][$this->nbre_branche];
422
			  $res .= "</a>";
423
              if($this->branche["intensite"][$this->nbre_branche] != 0 ) {
424
			  $res .= ' <a href="';
425
			  $res .= $this->branche["lien_intensite"][$this->nbre_branche] ;
426
			  $res .= '" class="lien_nom">(';
427
			  $res .= $this->branche["intensite"][$this->nbre_branche];
428
			  $res .= ')</a>';
429
			  }
430
			  $res .= '&nbsp;&nbsp;&nbsp;&nbsp;</td>
431
<!-- Le tronc -->
432
        <td bgcolor="#663333"><img alt="" width="'.$xtronc.'" height="20" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td>
433
			  <td colspan="3" rowspan="3" align="left">&nbsp;</td>
434
			 </tr>
435
 
436
<!-- Bloc de 1 branche -->
437
			 <tr>
438
<!-- Espace gauche -->
439
        <td rowspan="2"><img alt="" width="'.$espace_a_gauche.'" height="1" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td>
440
<!-- Feuille gauche -->
441
				<td class="chiffre" align="center" bgcolor="'.$coul_.'" width="'.$xfeuille.'" height="'.$yfeuille.'" >';
442
             if($this->branche["lien_feuille"][$this->nbre_branche] != "") {
443
                $res .= "<a target=\"_blank\" href=\"";
444
                $res .= $this->branche["lien_feuille"][$this->nbre_branche];
445
                $res .= '">';
446
                }
447
                $res .= "<img alt=\"\" width=\"$xfeuille\" height=\"$yfeuille\" border=\"0\" src=\"".ARBRE_CHEMIN_IMAGES."feuille_gauche.gif\" />";
448
             if($this->branche["lien_feuille"][$this->nbre_branche]!=""):{$res .= "</a>";}endif;$res .= "</td>
449
<!-- Branche gauche: taille $tb2 % = $tbr2 pixels -->
450
				<td rowspan=\"2\"><img alt=\"\" width=\"$tbr2\" height=\"$ybranche\" src=\"".ARBRE_CHEMIN_IMAGES."branche_gauche.gif\" /></td>
451
 
452
<!-- Le tronc -->
453
				<td rowspan=\"2\" bgcolor=\"#663333\"><img alt=\"\" width=\"$xtronc\" src=\"".ARBRE_CHEMIN_IMAGES."vide.gif\" /></td>
454
                           </tr>
455
<!-- La case vide sous la feuille -->
456
                      <tr>
457
			  <td height=\"$yinv\"><img alt=\"\" width=\"1\" height=\"$yinv\" src=\"".ARBRE_CHEMIN_IMAGES."vide.gif\" /></td>
458
                      </tr>
459
	              </table>
460
		      </td>
461
		     </tr>
462
";
463
 
464
				}
465
	return $res ;
466
	}
467
/********************  fonction affRacine()  ****************************************
468
*	affiche	la racine, ne renvoie rien
469
*************************************************************************************/
470
	function affRacine() {
471
 
472
	$xracine = 191 ; $yracine = 61;
473
    $this->blanc_cime -= 4 ;
474
 
475
	$res = '<!-- la racine -->
476
          <tr>
477
           <td align="left"><img width="'.$this->blanc_cime.'" height="1" border="0" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" alt="vide" />
478
		   		<img src="'.ARBRE_CHEMIN_IMAGES.'racine.gif" width="'.$xracine.'" height="'.$yracine.'" border="0" alt="racine" />
479
           </td>
480
          </tr>
481
         </table>
482
        </td>
483
       </tr>';
484
	return $res ;
485
	}
486
}
487
 
488
?>