Rev 448 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/* ***************************** classe arbre ************************************ classe permettant la creation d'un arbre, elle est fonctionnelle en tant que module* de gsite (www.gsite.org).* L'arbre peut servir de representation graphique de donnees statistiques.* Copyright 2001 Tela Botanica* Auteurs : Daniel Mathieu, Nicolas Touillaud, Alexandre Granier* Cette bibliothèque est libre, vous pouvez la redistribuer et/ou la modifier* selon les termes de la Licence Publique Générale GNU publiée par la* Free Software Foundation.* Cette bibliothèque est distribuée car potentiellement utile, mais SANS* AUCUNE GARANTIE, ni explicite ni implicite, y compris les garanties de* commercialisation ou d'adaptation dans un but spécifique.** Derniere mise a jour : 10 decembre 2001************************************************************************************/error_reporting (E_ALL) ;//l'ecran//$xres=698; //doit etre divisible par 2 sinon bug d'alignement$innerTableWidth = 600;$xres=$innerTableWidth-10;$yres=600;//les images$yfait= 50; //la hauteur du "sommet"$xfait= 1;$xtronc= 36; //doit etre divisible par 2 sinon bug d'alignement$ytronc= 559;$xbranche= 200;$ybranche= 64;$xracine= 191;$yracine= 61;$xfeuille= 50;$yfeuille= 45;$xtextedroite=10;$ytextedroite=15;$xtextegauche=10;$ytextegauche=10;$yposnom=12;$xpuce=10;$ypuce=10;$taille_mini=60;$nhi_xsommet=191;$nhi_ysommet=61;include 'tailles.php3' ;define ("ARBRE_CHEMIN_IMAGES", 'api/arbre/images/') ;function calc_xref_branche($xres_,$xfeuille_, $xtronc_)//calcule la taille de reference des branches{//global $xres, $xfeuille, $xtronc;$toto=round(($xres_-$xtronc_-(2*$xfeuille_))/2);return $toto;}//******************************************************// calcule l'espace vertical entre 2 branche d'un meme coté: si il n'y a pas la place -> 12 pixelsfunction calc_esver(){global $nbdroite ;if ($nbdroite != 1):{global $yres, $yfait, $yracine, $ybranche, $nbdroite;$toto=($yres-$yfait-$yracine-($nbdroite*$ybranche))/($nbdroite-1);if($toto<0):{$toto=12;} //on ne se place plus sur 1 ecran mais sur plusendif;return $toto;}else:{return 0;}endif;}//******************************************************$esver=calc_esver();//******************************************************//calcul la position en x de la branchefunction calcul_x_branche($adroite,$xreel){global $xres, $xtronc, $xref_branche;$tempx=($xres+$xtronc)/2-2; //pour un bugif($adroite != 1):{$tempx=$tempx+2-$xtronc-($xreel);}endif;return round($tempx);}//******************************************************//Il est impératif d'afficher 1 branche d'un coté, puis de l'autre etc..//******************************************************//retourne la position y de la branche (et de la feuille) et met à jour la hauteur de la prochaine branchefunction calcul_y_branche(){global $esver, $hauteur, $ybranche;$toto=$hauteur;$hauteur=$hauteur+(($ybranche+$esver)/2);return $toto;}//******************************************************//******************************************************//retourne la position x du troncfunction x_tronc(){global $xtronc, $xres;return ($xres-$xtronc)/2;}//******************************************************//******************************************************//retourne la position y du troncfunction y_tronc(){global $yfait;return ($yfait);}//******************************************************//******************************************************// retourne la position x de la racinefunction x_racine(){global $xracine, $xres;return ($xres-$xracine)/2;}//******************************************************//******************************************************//retourne la taille du tronc en pixelsfunction taille_tronc(){global $nbdroite, $esver, $ybranche;$toto=($nbdroite-1)*$esver+($nbdroite*$ybranche);return $toto;}//******************************************************//******************************************************//retourne la position x de la feuille en fonction des param de la branchefunction calcul_x_feuille($adroite, $pos_branche, $xreel_brch) //xreel en %{global $xref_branche, $xfeuille;if($adroite !=1):{$toto=$pos_branche-$xfeuille;}else:{$toto=$pos_branche+($xreel_brch);}endif;return $toto;}//******************************************************//******************************************************// retourne la position y de la racinefunction y_racine(){global $yfait;$toto=$yfait+taille_tronc();return $toto;}//******************************************************//******************************************************//met 1 à 0 et inversementfunction dg($dte){if($dte==1):{return 0;}else:{return 1;}endif;}//******************************************************//******************************************************//une fonction qui prend le % de vert *100 et qui sort la chaine html du vert correspondantfunction couleur_f($prc){if ($prc==0) return ("#279C27");if (($prc>0) && ($prc<=16)) return ("#279C27");if (($prc>16) && ($prc<=32)) return ("#CCCC00");if (($prc>32) && ($prc<=48)) return ("#FFCC00");if (($prc>48) && ($prc<=64)) return ("#DD8D22");if (($prc>64) && ($prc<=80)) {return "#FF6600" ;} else {return "#CC3300" ;}}//*****************************************************//une fonction qui détermine si un entier est pair ou nonfunction est_pair($un_entier){return(($un_entier %2)==0);}class arbre {var $nbre_branche ;var $branche ;var $blanc_cime ;/********************************************************************************* constructeur arbre(chaine $nom, chaine $lien_nom, entier $intensite, chaine $lien_intensite,* chaine $lien_feuille)* crees une instance d'arbre, les parametres sont les informations du sommet de l'arbre* $nom : le texte du haut de l'arbre* $lien_nom : le lein associe* $intensite : le nombre a cote du nom* $lien_intensite : le lien sur l'intensite* $lien_feuille : le lien, lorsqu'on clique sur la feuille du haut de l'arbre*********************************************************************************/function arbre() {}function cime($nom, $lien_nom, $intensite, $lien_intensite, $lien_feuille) {//global $nhi_xsommet, $nhi_ysommet,$ybranche,$yfeuille, $yres, $innerTableWidth ;//l'ecran//$xres=698; //doit etre divisible par 2 sinon bug d'alignement$innerTableWidth = 600;$xres=$innerTableWidth-10;$yres=600;//les images$yfait= 50; //la hauteur du "sommet"$xfait= 1;$xtronc= 36; //doit etre divisible par 2 sinon bug d'alignement$ytronc= 559;$xbranche= 200;$ybranche= 64;$xracine= 191;$yracine= 61;$xfeuille= 50;$yfeuille= 45;$xtextedroite=10;$ytextedroite=15;$xtextegauche=10;$ytextegauche=10;$yposnom=12;$xpuce=10;$ypuce=10;$taille_mini=60;$nhi_xsommet=191;$nhi_ysommet=61;// tailles.php3 contient les variables de tailles des fichiers graphiques associes// a l'arbreinclude 'tailles.php3' ;// Le blanc devant la cime de l'arbre$this->blanc_cime = round(($xres-$nhi_xsommet)/2);$res = '<tr><td align="center"><a href="'.$lien_nom.'"><b><i>'.$nom.'</i></b></a> <a href="'.$lien_intensite.'"><b><i>('.$intensite.')</i></b></a></td></tr><tr><td align="center"><table width="'.$xres.'" border="0" cellspacing="0" cellpadding="0" summary="">';// haut de l'arbre$res .= '<tr><td align="center"><table border="0" cellspacing="0" cellpadding="0" summary=""><tr><td><img alt="" width="'.$this->blanc_cime.'" height="1" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td><td width="'.$nhi_xsommet.'" height="'.$nhi_ysommet.'" align="center"><a href="'.$lien_feuille.'" target="_blank" class="image_lien"><img alt="" width="'.$nhi_xsommet.'" height="'.$nhi_ysommet.'" border="0" src="'.ARBRE_CHEMIN_IMAGES.'haut.gif" /></a></td><td><img alt="" width="'.$this->blanc_cime.'" height="1" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td></tr></table></td></tr>';return $res ;}/************************** fonction addBranche ******************************************* ajoute une branche a l'arbre** $nom : le label d'une branche* $lien_nom : le lien associe au label* $intensite : le nombre a droite du label* $lien_intensite : le lien sur le nombre* $lien feuille : le lien quand on clique sur la feuille* $intensite_feuille : un nombre compris entre 1 et 100, qui sera transforme en couleur* $longueur_branche : un nombre entre 1 et 100, pour la longueur de la branche*********************************************************************************************/function addBranche($nom, $lien_nom, $intensite, $lien_intensite, $lien_feuille, $intensite_feuille, $longueur_branche) {$this->nbre_branche++ ;$this->branche["nom"][$this->nbre_branche] = $nom ;$this->branche["lien_nom"][$this->nbre_branche] = $lien_nom ;$this->branche["intensite"][$this->nbre_branche] = $intensite ;$this->branche["lien_intensite"][$this->nbre_branche] = $lien_intensite ;$this->branche["lien_feuille"][$this->nbre_branche] = $lien_feuille ;$this->branche["intensite_feuille"][$this->nbre_branche] = $intensite_feuille ;$this->branche["longueur_branche"][$this->nbre_branche] = $longueur_branche ;}/************ fonction affBranche() ajoute le code HTML des branches ********************* ne renvoie rien*********************************************************************************************/function affBranche() {//l'ecran//$xres=698; //doit etre divisible par 2 sinon bug d'alignement$innerTableWidth = 600;$xres=$innerTableWidth-10;$yres=600;//les images$yfait= 50; //la hauteur du "sommet"$xfait= 1;$xtronc= 36; //doit etre divisible par 2 sinon bug d'alignement$ytronc= 559;$xbranche= 200;$ybranche= 64;$xracine= 191;$yracine= 61;$xfeuille= 50;$yfeuille= 45;$xtextedroite=10;$ytextedroite=15;$xtextegauche=10;$ytextegauche=10;$yposnom=12;$xpuce=10;$ypuce=10;$taille_mini=60;$nhi_xsommet=191;$nhi_ysommet=61;$tb = "" ; $tb2 = "" ;//global $nhi_xsommet, $nhi_ysommet,$ybranche,$yfeuille, $xref_branche, $taille_mini;//global $xtronc, $espace_a_gauche, $xfeuille , $les_slashes, $xres, $innerTableWidth;include 'tailles.php3' ;$xref_branche = calc_xref_branche($xres,$xfeuille,$xtronc);$res = "<!-- xref_branche=$xref_branche -->";$yinv=$ybranche-$yfeuille; //Hauteur de la case vide sous la feuille//le tableau des branches//ici, la boucle//ajustement de la boucle: le nombre de tables doit être pair dans la boucle$la_limite_de_la_boucle = $this->nbre_branche;if(true != est_pair($la_limite_de_la_boucle)): //ajustement de la boucle{$la_limite_de_la_boucle-=1;}endif;$coul_ = '' ;for($i=0; $i < $la_limite_de_la_boucle ; $i += 2) {// informations concernant la branche gauche$coul_=couleur_f($this->branche["intensite_feuille"][$i+1]);$xrel=$this->branche["longueur_branche"][$i+2]/100;$tbr = round($xrel * $xref_branche);if($tbr < $taille_mini) $tbr = $taille_mini + $tbr ; //taille mini de la brancheif(isset ($les_slashes) && $les_slashes == 1) {$this->branche["lien_nom"][$i+1] = stripslashes($this->branche["nom_lien"][$i+1]);$this->branche["lien_feuille"][$i+1] = stripslashes($this->branche["lien_feuille"][$i+1]);//$lien_puce2=stripslashes($lien_puce2);}// informations concernant la branche droite$coul_2=couleur_f($this->branche["intensite_feuille"][$i+2]);$xrel2 = $this->branche["longueur_branche"][$i+1]/100.0;$tbr2 = round($xrel2*$xref_branche);if($tbr2 < $taille_mini) $tbr2 = $taille_mini+$tbr2 ; //taille mini de la branche//pour des parametress de javascript, le addslash provient de appli_dessin_dateif(isset ($les_slashes) && $les_slashes == 1) {$this->branche["lien_nom"][$i+2] = stripslashes($this->branche["lien_nom"][$i+2]);$this->branche["lien_feuille"][$i+2] = stripslashes($this->branche["lien_feuille"][$i+2]);//$lien_puce2=stripslashes($lien_puce2);}//espace à gauche$espace_a_gauche=round((($xres-$xtronc)/2)-$tbr2-$xfeuille);//espace à droite$espace_a_droite=round($xres-$xtronc-$tbr-$tbr2-2*$xfeuille-$espace_a_gauche);$res .= "<!-- Les noms des listes --><tr><td><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" summary=\"\"><tr><td colspan=\"3\" align=\"right\"><a href=\"";$res .= $this->branche["lien_nom"][$i+1];$res .= '" class="lien_nom">';$res .= $this->branche["nom"][$i+1];$res .= "</a>";if($this->branche["intensite"][$i+1] != 0) {$res .= " <a href=\"" ;$res .= $this->branche["lien_intensite"][$i+1];$res .= '" class="lien_nom">(';$res .= $this->branche["intensite"][$i+1];$res .= ")</a>";}$res .= " </td><!-- Le tronc --><td bgcolor=\"#663333\"><img alt=\"\" width=\"$xtronc\" height=\"20\" src=\"".ARBRE_CHEMIN_IMAGES."vide.gif\" /></td><td colspan=\"3\" align=\"left\"> <a href=\"";$res .= $this->branche["lien_nom"][$i+2];$res .= '" class="lien_nom">';$res .= $this->branche["nom"][$i+2];$res .= "</a>";if($this->branche["intensite"][$i+2] != 0) {$res .= " <a href=\"";$res .= $this->branche["lien_intensite"][$i+2];$res .= '" class="lien_nom">(';$res .= $this->branche["intensite"][$i+2];$res .= ")</a>";}$res .= "</td></tr><!-- Bloc de 2 branches --><tr><!-- Espace gauche --><td rowspan=\"2\"><img alt=\"\" width=\"$espace_a_gauche\" height=\"1\" src=\"".ARBRE_CHEMIN_IMAGES."vide.gif\" /></td><!-- Feuille gauche --><td class=\"chiffre\" align=\"center\" bgcolor=\"$coul_2\" width=\"$xfeuille\" height=\"$yfeuille\">";if($this->branche["lien_feuille"][$i+1]!="") {$res .= '<a target="_blank" href="';$res .= $this->branche["lien_feuille"][$i+1] ;$res .= '" class="image_lien">';}$res .= "<img alt=\"\" width=\"$xfeuille\" height=\"$yfeuille\" border=\"0\" src=\"".ARBRE_CHEMIN_IMAGES."feuille_gauche.gif\" />";if($this->branche["lien_feuille"][$i+1]!=""):{$res .= "</a>";}endif;$res .= "</td><!-- Branche gauche: taille $tb2 % = $tbr2 pixels --><td rowspan=\"2\"><img alt=\"\" width=\"$tbr2\" height=\"$ybranche\" src=\"".ARBRE_CHEMIN_IMAGES."branche_gauche.gif\" /></td><!-- Le tronc --><td rowspan=\"2\" bgcolor=\"#663333\"><img alt=\"\" width=\"$xtronc\" src=\"".ARBRE_CHEMIN_IMAGES."vide.gif\" /></td><!-- Branche droite: taille $tb % = $tbr pixels --><td rowspan=\"2\"><img alt=\"\" width=\"$tbr\" height=\"$ybranche\" src=\"".ARBRE_CHEMIN_IMAGES."branche_droite.gif\" /></td><!-- Feuille droite --><td class=\"chiffre\" align=\"center\" bgcolor=\"$coul_\" width=\"$xfeuille\" height=\"$yfeuille\">";if($this->branche["lien_feuille"][$i+2] != "") {$res .= '<a target="_blank" href="';$res .= $this->branche["lien_feuille"][$i+2];$res .= '" class="image_lien">';}$res .= "<img alt=\"\" width=\"$xfeuille\" height=\"$yfeuille\" border=\"0\" src=\"".ARBRE_CHEMIN_IMAGES."feuille_droite.gif\" />";if($this->branche["lien_feuille"][$i+2] !="") {$res .= "</a>";}$res .= '</td><!-- Espace droit --><td rowspan="2"><img alt="" width="'.$espace_a_droite.'" height="1" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td></tr><!-- Les cases vides sous les feuilles --><tr><td height="'.$yinv.'"><img alt="" width="1" height="'.$yinv.'" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td><td height="'.$yinv.'"><img alt="" width="1" height="'.$yinv.'" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td></tr></table></td></tr><!-- Fin du bloc de 2 branches -->';}if(!est_pair($this->nbre_branche)) {$coul_2=couleur_f($this->branche["intensite_feuille"][$this->nbre_branche]);$xrel2 = $this->branche["longueur_branche"][$this->nbre_branche]/100.0;$tbr2 = round($xrel2*$xref_branche);if($tbr2 < $taille_mini) $tbr2 = $taille_mini+$tbr2 ; //taille mini de la branche//pour des parametress de javascript, le addslash provient de appli_dessin_dateif(isset ($les_slashes) && $les_slashes==1) {$this->branche["lien_nom"][$this->nbre_branche] = stripslashes($this->branche["lien_nom"][$this->nbre_branche]);$this->branche["lien_feuille"][$this->nbre_branche] = stripslashes($this->branche["lien_feuille"][$this->nbre_branche]);//$lien_puce2=stripslashes($lien_puce2);}//espace à gauche$espace_a_gauche=round((($xres-$xtronc)/2)-$tbr2-$xfeuille);$res .= '<!-- Le nom de la liste --><tr><td><table border="0" cellspacing="0" cellpadding="0" align="left"><tr><td colspan="3" align="right"><a href="';$res .= $this->branche["lien_nom"][$this->nbre_branche] ;$res .= '" class="lien_nom">';$res .= $this->branche["nom"][$this->nbre_branche];$res .= "</a>";if($this->branche["intensite"][$this->nbre_branche] != 0 ) {$res .= ' <a href="';$res .= $this->branche["lien_intensite"][$this->nbre_branche] ;$res .= '" class="lien_nom">(';$res .= $this->branche["intensite"][$this->nbre_branche];$res .= ')</a>';}$res .= ' </td><!-- Le tronc --><td bgcolor="#663333"><img alt="" width="'.$xtronc.'" height="20" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td><td colspan="3" rowspan="3" align="left"> </td></tr><!-- Bloc de 1 branche --><tr><!-- Espace gauche --><td rowspan="2"><img alt="" width="'.$espace_a_gauche.'" height="1" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td><!-- Feuille gauche --><td class="chiffre" align="center" bgcolor="'.$coul_.'" width="'.$xfeuille.'" height="'.$yfeuille.'" >';if($this->branche["lien_feuille"][$this->nbre_branche] != "") {$res .= "<a target=\"_blank\" href=\"";$res .= $this->branche["lien_feuille"][$this->nbre_branche];$res .= '">';}$res .= "<img alt=\"\" width=\"$xfeuille\" height=\"$yfeuille\" border=\"0\" src=\"".ARBRE_CHEMIN_IMAGES."feuille_gauche.gif\" />";if($this->branche["lien_feuille"][$this->nbre_branche]!=""):{$res .= "</a>";}endif;$res .= "</td><!-- Branche gauche: taille $tb2 % = $tbr2 pixels --><td rowspan=\"2\"><img alt=\"\" width=\"$tbr2\" height=\"$ybranche\" src=\"".ARBRE_CHEMIN_IMAGES."branche_gauche.gif\" /></td><!-- Le tronc --><td rowspan=\"2\" bgcolor=\"#663333\"><img alt=\"\" width=\"$xtronc\" src=\"".ARBRE_CHEMIN_IMAGES."vide.gif\" /></td></tr><!-- La case vide sous la feuille --><tr><td height=\"$yinv\"><img alt=\"\" width=\"1\" height=\"$yinv\" src=\"".ARBRE_CHEMIN_IMAGES."vide.gif\" /></td></tr></table></td></tr>";}return $res ;}/******************** fonction affRacine() ***************************************** affiche la racine, ne renvoie rien*************************************************************************************/function affRacine() {$xracine = 191 ; $yracine = 61;$this->blanc_cime -= 4 ;$res = '<!-- la racine --><tr><td align="left"><img width="'.$this->blanc_cime.'" height="1" border="0" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" alt="vide" /><img src="'.ARBRE_CHEMIN_IMAGES.'racine.gif" width="'.$xracine.'" height="'.$yracine.'" border="0" alt="racine" /></td></tr></table></td></tr>';return $res ;}}?>