Rev 11 | Rev 260 | Go to most recent revision | 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.3 2006-07-04 09:27:40 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.3 $// +------------------------------------------------------------------------------------------------------+*/// +------------------------------------------------------------------------------------------------------+// | 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='.$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) ;}$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=".$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=".$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 ){$requete = 'select psu_id_statut from projet_statut_utilisateurs'.' where psu_id_utilisateur="'.$id_utilisateur.'" and psu_id_projet ='.$id_projet ;$resultat = $dbObject->query ($requete) ;if (DB::isError ($resultat)) {echo ('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=$id_utilisateur"." and psu_id_projet=0" ;if ($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='.$id_statut.' where psu_id_utilisateur='.$id_utilisateur.' and psu_id_projet='.$id_projet;if (participe::getStatutSurProjetCourant($id_utilisateur, $id_projet, $this->_db) == 4) {$requete = 'insert into projet_statut_utilisateurs set psu_id_statut='.$id_statut.', psu_id_utilisateur='.$id_utilisateur.',psu_id_projet='.$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='.$id_utilisateur.' and psu_id_projet='.$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 ){$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="'.$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 ($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 ($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='.$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)) {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 ;} // end of member function getCoordinateurs} // end of participe?>