Subversion Repositories Applications.papyrus

Rev

Rev 1081 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
448 ddelon 1
<?php
2
 
3
//vim: set expandtab tabstop=4 shiftwidth=4:
4
// +-----------------------------------------------------------------------------------------------+
5
// | PHP version 4.0                                                                               |
6
// +-----------------------------------------------------------------------------------------------+
7
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group                                      |
8
// +-----------------------------------------------------------------------------------------------+
9
// | This source file is subject to version 2.0 of the PHP license,                                |
10
// | that is bundled with this package in the file LICENSE, and is                                 |
11
// | available at through the world-wide-web at                                                    |
12
// | http://www.php.net/license/2_02.txt.                                                          |
13
// | If you did not receive a copy of the PHP license and are unable to                            |
14
// | obtain it through the world-wide-web, please send a note to                                   |
15
// | license@php.net so we can mail you a copy immediately.                                        |
16
// +-----------------------------------------------------------------------------------------------+
17
/**
18
* Fichier regroupant toutes les classes de la carto
19
*
20
*Toutes les classe de la carto sont disponibles dans ce fichier.
21
*
22
*@package carto
23
//Auteur original :
24
*@author        Nicolas MATHIEU
25
//Autres auteurs :
26
*@author        Alexandre GRANIER <alexandre@tela-botanica.org>
27
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
28
*@copyright     Tela-Botanica 2000-2003
29
*@version       01 juillet 2002
30
// +-----------------------------------------------------------------------------------------------+
31
//
1139 alexandre_ 32
// $Id: lib.carto.php,v 1.6 2006-12-12 10:37:45 alexandre_tb Exp $
448 ddelon 33
// FICHIER : $RCSfile: lib.carto.php,v $
1139 alexandre_ 34
// AUTEUR  : $Author: alexandre_tb $
35
// VERSION : $Revision: 1.6 $
36
// DATE    : $Date: 2006-12-12 10:37:45 $
448 ddelon 37
//
38
// +-----------------------------------------------------------------------------------------------+
39
// A FAIRE :
40
// 1.-Rendre cette classe indépendante de l'arborescence du site.
41
//      On trouve encore des urls ou des chemins d'accé au fichier codé en dur dans l'appli
42
//      Il faudrait pouvoir les paramétrés dans la classe.
43
// 2.- Supprimer l'attribut $this->historiques qui doit être devenu complétement obscoléte et le
44
//      remplacer par $this->historique_cartes
45
// 3.- Renomer $this->liste_zone_carte en quelque chose de plus parlant...
46
*/
47
//Inclusion d'un autre fichier de librairie
48
include_once 'lib.couleur.php';
49
 
50
//Sert seulement en interne pour le débogage des requetes SQL
51
$NOM_FICHIER = 'lib.carto.php';
52
 
53
//==================================================================================================
54
// La classe Carto_HistoriqueCarte sert à pouvoir afficher les liens avec les carte précédentes
55
// On accède à cette fonctionnalité grâce à la méthode afficherHistoriqueCarte()
56
// L'objet Carto_HistoriqueCarte recoit en parametres :
57
//      -la généalogie du niveau ou on en est (du type monde*europe*france )
58
//      -l'url du document
59
//      -en option :    *le caractere de separation (par defaut c'est >)
60
//                      *la classe css des liens
61
//===================================================================================================
62
 
63
class Carto_HistoriqueCarte
64
{
65
    var $historique;
66
    var $url;
67
    var $caractere_separation;
68
    var $class_css;
69
    var $nom;
70
 
71
    function Carto_HistoriqueCarte ($objet_carte, $caractere = '&gt;', $class = '')
72
    {
73
        global $GS_GLOBAL;
74
 
75
        $this->historique = $objet_carte->historique;
76
        $this->url = $objet_carte->url;
77
        $this->nom = $objet_carte->nom;
78
        unset ($objet_carte);
79
        $this->caractere_separation = $caractere;
80
        $this->class_css = $class;
81
    }//Fin du constructeur Carto_HistoriqueCarte().
82
 
83
    function afficherHistoriqueCarte ()
84
    {
612 florian 85
        $res='<div style="float:left;">'.INS_ECHELLE;
448 ddelon 86
        $tabonglet = explode ('*', $this->historique);
87
        $tabnom = explode ('*', $this->nom);
88
        foreach ($tabonglet as $key=>$value) {
89
            if ($key == 0) {
90
                $chemin = $value;
91
            }
92
            else {
93
                $chemin .= '*'.$value;
94
            }
95
 
96
            $res.= '<a ';
97
 
98
            if (!empty($this->class_css)) {
99
                $res.='class="'.$this->class_css.'" ';
100
            }
1139 alexandre_ 101
            $GLOBALS['ins_url']->addQueryString('historique_cartes', $chemin);
102
            $res.='href="'.$GLOBALS['ins_url']->getURL().'">&nbsp;'.$this->caractere_separation.'&nbsp;'.$tabnom[$key].'</a>';
448 ddelon 103
        }
612 florian 104
        $res.= '</div>'."\n";
448 ddelon 105
        return $res;
106
 
107
    }//Fin de la méthode afficherHistoriqueCarte().
108
 
109
}//Fin de la classe Carto_HistoriqueCarte.
110
 
111
//================================================================================================
112
//La classe Action sert a definir les paramètres nécessaires pour recueillir l'action a réaliser en
113
// fonction des coordonnées du point, du masque et du niveau.
114
//Elle remplace la fonction get_cartoAction() que l'on peut trouver dans le fichier carto_commun.php
115
//des différentes application utilisant la carto.
116
// Les champs a renseigner sont les suivants :
117
//   -le nom de la table ($nom_table_carto_action) où sont stokée les actions à réalisées
118
//      en fonction des couleurs
119
//   -les 5 champs principaux de la table :
120
//      -l'identifiant de la zone géographique (un nom, un numéro ou une abréviation) -> $nom_champ_cle
121
//      -les couleurs -> $nom_champ_rouge, $nom_champ_vert, $nom_champ_bleu
122
//      -l'action -> $nom_champ_action
123
// Elle possède une seule méthode : get_cartoAction().
124
//================================================================================================
125
 
126
class Carto_Action
127
{
128
        var $_table_zone_geo;
129
        var $_id_zone_geo_zone;
130
        var $_rouge;
131
        var $_vert;
132
        var $_bleu;
133
        var $_table_action;
134
        var $_id_carte_action;
135
        var $_id_zone_geo_action;
136
        var $_type_zone_geo_action;
137
        var $_action;
138
        var $_id_carte_destination;
139
 
140
    function Carto_Action ($table_zone_geo, $zone_chp_id_zone, $chp_rouge,
141
                                    $chp_vert, $chp_bleu, $table_carto_action, $action_chp_id_carte, $action_chp_id_zone,
142
                                    $action_chp_type_zone, $chp_action, $chp_destination)
143
    {
144
        $this->_table_zone_geo = $table_zone_geo;
145
        $this->_id_zone_geo_zone = $zone_chp_id_zone;
146
        $this->_rouge = $chp_rouge;
147
        $this->_vert = $chp_vert;
148
        $this->_bleu = $chp_bleu;
149
        $this->_table_action = $table_carto_action;
150
        $this->_id_carte_action = $action_chp_id_carte;
151
        $this->_id_zone_geo_action = $action_chp_id_zone;
152
        $this->_type_zone_geo_action = $action_chp_type_zone;
153
        $this->_action = $chp_action;
154
        $this->_id_carte_destination = $chp_destination;
155
    }
156
 
157
    //**********************************************************************************************************
158
    // Méthode get_cartoAction($imageX, $imageY, $masque, $id_carte)
159
 
160
    // Elle renvoit l'action a réaliser.
161
    // Nous passons les paramètres suivant :
162
    //      -les coordonnees du point ($imageX et $imageY)
163
    //      -le masque pour recuperer la couleur ($masque)
164
    //      -l'identifiant de la carte où nous nous trouvons ($id_carte)
165
    //**********************************************************************************************************
166
 
167
    function _consulterActionImage($imageX, $imageY, $masque, $id_carte)
168
    {
169
        // Nous récuperons les valeurs RVB de la couleur sur laquelle l'utilisateur a cliqué.
170
        // Les valeurs RVB sont stockées dans le tableau associatif $valeurs_RVB.
171
 
172
        $masque_courant = imagecreatefrompng($masque);
173
        $index_couleur = imagecolorat($masque_courant,$imageX,$imageY);
174
        $valeurs_RVB = imagecolorsforindex($masque_courant, $index_couleur);
175
 
176
        // Nous effectuons une requete dans la table carto_ACTION pour récupérer la valeur
177
        // du champ "action", afin de savoir quoi faire.
178
        $requete =
179
        'SELECT '.$this->_action.', '.$this->_id_carte_destination.', '.$this->_id_zone_geo_action.
180
        ' FROM '.$this->_table_action.', '.$this->_table_zone_geo.
181
        ' WHERE '.$this->_table_zone_geo.'.'.$this->_rouge.' = '.$valeurs_RVB['red'].
182
        ' AND '.$this->_table_zone_geo.'.'.$this->_vert.' = '.$valeurs_RVB['green'].
183
        ' AND '.$this->_table_zone_geo.'.'.$this->_bleu.' = '.$valeurs_RVB['blue'].
184
        ' AND '.$this->_table_action.'.'.$this->_id_zone_geo_action.' = '.$this->_table_zone_geo.'.'.$this->_id_zone_geo_zone.
185
        ' AND '.$this->_table_action.'.'.$this->_id_carte_action.' = "'.$id_carte.'"';
186
 
187
        $resultat=mysql_query($requete) or die('
188
            <H2 style="text-align: center; font-weight: bold; font-size: 26px;">Erreur de requête</H2>'.
189
            '<b>Requete : </b>'.$requete.
190
            '<br/><br/><b>Erreur : </b>'.mysql_error());
191
 
192
        $ligne = mysql_fetch_object ($resultat);
193
 
194
        if (mysql_num_rows ($resultat) != 0) {
195
 
196
            $chp_id_zone_geo = $this->_id_zone_geo_action;
197
            $chp_action = $this->_action;
198
            $chp_id_carte_destination = $this->_id_carte_destination;
199
 
200
            $action['id_zone_geo'] = $ligne->$chp_id_zone_geo;
201
            $action['type_action'] = $ligne->$chp_action;
202
            $action['id_carte_destination'] = $ligne->$chp_id_carte_destination;
203
 
204
            return $action;
1139 alexandre_ 205
        } else {
206
        	return array ('type_action' => 'Recharger');
448 ddelon 207
        }
208
    }//Fin de la méthode _consulterActionImage().
209
 
210
    //**********************************************************************************************************
211
    // Méthode _consulterActionListe($id_zone_carte, $id_carte)
212
 
213
    // Elle renvoit l'action a réaliser.
214
    // Nous passons les paramètres suivant :
215
    //      -l'identifiant de la zone que l'on veut afficher
216
    //      -l'identifiant de la carte où nous nous trouvons ($id_carte)
217
    //**********************************************************************************************************
218
 
219
    function _consulterActionListe($id_zone_carte, $id_carte)
220
    {
221
        // Nous effectuons une requete dans la table carto_ACTION pour récupérer la valeur
222
        // du champ "action", afin de savoir quoi faire.
223
        $requete =
224
        'SELECT '.$this->_action.', '.$this->_id_carte_destination.', '.$this->_id_zone_geo_action.
225
        ' FROM '.$this->_table_action.', '.$this->_table_zone_geo.
226
        ' WHERE '.$this->_table_action.'.'.$this->_id_zone_geo_action.' = '.$this->_table_zone_geo.'.'.$this->_id_zone_geo_zone.
227
        ' AND '.$this->_table_zone_geo.'.'.$this->_id_zone_geo_zone.' = "'.$id_zone_carte.'"'.
228
        ' AND '.$this->_table_action.'.'.$this->_id_carte_action.' = "'.$id_carte.'"';
229
 
230
        $resultat=mysql_query($requete) or die('
231
            <H2 style="text-align: center; font-weight: bold; font-size: 26px;">Erreur de requête</H2>'.
232
            '<b>Requete : </b>'.$requete.
233
            '<br/><br/><b>Erreur : </b>'.mysql_error());
234
 
235
        $ligne = mysql_fetch_object ($resultat);
236
 
237
        if (mysql_num_rows ($resultat) != 0) {
238
 
239
            $chp_id_zone_geo = $this->_id_zone_geo_action;
240
            $chp_action = $this->_action;
241
            $chp_id_carte_destination = $this->_id_carte_destination;
242
 
243
            $action['id_zone_geo'] = $ligne->$chp_id_zone_geo;
244
            $action['type_action'] = $ligne->$chp_action;
245
            $action['id_carte_destination'] = $ligne->$chp_id_carte_destination;
246
 
247
            return $action;
248
        }
249
    }//Fin de la méthode get_cartoAction().
250
}//Fin de la classe Carto_Action.
251
 
252
//================================================================================================
253
// L'objet carte est l'objet principal de la carto. C'est lui possede qui possède les methodes
254
//pour colorier les cartes.
255
// Il faut lui donner les parametres suivants :
256
//      -le nom de la premier carte ($id).
257
//      -le nom du masque ($masque).
258
//      -le nom du fond de carte a colorier ($fond).
259
//      -le tableau $info_table_couleur : il contient les renseignements concernant la table des couleurs ainsi
260
//       qu'un autre tableau dans lequel figure le nombre d'elements par zone.
261
// L'objet comporte deux methodes principales :
262
//      -'ajouterFils()' qui permet d'ajouter les cartes de niveau inferieur.
263
//      -'donnerFormulaireImage()' qui lance l'action a faire en fonction de l'action de l'utilisateur.
264
// Il faut aussi penser a donner directement le champs url.
265
//================================================================================================
266
 
267
class Carto_Carte
268
{
269
    /*|=============================================================================================|*/
270
    /*|                                LES ATTRIBUTS DE LA CLASSE                                   |*/
271
    /*|---------------------------------------------------------------------------------------------|*/
272
    var $id;
273
    var $_id_zone_geo_carte;
274
    var $nom;
275
    var $masque;
276
    var $fond;
277
    var $chemin;
278
    var $image;
279
    var $fils;
280
    var $url;
281
    var $_info_table_zg;
282
    var $filiation;
283
    var $image_x;
284
    var $image_y;
285
    var $historique_cartes;
286
    var $liste_zone_carte;
287
    var $historique;
288
    // La couleur dominante ( $maxiRVB ), la couleur la plus claire ($miniRVB) et la couleur
289
    // intermédiaire précédant le maximum ( $mediumRVB ) au cas ou il y aurait un trop grand
290
    //ecart entre les deux plus grandes valeurs.
291
    var $_zeroR;
292
    var $_zeroV;
293
    var $_zeroB;
294
    var $_miniR;
295
    var $_miniV;
296
    var $_miniB;
297
    var $_mediumR;
298
    var $_mediumV;
299
    var $_mediumB;
300
    var $_maxiR;
301
    var $_maxiV;
302
    var $_maxiB;
303
    //Le type de formule mathématique permettant de colorier la carte
304
    var $_formule_coloriage;
305
    //L'action à réaliser
306
    var $_action;
307
 
308
    /*|=============================================================================================|*/
309
    /*|                                LE CONSTRUCTEUR DE LA CLASSE                                 |*/
310
    /*|---------------------------------------------------------------------------------------------|*/
311
 
312
    function Carto_Carte ($id, $id_zone_geo_carte, $nom, $masque, $fond, $chemin, $info_table)
313
    {
314
        $this->id = $id;
315
        $this->_id_zone_geo_carte = $id_zone_geo_carte;
316
        $this->nom = $nom;
317
        $this->masque = $chemin.$masque;
318
        $this->fond = $chemin.$fond;
319
        $this->chemin = $chemin;
320
        $this->_info_table_zg = $info_table;
321
 
1139 alexandre_ 322
 
323
        $this->_action = new Carto_Action($info_table['nom_table_zone'],$info_table['nom_chp_id_zone'],
324
        									$info_table['nom_chp_rouge'], $info_table['nom_chp_vert'], $info_table['nom_chp_bleu'],
325
                                                            'carto_ACTION', 'CA_ID_Carte', 'CA_ID_Zone_geo', 'CA_Type_zone',
326
											'CA_Action', 'CA_ID_Carte_destination');
448 ddelon 327
        $this->fils = array();
328
        $this->filiation = $id;
329
        $this->historique_cartes = '';
330
        $this->liste_zone_carte = '';
331
        $this->definirCouleurs();
332
        $this->definirFormuleColoriage();
333
    }
334
 
335
    /*|=============================================================================================|*/
336
    /*|                                LES METHODES PUBLIQUES                                       |*/
337
    /*|---------------------------------------------------------------------------------------------|*/
338
    function definirCouleurs (
339
        $couleur_zero_R = '255', $couleur_zero_V = '255', $couleur_zero_B = '255',
340
        $couleur_mini_R = '210', $couleur_mini_V = '230', $couleur_mini_B = '210',
341
        $couleur_medium_R  = '92', $couleur_medium_V = '181', $couleur_medium_B = '92',
342
        $couleur_maxi_R = '0', $couleur_maxi_V = '127', $couleur_maxi_B = '0')
343
    {
344
        $this->_zeroR = $couleur_zero_R;
345
        $this->_zeroV = $couleur_zero_V;
346
        $this->_zeroB = $couleur_zero_B;
347
        $this->_miniR = $couleur_mini_R;
348
        $this->_miniV = $couleur_mini_V;
349
        $this->_miniB = $couleur_mini_B;
350
        $this->_mediumR = $couleur_medium_R;
351
        $this->_mediumV = $couleur_medium_V;
352
        $this->_mediumB = $couleur_medium_B;
353
        $this->_maxiR = $couleur_maxi_R;
354
        $this->_maxiV = $couleur_maxi_V;
355
        $this->_maxiB = $couleur_maxi_B;
356
    }
357
 
358
    function definirFormuleColoriage ($nomFormuleColoriage = 'defaut')
359
    {
360
        $this->_formule_coloriage = $nomFormuleColoriage;
361
    }
362
 
363
    //********************************************************************************************************
364
    // La méthode donnerImageSimple ($objet) permet de récupérer une image non cliquable.
365
    //*********************************************************************************************************
366
 
367
    function donnerImageSimple ($objet)
368
    {
369
        $nom_fichier_image = $this->_donnerIdUnique();
370
        $objet->_lancerColoriage('', $nom_fichier_image);
371
        $res = '<img src="'.INS_CHEMIN_APPLI.'/bibliotheque/lib.carto.extractimg.php?fichier='.$nom_fichier_image.'" alt="image.png">';
372
        return $res;
373
    }
374
 
375
    //********************************************************************************************************
376
    // La methode ajouterFils() est essentielle. Elle permet d'ajouter toutes les sous cartes voulues.
377
    // Il faut lui indiquer, comme a la carte du niveau du dessus, son nom, le masque, le fond et info_table_couleur.
378
    // On a ainsi une inclusion d'objets les uns dans les autres.
379
    //*********************************************************************************************************
380
 
381
    function ajouterFils ($id, $id_zone_geo_carte, $nom, $masque, $fond, $info_table)
382
    {
383
        $this->fils[$id] = new Carto_Carte ($id, $id_zone_geo_carte, $nom, $masque, $fond, $this->chemin, $info_table);
384
        //Si on ajoute à la carte du monde comme fils celle de l'europe, alors
385
        //on aura comme valeur pour $this->filiation de la carte d'europe : monde*europe
386
        $this->fils[$id]->filiation = $this->filiation.'*'.$id;
387
        $this->fils[$id]->url = $this->url;
388
        //Si on ajoute à la carte du monde dont le nom est 'Monde' comme fils celle de l'europe,
389
        //dont le nom est 'Europe', alors on aura comme valeur pour $this->nom de la carte d'europe : Monde*Europe
390
        $this->fils[$id]->nom = $this->nom.'*'.$nom;
391
        $this->fils[$id]->historique_cartes = $this->historique_cartes;
392
    }
393
 
394
    //*********************************************************************************************************
395
    // La methode donnerFormulaireImage() est la methode principale de la carto. C'est elle qui gere ce qu'il y a faire en
396
    // fonction de l'action de l'utilisateur.
397
    // Trois cas se distinguent :
398
    //      -soit l'utilisateur a clique sur un point de la carte.
399
    //      -soit il a clique sur un des liens que l'on a afficher avec la méthode afficherHistoriqueCarte de l'objet Carto_HistoriqueCarte.
400
    //      -soit il a sélectionné une zone géographique dans la liste déroulante.
401
    // Elle renvoit a la fin:
402
    //      -soit une nouvelle carte coloriée
403
    //      -soit false.
404
    //**********************************************************************************************************
405
 
406
    function donnerFormulaireImage ()
407
    {
408
        $res = '';
409
 
410
        // Nous commençons par tester tout d'abords si nous venons d'une autre carte. Pour cela nous vérifions,
411
        // si les attributs $this->image_x et $this->image_y de la classe Carte existe ou ne sont pas null.
412
        // La carte est une image appelée par une balise <input type="image"> et non par une balise classique <img>.
413
        // Ansi, lorsqu'on clique sur la carte le formulaire appelle (via l'url du formulaire) l'application
414
        // utilisant la classe carte et lui renvoit deux variables contenant les coordonnées x et y du clic.
415
        // L'application instancie à nouveau les objets cartes mais cette fois ci la carte affichée dépendra des
416
        // informations founit par une table de la base de données.
417
        // La classe carto_action instanciée dans l'application utilisant la classe carte fournit les noms
418
        // des champs et celui de la table contenant les valeur RVB de chaque zone des cartes, l'identifiant
419
        // de la zone et l'action à entreprendre pour la zone conssidérée.
420
        // La méthode imgform() utilise la méthode get_cartoAction() de l'objet Carto_Action pour connaître
421
        // en fonction des coordonnées du clic l'action à entreprendre.
612 florian 422
 
448 ddelon 423
        if (isset ($this->image_x) && ($this->image_x != '') && isset ($this->image_y) && ($this->image_y != '')) {
424
            // on regarde ici si l'on a pas un objet de plus bas niveau présent dans la variable de session carte
425
            //a charger a la place de l'objet de plus haut niveau
426
 
427
            $var_session_retour = $_SESSION['carte'] ;
428
 
429
            if ($var_session_retour) {
430
                $image_x = $this->image_x;
431
                $image_y = $this->image_y;
432
                $liste_zone_carte = $this->liste_zone_carte;
433
                // Nous chargons alors l'ojet approprié en descendant grâce a la généalogie
434
 
435
                $historique_cartes = explode('*',$this->historique_cartes);
436
                foreach ($historique_cartes as $key => $value) {
437
                    if ($key != 0) {
438
                        $this = $this->fils[$value];
439
                    }
440
                }
441
                $this->image_x = $image_x;
442
                $this->image_y = $image_y;
443
                $this->liste_zone_carte = $liste_zone_carte;
444
                unset ($_SESSION['carte']) ;
445
            }
446
 
447
            // on regarde qu'est-ce qu'on doit faire grace a la methode _consulterAction() de l'objet Carto_Action
448
 
449
            $action = $this->_action->_consulterActionImage($this->image_x, $this->image_y, $this->masque, $this->id);
1139 alexandre_ 450
 
448 ddelon 451
            // Nous distinguons 2 cas :
452
            //le cas ou il faut afficher une nouvelle carte ... :
453
            if ($action['type_action'] == 'Aller_a') {
454
 
455
                $id_carte_destination = $action['id_carte_destination'] ;
456
                $this->fils[$id_carte_destination]->liste_zone_carte = $this->liste_zone_carte;
805 florian 457
                if (INS_AFFICHE_ZONE_ROUGE) {
458
                	$res .= ''.$this->fils[$id_carte_destination]->_donnerListeZoneCarte()."<br />\n";
459
                }
448 ddelon 460
                $res .= '<input type="image" src="';
461
                $id_image = $this->_donnerIdUnique();
462
                $this->fils[$id_carte_destination]->_lancerColoriage($id_image);
463
                $obj = serialize($this->fils[$id_carte_destination]);
464
                $_SESSION['carte'] = $obj ;
465
                $this->historique = $this->fils[$id_carte_destination]->filiation;
466
                $this->id = $this->fils[$id_carte_destination]->id;
467
                $this->nom = $this->fils[$id_carte_destination]->nom;
468
            }
469
            //Dans le cas où l'on veut rappeler une nouvelle carte, il se peut que la nouvelle carte à rappeler
470
            //soit la même que précédement.
471
            //Cette possibilité peut se présenter quand on clique sur un zone blanche d'une carte (càd dans la mer)
472
            //Là, on recharge la carte précédente :
473
            elseif ($action['type_action'] == 'Recharger') {
805 florian 474
                if (INS_AFFICHE_ZONE_ROUGE) {
475
                	$res .= ''.$this->_donnerListeZoneCarte()."<br />\n";
476
                }
448 ddelon 477
                $res .= '<input type="image" src="';
478
                $id_image = $this->_donnerIdUnique();
479
                $this->_lancerColoriage($id_image);
480
                $obj = serialize($this);
481
                $_SESSION['carte'] = $obj ;
482
                $this->historique = $this->filiation;
483
            }
484
            // ... et le cas ou il faut lancer le dernier niveau
485
            else if ($action['type_action'] == 'Stop') {
486
                unset ($_SESSION['carte']) ;
487
                $this->historique = $this->filiation.'*'.$action['id_zone_geo'];
488
                $obj = serialize($this);
489
                $_SESSION['carte'] = $obj ;
490
                return false;
491
            }
492
        }
493
        elseif ($this->liste_zone_carte != '') {
494
            $liste_zone_carte = $this->liste_zone_carte;
495
            $historique_cartes = explode('*',$this->historique_cartes);
496
            foreach ($historique_cartes as $key => $value) {
497
                if ($key != 0) {
498
                    $this = $this->fils[$value];
499
                }
500
            }
501
            $this->liste_zone_carte = $liste_zone_carte;
805 florian 502
            if (INS_AFFICHE_ZONE_ROUGE) {
503
            	$res .= ''.$this->_donnerListeZoneCarte($this->liste_zone_carte)."<br />\n";
504
            }
448 ddelon 505
            $res .= '<input type="image" src="';
506
            $id_image = $this->_donnerIdUnique();
507
            $this->_lancerColoriage($id_image, '', $this->liste_zone_carte);
508
            $this->historique = $this->historique_cartes;
509
            $obj = serialize($this);
510
            $_SESSION['carte'] = $obj ;
511
        }
512
        // On teste maintenant si l'on vient d'un lien. Si c'est le cas on a recu un argument
513
        // qui nous donne la "genealogie" de la carte que l'on doit afficher
514
        else if ($this->historique_cartes) {
515
            // Nous chargons alors l'ojet approprié en descendant grâce a la généalogie
516
            $historique_cartes = explode('*',$this->historique_cartes);
1139 alexandre_ 517
 
448 ddelon 518
            foreach ($historique_cartes as $key => $value) {
519
                if ($key != 0) {
520
                    $this = $this->fils[$value];
521
                }
522
            }
523
            // une foit que l'on a charge le bon objet nous le colorions
805 florian 524
            if (INS_AFFICHE_ZONE_ROUGE) {
525
            	$res .= ''.$this->_donnerListeZoneCarte()."<br />\n";
526
            }
448 ddelon 527
            $res .= '<input type="image" src="';
528
            $id_image = $this->_donnerIdUnique();
529
            $this->_lancerColoriage($id_image);
530
            $this->historique = $this->historique_cartes;
531
            $obj = serialize($this);
532
            $_SESSION['carte'] = $obj ;
533
        }
534
        // Enfin si on ne vient pas d'une carte ou d'un lien c'est que l'on vient de l'onglet carto du menu
535
        // et on affiche alors la premiere carte
536
        else {
537
            unset ($_SESSION['carte']) ;
805 florian 538
            if (INS_AFFICHE_ZONE_ROUGE) {
539
            	$res .= ''.$this->_donnerListeZoneCarte()."<br />\n";
540
            }
448 ddelon 541
            $res .= '<input type="image" src="';
542
            $id_image = $this->_donnerIdUnique();
543
            $this->_lancerColoriage($id_image);
544
            $this->historique = $this->id;
545
            $obj = serialize($this);
546
 
547
            $_SESSION['carte'] = $obj ;
548
        }
549
        $res .= INS_CHEMIN_APPLI.'/bibliotheque/lib.carto.extractimg.php?fichier='.$this->id.$id_image.'"';
550
        $res .= ' name="image" onmouseover="javascript:show(\'d\');" onmouseout="javascript:show(\'d\');" />'."\n";
612 florian 551
        $res .= '<input type="hidden" name="historique_cartes" value="'.$this->historique.'" />'."\n";
448 ddelon 552
        return $res;
553
    }
554
 
555
    /*|=============================================================================================|*/
556
    /*|                                LES METHODES PRIVEES                                         |*/
557
    /*|---------------------------------------------------------------------------------------------|*/
558
    function _donnerListeZoneCarte($zone_par_defaut = '')
559
    {
560
        $retour = '';
561
 
562
        $requete =
563
                    'SELECT '.$this->_info_table_zg['nom_chp_id_zone'].', '.$this->_info_table_zg['nom_chp_nom_zone'].
564
                    ' FROM '.$this->_info_table_zg['nom_table_zone'];
1139 alexandre_ 565
        if ($this->_info_table_zg['nom_chp_zone_sup'] != '' && $this->_id_zone_geo_carte != ''){
448 ddelon 566
            if(ereg("[a-z]+",$this->_id_zone_geo_carte)){
567
                $requete .=
568
                    ' WHERE '.$this->_info_table_zg['nom_chp_zone_sup'].' = "'.$this->_id_zone_geo_carte.'"';
569
            }
570
            else{
571
                $requete .=
572
                    ' WHERE '.$this->_info_table_zg['nom_chp_zone_sup'].' = '.$this->_id_zone_geo_carte;
573
            }
574
        }
575
        $requete .=
576
                    ' ORDER BY '.$this->_info_table_zg['nom_chp_nom_zone'].' ASC';
1139 alexandre_ 577
		$resultat = $GLOBALS['ins_db']->query ($requete) ;
578
		if (DB::isError($resultat)) {
579
        	echo  BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete) ;
580
    	}
581
 
448 ddelon 582
        $i=0;
583
 
612 florian 584
        $retour = '<select name="liste_zone_carte" style="float:right;" onchange="javascript:this.form.submit();">'."\n";
448 ddelon 585
        $retour .= '<option value="">'.INS_VISUALISER_ZONE.'</option>'."\n";
586
 
587
        $nom_chp_nom_zone = $this->_info_table_zg['nom_chp_nom_zone'];
588
        $nom_chp_id_zone = $this->_info_table_zg['nom_chp_id_zone'];
589
 
1139 alexandre_ 590
        while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
448 ddelon 591
            if ($zone_par_defaut == $ligne->$nom_chp_id_zone){
592
                $retour .= '<option value="'.$ligne->$nom_chp_id_zone.'" selected="selected">'.$ligne->$nom_chp_nom_zone.'</option>'."\n";
593
            }
594
            else {
595
                $retour .= '<option value="'.$ligne->$nom_chp_id_zone.'">'.$ligne->$nom_chp_nom_zone.'</option>'."\n";
596
            }
597
            $i++;
598
        }
599
 
600
        $retour .= '</select>'."\n";
601
 
602
        return $retour;
603
    }
604
    //==============================================================================
605
    // METHODE _lancerColoriage()
606
    //
607
    // Elle lance le coloriage de l'image.
608
    // Elle est lancée toute seule par la méthode donnerFormulaireImage().
609
    // Les informations qui lui sont necessaires sont déjà données à l'objet carte (fond, info_table_couleur).
610
    //==============================================================================
611
 
612
    function _lancerColoriage ($id_image = '_00', $nom_fichier = '', $id_zone_a_reperer = '')
613
    {
642 alexandre_ 614
 
448 ddelon 615
        $this->image = imagecreatefrompng($this->fond);
642 alexandre_ 616
 
448 ddelon 617
        $this->_colorierImage ($this->image, $this->_info_table_zg['nom_table_zone'], $this->_info_table_zg['nom_chp_id_zone'], $this->_info_table_zg['nom_chp_rouge'],
618
                                        $this->_info_table_zg['nom_chp_vert'], $this->_info_table_zg['nom_chp_bleu'], $this->_info_table_zg['nom_chp_zone_sup'],
619
                                        $this->_info_table_zg['tableau_valeurs_zone'], $id_zone_a_reperer) ;
620
        if ($nom_fichier != '') {
621
            imagepng(&$this->image, INS_CHEMIN_APPLI.'bibliotheque/tmp/carto/'.$nom_fichier.'.png');
642 alexandre_ 622
 
448 ddelon 623
            //$this->image = imagepng(&$this->image);
624
        }
625
        else {
626
            imagepng(&$this->image, INS_CHEMIN_APPLI.'bibliotheque/tmp/carto/'.$this->id.$id_image.'.png');
627
            //imagepng(&$this->image);
628
        }
629
    }
630
 
631
    //==============================================================================
632
    // METHODE _colorierImage()
633
    //
634
    // Elle réalise le coloriage de l'image.
635
    //==============================================================================
636
 
637
    function _colorierImage (&$image_fond, $table_zone_geo, $chp_id_zone_couleur, $chp_rouge, $chp_vert, $chp_bleu, $chp_zone_sup, $tableau_valeurs_zone, $id_zone_a_reperer)
638
    {
639
        //----------------------------------------------------------------------------
640
        // Cherche les valeurs RVB de la couleur de chaque zone géographique et les rentre dans
641
        //un tableau d'objets Carto_InformationCouleur (voir la description de la classe ci-dessus.
642
 
643
        $requete_01 =
644
                    'SELECT *'.
645
                    ' FROM '.$table_zone_geo;
1139 alexandre_ 646
        if ($chp_zone_sup != '' && $this->_id_zone_geo_carte != ''){
448 ddelon 647
            if(ereg("[a-z]+",$this->_id_zone_geo_carte)){
648
                $requete_01 .=
649
                    ' WHERE '.$chp_zone_sup.' = "'.$this->_id_zone_geo_carte.'"';
650
            }
651
            else{
652
                $requete_01 .=
653
                    ' WHERE '.$chp_zone_sup.' = '.$this->_id_zone_geo_carte;
654
            }
655
        }
656
        $resultat_01 = mysql_query ($requete_01) or die('
657
            <H2 style="text-align: center; font-weight: bold; font-size: 26px;">Erreur de requête</H2>'.
658
            '<b>Requete : </b>'.$requete_01.
659
            '<br/><br/><b>Erreur : </b>'.mysql_error());
660
        $i=0;
661
        $attachments = array();
662
        while ($ligne_01 = mysql_fetch_object ($resultat_01)) {
663
            $attachments[$i] = new Carto_InformationCouleur ($ligne_01->$chp_id_zone_couleur, $ligne_01->$chp_rouge, $ligne_01->$chp_vert, $ligne_01->$chp_bleu);
664
            $i++;
665
        }
666
 
667
        //Nous libérons toute la mémoire associée à l'identifiant de résultat.
668
        mysql_free_result ($resultat_01);
669
 
670
        //----------------------------------------------------------------------------
671
        // On realide l'association entre l'index des couleurs et la zone de meme couleur
672
 
673
        $attachments = $this->_construireAssociationIndexZone ($image_fond, $attachments);
674
 
675
        //----------------------------------------------------------------------------
676
        //Dans l'application qui utilise la classe carte, nous avons instancié un tableau
677
        //associatif qui contient en clé l'identifiant d'une zone géographique et en valeur
678
        //un nombre (qui peut-être un nombre d'inscrit, d'institutions, de taxons...).
679
        // Nous récupérons ci-dessous la valeur minimum autre que 0 présente dans ce tableau
680
        //puis une valeur conscidérée comme maximum
681
 
682
        if (!is_array($tableau_valeurs_zone)) {
683
            $mini = 0;
684
            $medium = 0;
685
            $maxi = 0;
686
            $nbre_valeurs = 0;
687
        }
688
        else {
689
            if (count($tableau_valeurs_zone) == 0) {
690
                $mini=0;
691
                $medium = 0;
692
                $maxi=0;
693
            }
694
            else {
695
                $i=0;
696
                foreach ($tableau_valeurs_zone as $cle => $valeur) {
697
                    //Nous recherchons le minimum, le maximum et le la valeur médium juste au dessous du maximum.
698
                    if ($valeur != 0) {
699
                        $tablo_valeurs[$i] = $valeur;
700
                        $i++;
701
                    }
702
                }
703
                //Nombre d'entrées dans le tableau de valeurs non nulles :
704
                $nbre_valeurs = count($tablo_valeurs);
705
                $somme_valeurs = array_sum($tablo_valeurs);
706
                $tablo_frequences = array_count_values($tablo_valeurs);
707
                $nbre_frequences = count($tablo_frequences);
708
                if ($nbre_valeurs > 0){
709
                    //Nous trions le tableau dans l'ordre croissant :
710
                    sort($tablo_valeurs);
711
                    //Nous récupérons la valeur la plus petite :
712
                    $mini = $tablo_valeurs[0];
713
                    $maxi = $tablo_valeurs[$nbre_valeurs-1];
714
                    isset($tablo_valeurs[$nbre_valeurs-2]) ? $medium = $tablo_valeurs[$nbre_valeurs-2] : $medium = 0;
715
                    $moyenne = $somme_valeurs/$nbre_valeurs;
716
                    $ecart_au_carre_moyen = 0;
717
                    for ($i = 0; $i < $nbre_valeurs; $i++) {
718
                        $ecart_au_carre_moyen += pow(($tablo_valeurs[$i] - $moyenne), 2);
719
                    }
720
                    $variance = $ecart_au_carre_moyen/$nbre_valeurs;
721
                    $ecart_type = sqrt($variance);
722
 
723
                    $moyenne = round($moyenne, 0);
724
                    $variance = round($variance, 0);
725
                    $ecart_type = round($ecart_type, 0);
726
 
727
                    /*echo 'Nombre de valeurs : '.$nbre_valeurs.'<br>';
728
                    echo 'Nombre de frequences : '.$nbre_frequences.'<br>';
729
                    echo 'Moyenne : '.$moyenne.'<br>';
730
                    echo 'Variance : '.$variance.'<br>';
731
                    echo 'Ecart-type : '.$ecart_type.'<br>';
732
                    echo 'Formule de coloriage : '.$this->_formule_coloriage.'<br>';
733
                    echo "mini : $mini medium : $medium maxi : $maxi<br/>";
734
            */
735
                }
736
            }
737
        }
738
 
739
        //----------------------------------------------------------------------------
740
        // Nous réalisons le coloriage de toutes les zones :
741
 
742
        $requete_03 =
743
            "SELECT $chp_id_zone_couleur ".
744
            "FROM $table_zone_geo";
745
 
746
        $resultat_03 = mysql_query ($requete_03) or die('
747
            <H2 style="text-align: center; font-weight: bold; font-size: 26px;">Erreur de requête</H2>'.
748
            '<b>Requete : </b>'.$requete_03.
749
            '<br/><br/><b>Erreur : </b>'.mysql_error());
750
 
751
        while ($ligne_03 = mysql_fetch_object ($resultat_03)) {
752
            $id_zone_geo = $ligne_03->$chp_id_zone_couleur;
753
            if (!isset ($tableau_valeurs_zone[$id_zone_geo])) {
754
                $tableau_valeurs_zone[$id_zone_geo] = 0;
755
            }
756
            //Nous cherchons la couleur a afficher pour chaque zone.
757
            if ($tableau_valeurs_zone[$id_zone_geo] != 0) {
758
                //echo 'ZONE:'.$id_zone_geo."<br/>";
759
                //echo $tableau_valeurs_zone[$id_zone_geo]."<br/>";
760
                $theColor = $this->_donnerCouleur(
761
                                        $this->_miniR, $this->_miniV, $this->_miniB,
762
                                        $this->_mediumR , $this->_mediumV , $this->_mediumB ,
763
                                        $this->_maxiR , $this->_maxiV , $this->_maxiB ,
764
                                        $mini, $medium, $maxi, $nbre_valeurs, $ecart_type, $moyenne, $tablo_valeurs,
765
                                        $tablo_frequences, $nbre_frequences,
766
                                        $tableau_valeurs_zone[$id_zone_geo],
767
                                        $this->_formule_coloriage);
768
                //echo $theColor['R'].'<br>';
769
                //echo $theColor['V'].'<br>';
770
                //echo $theColor['B'].'<br>';
771
            }
772
            else {
773
                $theColor['R'] = $this->_zeroR;
774
                $theColor['V'] = $this->_zeroV;
775
                $theColor['B'] = $this->_zeroB;
776
            }
777
            //Nous réalisons le coloriage de toutes les zones de l'image avec la couleur obtenue.
778
            $this->_remplacerCouleur($image_fond, $attachments, $id_zone_geo,  $theColor['R'], $theColor['V'], $theColor['B'], $id_zone_a_reperer);
779
        }
780
        //Nous libérons toute la mémoire associée à l'identifiant de résultat de la requête.
781
        mysql_free_result ($resultat_03);
782
    }
783
 
784
    //==============================================================================
785
    // METHODE  _construireAssociationIndexZone ($image, &$att)
786
    //
787
    // Le tableau $att est passé par référence. La méthode modifie donc directement
788
    // le tableau et ne renvoit donc rien.
789
    // Attache dans un tableau $att, contenant sous forme d'objet (Carto_ColorInfo)
790
    // les valeurs RVB des zones d'une image, la valeur de l'index correspondant
791
    // à la couleur de la zone.
792
    // Note : les images en question sont constituées de zones distincte possédant
793
    // chacune une couleur unique et unie.
794
    //==============================================================================
795
 
796
    function _construireAssociationIndexZone(&$image_fond, &$att)
797
    {
798
        // Nous récupérons le nombre de couleur différentes contenues dans l'image.
799
        //echo $this->fond.'<BR>';
800
        $image_fond = imagecreatefrompng($this->fond);
801
        $taille_palette = imagecolorstotal ($image_fond);
1139 alexandre_ 802
        if (!$image_fond) echo 'erreur fond';
448 ddelon 803
        // Pour chaque couleur contenue dans l'image, nous cherchons l'objet correspondant
804
        // dans le tableau $att, qui contient des informations sur chaque zone de l'image,
805
        // et nous attribuons à l'objet la valeur de l'index de sa couleur dans l'image.
806
 
807
        for ($i = 0; $i < $taille_palette; $i++) {
808
            $valeurs_RVB = array();
809
            $valeurs_RVB = imagecolorsforindex ($image_fond, $i);
642 alexandre_ 810
 
448 ddelon 811
            for ($j = 0; $j < count ($att); $j++) {
812
 
813
                if (($att[$j]->rouge == $valeurs_RVB['red']) && ($att[$j]->vert == $valeurs_RVB['green']) && ($att[$j]->bleu == $valeurs_RVB['blue'])) {
814
                    $att[$j]->index = $i;
815
                    //echo 'ICI'.$att[$j]->id_zone.$att[$j]->index.'<br>';
816
                    break;
817
                }
818
            }
819
        }
820
 
821
        return $att;
822
    }//Fin méthode _construireAssociationIndexZone()
823
 
824
    //==============================================================================
825
    // METHODE _donnerCouleur()
826
    //------------------------------------------------------------------------------
827
    // Renvoie pour une valeur donnee la couleur a mettre
828
    //------------------------------------------------------------------------------
829
    // ENTREE
830
    // $miniR : valeur rouge du minimum
831
    // $miniV : valeur vert du minimum
832
    // $miniB : valeur blue du minimum
833
    // $maxiR : valeur rouge du maximum
834
    // $maxiV : valeur vert du maximum
835
    // $maxiB : valeur bleu du maximum
836
    // $mediumR : valeur rouge du deuxieme maximum
837
    // $mediumV : valeur vert du deuxieme maximum
838
    // $mediumB : valeur bleu du deuxieme maximum
839
    // $mini  : valeur mini sur l'echelle
840
    // $medium  : valeur juste au dessous du maximum sur l'echelle
841
    // $maxi  : valeur maxi sur l'echelle
842
    // $val   : valeur dont on cherche la couleur
843
    //------------------------------------------------------------------------------
844
    // SORTIE
845
    // $couleur array donne la couleur pour la valeur demande ($val)
846
    //------------------------------------------------------------------------------
847
 
848
    function _donnerCouleur($miniR, $miniV, $miniB, $mediumR, $mediumV, $mediumB, $maxiR,
849
                            $maxiV, $maxiB, $mini, $medium, $maxi, $nbre_valeurs, $ecart_type, $moyenne, $tablo_valeurs, $tablo_frequences, $nbre_frequences, $val, $formuleColoriage)
850
    {
851
        if ($formuleColoriage == 'defaut'){
852
            if ($val == $maxi) {
853
                $couleur['R'] = $maxiR;
854
                $couleur['V'] = $maxiV;
855
                $couleur['B'] = $maxiB;
856
            }
857
            if ($val == $mini && $val != $maxi) {
858
                $couleur['R'] = $miniR;
859
                $couleur['V'] = $miniV;
860
                $couleur['B'] = $miniB;
861
            }
862
            if ($maxi/10 > $medium && $maxi/40 < $medium) {
863
                $diff = $medium - $mini;
864
                if ($diff > 0 && $val != $medium && $val != $maxi) {
865
                    $diffR   = $mediumR - $miniR;
866
                    $diffV   = $mediumV - $miniV;
867
                    $diffB   = $mediumB - $miniB;
868
                    $variationR =  round ( ($diffR/$diff ), 0 );
869
                    $variationV =  round ( ($diffV/$diff ), 0 );
870
                    $variationB =  round ( ($diffB/$diff ), 0 );
871
                    $couleur['R'] = couleur_bornerNbre(($miniR + ($val * $variationR)), 0, 255);
872
                    $couleur['V'] = couleur_bornerNbre(($miniV + ($val * $variationV)), 0, 255);
873
                    $couleur['B'] = couleur_bornerNbre(($miniB + ($val * $variationB)), 0, 255);
874
                }
875
                else if ($val == $medium) {
876
                    $couleur['R'] = $mediumR;
877
                    $couleur['V'] = $mediumV;
878
                    $couleur['B'] = $mediumB;
879
                }
880
            }
881
            else {
882
                $diff = $maxi - $mini;
883
                if ($diff > 0 && $val != $maxi && $val != $mini) {
884
                    $diffR = $maxiR - $miniR;
885
                    $diffV = $maxiV - $miniV;
886
                    $diffB = $maxiB - $miniB;
887
                    $variationR =  round ( ($diffR/$diff ), 0 );
888
                    $variationV =  round ( ($diffV/$diff ), 0 );
889
                    $variationB =  round ( ($diffB/$diff ), 0 );
890
                    $couleur['R'] = couleur_bornerNbre(($miniR + ($val * $variationR)), 0, 255);
891
                    $couleur['V'] = couleur_bornerNbre(($miniV + ($val * $variationV)), 0, 255);
892
                    $couleur['B'] = couleur_bornerNbre(($miniB + ($val * $variationB)), 0, 255);
893
                }
894
                else if ($diff == 0){
895
                    $couleur['R'] = $mediumR;
896
                    $couleur['V'] = $mediumV;
897
                    $couleur['B'] = $mediumB;
898
                }
899
            }
900
        }
901
        elseif ($formuleColoriage == 'ecart_type') {
902
            if ($ecart_type == 0) {
903
                    $couleur['R'] = $maxiR;
904
                    $couleur['V'] = $maxiV;
905
                    $couleur['B'] = $maxiB;
906
            }
907
            elseif ($ecart_type >= 1 && $ecart_type <= 15) {
908
                if ($val == $mini) {
909
                    $couleur['R'] = $miniR;
910
                    $couleur['V'] = $miniV;
911
                    $couleur['B'] = $miniB;
912
                }
913
                elseif ($val == $medium) {
914
                    $couleur['R'] = $mediumR;
915
                    $couleur['V'] = $mediumV;
916
                    $couleur['B'] = $mediumB;
917
                }
918
                elseif ($val == $maxi) {
919
                    $couleur['R'] = $maxiR;
920
                    $couleur['V'] = $maxiV;
921
                    $couleur['B'] = $maxiB;
922
                }
923
                else {
924
                    $dif_valeur_maxi_mini = $maxi - $mini;
925
                    $diffR = $maxiR - $miniR;
926
                    $diffV = $maxiV - $miniV;
927
                    $diffB = $maxiB - $miniB;
928
                    $variationR =  round ( ($diffR/$dif_valeur_maxi_mini ), 0 );
929
                    $variationV =  round ( ($diffV/$dif_valeur_maxi_mini ), 0 );
930
                    $variationB =  round ( ($diffB/$dif_valeur_maxi_mini ), 0 );
931
                    $couleur['R']=$miniR + ($val * $variationR);
932
                    $couleur['V']=$miniV + ($val * $variationV);
933
                    $couleur['B']=$miniB + ($val * $variationB);
934
                }
935
            }
936
            elseif ($ecart_type > 15) {
937
                //Le tableau est trié de la plus petite à la plus grande clé.
938
                ksort($tablo_frequences);
939
                $i = 0;
940
                foreach ($tablo_frequences as $cle => $valeur){
941
                    //Nous cherchons la correspondance entre la valeur et la clé.
942
                    if ($cle == $val) {
943
                        //Pour faire le Rouge, Vert, Bleu
944
                        $couleur['R'] = $miniR + ($i/$nbre_frequences) * ($maxiR - $miniR);
945
                        $couleur['V'] = $miniV + ($i/$nbre_frequences) * ($maxiV - $miniV);
946
                        $couleur['B'] = $miniB + ($i/$nbre_frequences) * ($maxiB - $miniB);
947
                    }
948
                    $i++;
949
                }
950
            }
951
        }
952
 
953
        return $couleur;
954
 
955
    }//Fin méthode _donnerCouleur()
956
 
957
    //==============================================================================
958
    // METHODE _remplacerCouleur ($img, $att, $id_zone_geo, $r, $g, $b)
959
    //
960
    // $img is the image, $att an array of carto_colorinfo objects, $id_zone_geo the name
961
    // of an object of $att, ($r, $g, $b) the new color.
962
    //
963
    // In the palette of $img, the color matching with $id_zone_geo is modified.
964
    //==============================================================================
965
 
966
    function _remplacerCouleur(&$image, &$atta, $id_zone_geo, $rouge, $vert, $bleu, $id_zone_a_reperer)
967
    {
968
        // Nous recherchons la valeur de l'index.
969
 
970
        $index = -1;
971
        for ($i = 0; $i < count ($atta); $i++) {
972
            if ($atta[$i]->id_zone == $id_zone_geo) {
973
                $index = $atta[$i]->index;
974
                //Dans le cas où nous voulons repérer une zone sur la carte :
975
                if($id_zone_geo == $id_zone_a_reperer) {
976
                    $rouge = 255;
977
                    $vert = 0;
978
                    $bleu = 0;
979
                }
980
                break;
981
            }
982
        }
983
 
984
        // Nous mettons à jour l'image de la carte avec la valeur de l'index.
985
 
986
        if ($index >= 0) {
987
            imagecolorset (&$image, $index, $rouge, $vert, $bleu);
988
        }
989
 
990
    }//Fin de la méthode _remplacerCouleur
991
 
992
    //==============================================================================
993
    // METHODE _donnerIdUnique ()
994
    //
995
    // Cette méthode privée retourne un identifiant de 32 caractères unique.
996
    //
997
    //==============================================================================
998
 
999
    function _donnerIdUnique()
1000
    {
1001
        $id = '';
1002
        $id = md5 (uniqid (rand()));
1003
 
1004
        return $id;
1005
    }//Fin de la méthode _donnerIdUnique()
1006
 
1007
 
1008
}//Fin de la classe Carto_Carte()
1009
 
1010
//==============================================================================
1011
// La classe Carto_InformationCouleur n'est utilisée que par la classe carte.
1012
// C'est une classe privée.
1013
// Elle sert à stocker les informations (RVB et index) sur la couleur d'une
1014
// zone d'une image.
1015
//==============================================================================
1016
 
1017
class Carto_InformationCouleur
1018
{
1019
    /*|=============================================================================================|*/
1020
    /*|                                LES ATTRIBUTS DE LA CLASSE                                   |*/
1021
    /*|---------------------------------------------------------------------------------------------|*/
1022
 
1023
    var $id_zone;
1024
    var $rouge;
1025
    var $vert;
1026
    var $bleu;
1027
    var $index;
1028
 
1029
    /*|=============================================================================================|*/
1030
    /*|                                LE CONSTRUCTEUR DE LA CLASSE                                 |*/
1031
    /*|---------------------------------------------------------------------------------------------|*/
1032
 
1033
    function Carto_InformationCouleur($id_zone, $rouge, $vert, $bleu)
1034
    {
1035
        $this->id_zone    = $id_zone;
1036
        $this->rouge     = $rouge;
1037
        $this->vert = $vert;
1038
        $this->bleu    = $bleu;
1039
        $this->index = -1;
1040
    }
1041
 
1042
}//Fin de la classe Carto_InformationCouleur
1043
 
1044
 
1045
//==============================================================================
1046
// FUNCTION carto_errorMsg ()
1047
//
1048
// Return an error message about carto management.
1049
//==============================================================================
1050
 
1051
function carto_errorMsg()
1052
{
1053
    global $PRIVATE_CARTO_ERROR;
1054
 
1055
    return $PRIVATE_CARTO_ERROR;
1056
}
1057
 
1058
//==============================================================================
1059
// FUNCTION carto_putErrorImage ()
1060
//
1061
// Dump a default error image.
1062
//==============================================================================
1063
 
1064
function carto_putErrorImage()
1065
{
1066
    $img = '47494638396120002000800100ff000000006621f90401000001002c000000002000'.
1067
            '200040026d848fa99be11f009c53524373b41ae2da65dcf345e1693aa536aae77ab1'.
1068
            'e1d7a2a22ad5f60deb6fe54bc958418f0b05bb9190bee2f1327276a2c91db16a855a'.
1069
            'a4489c31bb24d5b8614fb32b2a9ea7d228738785dab673e7f81554b395682008dc52'.
1070
            '4236b4210416c390a8a85000003b';
1071
 
1072
    header ('Content-Type: image/gif');
1073
 
1074
    echo gs_hex2bin($img);
1075
}
1076
 
1077
//==============================================================================
1078
//==============================================================================
1079
// Les fonctions qui suivent permettent de recuperer des infos (nom de l'image,
1080
// du masque, du niveau ou du titre) d'une carte.
1081
//==============================================================================
1082
//==============================================================================
1083
 
1084
function carto_consulterTitreCarte($id_carte)
1085
{
1086
    global $NOM_FICHIER;
1087
 
1088
    $requete =
1089
    'SELECT * '.
1090
    ' FROM carto_DESCRIPTION_CARTE'.
1091
    ' WHERE CDC_ID_Carte = "'.$id_carte.'"';
1092
 
1093
    $resultat = mysql_query ($requete) or die('
1094
            <H2 style="text-align: center; font-weight: bold; font-size: 26px;">Erreur de requête</H2>'.
1095
            '<b>Nom du fichier : </b> '.$NOM_FICHIER.'<br/>'.
1096
            '<b>Nom fonction : </b> carto_consulterTitreCarte<br/>'.
1097
            '<b>Requete : </b>'.$requete.
1098
            '<br/><br/><b>Erreur : </b>'.mysql_error());
1099
 
1100
    $ligne = mysql_fetch_object ($resultat);
1101
 
1102
    $titre_carte = $ligne->CDC_Titre_carte;
1103
 
1104
    return $titre_carte;
1105
}
1106
 
1107
function carto_consulterFichierFond($id_carte)
1108
{
1109
    global $NOM_FICHIER;
1110
 
1111
    $requete =
1112
        'SELECT * '.
1113
        ' FROM carto_DESCRIPTION_CARTE'.
1114
        ' WHERE CDC_ID_Carte = "'.$id_carte.'"';
1115
 
1116
    $resultat = mysql_query ($requete) or die('
1117
            <H2 style="text-align: center; font-weight: bold; font-size: 26px;">Erreur de requête</H2>'.
1118
            '<b>Nom du fichier : </b> '.$NOM_FICHIER.'<br/>'.
1119
            '<b>Nom fonction : </b> carto_consulterFichierFond<br/>'.
1120
            '<b>Requete : </b>'.$requete.
1121
            '<br/><br/><b>Erreur : </b>'.mysql_error());
1122
 
1123
    $ligne = mysql_fetch_object ($resultat);
1124
 
1125
    $nom_fichier_carte_fond = $ligne->CDC_Carte_fond;
1126
 
1127
    return $nom_fichier_carte_fond;
1128
}
1129
 
1130
function carto_consulterFichierMasque($id_carte)
1131
{
1132
    global $NOM_FICHIER;
1133
 
1134
    $requete =
1135
        'SELECT * '.
1136
        ' FROM carto_DESCRIPTION_CARTE'.
1137
        ' WHERE CDC_ID_Carte = "'.$id_carte.'"';
1138
 
1139
    $resultat = mysql_query ($requete) or die('
1140
            <H2 style="text-align: center; font-weight: bold; font-size: 26px;">Erreur de requête</H2>'.
1141
            '<b>Nom du fichier : </b> '.$NOM_FICHIER.'<br/>'.
1142
            '<b>Nom fonction : </b> carto_consulterFichierMasque<br/>'.
1143
            '<b>Requete : </b>'.$requete.
1144
            '<br/><br/><b>Erreur : </b>'.mysql_error());
1145
 
1146
    $ligne = mysql_fetch_object ($resultat);
1147
 
1148
    $nom_fichier_carte_masque = $ligne->CDC_Carte_masque;
1149
 
1150
    return $nom_fichier_carte_masque;
1151
}
1152
 
1153
function carto_consulterTypeZoneCarte($id_carte)
1154
{
1155
    global $NOM_FICHIER;
1156
 
1157
    $requete =
1158
        'SELECT * '.
1159
        ' FROM carto_DESCRIPTION_CARTE'.
1160
        ' WHERE CDC_ID_Carte = "'.$id_carte.'"';
1161
 
1162
    $resultat = mysql_query($requete) or die('
1163
            <H2 style="text-align: center; font-weight: bold; font-size: 26px;">Erreur de requête</H2>'.
1164
            '<b>Nom du fichier : </b> '.$NOM_FICHIER.'<br/>'.
1165
            '<b>Nom fonction : </b> carto_consulterTypeZoneCarte<br/>'.
1166
            '<b>Requete : </b>'.$requete.
1167
            '<br/><br/><b>Erreur : </b>'.mysql_error());
1168
 
1169
    $ligne = mysql_fetch_object($resultat);
1170
 
1171
    $type_zone_carte = $ligne->CDC_Type_zone_carte;
1172
 
1173
    return $type_zone_carte;
1174
}
1175
 
1176
function carto_consulterIdZoneGeoCarte($id_carte)
1177
{
1178
    global $NOM_FICHIER;
1179
 
1180
    $requete =
1181
        'SELECT * '.
1182
        ' FROM carto_DESCRIPTION_CARTE'.
1183
        ' WHERE CDC_ID_Carte = "'.$id_carte.'"';
1184
 
1185
    $resultat = mysql_query($requete) or die('
1186
            <H2 style="text-align: center; font-weight: bold; font-size: 26px;">Erreur de requête</H2>'.
1187
            '<b>Nom du fichier : </b> '.$NOM_FICHIER.'<br/>'.
1188
            '<b>Nom fonction : </b> carto_consulterIdZoneGeoCarte<br/>'.
1189
            '<b>Requete : </b>'.$requete.
1190
            '<br/><br/><b>Erreur : </b>'.mysql_error());
1191
 
1192
    $ligne = mysql_fetch_object ($resultat);
1193
 
1194
    $id_zone_carte = $ligne->CDC_ID_Zone_geo_carte;
1195
    return $id_zone_carte;
1196
}
1197
 
1198
//-- Fin du code source  ------------------------------------------------------------
1199
/*
1200
* $Log: not supported by cvs2svn $
1081 florian 1201
* Revision 1.4  2006/04/04 12:23:05  florian
1202
* modifs affichage fiches, généricité de la carto, modification totale de l'appli annuaire
1203
*
805 florian 1204
* Revision 1.3  2005/12/07 14:59:14  alexandre_tb
1205
* suppression d'un echo
1206
*
642 alexandre_ 1207
* Revision 1.2  2005/11/24 16:17:52  florian
1208
* changement template inscription + modifs carto
1209
*
612 florian 1210
* Revision 1.1  2005/09/22 14:02:49  ddelon
1211
* nettoyage annuaire et php5
1212
*
448 ddelon 1213
* Revision 1.2  2005/09/22 13:30:49  florian
1214
* modifs pour compatibilité XHTML Strict + corrections de bugs (mais ya encore du boulot!!)
1215
*
1216
* Revision 1.1  2004/12/15 13:30:20  alex
1217
* version initiale
1218
*
1219
* Revision 1.17  2003/05/16 13:17:40  jpm
1220
* Correction d'une erreur (des guillemets en trop).
1221
*
1222
* Revision 1.16  2003/03/14 14:12:14  jpm
1223
* Correction bug : le nom de la zone ne restait pas dans la liste déroulante.
1224
*
1225
* Revision 1.15  2003/03/11 14:49:47  jpm
1226
* Simplification de l'interface.
1227
*
1228
* Revision 1.14  2003/03/07 15:10:24  jpm
1229
* Ajout de commentaires : "à faire"
1230
*
1231
* Revision 1.13  2003/03/04 16:14:06  alex
1232
* Utilisation de la fonction cxt_clearVariable à la place de cxt_clear
1233
*
1234
* Revision 1.12  2003/03/04 08:09:39  jpm
1235
* Ajout suppression des fichiers carto du dossier carto temporaire.
1236
*
1237
* Revision 1.11  2003/02/26 12:12:38  jpm
1238
* Ajout de la gestion des listes déroulantes représentant la zone géographique
1239
* à éditer.
1240
*
1241
* Revision 1.10  2003/02/21 13:50:57  jpm
1242
* Mise à jour nouvel objet Carto_Carte.
1243
*
1244
* Revision 1.8  2003/02/14 08:01:14  jpm
1245
* Changement des noms de méthode selon les recommandations de PEAR.
1246
* Ajout d'attributs à la classe.
1247
* Ajout de la possibilité de redéfinir les couleurs de coloriage d'une carte.
1248
* Ajout de la possibilité de désigner une formule mathématique de coloriage.
1249
*
1250
* Revision 1.7  2003/02/12 18:15:56  jpm
1251
* Meilleure gestion de l'obtentions des valeurs minimum, medium et maximum
1252
* pour l'ensemble des zones géographiques d'une carte.
1253
* Ajout de commentaires.
1254
* Meilleure gestion des erreurs de requêtes.
1255
*
1256
*
1257
*/
1258
?>