Rev 249 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php//vim: set expandtab tabstop=4 shiftwidth=4:// Copyright (C) 1999-2006 Tela Botanica (accueil@tela-botanica.org)//// Ce logiciel est un programme informatique servant à gérer du contenu et des// applications web.// Ce logiciel est regi par la licence CeCILL soumise au droit francais et// respectant les principes de diffusion des logiciels libres. Vous pouvez// utiliser, modifier et/ou redistribuer ce programme sous les conditions// de la licence CeCILL telle que diffusee par le CEA, le CNRS et l'INRIA// sur le site "http://www.cecill.info".// En contrepartie de l'accessibilite au code source et des droits de copie,// de modification et de redistribution accordes par cette licence, il n'est// offert aux utilisateurs qu'une garantie limitee. Pour les memes raisons,// seule une responsabilite restreinte pese sur l'auteur du programme, le// titulaire des droits patrimoniaux et les concedants successifs.// A cet egard l'attention de l'utilisateur est attiree sur les risques// associes au chargement, a l'utilisation, a la modification et/ou au// developpement et a la reproduction du logiciel par l'utilisateur etant// donne sa specificite de logiciel libre, qui peut le rendre complexe a// manipuler et qui le reserve donc a des developpeurs et des professionnels// avertis possedant des connaissances informatiques approfondies. Les// utilisateurs sont donc invites a charger et tester l'adequation du// logiciel a leurs besoins dans des conditions permettant d'assurer la// securite de leurs systemes et ou de leurs donnees et, plus generalement,// a l'utiliser et l'exploiter dans les memes conditions de securite.// Le fait que vous puissiez acceder a cet en-tete signifie que vous avez// pris connaissance de la licence CeCILL, et que vous en avez accepte les// termes.// ----// CVS : $Id: ezmlmAccessObject.class.php,v 1.6 2008-08-25 15:16:59 alexandre_tb Exp $/*** Application projet** La classe ezmlmAccessObject**@package projet//Auteur original :*@author Alexandre Granier <alexandre@tela-botanica.org>//Autres auteurs :*@author Aucun*@copyright Tela-Botanica 2000-2006*@version $Revision: 1.6 $// +------------------------------------------------------------------------------------------------------+*//** Etend XML_Parser_Simple */require_once 'XML/Parser/Simple.php' ;/*** Les codes erreurs*/define ('EZMLM_ACCESS_OBJECT_ACTION_NON_SUPPORTEE', 206) ;/*** classe ezmlmAccessObject parse les fichiers XML* issue de ezmlm** @category XML* @package projet* @author alex*/class ezmlmAccessObject extends XML_Parser_Simple {/*** Le domaine de la liste*/var $domaine ;/*** Le nom de la liste*/var $liste ;/*** Les actions valides*/var $actions_supportees = array ('calendrier_messages','message','derniers_messages','messages_auteur','messages_mois','messages_thread','supprimer','liste_abonnes','nombre_messages');/*** l'action selectionnee*/var $action ;/*** La langue 'fr-FR'*/var $langue ;/*** L'url de base*/var $url ;/*** L'identifiant du repertoire*/var $identifiant_repertoire ;/*** Identifiant message*/var $identifiant_message;/*** L'identifiant du repertoire*/var $_numeroRepertoireSuivant ;/*** L'identifiant du repertoire*/var $hash_auteur ;/*** Le mois a afficher*/var $mois ;var $_numeraRepertoirePrecedent;/*** Identifiant message*/var $_numeroFichierSuivant;var $_numeroFichierPrecedent;var $chemin_fichier_xml;/*** Creation de l'objet d'acces**/function ezmlmAccessObject ($action, $domaine, $liste, $langue = 'fr', $url = '') {$this->XML_Parser_Simple(null, 'func') ;$this->action = $action ;$this->domaine = $domaine ;$this->liste = $liste ;$this->langue = $langue ;$this->url = $url ;}/*** Gestion des balises** Cette methode specifie les balises reconnus par ezmlmAccessObject* Elle remplace la methode handleElement de XML_Parser_Simple** @access public* @param string nom de l'element (Voir la doc de PHP)* @param array attributes* @param* @link http://fr.php.net/manual/fr/ref.xml.php manuel*/function handleElement_ezmlm_message ($name, $attribs, $data) {echo $data ;}function handleElement_message_suivant ($name, $attribs, $data) {$this->_numeroRepertoireSuivant = $attribs['NUMERO_REPERTOIRE'] ;$this->_numeroFichierSuivant = $attribs['NUMERO'] ;}function handleElement_message_precedent ($name, $attribs, $data) {$this->_numeroRepertoirePrecedent = $attribs['NUMERO_REPERTOIRE'] ;$this->_numeroFichierPrecedent = $attribs['NUMERO'] ;}function handleElement_ezmlm_calendrier_messages ($name, $attribs, $data) { echo $data ; }function handleElement_ezmlm_derniers_messages ($name, $attribs, $data) { echo $data ; }function handleElement_ezmlm_messages_auteur ($name, $attribs, $data) { echo $data ; }function handleElement_ezmlm_messages_mois ($name, $attribs, $data) { echo $data ; }function handleElement_ezmlm_messages_thread ($name, $attribs, $data) { echo $data ; }function handleElement_ezmlm_liste_abonnes ($name, $attribs, $data) { echo $data ; }function handleElement_ezmlm_nombre_messages ($name, $attribs, $data) { echo $data ; }/*** Choix de l'action** Liste des actions :* 'calendrier_messages'** @access public* @param string une action qui doit etre supporté*/function setAction($action) {// verification de l'actionif (!in_array($action, $this->actions_supportees)) {return raiseError(EZMLM_ACCESS_OBJECT_ACTION_NON_SUPPORTEE) ;}$this->action = $action ;// Libere les ressources (XML_Parser::free)$this->free();// On vide l url//$this->url = '';$this->chemin_fichier_xml = '';// Charge la nouvelle action$this->load() ;}/*** Charge une action** cad affecte un fichier xml au parser** @access public*/function load() {$this->chemin_fichier_xml = PROJET_SERVEUR_VPOPMAIL.'/'.$this->action.'.php?domaine='.$this->domaine.'&liste='.$this->liste.'&langue='.$this->langue ;if ($this->url != '') $this->chemin_fichier_xml.= '&url='.urlencode($this->url) ;if (isset ($this->identifiant_repertoire))$this->chemin_fichier_xml .= '&actionargs[]='.$this->identifiant_repertoire ;if (isset ($this->identifiant_message))$this->chemin_fichier_xml .= '&actionargs[]='.$this->identifiant_message ;if (isset ($this->hash_auteur))$this->chemin_fichier_xml .= '&actionargs[]='.$this->hash_auteur ;if (isset ($this->mois))$this->chemin_fichier_xml .= '&actionargs[]='.$this->mois ;$this->setInputFile($this->chemin_fichier_xml) ;}/*** Precise un message a extraire** On indique le numero de repertoire ezmlm et le numero du message* @param integer le numero du repertoire* @param integer le numero du message**/function setIdMessage ($identifiant_repertoire, $identifiant_message) {$this->identifiant_repertoire = $identifiant_repertoire ;$this->identifiant_message = $identifiant_message ;}/*** Precise un auteur** On indique le numero de repertoire ezmlm et le numero du message* @param string le hash d'un auteur**/function setHashAuteur ($hash_auteur) {$this->hash_auteur = $hash_auteur;}/*** Precise un mois** On indique le numero de repertoire ezmlm et le numéro du message* @param string le hash d'un auteur**/function setMois ($mois) {$this->mois = $mois;}/*** Renvoi le numero du repertoire suivant***/function getNumeroRepertoireSuivant() { return $this->_numeroRepertoireSuivant; }function getNumeroFichierSuivant () { return $this->_numeroFichierSuivant ; }function getNumeroRepertoirePrecedent() { return $this->_numeroRepertoirePrecedent; }function getNumeroFichierPrecedent () { return $this->_numeroFichierPrecedent ; }function getNumeroMessage () { return $this->_numeroMessage ; }function getNombreTotalMessage () { return $this->_nombreTotalMessage ; }function parse(){if (substr(phpversion(), 0, 1) == '5') {try {$xml = new SimpleXMLElement($this->chemin_fichier_xml, null, true);switch ($this->action) {case 'calendrier_messages' :echo utf8_decode($xml);echo utf8_decode($xml->ezmlm_calendrier_messages);break;case 'message':echo utf8_decode ($xml);$this->_numeroRepertoirePrecedent = $xml->message_precedent['numero_repertoire'];$this->_numeroRepertoireSuivant = $xml->message_suivant['numero_repertoire'];$this->_numeroFichierSuivant = $xml->message_suivant['numero'];$this->_numeroFichierPrecedent = $xml->message_precedent['numero'];$this->_numeroMessage = $xml->numero;$this->_nombreTotalMessage = $xml->numero['total_message'];break;case 'nombre_messages':echo $xml[0];break;case 'liste_abonnes':return $xml;break;default :echo utf8_decode($xml);}$error = 'Erreur dans l\'accès au fichier:<br />'.$this->chemin_fichier_xml.'<br />';$error = '';throw new Exception($error);}catch (Exception $e) {echo $e->getMessage().'<br />';//echo $this->chemin_fichier_xml;}} else {return parent::parse();}}}?>