Subversion Repositories Applications.projet

Rev

Rev 397 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org)                                         |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or                                        |
// | modify it under the terms of the GNU General Public                                                  |
// | License as published by the Free Software Foundation; either                                         |
// | version 2.1 of the License, or (at your option) any later version.                                   |
// |                                                                                                      |
// | This library is distributed in the hope that it will be useful,                                      |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU                                    |
// | General Public License for more details.                                                             |
// |                                                                                                      |
// | You should have received a copy of the GNU General Public                                            |
// | License along with this library; if not, write to the Free Software                                  |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: participe.class.php,v 1.6 2008-08-25 15:11:56 alexandre_tb Exp $
/**
* Application projet
*
* La classe partiicpe assure la jointure entre projet et Auth
* Elle se base sur la table projet_statut_utilisateur
*
*@package projet
//Auteur original :
*@author        Alexandre Granier <alexandre@tela-botanica.org>
//Autres auteurs :
*@author        Aucun
*@copyright     Tela-Botanica 2000-2004
*@version       $Revision: 1.6 $
// +------------------------------------------------------------------------------------------------------+
*/


// +------------------------------------------------------------------------------------------------------+
// |                                            ENTETE du PROGRAMME                                       |
// +------------------------------------------------------------------------------------------------------+


/**
 * class participe
 * 
 */
class participe
{
    /*** Attributes: ***/

    /**
     * Date d'inscription au projet de l'utilisateur.
     * @access private
     */
    var $_date_inscription;
    /**
     * Statut de l'utilisateur, un entier.
     * @access private
     */
    var $_statut;
    /**
     * Connexion à la base de donnée.
     * @access private
     */
    var $_db;

    /**
     * Constructeur. Nécessite un objet DB valide connecté à la base contenant les
     * tables projets.
     *
     * @param DB objetDB Un objet PEAR:DB valide.
     * @return void
     * @access public
     */
    function participe( &$objetDB )
    {
        $this->_db = $objetDB ;
    } // end of member function participe

    /**
     * Renvoie la liste des inscrit à un projet avec leur statut.
     *
     * @return Array
     * @access public
     */
    function getInscrits($id_projet, $droits )
    {
        $tableau_resultat = array() ;
        
        $requete = 'select psu_id_utilisateur,'.PROJET_CHAMPS_NOM.','.PROJET_CHAMPS_PRENOM.',' ;
        $requete .= PROJET_CHAMPS_MAIL.', ' ;
        $requete .= 'psu_date_inscription,  ps_id_statut '.
                    ' from projet_statut_utilisateurs, projet_statut,'.PROJET_ANNUAIRE.
                    ' where psu_id_projet='.$this->_db->escapeSimple($id_projet).' and psu_id_utilisateur='.PROJET_CHAMPS_ID.
                    ' and psu_id_statut=ps_id_statut order by ps_id_statut,'.PROJET_CHAMPS_NOM;
        $resultat = $this->_db->query ($requete) ;
        if (DB::isError($resultat)) {
            die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
        }
        while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ORDERED)) {
            array_push ($tableau_resultat, $ligne) ;
            $id = $ligne[0];
            $inscrits[$id]['nom'] = $ligne[1];
            $inscrits[$id]['prenom'] = $ligne[2];
            $inscrits[$id]['mail'] = $ligne[3];
            $inscrits[$id]['date'] = $ligne[4];
            $inscrits[$id]['id_statut'] = $ligne[5]; 
        }
        $resultat->free() ;
        return $tableau_resultat ;
    } // end of member function getInscrits

    /**
     * Renvoie un tableau contenant la liste des identifiants des projets et des statuts
     * d'un inscrit. 0 => ['psu_id_utilisateur']          ['psu_id_statut'] 1 => ...
     *
     * @param int id_utilisateur Un identifiant d'utilisateur pour le champs
     * projet_statut_utilisateurs:psu_id_utilisateur
     * @return Array
     * @access public
     */
    function getIdProjetsStatuts( $id_utilisateur )
    {
        $tableau_resultat = array() ;
        $requete = "select psu_id_utilisateur, psu_id_statut from projet_statut_utilisateurs".
                    " where psu_id_utilisateur=".$this->_db->escapeSimple($id_utilisateur) ;
        $resultat = $this->_db->query ($requete) ;
        if (DB::isError($resultat)) {
            die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
        }
        while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
            array_push ($tableau_resultat, $ligne) ;
        }
        $resultat->free() ;
        return $tableau_resultat ;
    } // end of member function getIdProjetsStatuts


    /**
     * Renvoie un tableau à 2 dimensions avec les informations sur l'inscription aux
     * différents projets d'un utilisateur. 0 => ['p_titre']         Le titre du projet 
     *         ['ps_label']    Le statut de l'utilisateur 1 => .... (autant que de
     * projets)
     *
     * @param int id_utilisateur L'identifiant d'un utilisateur.
     * @return Array
     * @access public
     */
    function getInformationsUtilisateurs( $id_utilisateur )
    {
        $tableau_resultat = array() ;
        $requete = "select p_titre, ps_statut_nom, psu_id_statut, psu_id_projet from projet_statut_utilisateurs, projet, projet_statut".
                    " where psu_id_utilisateur=".$this->_db->escapeSimple($id_utilisateur).
                    " and psu_id_projet = p_id and psu_id_statut = ps_id_statut" ;
        $resultat = $this->_db->query ($requete) ;
        if (DB::isError($resultat)) {
            die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
        }
        while ($ligne = $resultat->fetchRow()) {
            array_push ($tableau_resultat, $ligne) ;
        }
        $resultat->free() ;
        return $tableau_resultat ;
    } // end of member function getInformationsUtilisateurs


    /**
     * Renvoie le statut du projet passé en paramètre.
     *
     * @param int id_utilisateur 
     * @param int id_projet 
     * @param int dbObject 
     * @return int
     * @static
     * @access public
     */
    function getStatutSurProjetCourant( $id_utilisateur,  $id_projet,  &$dbObject )
    {
        
        if (participe::isAdministrateur($id_utilisateur, $dbObject)) return PROJET_DROIT_ADMINISTRATEUR;
        $requete = 'select psu_id_statut from projet_statut_utilisateurs'.
                    ' where psu_id_utilisateur='.$this->_db->escapeSimple($id_utilisateur).' and psu_id_projet ='.$this->_db->escapeSimple($id_projet) ;
        $resultat = $dbObject->query ($requete) ;
        if (DB::isError ($resultat)) {
            return DB::raiseError('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ;
        }
        $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ;
        if (!$resultat->numRows()) {
            return 4 ;      // Le statut ne participe pas
        }
        return $ligne->psu_id_statut ;
    } // end of member function getStatutSurProjetCourant

    /**
     * Réalise une requête dans projet_statut_utilisateurs et renvoie true si l'utilisateur
     * est administrateur de l'application projet.
     *
     * @param int id_utilisateur L'identifiant d'un utilisateur.
     * @param DB objetDB Un objet PEAR::DB
     * @return bool
     * @access public
     */
    function isAdministrateur( $id_utilisateur, $objetDB = "" )
    {
        // La table projet_statut_utilisateurs possède une entré avec psu_id_projet = 0
        // pour indiquer un administrateur
        $requete = "select psu_id_statut from projet_statut_utilisateurs where psu_id_utilisateur=".$this->_db->escapeSimple($id_utilisateur)." ".
                    " and psu_id_projet=0" ;
                    
        if (is_object ($objetDB)) {
            $resultat = $objetDB->query ($requete) ;
        } else {
            $resultat = $this->_db->query ($requete) ;
        }
        if ($resultat->numRows () != 0) {
            return true;
        }
        return false ;
    } // end of member function isAdministrateur

    /**
     * Met à jour le statut d'un utilisateur sur un projet
     *
     * @param int id_statut L'identifiant du statut à ajouter ou mettre à jour
     * @param int id_utilisateur Identifiant de l'utilisateur
     * @param int id_projet Identifiant du projet
     * @return bool
     * @access public
     */
    function setStatut( $id_statut,  $id_utilisateur,  $id_projet )
    {
        $requete = 'update projet_statut_utilisateurs set psu_id_statut='.$this->_db->escapeSimple($id_statut).
                    ' where psu_id_utilisateur='.$id_utilisateur.' and psu_id_projet='.$this->_db->escapeSimple($id_projet);
        
        if (participe::getStatutSurProjetCourant($id_utilisateur, $id_projet, $this->_db) == 4) {
            $requete = 'insert into projet_statut_utilisateurs set psu_id_statut='.$this->_db->escapeSimple($id_statut).
                    ', psu_id_utilisateur='.$this->_db->escapeSimple($id_utilisateur).',psu_id_projet='.$this->_db->escapeSimple($id_projet).
                    ', psu_date_inscription=NOW()';
        }
        if ($id_statut == 4) {  // Si le statut est ne participe pas, on supprime l'inscrit
            $requete = 'delete from projet_statut_utilisateurs where psu_id_utilisateur='.$this->_db->escapeSimple($id_utilisateur).' and psu_id_projet='.$this->_db->escapeSimple($id_projet) ;
        }
        $resultat = $this->_db->query ($requete) ;
        if (DB::isError ($resultat)) {
            die ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ;
        }
        return true ;
    } // end of member function setStatut

    /**
     * Renvoie vrai si l'utilisateur est coordinateur, faux dans les autres cas
     *
     * @param int id_utilisateur L'identifiant d'un utilisateur
     * @param DB objetDB Optionnel, nécessaire si on appelle cette méthode statiquement
     * @return bool
     * @static
     * @access public
     */
    function isCoordinateur( $id_utilisateur, $id_projet, &$objetDB )
    {
        if (!is_object($objetDB)) $objetDB = $this->_db;
        $statut = $this->getStatutSurProjetCourant($id_utilisateur,  $id_projet, $objetDB) ;
        if ($statut == 1) {
            return true;
        }
        return false ;
    } // end of member function isCoordinateur

    /**
     * Renvoie la liste des projets auquels l'utilisateur passé en paramètre ne
     * participe pas.
     *
     * @param int id_utilisateur L'identifiant de l'utilisateur.
     * @return Array
     * @access public
     */
    function getProjetsNonParticipant( $id_utilisateur )
    {
        $tableau_resultat = array() ;
        $requete = 'select p_id from projet'.
                    ' where p_id not in (select psu_id_projet from projet_statut_utilisateurs where psu_id_utilisateur='.$this->_db->escapeSimple($id_utilisateur).')' ;
        $resultat = $this->_db->query ($requete) ;
        if (DB::isError($resultat)) {
            die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
        }
        while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
            array_push ($tableau_resultat, new projet ($this->_db, $ligne->p_id)) ;
        }
        $resultat->free() ;
        return $tableau_resultat ;
    } // end of member function getProjetsNonParticipant

    /**
     * Renvoie true si l'utilisateur passé en paramètre est observateur du projet passé
     * en paramètre.
     *
     * @param int id_utilisateur L'identifiant de l'utilisateur
     * @param int id_projet L'identifiant du projet
     * @return bool
     * @access public
     */
    function isObservateur( $id_utilisateur,  $id_projet, &$objetDB )
    {
        if (!is_object($objetDB)) $objetDB = $this->_db;
        if ($this->getStatutSurProjetCourant($id_utilisateur, $id_projet, $objetDB) == 3) {
            return true;
        }
        return false ;
    } // end of member function isObservateur

    /**
     * Renvoie true si l'utilisateur passé en paramètre est contributeur du projet passé
     * en paramètre.
     *
     * @param int id_utilisateur L'identifiant de l'utilisateur
     * @param int id_projet L'identifiant du projet
     * @return bool
     * @access public
     */
    function isContributeur( $id_utilisateur,  $id_projet, &$objetDB )
    {
        if (!is_object($objetDB)) $objetDB = $this->_db;
        if ($this->getStatutSurProjetCourant($id_utilisateur, $id_projet, $objetDB) == 4) return false; 
        if ($this->getStatutSurProjetCourant($id_utilisateur, $id_projet, $objetDB) == 2) {
            return true;
        }
        return false ;
    } // end of member function isObservateur

    /**
     * Renvoie true si l'utilisateur passé en paramètre est contributeur du projet passé
     * en paramètre.
     *
     * @param int id_utilisateur L'identifiant de l'utilisateur
     * @param int id_projet L'identifiant du projet
     * @return bool
     * @access public
     */
    function isEnAttente( $id_utilisateur,  $id_projet, &$objetDB )
    {
        if ($this->getStatutSurProjetCourant($id_utilisateur, $id_projet, $objetDB) == 3) {
            return true;
        }
        return false ;
    } // end of member function isObservateur

        /**
     * Renvoie les infos sur les coordinateurs d'un projet
     *
     * @param int id_projet L'identifiant du projet
     * @return array    Un tableau contenant les infos concernants les coordinateurs du projet
     * @access public
     */
    function getCoordinateurs($id_projet)
    {
        $tableau_resultat = array() ;
        
        $requete = 'select psu_id_utilisateur,'.PROJET_CHAMPS_NOM.','.PROJET_CHAMPS_PRENOM.',' ;
        $requete .= PROJET_CHAMPS_MAIL.', ' ;
        $requete .= 'psu_date_inscription,  ps_id_statut '.
                    ' from projet_statut_utilisateurs, projet_statut,'.PROJET_ANNUAIRE.
                    ' where psu_id_projet='.$this->_db->escapeSimple($id_projet).' and psu_id_utilisateur='.PROJET_CHAMPS_ID.
                    ' and psu_id_statut=ps_id_statut and psu_id_statut=1 order by ps_id_statut,'.PROJET_CHAMPS_NOM;
        $resultat = $this->_db->query ($requete) ;
        if (DB::isError($resultat)) {
            return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
        }
        while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ORDERED)) {
            array_push ($tableau_resultat, $ligne) ;
        }
        $resultat->free() ;
        return $tableau_resultat ;
    } // end of member function getCoordinateurs
    
    function getAdministrateurs () {
        
        $tableau_resultat = array() ;
        
        $requete = 'select psu_id_utilisateur,'.PROJET_CHAMPS_NOM.','.PROJET_CHAMPS_PRENOM.',' ;
        $requete .= PROJET_CHAMPS_MAIL.', ' ;
        $requete .= 'psu_date_inscription,  ps_id_statut '.
                    ' from projet_statut_utilisateurs, projet_statut,'.PROJET_ANNUAIRE.
                    ' where psu_id_utilisateur='.PROJET_CHAMPS_ID.
                    ' and psu_id_statut=ps_id_statut and psu_id_statut=0 order by ps_id_statut,'.PROJET_CHAMPS_NOM;
        $resultat = $this->_db->query ($requete) ;
        if (DB::isError($resultat)) {
            die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
        }
        while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ORDERED)) {
            array_push ($tableau_resultat, $ligne) ;
        }
        $resultat->free() ;
        return $tableau_resultat ;
    }
    /** 
     * Renvoie la constante de statut d un utilisateur
     * 
     * define ('PROJET_DROIT_ADMINISTRATEUR', 1) ;
         * define ('PROJET_DROIT_COORDINATEUR', 2) ;
         * define ('PROJET_DROIT_PROPRIETAIRE', 4) ;
         * define ('PROJET_DROIT_CONTRIBUTEUR', 8) ;
         * define ('PROJET_DROIT_AUCUN', 16) ;
         * define ('PROJET_DROIT_EN_ATTENTE', 32);
         * 
         * @access      public
         * @return int  La constante de statut
     */
     
     function getStatut($id_utilisateur, $id_projet)
     {
        $statut = $this->getStatutSurProjetCourant($id_utilisateur, $id_projet, $this->_db);
        switch ($statut) 
        {
                case 0 : return PROJET_DROIT_ADMINISTRATEUR;
                break;
                case 1 : return PROJET_DROIT_COORDINATEUR;
                break;
                case 2 : return PROJET_DROIT_CONTRIBUTEUR;
                break;
                case 3 : return PROJET_DROIT_EN_ATTENTE;
                break;
                default : return PROJET_DROIT_AUCUN;
        }
     }
} // end of participe
?>