Subversion Repositories Applications.projet

Rev

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

Rev Author Line No. Line
106 alexandre_ 1
<?php
2
//vim: set expandtab tabstop=4 shiftwidth=4:
3
 
4
// Copyright (C) 1999-2006 Tela Botanica (accueil@tela-botanica.org)
5
//
6
// Ce logiciel est un programme informatique servant à gérer du contenu et des
7
// applications web.
8
 
249 alexandre_ 9
// Ce logiciel est regi par la licence CeCILL soumise au droit francais et
106 alexandre_ 10
// respectant les principes de diffusion des logiciels libres. Vous pouvez
11
// utiliser, modifier et/ou redistribuer ce programme sous les conditions
249 alexandre_ 12
// de la licence CeCILL telle que diffusee par le CEA, le CNRS et l'INRIA
106 alexandre_ 13
// sur le site "http://www.cecill.info".
14
 
249 alexandre_ 15
// En contrepartie de l'accessibilite au code source et des droits de copie,
16
// de modification et de redistribution accordes par cette licence, il n'est
17
// offert aux utilisateurs qu'une garantie limitee.  Pour les memes raisons,
18
// seule une responsabilite restreinte pese sur l'auteur du programme,  le
19
// titulaire des droits patrimoniaux et les concedants successifs.
106 alexandre_ 20
 
249 alexandre_ 21
// A cet egard  l'attention de l'utilisateur est attiree sur les risques
22
// associes au chargement,  a l'utilisation,  a la modification et/ou au
23
// developpement et a la reproduction du logiciel par l'utilisateur etant
24
// donne sa specificite de logiciel libre, qui peut le rendre complexe a
25
// manipuler et qui le reserve donc a des developpeurs et des professionnels
26
// avertis possedant  des  connaissances  informatiques approfondies.  Les
27
// utilisateurs sont donc invites a charger  et  tester  l'adequation  du
28
// logiciel a leurs besoins dans des conditions permettant d'assurer la
29
// securite de leurs systemes et ou de leurs donnees et, plus generalement,
30
// a l'utiliser et l'exploiter dans les memes conditions de securite.
106 alexandre_ 31
 
249 alexandre_ 32
// Le fait que vous puissiez acceder a cet en-tete signifie que vous avez
33
// pris connaissance de la licence CeCILL, et que vous en avez accepte les
106 alexandre_ 34
// termes.
35
// ----
249 alexandre_ 36
// CVS : $Id: ezmlmAccessObject.class.php,v 1.5 2007-06-25 12:15:06 alexandre_tb Exp $
106 alexandre_ 37
 
38
/**
39
* Application projet
40
*
41
* La classe ezmlmAccessObject
42
*
43
*@package projet
44
//Auteur original :
45
*@author        Alexandre Granier <alexandre@tela-botanica.org>
46
//Autres auteurs :
47
*@author        Aucun
48
*@copyright     Tela-Botanica 2000-2006
249 alexandre_ 49
*@version       $Revision: 1.5 $
106 alexandre_ 50
// +------------------------------------------------------------------------------------------------------+
51
*/
52
 
53
/** Etend XML_Parser_Simple */
54
require_once 'XML/Parser/Simple.php' ;
55
 
56
/**
57
 * Les codes erreurs
58
 */
59
 
60
define ('EZMLM_ACCESS_OBJECT_ACTION_NON_SUPPORTEE', 206) ;
61
/**
62
 * classe ezmlmAccessObject parse les fichiers XML
63
 * issue de ezmlm
64
 *
65
 * @category XML
66
 * @package projet
67
 * @author alex
68
 */
69
 
70
class ezmlmAccessObject extends XML_Parser_Simple {
71
 
72
	/**
73
	 * Le domaine de la liste
74
	 */
75
 
76
	var $domaine ;
77
 
78
	 /**
79
	  * Le nom de la liste
80
	 */
81
 
82
	var $liste ;
83
 
84
	  /**
85
	  * Les actions valides
86
	  */
87
 
88
	var $actions_supportees = array ('calendrier_messages',
116 alexandre_ 89
									 'message',
90
									 'derniers_messages',
91
									 'messages_auteur',
92
									 'messages_mois',
93
									 'messages_thread',
249 alexandre_ 94
									 'supprimer',
95
									 'liste_abonnes');
106 alexandre_ 96
 
97
	/**
249 alexandre_ 98
	* l'action selectionnee
106 alexandre_ 99
	*/
100
	var $action ;
101
 
102
	/**
103
	 * La langue 'fr-FR'
104
	 */
105
	 var $langue ;
106
 
107
	/**
108
	 * L'url de base
109
	 */
110
	 var $url ;
111
 
112
	/**
249 alexandre_ 113
	 * L'identifiant du repertoire
106 alexandre_ 114
	 */
115
	var $identifiant_repertoire ;
116
 
117
	/**
118
	 * Identifiant message
119
	 */
120
 
121
	var $identifiant_message;
122
 
123
	/**
249 alexandre_ 124
	 * L'identifiant du repertoire
106 alexandre_ 125
	 */
126
	var $_numeroRepertoireSuivant ;
127
 
116 alexandre_ 128
	/**
249 alexandre_ 129
	 * L'identifiant du repertoire
116 alexandre_ 130
	 */
131
	var $hash_auteur ;
132
 
133
	/**
249 alexandre_ 134
	 * Le mois a afficher
116 alexandre_ 135
	 */
136
	var $mois ;
137
 
106 alexandre_ 138
	var $_numeraRepertoirePrecedent;
139
 
140
	/**
141
	 * Identifiant message
142
	 */
143
 
144
	var $_numeroFichierSuivant;
145
 
146
	var $_numeroFichierPrecedent;
147
 
136 alexandre_ 148
	var $chemin_fichier_xml;
149
 
106 alexandre_ 150
	/**
249 alexandre_ 151
	 * Creation de l'objet d'acces
106 alexandre_ 152
	 *
153
	 */
154
 
155
	function ezmlmAccessObject ($action, $domaine, $liste, $langue = 'fr', $url = '') {
156
		$this->XML_Parser_Simple(null, 'func') ;
157
		$this->action = $action ;
158
		$this->domaine = $domaine ;
159
		$this->liste = $liste ;
160
		$this->langue = $langue ;
161
		$this->url = $url ;
162
	}
163
 
164
	/**
165
	 * Gestion des balises
166
	 *
208 neiluj 167
	 * Cette méthode spàcifie les balises reconnus par ezmlmAccessObject
106 alexandre_ 168
	 * Elle remplace la méthode handleElement de XML_Parser_Simple
169
	 *
170
	 * @access public
171
	 * @param string nom de l'élément (Voir la doc de PHP)
172
	 * @param array attributes
173
	 * @param
174
	 * @link http://fr.php.net/manual/fr/ref.xml.php manuel
175
	 */
176
 
177
	function handleElement_ezmlm_message ($name, $attribs, $data) {
178
		echo $data ;
179
	}
180
 
181
	function handleElement_message_suivant ($name, $attribs, $data) {
182
		$this->_numeroRepertoireSuivant = $attribs['NUMERO_REPERTOIRE'] ;
183
		$this->_numeroFichierSuivant = $attribs['NUMERO'] ;
184
	}
185
 
186
	function handleElement_message_precedent ($name, $attribs, $data) {
187
		$this->_numeroRepertoirePrecedent = $attribs['NUMERO_REPERTOIRE'] ;
188
		$this->_numeroFichierPrecedent = $attribs['NUMERO'] ;
189
	}
190
	function handleElement_ezmlm_calendrier_messages ($name, $attribs, $data) { echo $data ; }
116 alexandre_ 191
 
192
	function handleElement_ezmlm_derniers_messages ($name, $attribs, $data) { echo $data ; }
193
 
194
	function handleElement_ezmlm_messages_auteur ($name, $attribs, $data) { echo $data ; }
195
 
196
	function handleElement_ezmlm_messages_mois ($name, $attribs, $data) { echo $data ; }
197
 
198
	function handleElement_ezmlm_messages_thread ($name, $attribs, $data) { echo $data ; }
199
 
249 alexandre_ 200
	function handleElement_ezmlm_liste_abonnes ($name, $attribs, $data) { echo $data ; }
106 alexandre_ 201
	/**
202
	 * Choix de l'action
203
	 *
204
	 * Liste des actions :
205
	 * 'calendrier_messages'
206
	 *
207
	 * @access public
249 alexandre_ 208
	 * @param string	une action qui doit etre supporté
106 alexandre_ 209
	 */
210
 
211
	function setAction($action) {
249 alexandre_ 212
		// verification de l'action
106 alexandre_ 213
		if (!in_array($action, $this->actions_supportees)) {
214
			return raiseError(EZMLM_ACCESS_OBJECT_ACTION_NON_SUPPORTEE) ;
215
		}
216
		$this->action = $action ;
217
 
218
		// Libere les ressources (XML_Parser::free)
219
		$this->free();
220
 
249 alexandre_ 221
		// On vide l url
222
		//$this->url = '';
223
		$this->chemin_fichier_xml = '';
106 alexandre_ 224
		// Charge la nouvelle action
225
		$this->load() ;
226
	}
227
 
228
	/**
229
	 * Charge une action
230
	 *
231
	 * cad affecte un fichier xml au parser
232
	 *
233
	 * @access public
234
	 */
235
	function load() {
136 alexandre_ 236
		$this->chemin_fichier_xml = PROJET_SERVEUR_VPOPMAIL.'/'.$this->action.'.php?domaine='.
106 alexandre_ 237
                         $this->domaine.'&liste='.$this->liste.'&langue='.
238
                         $this->langue ;
136 alexandre_ 239
		if ($this->url != '') $this->chemin_fichier_xml.= '&url='.urlencode($this->url) ;
106 alexandre_ 240
		if (isset ($this->identifiant_repertoire))
136 alexandre_ 241
			$this->chemin_fichier_xml .= '&actionargs[]='.$this->identifiant_repertoire ;
106 alexandre_ 242
		if (isset ($this->identifiant_message))
136 alexandre_ 243
			$this->chemin_fichier_xml .= '&actionargs[]='.$this->identifiant_message ;
116 alexandre_ 244
		if (isset ($this->hash_auteur))
136 alexandre_ 245
			$this->chemin_fichier_xml .= '&actionargs[]='.$this->hash_auteur ;
116 alexandre_ 246
		if (isset ($this->mois))
136 alexandre_ 247
			$this->chemin_fichier_xml .= '&actionargs[]='.$this->mois ;
106 alexandre_ 248
 
136 alexandre_ 249
		$this->setInputFile($this->chemin_fichier_xml) ;
106 alexandre_ 250
	}
251
 
252
	/**
249 alexandre_ 253
	 * Precise un message a extraire
106 alexandre_ 254
	 *
249 alexandre_ 255
	 * On indique le numero de repertoire ezmlm et le numero du message
256
	 * @param	integer	le numero du repertoire
257
	 * @param 	integer le numero du message
106 alexandre_ 258
	 *
259
	 */
260
 
261
	 function setIdMessage ($identifiant_repertoire, $identifiant_message) {
262
	 	$this->identifiant_repertoire = $identifiant_repertoire ;
263
	 	$this->identifiant_message = $identifiant_message ;
264
	 }
265
 
116 alexandre_ 266
	 	/**
249 alexandre_ 267
	 * Precise un auteur
116 alexandre_ 268
	 *
249 alexandre_ 269
	 * On indique le numero de repertoire ezmlm et le numero du message
116 alexandre_ 270
	 * @param	string	le hash d'un auteur
271
	 *
272
	 */
273
 
274
	 function setHashAuteur ($hash_auteur) {
275
	 	$this->hash_auteur = $hash_auteur;
276
	 }
106 alexandre_ 277
	 /**
249 alexandre_ 278
	 * Precise un mois
116 alexandre_ 279
	 *
249 alexandre_ 280
	 * On indique le numero de repertoire ezmlm et le numéro du message
116 alexandre_ 281
	 * @param	string	le hash d'un auteur
282
	 *
283
	 */
284
 
285
	 function setMois ($mois) {
286
	 	$this->mois = $mois;
287
	 }
288
 
289
	 /**
106 alexandre_ 290
	  * Renvoi le numero du repertoire suivant
291
	  *
292
	  *
293
	 */
294
	 function getNumeroRepertoireSuivant() { return $this->_numeroRepertoireSuivant; }
295
 
296
	 function getNumeroFichierSuivant () { return $this->_numeroFichierSuivant ; }
297
 
298
	 function getNumeroRepertoirePrecedent() { return $this->_numeroRepertoirePrecedent; }
299
 
300
	 function getNumeroFichierPrecedent () { return $this->_numeroFichierPrecedent ; }
136 alexandre_ 301
 
302
	 function parse()
303
    {
304
  		if (substr(phpversion(), 0, 1) == '5') {
249 alexandre_ 305
  			//try {
306
			    $xml = new SimpleXMLElement($this->chemin_fichier_xml, null, true);
307
			    switch ($this->action) {
308
  				case 'calendrier_messages' :echo utf8_decode($xml);
309
	  				echo utf8_decode($xml->ezmlm_calendrier_messages);
310
	  				break;
311
	  				case 'message':
312
	  				echo utf8_decode ($xml);
313
	  				$this->_numeroRepertoirePrecedent = $xml->message_precedent['numero_repertoire'];
314
	  				$this->_numeroRepertoireSuivant = $xml->message_suivant['numero_repertoire'];
315
	  				$this->_numeroFichierSuivant = $xml->message_suivant['numero'];
316
	  				$this->_numeroFichierPrecedent = $xml->message_precedent['numero'];
208 neiluj 317
  				break;
249 alexandre_ 318
  				default :
319
  					echo utf8_decode($xml);
320
  				}
321
			    $error = 'Erreur dans l\'acc&egrave;s au fichier:<br />'.$this->chemin_fichier_xml.'<br />';
322
			    $error = '';
323
			 //   throw new Exception($error);
324
			//}
325
			//catch (Exception $e) {
326
			//    echo $e->getMessage(). "<br />";
327
			//}
328
 
136 alexandre_ 329
  		} else {
330
  			return parent::parse();
331
  		}
332
    }
106 alexandre_ 333
}
334
 
335
?>