Subversion Repositories Applications.projet

Rev

Rev 136 | 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 régi par la licence CeCILL soumise au droit français 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 diffusée par le CEA, le CNRS et l'INRIA 
// sur le site "http://www.cecill.info".

// En contrepartie de l'accessibilité au code source et des droits de copie,
// de modification et de redistribution accordés par cette licence, il n'est
// offert aux utilisateurs qu'une garantie limitée.  Pour les mêmes raisons,
// seule une responsabilité restreinte pèse sur l'auteur du programme,  le
// titulaire des droits patrimoniaux et les concédants successifs.

// A cet égard  l'attention de l'utilisateur est attirée sur les risques
// associés au chargement,  à l'utilisation,  à la modification et/ou au
// développement et à la reproduction du logiciel par l'utilisateur étant 
// donné sa spécificité de logiciel libre, qui peut le rendre complexe à 
// manipuler et qui le réserve donc à des développeurs et des professionnels
// avertis possédant  des  connaissances  informatiques approfondies.  Les
// utilisateurs sont donc invités à charger  et  tester  l'adéquation  du
// logiciel à leurs besoins dans des conditions permettant d'assurer la
// sécurité de leurs systèmes et ou de leurs données et, plus généralement, 
// à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. 

// Le fait que vous puissiez accéder à cet en-tête signifie que vous avez 
// pris connaissance de la licence CeCILL, et que vous en avez accepté les
// termes.
// ----
// CVS : $Id: ezmlmAccessObject.class.php,v 1.4 2007-04-19 15:34:35 neiluj 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.4 $
// +------------------------------------------------------------------------------------------------------+
*/

/** 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');
           
        /**
        * l'action sélectionnée
        */
        var $action ;
        
        /**
         * La langue 'fr-FR'
         */
         var $langue ;
        
        /**
         * L'url de base
         */
         var $url ;
        
        /**
         * L'identifiant du répertoire
         */ 
        var $identifiant_repertoire ;
        
        /**
         * Identifiant message
         */
        
        var $identifiant_message;

        /**
         * L'identifiant du répertoire
         */ 
        var $_numeroRepertoireSuivant ;
        
        /**
         * L'identifiant du répertoire
         */ 
        var $hash_auteur ;
        
        /**
         * Le mois à afficher
         */ 
        var $mois ;
        
        var $_numeraRepertoirePrecedent;
        
        /**
         * Identifiant message
         */
        
        var $_numeroFichierSuivant;
        
        var $_numeroFichierPrecedent;
        
        var $chemin_fichier_xml;
        
        /**
         * Creation de l'objet d'accès
         * 
         *      
         */
        
        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 méthode spàcifie les balises reconnus par ezmlmAccessObject
         * Elle remplace la méthode handleElement de XML_Parser_Simple
         * 
         * @access public
         * @param string nom de l'élément (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 ; }
        
        /**
         * Choix de l'action
         * 
         * Liste des actions :
         * 'calendrier_messages'
         * 
         * @access public
         * @param string        une action qui doit être supporté
         */
        
        function setAction($action) {
                // vérification de l'action 
                if (!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();
                
                // 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) ;
        }
        
        /**
         * Précise un message à extraire
         * 
         * On indique le numéro de répertoire ezmlm et le numéro du message
         * @param       integer le numéro du répertoire
         * @param       integer le numéro du message
         * 
         */
         
         function setIdMessage ($identifiant_repertoire, $identifiant_message) {
                $this->identifiant_repertoire = $identifiant_repertoire ;
                $this->identifiant_message = $identifiant_message ;     
         }
         
                /**
         * Précise un auteur
         * 
         * On indique le numéro de répertoire ezmlm et le numéro du message
         * @param       string  le hash d'un auteur
         * 
         */
         
         function setHashAuteur ($hash_auteur) {
                $this->hash_auteur = $hash_auteur;      
         }
         /**
         * Précise un mois
         * 
         * On indique le numéro de répertoire 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 parse()
    {
                if (substr(phpversion(), 0, 1) == '5') {
                        $xml = new SimpleXMLElement(file_get_contents($this->chemin_fichier_xml));
                        echo utf8_decode ($xml);
                        switch ($this->action) {
                                case 'calendrier_messages' : echo utf8_decode($xml->ezmlm_calendrier_messages);
                                break;
                                case 'message':
                                $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'];
                        }
                } else {
                        return parent::parse();
                }
    }
}

?>