Subversion Repositories Sites.obs-saisons.fr

Rev

Rev 91 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 91 Rev 252
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
* Classe modèle spécifique à l'application, donc d'accés au données, elle ne devrait pas être appelée de l'extérieur.
4
* Classe modèle spécifique à l'application, donc d'accés au données, elle ne devrait pas être appelée de l'extérieur.
5
* Elle est abstraite donc doit obligatoirement être étendue.
5
* Elle est abstraite donc doit obligatoirement être étendue.
6
*
6
*
7
* @category     Php5
7
* @category     Php5
8
* @package      ODS_saisie
8
* @package      ODS_saisie
9
* @author       Jean-Pascal MILCENT <jpm@tela-botanica.org>
9
* @author       Jean-Pascal MILCENT <jpm@tela-botanica.org>
10
* @copyright    2010 Tela-Botanica
10
* @copyright    2010 Tela-Botanica
11
* @license      http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
11
* @license      http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
12
* @license      http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
12
* @license      http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
13
* @version      SVN: $Id$
13
* @version      SVN: $Id$
14
*/
14
*/
15
abstract class Dao {
15
abstract class Dao {
16
    const ORDRE_ASCENDANT = 'ASC';
16
    const ORDRE_ASCENDANT = 'ASC';
17
    const ORDRE_DESCENDANT = 'DESC';
17
    const ORDRE_DESCENDANT = 'DESC';
18
    const HTTP_REQUETE_SEPARATEUR = '&';
18
    const HTTP_REQUETE_SEPARATEUR = '&';
19
    protected $distinction = '0';
19
    protected $distinction = '0';
20
    protected $limite_debut = null;
20
    protected $limite_debut = null;
21
    protected $limite_nbre = null;
21
    protected $limite_nbre = null;
22
    protected $ordre = null;
22
    protected $ordre = null;
23
    protected $url_jrest = null;
23
    protected $url_jrest = null;
24
   
24
   
25
    public function __construct() {
25
    public function __construct() {
26
        $this->url_jrest = Config::get('url_jrest');
26
        $this->url_jrest = Config::get('url_jrest');
27
    }
27
    }
28
   
28
   
29
    //+----------------------------------------------------------------------------------------------------------------+
29
    //+----------------------------------------------------------------------------------------------------------------+
30
    // ACCESSEURS
30
    // ACCESSEURS
31
   
31
   
32
    public function setDistinction($distinct) {
32
    public function setDistinction($distinct) {
33
        $this->distinction = $distinct;
33
        $this->distinction = $distinct;
34
    }
34
    }
35
    public function getDistinction() {
35
    public function getDistinction() {
36
        return $this->distinction;
36
        return $this->distinction;
37
    }
37
    }
38
    public function viderDistinction() {
38
    public function viderDistinction() {
39
        $this->distinction = null;
39
        $this->distinction = null;
40
    }
40
    }
41
 
41
 
42
    public function avoirLimitation() {
42
    public function avoirLimitation() {
43
        $limitation = false;
43
        $limitation = false;
44
        if (!is_null($this->limite_debut) && !is_null($this->limite_nbre)) {
44
        if (!is_null($this->limite_debut) && !is_null($this->limite_nbre)) {
45
            $limitation = true;
45
            $limitation = true;
46
        }
46
        }
47
        return $limitation;
47
        return $limitation;
48
    }
48
    }
49
    public function setLimitation($limite_debut, $limite_nbre) {
49
    public function setLimitation($limite_debut, $limite_nbre) {
50
        $this->limite_debut = $limite_debut;
50
        $this->limite_debut = $limite_debut;
51
        $this->limite_nbre = $limite_nbre;
51
        $this->limite_nbre = $limite_nbre;
52
    }
52
    }
53
    public function getLimiteDebut() {
53
    public function getLimiteDebut() {
54
        return $this->limite_debut;
54
        return $this->limite_debut;
55
    }
55
    }
56
    public function getLimiteNbre() {
56
    public function getLimiteNbre() {
57
        return $this->limite_nbre;
57
        return $this->limite_nbre;
58
    }
58
    }
59
    public function viderLimite() {
59
    public function viderLimite() {
60
        $this->limite_debut = null;
60
        $this->limite_debut = null;
61
        $this->limite_nbre = null;
61
        $this->limite_nbre = null;
62
    }
62
    }
63
   
63
   
64
    public function addOrdre($champ, $trie = self::ORDRE_ASCENDANT) {
64
    public function addOrdre($champ, $trie = self::ORDRE_ASCENDANT) {
65
        if (!isset($this->ordre[$champ])) {
65
        if (!isset($this->ordre[$champ])) {
66
            if (self::ORDRE_ASCENDANT == $trie || self::ORDRE_DESCENDANT == $trie) {
66
            if (self::ORDRE_ASCENDANT == $trie || self::ORDRE_DESCENDANT == $trie) {
67
                $this->ordre[$champ] = $trie;
67
                $this->ordre[$champ] = $trie;
68
            } else {
68
            } else {
69
                $e = "La valeur pour le tri doit être : {self::ORDRE_ASCENDANT} ou {self::ORDRE_DESCENDANT}.";
69
                $e = "La valeur pour le tri doit être : {self::ORDRE_ASCENDANT} ou {self::ORDRE_DESCENDANT}.";
70
                trigger_error($e, E_USER_WARNING);
70
                trigger_error($e, E_USER_WARNING);
71
            }
71
            }
72
        } else {
72
        } else {
73
            $e = "Le champ $champ existe déjà dans le tableau des ordres.";
73
            $e = "Le champ $champ existe déjà dans le tableau des ordres.";
74
            trigger_error($e, E_USER_WARNING);
74
            trigger_error($e, E_USER_WARNING);
75
        }
75
        }
76
    }
76
    }
77
    public function getOrdre() {
77
    public function getOrdre() {
78
        $champs = array();
78
        $champs = array();
79
        foreach ($this->ordre as $champ => $trie) {
79
        foreach ($this->ordre as $champ => $trie) {
80
            $champs[] = "$champ $trie";
80
            $champs[] = "$champ $trie";
81
        }
81
        }
82
        return implode(', ', $champs);
82
        return implode(', ', $champs);
83
    }
83
    }
84
    public function viderOrdre() {
84
    public function viderOrdre() {
85
        $this->ordre = null;
85
        $this->ordre = null;
86
    }
86
    }
87
   
87
   
88
    //+----------------------------------------------------------------------------------------------------------------+
88
    //+----------------------------------------------------------------------------------------------------------------+
89
    // MÉTHODES
89
    // MÉTHODES
90
   
90
   
91
    protected function envoyerRequeteConsultation($url) {
91
    protected function envoyerRequeteConsultation($url) {
92
        $url = $this->traiterUrlParametres($url);
92
        $url = $this->traiterUrlParametres($url);
93
        $retour = $this->envoyerRequete($url, 'GET');
93
        $retour = $this->envoyerRequete($url, 'GET');
94
        return $retour;
94
        return $retour;
95
    }
95
    }
96
   
96
   
97
    protected function envoyerRequeteAjout($url, Array $donnees) {
97
    protected function envoyerRequeteAjout($url, Array $donnees) {
98
        $retour = $this->envoyerRequete($url, 'PUT', $donnees);
98
        $retour = $this->envoyerRequete($url, 'PUT', $donnees);
99
        return $retour;
99
        return $retour;
100
    }
100
    }
101
   
101
   
102
    protected function envoyerRequeteModif($url, Array $donnees) {
102
    protected function envoyerRequeteModif($url, Array $donnees) {
103
        $retour = $this->envoyerRequete($url, 'POST', $donnees);
103
        $retour = $this->envoyerRequete($url, 'POST', $donnees);
104
        return $retour;
104
        return $retour;
105
    }
105
    }
106
   
106
   
107
    protected function envoyerRequeteSuppression($url) {
107
    protected function envoyerRequeteSuppression($url) {
108
        $retour = $this->envoyerRequete($url, 'DELETE');
108
        $retour = $this->envoyerRequete($url, 'DELETE');
109
        return $retour;
109
        return $retour;
110
    }
110
    }
111
   
111
   
112
    private function envoyerRequete($url, $mode, Array $donnees = array()) {
112
    private function envoyerRequete($url, $mode, Array $donnees = array()) {
113
        $contenu = false;
113
        $contenu = false;
114
        if ($mode != 'GET' && $mode != 'PUT' && $mode != 'POST' && $mode != 'DELETE') {
114
        if ($mode != 'GET' && $mode != 'PUT' && $mode != 'POST' && $mode != 'DELETE') {
115
            $e = "Le mode de requête '$mode' n'est pas accepté!";
115
            $e = "Le mode de requête '$mode' n'est pas accepté!";
116
            trigger_error($e, E_USER_WARNING);
116
            trigger_error($e, E_USER_WARNING);
117
        } else {
117
        } else {
118
            $contexte = stream_context_create(array(
118
            $contexte = stream_context_create(array(
119
                'http' => array(
119
                'http' => array(
120
                    'method' => $mode,
120
                    'method' => $mode,
121
                    'header' => "Content-type: application/x-www-form-urlencoded\r\n",
121
                    'header' => "Content-type: application/x-www-form-urlencoded\r\n",
122
                    'content' => http_build_query($donnees, null, self::HTTP_REQUETE_SEPARATEUR))));
122
                    'content' => http_build_query($donnees, null, self::HTTP_REQUETE_SEPARATEUR))));
123
            
-
 
124
            /*if($url == 'http://162.38.234.9/obs_saisons/applications/jrest/OdsObservation/13') {
-
 
125
            	Debug::printr(http_build_query($donnees, null, self::HTTP_REQUETE_SEPARATEUR));
-
 
126
            	exit;
-
 
127
            }*/
-
 
128
            
123
            
129
            $flux = @fopen($url, 'r', false, $contexte);
124
            $flux = @fopen($url, 'r', false, $contexte);
130
            
125
            
131
            if (!$flux) {
126
            if (!$flux) {
132
                $this->traiterEntete($http_response_header, $url);
127
                $this->traiterEntete($http_response_header, $url);
133
                $e = "L'ouverture de l'url '$url' par la méthode HTTP '$mode' a échoué!";
128
                $e = "L'ouverture de l'url '$url' par la méthode HTTP '$mode' a échoué!";
134
                trigger_error($e, E_USER_WARNING);
129
                trigger_error($e, E_USER_WARNING);
135
            } else {
130
            } else {
136
                // Informations sur les en-têtes et métadonnées du flux
131
                // Informations sur les en-têtes et métadonnées du flux
137
                $entetes = stream_get_meta_data($flux);
132
                $entetes = stream_get_meta_data($flux);
138
                $this->traiterEntete($entetes, $url);
133
                $this->traiterEntete($entetes, $url);
139
               
134
               
140
                // Contenu actuel de $url
135
                // Contenu actuel de $url
141
                $contenu = stream_get_contents($flux);
136
                $contenu = stream_get_contents($flux);
142
               
137
               
143
                fclose($flux);
138
                fclose($flux);
144
            }
139
            }
145
        }
140
        }
146
        $this->reinitialiser();
141
        $this->reinitialiser();
147
        return $contenu;
142
        return $contenu;
148
    }
143
    }
149
   
144
   
150
    private function traiterUrlParametres($url) {
145
    private function traiterUrlParametres($url) {
151
        $parametres = array();
146
        $parametres = array();
152
        if (! is_null($this->getLimiteDebut())) {
147
        if (! is_null($this->getLimiteDebut())) {
153
            $parametres[] = 'start='.$this->getLimiteDebut();
148
            $parametres[] = 'start='.$this->getLimiteDebut();
154
        }
149
        }
155
        if (! is_null($this->getLimiteNbre())) {
150
        if (! is_null($this->getLimiteNbre())) {
156
            $parametres[] = 'limit='.$this->getLimiteNbre();
151
            $parametres[] = 'limit='.$this->getLimiteNbre();
157
        }
152
        }
158
        if (! is_null($this->ordre)) {
153
        if (! is_null($this->ordre)) {
159
            $parametres[] = 'orderby='.urlencode($this->getOrdre());
154
            $parametres[] = 'orderby='.urlencode($this->getOrdre());
160
        }
155
        }
161
        if ($this->getDistinction() != 0) {
156
        if ($this->getDistinction() != 0) {
162
            $parametres[] = 'distinct='.$this->getDistinction();
157
            $parametres[] = 'distinct='.$this->getDistinction();
163
        }
158
        }
164
        if (count($parametres) > 0) {
159
        if (count($parametres) > 0) {
165
            $url_parametres = implode('&', $parametres);
160
            $url_parametres = implode('&', $parametres);
166
            $url = $url.'?'.$url_parametres;
161
            $url = $url.'?'.$url_parametres;
167
        }
162
        }
168
        return $url;
163
        return $url;
169
    }
164
    }
170
   
165
   
171
    private function traiterEntete($entetes, $uri) {
166
    private function traiterEntete($entetes, $uri) {
172
        $infos = $this->analyserEntete($entetes, $uri);
167
        $infos = $this->analyserEntete($entetes, $uri);
173
        $this->traiterEnteteDebug($infos);
168
        $this->traiterEnteteDebug($infos);
174
        $this->traiterEnteteMessage($infos);
169
        $this->traiterEnteteMessage($infos);
175
    }
170
    }
176
   
171
   
177
    private function analyserEntete($entetes, $uri) {
172
    private function analyserEntete($entetes, $uri) {
178
        $infos = array('date' => null, 'uri' => $uri, 'debugs' => null, 'messages' => null);
173
        $infos = array('date' => null, 'uri' => $uri, 'debugs' => null, 'messages' => null);
179
       
174
       
180
        if (isset($entetes['wrapper_data'])) {
175
        if (isset($entetes['wrapper_data'])) {
181
            $entetes = $entetes['wrapper_data'];
176
            $entetes = $entetes['wrapper_data'];
182
        }
177
        }
183
        foreach ($entetes as $entete) {
178
        foreach ($entetes as $entete) {
184
            if (preg_match('/^X-DebugJrest-Data: (.+)$/', $entete, $match)) {
179
            if (preg_match('/^X-DebugJrest-Data: (.+)$/', $entete, $match)) {
185
                $infos['debugs'] = json_decode($match[1]);
180
                $infos['debugs'] = json_decode($match[1]);
186
            }
181
            }
187
            if (preg_match('/^X-MessageJrest-Data: (.+)$/', $entete, $match)) {
182
            if (preg_match('/^X-MessageJrest-Data: (.+)$/', $entete, $match)) {
188
                $infos['messages'] = json_decode($match[1]);
183
                $infos['messages'] = json_decode($match[1]);
189
            }
184
            }
190
            if (preg_match('/^Date: .+ ([012][0-9]:[012345][0-9]:[012345][0-9]) .*$/', $entete, $match)) {
185
            if (preg_match('/^Date: .+ ([012][0-9]:[012345][0-9]:[012345][0-9]) .*$/', $entete, $match)) {
191
                $infos['date'] = $match[1];
186
                $infos['date'] = $match[1];
192
            }
187
            }
193
        }
188
        }
194
        return $infos;
189
        return $infos;
195
    }
190
    }
196
   
191
   
197
    private function traiterEnteteDebug($entetes) {
192
    private function traiterEnteteDebug($entetes) {
198
        if (isset($entetes['debugs'])) {
193
        if (isset($entetes['debugs'])) {
199
            $date = $entetes['date'];
194
            $date = $entetes['date'];
200
            $uri = $entetes['uri'];
195
            $uri = $entetes['uri'];
201
            $debugs = $entetes['debugs'];
196
            $debugs = $entetes['debugs'];
202
            foreach ($debugs as $debug) {
197
            foreach ($debugs as $debug) {
203
                Debug::printr("DEBUG : $date - $uri :\n$debug");
198
                Debug::printr("DEBUG : $date - $uri :\n$debug");
204
            }
199
            }
205
        }
200
        }
206
    }
201
    }
207
   
202
   
208
    private function traiterEnteteMessage($entetes) {
203
    private function traiterEnteteMessage($entetes) {
209
        if (isset($entetes['messages'])) {
204
        if (isset($entetes['messages'])) {
210
            $date = $entetes['date'];
205
            $date = $entetes['date'];
211
            $uri = $entetes['uri'];
206
            $uri = $entetes['uri'];
212
            $messages = $entetes['messages'];
207
            $messages = $entetes['messages'];
213
            foreach ($messages as $message) {
208
            foreach ($messages as $message) {
214
                Debug::printr("MESSAGE : $date - $uri :\n$message");
209
                Debug::printr("MESSAGE : $date - $uri :\n$message");
215
            }
210
            }
216
        }
211
        }
217
    }
212
    }
218
   
213
   
219
    private function reinitialiser() {
214
    private function reinitialiser() {
220
        $this->viderDistinction();
215
        $this->viderDistinction();
221
        $this->viderLimite();
216
        $this->viderLimite();
222
        $this->viderOrdre();
217
        $this->viderOrdre();
223
    }
218
    }
224
}
219
}
225
?>
220
?>