source: spip-zone/_plugins_/pb_charts/pb_charts_actions.php @ 117558

Last change on this file since 117558 was 15877, checked in by fil@…, 13 years ago

une version alt pour ceux qui n'ont pas javascript

File size: 8.9 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5
6if ($GLOBALS["spip_version"] >= 1.93 AND $GLOBALS["auteur_session"]
7AND $couleurs = charger_fonction('couleurs', 'inc')) {
8        $var = $couleurs($GLOBALS['auteur_session']['prefs']['couleur']);
9}
10
11function pb_charts_image_rgb2hsv ($R,$G,$B) {
12        $var_R = ( $R / 255 ) ;                    //Where RGB values = 0 Ö 255
13        $var_G = ( $G / 255 );
14        $var_B = ( $B / 255 );
15
16        $var_Min = min( $var_R, $var_G, $var_B ) ;   //Min. value of RGB
17        $var_Max = max( $var_R, $var_G, $var_B ) ;   //Max. value of RGB
18        $del_Max = $var_Max - $var_Min  ;           //Delta RGB value
19
20        $V = $var_Max;
21        $L = ( $var_Max + $var_Min ) / 2;
22       
23        if ( $del_Max == 0 )                     //This is a gray, no chroma...
24        {
25           $H = 0 ;                            //HSL results = 0 Ö 1
26           $S = 0 ;
27        }
28        else                                    //Chromatic data...
29        {
30           $S = $del_Max / $var_Max;
31       
32           $del_R = ( ( ( $var_Max - $var_R ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max;
33           $del_G = ( ( ( $var_Max - $var_G ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max;
34           $del_B = ( ( ( $var_Max - $var_B ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max;
35       
36           if      ( $var_R == $var_Max ) $H = $del_B - $del_G;
37           else if ( $var_G == $var_Max ) $H = ( 1 / 3 ) + $del_R - $del_B;
38           else if ( $var_B == $var_Max ) $H = ( 2 / 3 ) + $del_G - $del_R;
39       
40           if ( $H < 0 )  $H =  $H + 1;
41           if ( $H > 1 )  $H = $H - 1;
42        }
43                               
44        $ret["h"] = $H;
45        $ret["s"] = $S;
46        $ret["v"] = $V;
47       
48        return $ret;
49}
50
51function pb_charts_image_hsv2rgb ($H,$S,$V) {
52        if ( $S == 0 )                       //HSV values = 0 Ö 1
53        {
54           $R = $V * 255;
55           $G = $V * 255;
56           $B = $V * 255;
57        }
58        else
59        {
60           $var_h = $H * 6;
61           if ( $var_h == 6 ) $var_h = 0 ;     //H must be < 1
62           $var_i = floor( $var_h )  ;           //Or ... var_i = floor( var_h )
63           $var_1 = $V * ( 1 - $S );
64           $var_2 = $V * ( 1 - $S * ( $var_h - $var_i ) );
65           $var_3 = $V * ( 1 - $S * ( 1 - ( $var_h - $var_i ) ) );
66       
67           if      ( $var_i == 0 ) { $var_r = $V     ; $var_g = $var_3 ; $var_b = $var_1 ; }
68           else if ( $var_i == 1 ) { $var_r = $var_2 ; $var_g = $V     ; $var_b = $var_1 ; }
69           else if ( $var_i == 2 ) { $var_r = $var_1 ; $var_g = $V     ; $var_b = $var_3 ; }
70           else if ( $var_i == 3 ) { $var_r = $var_1 ; $var_g = $var_2 ; $var_b = $V ;     }
71           else if ( $var_i == 4 ) { $var_r = $var_3 ; $var_g = $var_1 ; $var_b = $V ; }
72           else                   { $var_r = $V     ; $var_g = $var_1 ; $var_b = $var_2; }
73       
74           $R = $var_r * 255;                  //RGB results = 0 Ö 255
75           $G = $var_g * 255;
76           $B = $var_b * 255;
77        }
78        $ret["r"] = floor($R);
79        $ret["g"] = floor($G);
80        $ret["b"] = floor($B);
81       
82        return $ret;
83}
84
85
86function pb_charts_couleur_chroma ($coul, $num) {
87
88        $pos = substr($num, 0, strpos($num, "/")) -  1;
89        $tot = substr($num, strpos($num, "/")+1, strlen($num));
90       
91        include_spip("inc/filtres_images");
92        $couleurs = couleur_hex_to_dec($coul);
93        $r= $couleurs["red"];
94        $g= $couleurs["green"];
95        $b= $couleurs["blue"];
96
97        $hsv = pb_charts_image_rgb2hsv($r,$g,$b);
98        $h = $hsv["h"];
99        $s = $hsv["s"];
100        $v = $hsv["v"];
101       
102        $h = $h + (1/$tot)*$pos;
103        if ($h > 1) $h = $h - 1;
104                                       
105        $rgb = pb_charts_image_hsv2rgb($h,$s,$v);
106        $r = $rgb["r"];
107        $g = $rgb["g"];
108        $b = $rgb["b"];
109       
110        $couleurs = couleur_dec_to_hex($r, $g, $b);
111       
112        return $couleurs;
113}
114
115
116// En variables globales:
117// - couleur_claire : couleur de la couleur de la premiere courbe
118//                    (les couleurs des autres courbes sont calculees automatiquement
119//                    en parcourant la roue chromatique)
120// - couleur_texte :  la couleur du texte des legendes
121//                    (la couleur du fond est automatiquement l'extreme inverse
122//                     - noir ou blanc - de la couleur du texte)
123// - largeur_charts et hauteur_charts : dimensions de l'animation
124
125function pb_charts_traiter_charts ($texte) {
126        global $couleur_claire, $couleur_texte;
127        if (strlen($couleur_claire) > 3) $couleur_courbe = ereg_replace("^#", "", $couleur_claire);
128        else $couleur_courbe = "ff00ff";
129
130        if (strlen($couleur_texte))  $couleur_texte = ereg_replace("^#", "", $couleur_texte);
131        else $couleur_texte = "333333";
132       
133        include_spip("inc/filtres_images");
134        $couleur_fond = couleur_extreme(couleur_inverser($couleur_texte));
135
136        $p = explode(basename(_DIR_PLUGINS)."/",str_replace('\\','/',realpath(dirname(__FILE__))));
137        define('_DIR_PLUGIN_PB_CHARTS',(_DIR_PLUGINS.end($p)));
138        $charts = ($f = find_in_path('lib/charts/charts.swf'))
139                ? $f
140                : _DIR_PLUGIN_PB_CHARTS."charts/charts.swf"; // install a l'ancienne
141
142        if (!file_exists($charts)) {
143                return "<ul style='font-size: 10px; text-align: left;'><li>T&eacute;l&eacute;chargez <a href='http://www.maani.us/xml_charts/index.php?menu=Download'>XML/SWF Charts</a>;</li><li>d&eacute;compactez le fichier;</li><li>Installez le contenu du dossier &laquo;charts&raquo;, par FTP, dans le dossier &laquo;/pb_charts/charts&raquo;.</li></ul>";
144               
145               
146        }
147       
148
149        $largeur = 400;
150        $hauteur = 340;
151        if ($GLOBALS["largeur_charts"]) $largeur = $GLOBALS["largeur_charts"];
152        if ($GLOBALS["hauteur_charts"]) $hauteur = $GLOBALS["hauteur_charts"];
153
154
155        $preg = ",<chart type=\"([^\"]*)\">(.*)</chart>,Uimss";
156        if (preg_match_all( $preg, $texte, $matches, PREG_SET_ORDER)) {
157
158                foreach ($matches as $regs) {
159                       
160                       
161                        // Analyser le fichier XML
162                        $cache = sous_repertoire(_DIR_VAR, "cache-charts");
163                        $nom_fichier = $cache.md5($regs[0].$couleur_courbe.$largeur.$hauteur).".xml";
164
165                        if( !file_exists($nom_fichier)) {
166                                $valeurs_xml = "";
167                                $xml = "";
168                                $couleurs_xml = "";
169                                $total_lignes = 0;
170                                $titre_xml = "";
171                               
172                                $type = strtolower($regs[1]);
173                                $vals = trim($regs[2]);
174                               
175                                $lignes = explode("\n", $vals);
176                                        for ($i = 0; $i < count($lignes); $i++) {
177                                        $ligne = trim($lignes[$i]);
178                                        $ligne_xml = "";
179                                       
180                                        if (ereg("^\|\|([^\|]*)\|\|$", $ligne, $titre_xml)) {
181                                                $titre_xml = $titre_xml[1];
182                                                $titre_xml = "<draw><text x='0' h_align='center' y='25' v_align='bottom' color='$couleur_texte' size='12'>$titre_xml</text></draw>";
183
184                                        } else {
185                                                $total_lignes++;
186                                                $entrees = explode("|", $ligne);
187                                                $total_col = count($entrees);
188                                                for ($j = 1; $j < count($entrees) - 1; $j++) {
189                                                        $entree = trim($entrees[$j]);
190               
191                                                        if ($entree == "") $ligne_xml .= "<string></string>";
192                                                        else if (ereg("^[0-9\-\.\,]*$", $entree)) {
193                                                                $ligne_xml .= "<number>".str_replace(",",".",$entree)."</number>" ;
194                                                        }
195                                                        else $ligne_xml .= "<string>".$entree."</string>" ;
196               
197                                                }
198                                                $valeurs_xml .= "<row>".$ligne_xml."</row>\n";
199                                        }
200                                }
201                                $valeurs_xml = "<chart_data>".$valeurs_xml."</chart_data>\n";
202                                $type_xml = "<chart_type>$type</chart_type>\n";
203
204                                if ($type == "pie" OR $type == "3d pie") {
205                                        $total_lignes = $total_col - 3;
206                                }
207                                for ($i = 0; $i < $total_lignes; $i++) {
208                                        $couleurs_xml .= "<color>".pb_charts_couleur_chroma($couleur_courbe,($i+1)."/".$total_lignes)."</color>";
209                                }
210                                $couleurs_xml = "<series_color>".$couleurs_xml."</series_color>";
211                               
212                                if ($type == "polar") $pref_xml = "<chart_pref grid='circular' />";
213                                if ($type == "line" AND count($entrees) > 20) $pref_xml = "<chart_pref point_shape='none'  />";
214
215                               
216                                $axis_xml = "<axis_category color='$couleur_texte' size='10'/><axis_ticks major_color='$couleur_texte' minor_color='$couleur_texte' /><axis_value size='10' color='$couleur_texte' /><chart_border color='$couleur_texte' /><legend_label color='$couleur_texte' size='11' /><legend_rect size='11' fill_color='$couleur_fond' fill_alpha='40' />";
217                               
218                                if ($titre_xml) $hauteur_chart = $hauteur - 100;
219                                else $hauteur_chart = $hauteur - 75;
220                               
221                                $largeur_chart = $largeur - 50;
222                               
223                                if (!ereg("pie", $type)) $axis_xml .= "<chart_rect positive_alpha='35' x='45' y='45' width='$largeur_chart' height='$hauteur_chart' positive_color='$couleur_fond' negative_alpha='60' negative_color='$couleur_fond' />";
224                               
225                                if (!ereg("pie", $type)) $axis_xml .= "<chart_value position='cursor' size='11' color='$couleur_texte' alpha='100' />";
226                                else  $axis_xml .= "<chart_value size='11' color='$couleur_texte' alpha='100' />";
227                               
228                                $transition_xml = "<chart_transition type='scale' delay='1' duration='0.5' order='series' />";
229
230
231                                $xml = "<chart>".$type_xml.$valeurs_xml.$couleurs_xml.$transition_xml.$axis_xml.$pref_xml.$titre_xml."</chart>";
232                               
233                                //echo "<pre>$xml</pre>";
234                                ecrire_fichier($nom_fichier, $xml, true /* ecrire quand meme en preview */);
235                        }
236                       
237                       
238                        include_spip("inc/pb_charts");
239
240                        $alt = propre($regs[2]);
241
242                        $flash = pb_charts_afficher_charts ($nom_fichier,$largeur,$hauteur,$alt);
243                       
244                        $compteur_charts ++;
245                       
246                       
247                        $insert = "\n\nSPIP_INSERT_CHARTS_$compteur_charts-\n\n";
248
249                        $GLOBALS["charts_cache"][$compteur_charts] = $flash;
250                       
251                       
252                        $texte = str_replace($regs[0], $insert, $texte);
253                       
254                       
255                       
256                }
257        }
258
259        return $texte;
260}
261
262
263
264function pb_charts_retablir_script($texte) {
265        for ($i=1; $i<=count($GLOBALS["charts_cache"]); $i++) {
266                $texte = ereg_replace("(<p class=\"spip\">)?SPIP_INSERT_CHARTS_$i-(</p>)?",$GLOBALS["charts_cache"][$i],$texte);
267        }
268
269        return $texte;
270
271}
272
273
274
275?>
Note: See TracBrowser for help on using the repository browser.