source: spip-zone/_plugins_/jpgraph/jpgraph_fonctions.php @ 32463

Last change on this file since 32463 was 32463, checked in by erational@…, 10 years ago

nettoyage de code

File size: 6.8 KB
Line 
1<?php
2
3if (!defined('_DIR_LIB')) define('_DIR_LIB', _DIR_RACINE . 'lib/');
4define('_DIR_JPGRAPH_LIB', _DIR_LIB . 'jpgraph-3.0.6/');
5
6
7//
8// cree un hash unique
9// (a ameliorer activer le cache de jpgraph ou celui de spip ?)
10function jpgraph_name_hash($type="graph",$largeur,$hauteur,$donnee) {
11    // repertoire IMG/jpgraph dispo ?
12    if (!is_dir(_DIR_VAR."cache-jpgraph/")) {                                     
13                   if (!mkdir (_DIR_VAR."cache-jpgraph/", 0777)) // on essaie de le creer 
14                        spip_log("plugin jgraph: impossible de creer le reperoitre image");
15    }
16
17    // creer le nom unique
18    $donnee[] = $largeur;
19    $donnee[] = $hauteur;
20    $hash = md5(serialize($donnee));
21    return _DIR_VAR."cache-jpgraph/$type-$hash.png";
22}
23
24
25//
26// filtre pour creer des courbes simples
27//
28function filtre_jpgraph($str,
29        $type_graphe="courbe",
30        $donnee="",
31        $legende="",
32        $largeur=400,
33        $hauteur=300,
34        $titre="",
35        $couleur="orange",
36        $couleur_fond="",
37        $fond_degrade="",
38        $epaisseur="",
39        $marqueur_forme="",
40        $marqueur_couleur="",
41        $marqueur_epaisseur="",
42        $marqueur_couleur_fond="",
43        $style="")
44{
45       
46          // constantes
47          $marqueur_formes = array("carre"=>MARK_SQUARE,
48                     "triangle"=> MARK_UTRIANGLE,
49                     "triangle_bas"=> MARK_DTRIANGLE,
50                     "losange"=> MARK_DIAMOND,
51                     "cercle"=> MARK_CIRCLE,
52                     "disque"=> MARK_FILLEDCIRCLE,
53                     "croix"=> MARK_CROSS,
54                     "croix_x" => MARK_X,
55                     "etoile" => MARK_STAR);
56   
57    // traiter les donnees
58    $type_graphe = strtolower(trim($type_graphe));  // pour pb avec les modeles si du blanc en fin de ligne
59    $couleur = trim($couleur);
60    $couleur_fond = trim($couleur_fond);
61    $epaisseur = (int) $epaisseur;
62    $marqueur_forme = trim($marqueur_forme);
63    $marqueur_couleur=trim($marqueur_couleur);
64    $marqueur_epaisseur=(int) $marqueur_epaisseur;
65    $marqueur_couleur_fond = trim($marqueur_couleur_fond);
66    $style = trim ($style);
67   
68    $donnee =  explode(";", $donnee);   
69    foreach ($donnee as $key => $value)
70         $donnee[$key] = (float) $value;   
71    if (count($donnee)<2) 
72        $donnee[] = "1";   // securite pour empecher les erreurs si donnnee pas renseigne 
73   
74    if ($fond_degrade) {
75                $fond_degrade = explode(";", $fond_degrade);
76                foreach ($fond_degrade as $key => $value) $fond_degrade[$key] = trim($value);
77                if (count($fond_degrade)<2) {
78                        $fond_degrade[0]='white@0.5';
79                        $fond_degrade[1]='orange@0.5';
80                }
81    }
82   
83    $legende =  explode(";", $legende); 
84    foreach ($legende as $key => $value) 
85            $legende[$key] = utf8_decode($value);
86    $largeur = (int) $largeur;    if (($largeur<=0) OR ($largeur>1600)) $largeur = 400;
87    $hauteur = (int) $hauteur;    if (($hauteur<=0) OR ($hauteur>1600)) $hauteur = 300;
88   
89    // retrouver jpgraph
90        $cwd = getcwd();
91        chdir(realpath(_DIR_JPGRAPH_LIB));
92    require_once ('src/jpgraph.php');
93    switch($type_graphe) {
94        case "courbe":      require_once ('src/jpgraph_line.php'); break;
95        case "barre":       require_once ('src/jpgraph_bar.php');  break;
96        case "camembert":   require_once ('src/jpgraph_pie.php');  break;
97        default:            $type_graphe = "courbe";
98                            require_once ('src/jpgraph_line.php'); 
99                            break;       
100    }
101    chdir($cwd);
102   
103   
104    // creation du graphe
105    switch($type_graphe) {
106        case "courbe":      $graph = new Graph($largeur,$hauteur);
107                            $graph->SetScale('textlin');
108                            // Create the linear plot
109                            $plot=new LinePlot($donnee);                           
110                            // style & couleur
111                                            $plot->SetColor($couleur);
112                                            if ($style=='marches') $plot->SetStepStyle();
113                                            if ($fond_degrade) $plot->SetFillGradient($fond_degrade[0],$fond_degrade[1]);
114                                            if ($couleur_fond) $plot->SetFillColor($couleur_fond);
115                                            if ($epaisseur) $plot->SetWeight($epaisseur);
116                                            if (isset($marqueur_formes[$marqueur_forme])) 
117                                                                 $plot->mark->SetType($marqueur_formes[$marqueur_forme]);                                           
118                                            if ($marqueur_couleur) $plot->mark->SetColor($marqueur_couleur);
119                                        if ($marqueur_couleur_fond) $plot->mark->SetFillColor($marqueur_couleur_fond);
120                                        if ($marqueur_epaisseur)$plot->mark->SetWidth($marqueur_epaisseur); 
121                           
122                            // titre & legende
123                            $graph->title->Set(utf8_decode($titre));
124                            if (count($legende)>1) 
125                                $graph->xaxis->SetTickLabels($legende); 
126                            break;
127                           
128        case "barre":       $graph = new Graph($largeur,$hauteur);
129                            $graph->SetScale('textlin');
130                            // Create the linear plot
131                            $plot = new BarPlot($donnee);
132                            $plot->SetFillColor($couleur);   
133                            // titre & legende
134                            $graph->title->Set(utf8_decode($titre));
135                            if (count($legende)>1)
136                                $graph->xaxis->SetTickLabels($legende);                                                     
137                            break;
138                           
139         case "camembert":  $graph = new PieGraph($largeur,$hauteur);   
140                            // Create the linear plot
141                            $plot = new PiePlot($donnee);
142                            // style & couleur
143                            //$plot->SetTheme($style);   
144                            // titre & legende
145                            $graph->title->Set(utf8_decode($titre));
146                            if (count($legende)>1) 
147                                $plot->SetLegends($legende);       
148                            break;
149    }
150   
151    // Attacher le trace au graph
152    $graph->Add($plot); 
153   
154    // export du graphe dans un fichier   
155    $filename = jpgraph_name_hash($type_graphe,$largeur,$hauteur,$donnee);
156    @unlink($filename); // http://jpgraph.intellit.nl/index.php?topic=4547.msg11823
157    $graph->Stroke($filename);
158   
159    $titre = str_replace("'","&#039",$titre);
160    return "<span class='spip_documents jgraph'><img src='$filename' alt='$titre' width='$largeur' height='$hauteur' /></span>";
161
162}
163
164
165?>
Note: See TracBrowser for help on using the repository browser.