1,1000 → 1,986 |
<?php |
/*vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +------------------------------------------------------------------------------------------------------+ |
// | PHP version 4.1 | |
// +------------------------------------------------------------------------------------------------------+ |
// | 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: projet.class.php,v 1.14 2008-09-16 14:11:05 alexandre_tb Exp $ |
/** |
* Application projet |
* |
* La classe projet |
* |
*@package projet |
//Auteur original : |
*@author Alexandre Granier <alexandre@tela-botanica.org> |
//Autres auteurs : |
*@author Aucun |
*@copyright Tela-Botanica 2000-2004 |
*@version $Revision: 1.14 $ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
|
|
// +------------------------------------------------------------------------------------------------------+ |
// | ENTETE du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
|
include_once PROJET_CHEMIN_CLASSES.'document.class.php' ; |
include_once PROJET_CHEMIN_CLASSES.'liste_discussion.class.php' ; |
/* Permet la recuperation d'un nouvel identifiant d'une table.*/ |
require_once PROJET_CHEMIN_BIBLIOTHEQUE_API.'sql/SQL_manipulation.fonct.php'; |
include_once 'Mail.php' ; |
|
// +------------------------------------------------------------------------------------------------------+ |
// | ENTETE du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
|
|
|
|
/** |
* class projet |
* |
*/ |
class projet |
{ |
|
/** Aggregations: */ |
|
/** |
* Le tableau d'objet document associés au projet |
* |
*/ |
var $_documents_associes = array(); |
|
var $_listes_associes = array(); |
|
/** Compositions: */ |
|
/*** Attributes: ***/ |
|
/** |
* L'identifiant du projet. |
* @access private |
*/ |
var $_id_projet; |
|
/** |
* Le titre du projet, tel que dans la base de donnée. |
* @access private |
*/ |
var $_titre; |
/** |
* La description du projet, tel que dans la base. |
* @access private |
*/ |
var $_description; |
/** |
* L'URL d'un site sur le projet. Facultatif. |
* @access private |
*/ |
var $_espace_internet; |
/** |
* Le nom du wikini associe au projet, avec la syntaxe wikini. Vide par defaut. |
* @access private |
*/ |
var $_nom_wikini; |
/** |
* Date de creation du projet. A priori ne varie pas dans le temps. |
* @access private |
*/ |
var $_date_creation; |
/** |
* Le chemin relatif vers le repertoire contenant les wikinis. |
* @access private |
*/ |
var $_chemin_wikini; |
/** |
* Une connexion vers la base de donnee. |
* @access private |
*/ |
var $_db; |
|
/** |
* Contient le nom du repertoire du projet tel que sur le disque. |
* @access private |
*/ |
var $_nom_repertoire; |
|
/** |
* Le chemin jusqu'au repertoire ou seront stockes les fichiers. |
* @access private |
*/ |
var $_chemin_repertoire; |
|
/** |
* Vaut vrai si le projet est un projet racine et s'il est le seul. |
* @access private |
*/ |
var $_est_racine; |
/** |
* Le resume du projet |
* @access private |
*/ |
var $_resume; |
/** |
* Contient le numero du type du projet |
* @access private |
*/ |
var $_type; |
|
/** |
* Indique si l'inscription au projet est moderes |
* @access private |
*/ |
var $_isModere; |
|
/** |
* Indique si le projet a des documents |
* @access private |
*/ |
var $_avoirDocument; |
|
/** |
* tableau contenant les themes associes au projet |
*/ |
var $_themes = array(); |
/** |
* |
* PHP5 |
* @return projet |
* @access public |
*/ |
function __construct( &$dbObject, $id_projet = "") |
{ |
$this->projet($dbObject, $id_projet); |
|
} // end of member function __construct |
|
/** |
* |
* |
* @param DB dbObject Un objet PEAR:DB |
* @param int id_projet On passe un identifiant de projet au constructeur. Cela lui permet de faire une |
* premiere requete pour les infos de bases comme le titre, le description etc. |
* @return projet |
* @access public |
*/ |
function projet( &$dbObject, $id_projet = "") |
{ |
$this->_db = $dbObject ; |
if (intval($id_projet)) { |
$resultat = $this->_db->query(sprintf("SELECT * FROM projet WHERE p_id=%d -- %s", |
intval($id_projet), |
__FILE__ . ':' . __LINE__)); |
if (DB::isError($resultat)) { |
die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
$ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT) ; |
|
// Affectations dans les proprietes |
$this->_id_projet = $ligne->p_id ; |
$this->_titre = $ligne->p_titre ; |
$this->_description = $ligne->p_description ; |
$this->_espace_internet = $ligne->p_espace_internet ; |
$this->_date_creation = $ligne->p_date_creation ; |
$this->_nom_wikini = $ligne->p_wikini ; |
$this->_resume = $ligne->p_resume; |
$this->_type = $ligne->p_type ; |
// On recupere le nom du repertoire |
$this->_nom_repertoire = $ligne->p_nom_repertoire ; |
$this->_isModere = $ligne->p_modere; |
$this->_avoirDocument = $ligne->p_avoir_document; |
// on regarde si on a a faire au projet racine |
if (PROJET_UTILISE_HIERARCHIE) { |
$requete = 'select ph_id_projet_pere, ph_id_projet_fils from projet_hierarchie where ph_id_projet_fils='.$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
return ("Echec de la requete : $requete<br />".$resultat->getMessage()) ; |
} |
if (!$resultat->numRows()) { |
$this->_est_racine = true ; |
} else { |
$this->_est_racine = false ; |
} |
} |
|
/** Recuperation des themes */ |
$requete_theme = 'select pat_id_theme, pt_label_theme from projet_avoir_theme, projet_theme'. |
' where pat_id_projet='.$this->_db->escapeSimple($this->_id_projet).' and pat_id_theme=pt_id_theme'; |
$resultat_theme = $GLOBALS['projet_db']->query ($requete_theme); |
if (DB::isError($resultat_theme)) { |
return ("Echec de la requete : $requete_theme<br />".$resultat_theme->getMessage()) ; |
} |
if ($resultat_theme->numRows() != 0) { |
|
while ($ligne_theme = $resultat_theme->fetchRow(DB_FETCHMODE_OBJECT)) { |
$this->_themes[$ligne_theme->pat_id_theme] = $ligne_theme->pt_label_theme; |
} |
|
} |
} |
} // end of member function projet |
|
/** |
* |
* |
* @param DB dbObject Un objet PEAR:DB |
* @param int id_projet On passe un identifiant de projet au constructeur. |
* @return bool |
* @access public |
*/ |
function projetExiste( &$dbObject, $id_projet) |
{ |
if (intval($id_projet)) { |
$resultat = $dbObject->query(sprintf("SELECT * FROM projet WHERE p_id=%d -- %s", |
intval($id_projet), |
__FILE__ . ':' . __LINE__)); |
if (DB::isError($resultat)) { |
die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
if ($resultat->numRows() != 0) { |
return true ; |
} |
} |
} // end of member function projet |
|
/** |
* |
* |
* @param int id_projet |
* @return string |
* @access public |
*/ |
function getTitre( $id_projet = "" ) |
{ |
return $this->_titre ; |
} // end of member function getTitre |
|
/** |
* |
* |
* @return string |
* @access public |
*/ |
function getResume( ) |
{ |
return $this->_resume ; |
} // end of member function getResume |
|
/** |
* Renvoie l'identifiant du projet courant. |
* |
* @return int |
* @access public |
*/ |
function getId( ) |
{ |
return $this->_id_projet ; |
} // end of member function getId |
|
/** |
* |
* |
* @return string |
* @access public |
*/ |
function getDescription( ) |
{ |
return $this->_description; |
} // end of member function getDescription |
|
/** |
* |
* |
* @return string |
* @access public |
*/ |
function getEspaceInternet( ) |
{ |
return $this->_espace_internet; |
} // end of member function getEspaceInternet |
|
/** |
* Charge dans l'objet projet, les listes de discussion |
* ['nom_liste'] |
* ['domaine'] |
* ['adresse'] |
* |
* @return boolean true en cas de succès |
* @access public |
*/ |
function getListesAssociees( ) |
{ |
// On rajoute un test pour eviter l'appel SQL si il a deja ete fait une fois |
if (count($this->_listes_associes) > 0) return ; |
$requete = "select pl_id_liste from projet_lien_liste where pl_id_projet=".$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
return ("Echec de la requete : $requete<br />".$resultat->getMessage()) ; |
} |
$retour = array() ; |
if ($resultat->numRows()) { |
$ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT) ; |
$this->_listes_associes[] = new liste_discussion($ligne->pl_id_liste, $this->_db) ; |
|
} |
} // end of member function getListesAssociees |
|
/** |
* Renvoie vrai si le projet a au moins une liste |
* |
* @return bool |
* @access public |
*/ |
function avoirListe( ) |
{ |
$this->getListesAssociees() ; |
if (count($this->_listes_associes)) { |
return true ; |
} |
return false ; |
} |
|
/** |
* Renvoie vrai si le projet a au moins un document, fichier ou repertoire |
* |
* Mis en place pour des raisons de performances avant la methode getListesDocuments etait utilisee |
* |
* @return bool |
* @access public |
*/ |
function avoirDocument( ) |
{ |
return $this->_avoirDocument; |
} |
|
/** |
* Permet de fixer la colonne p_avoir_document a 1 |
* |
* Mis en place pour des raisons de performances avant la methode getListesDocuments etait utilisee |
* |
* @param bool |
* @return mixed true si la requete fonctionne |
* @access public |
*/ |
function setAvoirDocument($bool) |
{ |
$val = 0 ; |
if ($bool) $val = 1; |
$requete = 'update projet set p_avoir_document='.$this->_db->escapeSimple($val).' where p_id='.$this->_db->escapeSimple($this->_id_projet); |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError($resultat)) { |
echo ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
return true; |
} |
|
/** |
* Renvoie la liste des documents associes sous forme d'un tableau, avec les |
* informations afferentes. 0 => "nom (cliquable)" |
"Taille" |
"Date |
* de creation" "Prorietaire" "Visibilite" "Action |
* (cliquable)" |
* |
* @param visibilite visibilite Si visibilite est prive, tous les fichiers sont renvoyes ainsi qu'une entree |
* pour indiquer la visibilite du document. |
* @return Array |
* @access public |
*/ |
function getListesDocuments( $chemin, $chemin_icones = "icones/", $id_repertoire = '', $date = '' ) |
{ |
// On realise une requete sur projet_documents avec une jointure sur l'annuaire |
// et sur gen_type_de_fichier pour envoyer un resultat complet. |
// On exclue les fichiers racines cad pd_pere is null |
$requete = "select pd_id from projet_documents where pd_ce_projet=".$this->_db->escapeSimple($this->_id_projet) ; |
if ($id_repertoire != '') $requete .= ' and pd_pere='.$this->_db->escapeSimple($id_repertoire); |
if ($id_repertoire != '' && $id_repertoire == 0) $requete .= ' and pd_pere=0'; |
if ($date != '') $requete .= ' and pd_date_de_mise_a_jour > date_sub (NOW(), interval 1 week)'; |
$requete .= ' order by pd_nom' ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError($resultat)) { |
return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
$tableau_document = array() ; |
// Un compteur |
$i = 0 ; |
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) { |
array_push ($tableau_document, new document ($ligne->pd_id, $i, $chemin, $chemin_icones)) ; |
} |
return $tableau_document ; |
} |
|
|
/** |
* Renvoie un tableau avec tous les repertoires d'un projet, imbrique. ['rep1'], |
* ['rep2'] => array (['rep21'], ['rep22']), etc . |
* |
* @return Array |
* @access public |
*/ |
function getListeRepertoireHierarchisee( ) |
{ |
// On ne prend que les repertoires |
$requete = "select pd_id, pd_pere, pd_nom from projet_documents where pd_ce_projet=".$this->_db->escapeSimple($this->_id_projet).' and pd_ce_type=0 order by pd_nom' ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError($resultat)) { |
return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
$tableau_document = array() ; |
/* |
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) { |
array_push ($tableau_document, new document ($ligne->pd_id, $this->_db)); |
} |
*/ |
$tableau = array(); |
$tab = array(); |
|
|
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) { |
array_push ($tableau, array ('id' => $ligne->pd_id, |
'id_pere' => $ligne->pd_pere, |
'fils' => array(), |
'label' => $ligne->pd_nom)); |
|
} |
|
// la $tableau reste un tableau de valeur a plat |
|
|
$i = 0; |
foreach ($tableau as $noeud) { |
// On teste si le noeud est racine si oui on l ajoute a l arbre sinon on ne l ajoute pas |
if ($noeud['id_pere'] == 0) { |
$tab[$i] = $noeud; |
$this->construireArbre($tab[$i], $tableau) ; |
} |
$i++; |
} |
return $tab; |
} // end of member function getListeRepertoireHierarchisee |
|
function construireArbre(&$noeud, $tableau) { |
$j = 0; |
foreach ($tableau as $element) { |
// pour chaque element on teste |
if ($element['id_pere'] == $noeud['id']) { |
$noeud['fils'][$j]= $element ; |
$this->construireArbre($noeud['fils'][$j],$tableau); |
} |
$j++; |
} |
} |
|
/** |
* Renvoie un tableau comprenant tous les objets projet de la base. |
* |
* @return Array |
* @static |
* @access public |
*/ |
function getTousLesProjets(&$objetDB, $exclu = '') |
{ |
$sql = ''; |
if (is_object($this) && isset ($this->_projet_exclu) && count($this->_projet_exclu)) { |
$sql = 'where p_id not in ('; |
foreach ($this->_projet_exclu as $valeur) { |
$sql .= $objetDB->escapeSimple($valeur).',' ; |
} |
$sql[count($sql)-1] = ')'; |
} |
$requete = 'select p_id from projet '.$sql.' order by p_titre' ; |
$resultat = $objetDB->query ($requete) ; |
if (DB::isError($resultat)) { |
echo ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
$tableau_resultat = array() ; |
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) { |
array_push ($tableau_resultat, new projet ($objetDB, $ligne->p_id)) ; |
} |
return $tableau_resultat ; |
} // end of member function getTousLesProjets |
|
/** |
* Renvoie un tableau comprenant les objets projet de la base du type $type. |
* |
* @return Array |
* @static |
* @access public |
*/ |
function getProjetDuType($type, &$objetDB) |
{ |
$requete = "select p_id from projet where p_type=".$objetDB->escapeSimple($type)." order by p_titre" ; |
$resultat = $objetDB->query ($requete) ; |
if (DB::isError($resultat)) { |
die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
$tableau_resultat = array() ; |
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) { |
array_push ($tableau_resultat, new projet ($objetDB, $ligne->p_id)) ; |
} |
return $tableau_resultat ; |
} // end of member function getTousLesProjets |
|
/** |
* Renvoie un le projet racine. |
* |
* @return projet |
* @static |
* @access public |
*/ |
function getProjetRacine(&$objetDB) |
{ |
$requete = "select p_id from projet where p_id not in (select ph_id_projet_fils from projet_hierarchie)" ; |
$resultat = $objetDB->query ($requete) ; |
if (DB::isError($resultat)) { |
die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
if ($resultat->numRows() == 1) { |
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ; |
return new projet($objetDB, $ligne->p_id) ; |
} |
$tableau_resultat = array() ; |
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) { |
array_push ($tableau_resultat, new projet ($objetDB, $ligne->p_id)) ; |
} |
return $tableau_resultat ; |
} // end of member function getTousLesProjets |
|
/** |
* Desctructeur de la classe. Libere la memoire, ferme les connexions et fichiers. |
* |
* @return void |
* @access public |
*/ |
function __destruct( ) |
{ |
|
} // end of member function __destruct |
|
/** |
* Supprime le projet courrant. Il s'ensuit une suppression en cascade de tous les |
* elements lies. |
* |
* @return void |
* @access public |
*/ |
function supprimer( ) |
{ |
|
} // end of member function supprimer |
|
/** |
* Permet d'enregistrer une ligne dans la table concernee. |
* |
* @param Array tableau_de_valeur Le tableau de valeur a inserer dans la base avec pour cle les noms des elements |
* du formulaire. |
* @return int |
* @access public |
*/ |
function enregistrerSQL( $tableau_de_valeur ) |
{ |
$nom_repertoire = projet::genereNomRepertoire($tableau_de_valeur['projet_titre'], $this->_db) ; |
if (!$this->_creationRepertoire ($nom_repertoire)) { |
echo 'Impossible de crée un répertoire'.$nom_repertoire ; |
return false ; |
} |
// Traitement du type |
if (!PROJET_UTILISE_TYPE) { |
$tableau_de_valeur['projet_type'] = 0 ; |
} |
$id = SQL_obtenirNouveauId($this->_db, 'projet', 'p_id') ; |
$requete = 'insert into projet set p_id='.$this->_db->escapeSimple($id) ; |
if (!isset($tableau_de_valeur['projet_wikini'])) { |
$tableau_de_valeur['projet_wikini']=''; |
} |
$requete .= ', p_titre="'.$tableau_de_valeur['projet_titre'].'", p_description="'.$tableau_de_valeur['projet_description'].'"'. |
', p_espace_internet="'.$tableau_de_valeur['projet_espace_internet'].'", p_date_creation=NOW()'. |
', p_wikini="'.$tableau_de_valeur['projet_wikini'].'", p_nom_repertoire="'.$nom_repertoire.'", p_resume="'.$tableau_de_valeur['projet_resume']. |
'", p_type="'.$tableau_de_valeur['projet_type'].'", p_modere="'.$tableau_de_valeur['projet_moderation'].'"' ; |
$resultat = $this->_db->query ($requete) ; |
|
if (DB::isError($resultat)) { |
return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
|
// On affecte a l'objet projet son identifiant |
$this->_id_projet = $id ; |
|
//insertion dans projet_herarchie |
if (PROJET_UTILISE_HIERARCHIE) { |
$requete = 'insert into projet_hierarchie set ph_id_projet_pere='.$this->_db->escapeSimple($tableau_de_valeur['projet_asso']). |
', ph_id_projet_fils='.$this->_db->escapeSimple($id) ; |
$resultat = $this->_db->query ($requete) ; |
} |
|
/** enregistrement dans projet_avoir_theme */ |
$requete_theme = ''; |
foreach ($tableau_de_valeur['projet_theme'] as $cle => $valeur) { |
$requete_theme = 'insert into projet_avoir_theme set pat_id_projet='.$this->_db->escapeSimple($id).', pat_id_theme='.$this->_db->escapeSimple($cle); |
$resultat_theme = $GLOBALS['projet_db']->query($requete_theme); |
if (DB::isError($resultat_theme)) { |
return $resultat_theme->getMessage(); |
} |
} |
return true ; |
} |
|
/** |
* Permet de mettre a jour une ligne dans la table concernee. |
* |
* @param Array tableau_de_valeur Le tableau de valeur a inserer dans la base avec pour cle les noms des elements |
* du formulaire. |
* @return int |
* @access public |
*/ |
function majSQL( $tableau_de_valeur ) |
{ |
// Traitement du type |
if (!PROJET_UTILISE_TYPE) { |
$tableau_de_valeur['projet_type'] = 0 ; |
} |
$requete = 'update projet set '; |
$requete .= 'p_titre="'.$tableau_de_valeur['projet_titre'].'", p_description="'.$tableau_de_valeur['projet_description'].'"'. |
', p_espace_internet="'.$tableau_de_valeur['projet_espace_internet'].'"'. |
', p_resume="'.$tableau_de_valeur['projet_resume'].'", p_type="'.$tableau_de_valeur['projet_type'].'"'. |
', p_modere='.$tableau_de_valeur['projet_moderation']. |
' where p_id="'.$this->_id_projet.'"' ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError($resultat)) { |
return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
|
if (PROJET_UTILISE_HIERARCHIE) { |
// suppression dans projet_hierarchie |
|
$requete = 'delete from projet_hierarchie where ph_id_projet_fils='.$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
|
//insertion dans projet_hierarchie |
|
$requete = 'insert into projet_hierarchie set ph_id_projet_pere='.$this->_db->escapeSimple($tableau_de_valeur['projet_asso']). |
', ph_id_projet_fils='.$this->_id_projet ; |
$resultat = $this->_db->query ($requete) ; |
} |
|
/** enregistrement dans projet_avoir_theme */ |
|
$requete_suppression_theme = 'delete from projet_avoir_theme where pat_id_projet='.$this->_db->escapeSimple($this->_id_projet); |
$resultat_suppression_theme = $GLOBALS['projet_db']->query($requete_suppression_theme); |
|
$requete_theme = ''; |
foreach ($tableau_de_valeur['projet_theme'] as $cle => $valeur) { |
$requete_theme = 'insert into projet_avoir_theme set pat_id_projet='.$this->_db->escapeSimple($this->_id_projet). |
', pat_id_theme='.$this->_db->escapeSimple($cle); |
$resultat_theme = $GLOBALS['projet_db']->query($requete_theme); |
if (DB::isError($resultat_theme)) { |
return $resultat_theme->getMessage(); |
} |
} |
return true ; |
} // end of member function enregistrerSQL |
|
/** |
* Met a jour dans la base de donnee le champs p_nom_wikini |
* |
* @param int nom_wikini Le nouveau nom wikini |
* @return bool |
* @access public |
*/ |
function majNomWikini( $nom_wikini ) |
{ |
$requete = 'update projet set p_wikini="'.$nom_wikini.'" where p_id="'.$this->_id_projet.'"' ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
return ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ; |
} |
return true ; |
} // end of member function majNomWikini |
|
function majSQLVisibilite($id_liste, $visible) { |
|
$requete = 'UPDATE projet_liste set pl_visibilite='.$this->_db->escapeSimple($visible).' '. |
'WHERE pl_id_liste ='.$id_liste; |
|
$resultat = $this->_db->query ($requete) ; |
if (DB::isError($resultat)) { |
die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
return true; |
} |
|
/** |
* |
* |
* @param string code_sql |
* @return bool |
* @access public |
*/ |
function suppressionSQL() |
{ |
$msg = '' ; |
// Supression du repertoire du projet |
if (!$this->_suppression_repertoire()) { |
$msg = 'La suppression du repertoire n\'a pas fonctionne' ; |
} |
// A ajouter la suppression des documents associes |
|
// La suppression des evenements associés |
|
// Le projet lui-meme |
$requete = "delete from projet where p_id=".$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
|
if (PROJET_UTILISE_HIERARCHIE) { |
$requete = "delete from projet_hierarchie where ph_id_projet_fils=".$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
} |
$requete = "delete from projet_statut_utilisateurs where psu_id_projet=".$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
return $msg ; |
} // end of member function suppressionSQL |
|
/** |
* Supprime le repertoire associe au projet (le repertoire doit etre vide). |
* |
* @return void |
* @access private |
*/ |
function _suppression_repertoire( ) |
{ |
return rmdir ($this->_chemin_repertoire.$this->_nom_repertoire) ; |
} // end of member function _suppression_repertoire |
|
/** |
* Permet de creer le repertoire associe au projet. |
* |
* @param string nom_repertoire Le nom du répertoire à créer. |
* @return boolean |
* @access private |
*/ |
function _creationRepertoire( $nom_repertoire ) |
{ |
return mkdir ($this->_chemin_repertoire.$nom_repertoire) ; |
} // end of member function _creationRepertoire |
|
/** |
* Permet d'indiquer ou seront stockes les fichiers. |
* |
* @param string cheminRepertoire Le chemin jusqu'au repertoire ou seront stockes les fichiers. |
* @return void |
* @access public |
*/ |
function setCheminRepertoire( $cheminRepertoire ) |
{ |
$this->_chemin_repertoire = $cheminRepertoire ; |
} // end of member function setCheminRepertoire |
|
/** |
* Genere un nom de repertoire a partir de la premiere lettre de la chaine passe en |
* parametre et de l'identifiant du dernier projet. |
* |
* @param string chaine Une chaine a partir de laquelle sera generer le nom du repertoire. |
* @param DB objetDB un objet PEAR::DB |
* @return string |
* @static |
* @access public |
*/ |
function genereNomRepertoire( $chaine, &$objetDB ) |
{ |
$requete = "select p_id from projet order by p_id desc limit 0,1" ; |
$resultat = $objetDB->query ($requete) ; |
if (DB::isError ($resultat)) { |
return ("Echec de la requete : $requete<br />".$resultat->getMessage()) ; |
} |
if ($resultat->numRows() > 0) { |
$ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT) ; |
$nom = strtoupper(substr($chaine, 0, 1)) ; |
$nom .= $ligne->p_id + 1 ; |
} |
else { |
$nom = strtoupper(substr($chaine, 0, 1)) ; |
$nom .= 1 ; |
} |
return $nom ; |
|
} // end of member function genereNomRepertoire |
|
/** |
* Permet de recuperer le nom du repertoire d'un projet. |
* |
* @return string |
* @access public |
*/ |
function getNomRepertoire( ) |
{ |
return $this->_nom_repertoire ; |
} // end of member function getNomRepertoire |
|
/** |
* Ajoute une liste a un projet |
* Effectue une insertion dans projet_lien_liste |
* |
* @param liste_discussion liste Une instance de la classe liste_discussion |
* @return void |
* @access public |
*/ |
function ajouterListe( &$liste ) |
{ |
$requete = "insert into projet_lien_liste set pl_id_liste=".$this->_db->escapeSimple($liste->getId()). |
', pl_id_projet='.$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
return ("Echec de la requete : $requete<br />".$resultat->getMessage()) ; |
} |
} |
|
/** |
* Supprime la liste de discussion associee au projet |
* |
* @return void |
* @access public |
*/ |
function supprimerListe(&$liste) |
{ |
$requete = 'delete from projet_lien_liste where pl_id_liste='.$this->_db->escapeSimple($liste->getId()) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
return ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ; |
} |
$requete = 'delete from projet_liste where pl_id_liste='.$this->_db->escapeSimple($liste->getId()) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
return ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ; |
} |
} |
|
|
/** |
* Renvoie vrai si le projet est racine. |
* |
* @return bool |
* @access public |
*/ |
function isRacine( ) |
{ |
return $this->_est_racine ; |
} // end of member function isRacine |
|
/** |
* Renvoie le nombre d'inscrits au projet. Effectue une requete dans la table |
* projet_statut_utilisateurs |
* |
* @return int |
* @access public |
*/ |
function getNombreInscrits( ) |
{ |
$requete = 'select count(psu_id_utilisateur) as nbre from projet_statut_utilisateurs where psu_id_projet='.$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
die ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ; |
} |
$ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT) ; |
return $ligne->nbre ; |
} // end of member function getNombreInscrits |
|
|
/** |
* Renvoie un tableau contenant les identifiants des fils du projet courant. |
* |
* @return Array |
* @access public |
*/ |
function getHierarchie( ) |
{ |
$requete = 'select ph_id_projet_fils from projet_hierarchie where ph_id_projet_pere='.$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
die ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ; |
} |
$tableau_resultat = array() ; |
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) { |
array_push ($tableau_resultat, $ligne->ph_id_projet_fils) ; |
} |
return $tableau_resultat ; |
} // end of member function getHierarchie |
|
/** |
* Renvoie l'identifiant du pere du projet courrant. |
* |
* @return int |
* @access public |
*/ |
function getIdPere() |
{ |
$requete = 'select ph_id_projet_pere from projet_hierarchie where ph_id_projet_fils='.$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
die ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ; |
} |
$tableau_resultat = array() ; |
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ; |
return $ligne->ph_id_projet_pere ; |
} // end of member function getIdPere() |
|
/** |
* Renvoie le nom Wiki du wikini associe au projet. |
* |
* @return string |
* @access public |
*/ |
function getWikini( ) |
{ |
return $this->_nom_wikini ; |
} // end of member function getWikini |
|
/** |
* Renvoie le type du projet, ou zero si le projet n'a pas de type. |
* |
* @return int |
* @access public |
*/ |
function getType( ) |
{ |
return $this->_type ; |
} // end of member function getType |
|
/** |
* Renvoie les themes du projet, ou zero si le projet n'a pas de type. |
* |
* @return int |
* @access public |
*/ |
function getThemes( ) |
{ |
return $this->_themes ; |
} // end of member function getType |
|
/** |
* Renvoie 1 si les inscriptions au projet sont moderees. |
* |
* @return int |
* @access public |
*/ |
function isModere( ) |
{ |
return $this->_isModere ; |
} // end of member function getType |
|
|
|
/** |
* initAttributes sets all projet attributes to its default value make |
* sure to call this method within your class constructor |
*/ |
function initAttributes( ) |
{ |
$this->chemin_wikini = "projet/wikini/"; |
} |
|
|
} // end of projet |
?> |
<?php |
/*vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +------------------------------------------------------------------------------------------------------+ |
// | PHP version 4.1 | |
// +------------------------------------------------------------------------------------------------------+ |
// | 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: projet.class.php,v 1.12 2008-05-21 14:35:26 alexandre_tb Exp $ |
/** |
* Application projet |
* |
* La classe projet |
* |
*@package projet |
//Auteur original : |
*@author Alexandre Granier <alexandre@tela-botanica.org> |
//Autres auteurs : |
*@author Aucun |
*@copyright Tela-Botanica 2000-2004 |
*@version $Revision: 1.12 $ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
|
|
// +------------------------------------------------------------------------------------------------------+ |
// | ENTETE du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
|
include_once PROJET_CHEMIN_CLASSES.'document.class.php' ; |
include_once PROJET_CHEMIN_CLASSES.'liste_discussion.class.php' ; |
/* Permet la r�cup�ration d'un nouvel identifiant d'une table.*/ |
require_once PROJET_CHEMIN_BIBLIOTHEQUE_API.'sql/SQL_manipulation.fonct.php'; |
include_once 'Mail.php' ; |
|
// +------------------------------------------------------------------------------------------------------+ |
// | ENTETE du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
|
|
|
|
/** |
* class projet |
* |
*/ |
class projet |
{ |
|
/** Aggregations: */ |
|
/** |
* Le tableau d'objet document associ�s au projet |
* |
*/ |
var $_documents_associes = array(); |
|
var $_listes_associes = array(); |
|
/** Compositions: */ |
|
/*** Attributes: ***/ |
|
/** |
* L'identifiant du projet. |
* @access private |
*/ |
var $_id_projet; |
|
/** |
* Le titre du projet, tel que dans la base de donn�e. |
* @access private |
*/ |
var $_titre; |
/** |
* La description du projet, tel que dans la base. |
* @access private |
*/ |
var $_description; |
/** |
* L'URL d'un site sur le projet. Facultatif. |
* @access private |
*/ |
var $_espace_internet; |
/** |
* Le nom du wikini associ� au projet, avec la syntaxe wikini. Vide par d�faut. |
* @access private |
*/ |
var $_nom_wikini; |
/** |
* Date de cr�ation du projet. A priori ne varie pas dans le temps. |
* @access private |
*/ |
var $_date_creation; |
/** |
* Le chemin relatif vers le r�pertoire contenant les wikinis. |
* @access private |
*/ |
var $_chemin_wikini; |
/** |
* Une connexion vers la base de donn�e. |
* @access private |
*/ |
var $_db; |
|
/** |
* Contient le nom du r�pertoire du projet tel que sur le disque. |
* @access private |
*/ |
var $_nom_repertoire; |
|
/** |
* Le chemin jusqu'au r�pertoire o� seront stock�s les fichiers. |
* @access private |
*/ |
var $_chemin_repertoire; |
|
/** |
* Vaut vrai si le projet est un projet racine et s'il est le seul. |
* @access private |
*/ |
var $_est_racine; |
/** |
* Le r�sum� du projet |
* @access private |
*/ |
var $_resume; |
/** |
* Contient le num�ro du type du projet |
* @access private |
*/ |
var $_type; |
|
/** |
* Indique si l'inscription au projet est moderes |
* @access private |
*/ |
var $_isModere; |
|
/** |
* Indique si le projet a des documents |
* @access private |
*/ |
var $_avoirDocument; |
|
/** |
* tableau contenant les themes associes au projet |
*/ |
var $_themes = array(); |
/** |
* |
* PHP5 |
* @return projet |
* @access public |
*/ |
function __construct( &$dbObject, $id_projet = "") |
{ |
$this->projet($dbObject, $id_projet); |
|
} // end of member function __construct |
|
/** |
* |
* |
* @param DB dbObject Un objet PEAR:DB |
* @param int id_projet On passe un identifiant de projet au constructeur. Cela lui permet de faire une |
* premiere requete pour les infos de bases comme le titre, le description etc. |
* @return projet |
* @access public |
*/ |
function projet( &$dbObject, $id_projet = "") |
{ |
$this->_db = $dbObject ; |
if ($id_projet != "") { |
$requete = "select * from projet where p_id=".$this->_db->escapeSimple($id_projet)." " ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError($resultat)) { |
die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
$ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT) ; |
|
// Affectations dans les proprietes |
$this->_id_projet = $ligne->p_id ; |
$this->_titre = $ligne->p_titre ; |
$this->_description = $ligne->p_description ; |
$this->_espace_internet = $ligne->p_espace_internet ; |
$this->_date_creation = $ligne->p_date_creation ; |
$this->_nom_wikini = $ligne->p_wikini ; |
$this->_resume = $ligne->p_resume; |
$this->_type = $ligne->p_type ; |
// On recupere le nom du repertoire |
$this->_nom_repertoire = $ligne->p_nom_repertoire ; |
$this->_isModere = $ligne->p_modere; |
$this->_avoirDocument = $ligne->p_avoir_document; |
// on regarde si on a a faire au projet racine |
if (PROJET_UTILISE_HIERARCHIE) { |
$requete = 'select ph_id_projet_pere, ph_id_projet_fils from projet_hierarchie where ph_id_projet_fils='.$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
return ("Echec de la requete : $requete<br />".$resultat->getMessage()) ; |
} |
if (!$resultat->numRows()) { |
$this->_est_racine = true ; |
} else { |
$this->_est_racine = false ; |
} |
} |
|
/** Recuperation des themes */ |
$requete_theme = 'select pat_id_theme, pt_label_theme from projet_avoir_theme, projet_theme'. |
' where pat_id_projet='.$this->_db->escapeSimple($this->_id_projet).' and pat_id_theme=pt_id_theme'; |
$resultat_theme = $GLOBALS['projet_db']->query ($requete_theme); |
if (DB::isError($resultat_theme)) { |
return ("Echec de la requete : $requete_theme<br />".$resultat_theme->getMessage()) ; |
} |
if ($resultat_theme->numRows() != 0) { |
|
while ($ligne_theme = $resultat_theme->fetchRow(DB_FETCHMODE_OBJECT)) { |
$this->_themes[$ligne_theme->pat_id_theme] = $ligne_theme->pt_label_theme; |
} |
|
} |
} |
} // end of member function projet |
|
/** |
* |
* |
* @param DB dbObject Un objet PEAR:DB |
* @param int id_projet On passe un identifiant de projet au constructeur. |
* @return bool |
* @access public |
*/ |
function projetExiste( &$dbObject, $id_projet) |
{ |
if ($id_projet != "") { |
$requete = "select * from projet where p_id=".$dbObject->escapeSimple($id_projet)." " ; |
$resultat = $dbObject->query ($requete) ; |
if (DB::isError($resultat)) { |
die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
if ($resultat->numRows() != 0) { |
return true ; |
} |
} |
} // end of member function projet |
|
/** |
* |
* |
* @param int id_projet |
* @return string |
* @access public |
*/ |
function getTitre( $id_projet = "" ) |
{ |
return $this->_titre ; |
} // end of member function getTitre |
|
/** |
* |
* |
* @return string |
* @access public |
*/ |
function getResume( ) |
{ |
return $this->_resume ; |
} // end of member function getResume |
|
/** |
* Renvoie l'identifiant du projet courant. |
* |
* @return int |
* @access public |
*/ |
function getId( ) |
{ |
return $this->_id_projet ; |
} // end of member function getId |
|
/** |
* |
* |
* @return string |
* @access public |
*/ |
function getDescription( ) |
{ |
return $this->_description; |
} // end of member function getDescription |
|
/** |
* |
* |
* @return string |
* @access public |
*/ |
function getEspaceInternet( ) |
{ |
return $this->_espace_internet; |
} // end of member function getEspaceInternet |
|
/** |
* Charge dans l'objet projet, les listes de discussion |
* ['nom_liste'] |
* ['domaine'] |
* ['adresse'] |
* |
* @return boolean true en cas de succ�s |
* @access public |
*/ |
function getListesAssociees( ) |
{ |
// On rajoute un test pour eviter l'appel SQL si il a deja ete fait une fois |
if (count($this->_listes_associes) > 0) return ; |
$requete = "select pl_id_liste from projet_lien_liste where pl_id_projet=".$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
return ("Echec de la requete : $requete<br />".$resultat->getMessage()) ; |
} |
$retour = array() ; |
if ($resultat->numRows()) { |
$ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT) ; |
$this->_listes_associes[] = new liste_discussion($ligne->pl_id_liste, $this->_db) ; |
|
} |
} // end of member function getListesAssociees |
|
/** |
* Renvoie vrai si le projet a au moins une liste |
* |
* @return bool |
* @access public |
*/ |
function avoirListe( ) |
{ |
$this->getListesAssociees() ; |
if (count($this->_listes_associes)) { |
return true ; |
} |
return false ; |
} |
|
/** |
* Renvoie vrai si le projet a au moins un document, fichier ou repertoire |
* |
* Mis en place pour des raisons de performances avant la methode getListesDocuments etait utilisee |
* |
* @return bool |
* @access public |
*/ |
function avoirDocument( ) |
{ |
return $this->_avoirDocument; |
} |
|
/** |
* Permet de fixer la colonne p_avoir_document a 1 |
* |
* Mis en place pour des raisons de performances avant la methode getListesDocuments etait utilisee |
* |
* @param bool |
* @return mixed true si la requete fonctionne |
* @access public |
*/ |
function setAvoirDocument($bool) |
{ |
$val = 0 ; |
if ($bool) $val = 1; |
$requete = 'update projet set p_avoir_document='.$this->_db->escapeSimple($val).' where p_id='.$this->_db->escapeSimple($this->_id_projet); |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError($resultat)) { |
echo ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
return true; |
} |
|
/** |
* Renvoie la liste des documents associes sous forme d'un tableau, avec les |
* informations afferentes. 0 => "nom (cliquable)" |
"Taille" |
"Date |
* de creation" "Prorietaire" "Visibilite" "Action |
* (cliquable)" |
* |
* @param visibilite visibilite Si visibilite est prive, tous les fichiers sont renvoyes ainsi qu'une entree |
* pour indiquer la visibilite du document. |
* @return Array |
* @access public |
*/ |
function getListesDocuments( $chemin, $chemin_icones = "icones/", $id_repertoire = '', $date = '' ) |
{ |
// On realise une requete sur projet_documents avec une jointure sur l'annuaire |
// et sur gen_type_de_fichier pour envoyer un resultat complet. |
// On exclue les fichiers racines cad pd_pere is null |
$requete = "select pd_id from projet_documents where pd_ce_projet=".$this->_db->escapeSimple($this->_id_projet) ; |
if ($id_repertoire != '') $requete .= ' and pd_pere='.$this->_db->escapeSimple($id_repertoire); |
if ($id_repertoire != '' && $id_repertoire == 0) $requete .= ' and pd_pere=0'; |
if ($date != '') $requete .= ' and pd_date_de_mise_a_jour > date_sub (NOW(), interval 1 week)'; |
$requete .= ' order by pd_nom' ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError($resultat)) { |
return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
$tableau_document = array() ; |
// Un compteur |
$i = 0 ; |
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) { |
array_push ($tableau_document, new document ($ligne->pd_id, $i, $chemin, $chemin_icones)) ; |
} |
return $tableau_document ; |
} |
|
|
/** |
* Renvoie un tableau avec tous les repertoires d'un projet, imbrique. ['rep1'], |
* ['rep2'] => array (['rep21'], ['rep22']), etc . |
* |
* @return Array |
* @access public |
*/ |
function getListeRepertoireHierarchisee( ) |
{ |
// On ne prend que les repertoires |
$requete = "select pd_id, pd_pere, pd_nom from projet_documents where pd_ce_projet=".$this->_db->escapeSimple($this->_id_projet).' and pd_ce_type=0 order by pd_nom' ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError($resultat)) { |
return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
$tableau_document = array() ; |
/* |
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) { |
array_push ($tableau_document, new document ($ligne->pd_id, $this->_db)); |
} |
*/ |
$tableau = array(); |
$tab = array(); |
|
|
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) { |
array_push ($tableau, array ('id' => $ligne->pd_id, |
'id_pere' => $ligne->pd_pere, |
'fils' => array(), |
'label' => $ligne->pd_nom)); |
|
} |
|
// la $tableau reste un tableau de valeur a plat |
|
|
$i = 0; |
foreach ($tableau as $noeud) { |
// On teste si le noeud est racine si oui on l ajoute a l arbre sinon on ne l ajoute pas |
if ($noeud['id_pere'] == 0) { |
$tab[$i] = $noeud; |
$this->construireArbre($tab[$i], $tableau) ; |
} |
$i++; |
} |
return $tab; |
} // end of member function getListeRepertoireHierarchisee |
|
function construireArbre(&$noeud, $tableau) { |
$j = 0; |
foreach ($tableau as $element) { |
// pour chaque element on teste |
if ($element['id_pere'] == $noeud['id']) { |
$noeud['fils'][$j]= $element ; |
$this->construireArbre($noeud['fils'][$j],$tableau); |
} |
$j++; |
} |
} |
|
/** |
* Renvoie un tableau comprenant tous les objets projet de la base. |
* |
* @return Array |
* @static |
* @access public |
*/ |
function getTousLesProjets(&$objetDB, $exclu = '') |
{ |
$sql = ''; |
if (is_object($this) && isset ($this->_projet_exclu) && count($this->_projet_exclu)) { |
$sql = 'where p_id not in ('; |
foreach ($this->_projet_exclu as $valeur) { |
$sql .= $objetDB->escapeSimple($valeur).',' ; |
} |
$sql[count($sql)-1] = ')'; |
} |
$requete = 'select p_id from projet '.$sql.' order by p_titre' ; |
$resultat = $objetDB->query ($requete) ; |
if (DB::isError($resultat)) { |
echo ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
$tableau_resultat = array() ; |
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) { |
array_push ($tableau_resultat, new projet ($objetDB, $ligne->p_id)) ; |
} |
return $tableau_resultat ; |
} // end of member function getTousLesProjets |
|
/** |
* Renvoie un tableau comprenant les objets projet de la base du type $type. |
* |
* @return Array |
* @static |
* @access public |
*/ |
function getProjetDuType($type, &$objetDB) |
{ |
$requete = "select p_id from projet where p_type= ".$objetDB->escapeSimple($type)." order by p_titre" ; |
$resultat = $objetDB->query ($requete) ; |
if (DB::isError($resultat)) { |
die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
$tableau_resultat = array() ; |
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) { |
array_push ($tableau_resultat, new projet ($objetDB, $ligne->p_id)) ; |
} |
return $tableau_resultat ; |
} // end of member function getTousLesProjets |
|
/** |
* Renvoie un le projet racine. |
* |
* @return projet |
* @static |
* @access public |
*/ |
function getProjetRacine(&$objetDB) |
{ |
$requete = "select p_id from projet where p_id not in (select ph_id_projet_fils from projet_hierarchie)" ; |
$resultat = $objetDB->query ($requete) ; |
if (DB::isError($resultat)) { |
die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
if ($resultat->numRows() == 1) { |
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ; |
return new projet($objetDB, $ligne->p_id) ; |
} |
$tableau_resultat = array() ; |
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) { |
array_push ($tableau_resultat, new projet ($objetDB, $ligne->p_id)) ; |
} |
return $tableau_resultat ; |
} // end of member function getTousLesProjets |
|
/** |
* Desctructeur de la classe. Libere la memoire, ferme les connexions et fichiers. |
* |
* @return void |
* @access public |
*/ |
function __destruct( ) |
{ |
|
} // end of member function __destruct |
|
/** |
* Supprime le projet courrant. Il s'ensuit une suppression en cascade de tous les |
* elements lies. |
* |
* @return void |
* @access public |
*/ |
function supprimer( ) |
{ |
|
} // end of member function supprimer |
|
/** |
* Permet d'enregistrer une ligne dans la table concernee. |
* |
* @param Array tableau_de_valeur Le tableau de valeur a inserer dans la base avec pour cle les noms des elements |
* du formulaire. |
* @return int |
* @access public |
*/ |
function enregistrerSQL( $tableau_de_valeur ) |
{ |
$nom_repertoire = projet::genereNomRepertoire($tableau_de_valeur['projet_titre'], $this->_db) ; |
if (!$this->_creationRepertoire ($nom_repertoire)) { |
echo 'Impossible de crée un répertoire'.$nom_repertoire ; |
return false ; |
} |
// Traitement du type |
if (!PROJET_UTILISE_TYPE) { |
$tableau_de_valeur['projet_type'] = 0 ; |
} |
$id = SQL_obtenirNouveauId($this->_db, 'projet', 'p_id') ; |
$requete = 'insert into projet set p_id='.$this->_db->escapeSimple($id) ; |
if (!isset($tableau_de_valeur['projet_wikini'])) { |
$tableau_de_valeur['projet_wikini']=''; |
} |
$requete .= ', p_titre="'.$tableau_de_valeur['projet_titre'].'", p_description="'.$tableau_de_valeur['projet_description'].'"'. |
', p_espace_internet="'.$tableau_de_valeur['projet_espace_internet'].'", p_date_creation=NOW()'. |
', p_wikini="'.$tableau_de_valeur['projet_wikini'].'", p_nom_repertoire="'.$nom_repertoire.'", p_resume="'.$tableau_de_valeur['projet_resume']. |
'", p_type="'.$tableau_de_valeur['projet_type'].'", p_modere="'.$tableau_de_valeur['projet_moderation'].'"' ; |
$resultat = $this->_db->query ($requete) ; |
|
if (DB::isError($resultat)) { |
return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
|
// On affecte a l'objet projet son identifiant |
$this->_id_projet = $id ; |
|
//insertion dans projet_herarchie |
if (PROJET_UTILISE_HIERARCHIE) { |
$requete = 'insert into projet_hierarchie set ph_id_projet_pere='.$this->_db->escapeSimple($tableau_de_valeur['projet_asso']). |
', ph_id_projet_fils='.$id ; |
$resultat = $this->_db->query ($requete) ; |
} |
|
/** enregistrement dans projet_avoir_theme */ |
$requete_theme = ''; |
foreach ($tableau_de_valeur['projet_theme'] as $cle => $valeur) { |
$requete_theme = 'insert into projet_avoir_theme set pat_id_projet='.$this->_db->escapeSimple($id).', pat_id_theme='.$this->_db->escapeSimple($cle); |
$resultat_theme = $GLOBALS['projet_db']->query($requete_theme); |
if (DB::isError($resultat_theme)) { |
return $resultat_theme->getMessage(); |
} |
} |
return true ; |
} |
|
/** |
* Permet de mettre a jour une ligne dans la table concernee. |
* |
* @param Array tableau_de_valeur Le tableau de valeur a inserer dans la base avec pour cle les noms des elements |
* du formulaire. |
* @return int |
* @access public |
*/ |
function majSQL( $tableau_de_valeur ) |
{ |
// Traitement du type |
if (!PROJET_UTILISE_TYPE) { |
$tableau_de_valeur['projet_type'] = 0 ; |
} |
$requete = 'update projet set '; |
$requete .= 'p_titre="'.$tableau_de_valeur['projet_titre'].'", p_description="'.$tableau_de_valeur['projet_description'].'"'. |
', p_espace_internet="'.$tableau_de_valeur['projet_espace_internet'].'"'. |
', p_resume="'.$tableau_de_valeur['projet_resume'].'", p_type="'.$tableau_de_valeur['projet_type'].'"'. |
', p_modere='.$tableau_de_valeur['projet_moderation']. |
' where p_id="'.$this->_id_projet.'"' ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError($resultat)) { |
return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ; |
} |
|
if (PROJET_UTILISE_HIERARCHIE) { |
// suppression dans projet_hierarchie |
|
$requete = 'delete from projet_hierarchie where ph_id_projet_fils='.$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
|
//insertion dans projet_hierarchie |
|
$requete = 'insert into projet_hierarchie set ph_id_projet_pere='.$this->_db->escapeSimple($tableau_de_valeur['projet_asso']). |
', ph_id_projet_fils='.$this->_id_projet ; |
$resultat = $this->_db->query ($requete) ; |
} |
|
/** enregistrement dans projet_avoir_theme */ |
|
$requete_suppression_theme = 'delete from projet_avoir_theme where pat_id_projet='.$this->_db->escapeSimple($this->_id_projet); |
$resultat_suppression_theme = $GLOBALS['projet_db']->query($requete_suppression_theme); |
|
$requete_theme = ''; |
foreach ($tableau_de_valeur['projet_theme'] as $cle => $valeur) { |
$requete_theme = 'insert into projet_avoir_theme set pat_id_projet='.$this->_db->escapeSimple($this->_id_projet).', pat_id_theme='.$this->_db->escapeSimple($cle); |
$resultat_theme = $GLOBALS['projet_db']->query($requete_theme); |
if (DB::isError($resultat_theme)) { |
return $resultat_theme->getMessage(); |
} |
} |
return true ; |
} // end of member function enregistrerSQL |
|
/** |
* Met a jour dans la base de donnee le champs p_nom_wikini |
* |
* @param int nom_wikini Le nouveau nom wikini |
* @return bool |
* @access public |
*/ |
function majNomWikini( $nom_wikini ) |
{ |
$requete = 'update projet set p_wikini="'.$nom_wikini.'" where p_id="'.$this->_id_projet.'"' ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
return ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ; |
} |
return true ; |
} // end of member function majNomWikini |
|
|
/** |
* |
* |
* @param string code_sql |
* @return bool |
* @access public |
*/ |
function suppressionSQL() |
{ |
$msg = '' ; |
// Supression du repertoire du projet |
if (!$this->_suppression_repertoire()) { |
$msg = 'La suppression du repertoire n\'a pas fonctionne' ; |
} |
// A ajouter la suppression des documents associes |
|
// La suppression des evenements associ�s |
|
// Le projet lui-meme |
$requete = "delete from projet where p_id=".$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
|
if (PROJET_UTILISE_HIERARCHIE) { |
$requete = "delete from projet_hierarchie where ph_id_projet_fils=".$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
} |
$requete = "delete from projet_statut_utilisateurs where psu_id_projet=".$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
return $msg ; |
} // end of member function suppressionSQL |
|
/** |
* Supprime le repertoire associe au projet (le repertoire doit etre vide). |
* |
* @return void |
* @access private |
*/ |
function _suppression_repertoire( ) |
{ |
return rmdir ($this->_chemin_repertoire.$this->_nom_repertoire) ; |
} // end of member function _suppression_repertoire |
|
/** |
* Permet de creer le repertoire associe au projet. |
* |
* @param string nom_repertoire Le nom du r�pertoire � cr�er. |
* @return boolean |
* @access private |
*/ |
function _creationRepertoire( $nom_repertoire ) |
{ |
return mkdir ($this->_chemin_repertoire.$nom_repertoire) ; |
} // end of member function _creationRepertoire |
|
/** |
* Permet d'indiquer ou seront stockes les fichiers. |
* |
* @param string cheminRepertoire Le chemin jusqu'au repertoire ou seront stockes les fichiers. |
* @return void |
* @access public |
*/ |
function setCheminRepertoire( $cheminRepertoire ) |
{ |
$this->_chemin_repertoire = $cheminRepertoire ; |
} // end of member function setCheminRepertoire |
|
/** |
* Genere un nom de repertoire a partir de la premiere lettre de la chaine passe en |
* parametre et de l'identifiant du dernier projet. |
* |
* @param string chaine Une chaine a partir de laquelle sera generer le nom du repertoire. |
* @param DB objetDB un objet PEAR::DB |
* @return string |
* @static |
* @access public |
*/ |
function genereNomRepertoire( $chaine, &$objetDB ) |
{ |
$requete = "select p_id from projet order by p_id desc limit 0,1" ; |
$resultat = $objetDB->query ($requete) ; |
if (DB::isError ($resultat)) { |
return ("Echec de la requete : $requete<br />".$resultat->getMessage()) ; |
} |
if ($resultat->numRows() > 0) { |
$ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT) ; |
$nom = strtoupper(substr($chaine, 0, 1)) ; |
$nom .= $ligne->p_id + 1 ; |
} |
else { |
$nom = strtoupper(substr($chaine, 0, 1)) ; |
$nom .= 1 ; |
} |
return $nom ; |
|
} // end of member function genereNomRepertoire |
|
/** |
* Permet de recuperer le nom du repertoire d'un projet. |
* |
* @return string |
* @access public |
*/ |
function getNomRepertoire( ) |
{ |
return $this->_nom_repertoire ; |
} // end of member function getNomRepertoire |
|
/** |
* Ajoute une liste a un projet |
* Effectue une insertion dans projet_lien_liste |
* |
* @param liste_discussion liste Une instance de la classe liste_discussion |
* @return void |
* @access public |
*/ |
function ajouterListe( &$liste ) |
{ |
$requete = "insert into projet_lien_liste set pl_id_liste=".$this->_db->escapeSimple($liste->getId()). |
', pl_id_projet='.$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
return ("Echec de la requete : $requete<br />".$resultat->getMessage()) ; |
} |
} |
|
/** |
* Supprime la liste de discussion associee au projet |
* |
* @return void |
* @access public |
*/ |
function supprimerListe(&$liste) |
{ |
$requete = 'delete from projet_lien_liste where pl_id_liste='.$this->_db->escapeSimple($liste->getId()) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
return ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ; |
} |
$requete = 'delete from projet_liste where pl_id_liste='.$this->_db->escapeSimple($liste->getId()) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
return ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ; |
} |
} |
|
|
/** |
* Renvoie vrai si le projet est racine. |
* |
* @return bool |
* @access public |
*/ |
function isRacine( ) |
{ |
return $this->_est_racine ; |
} // end of member function isRacine |
|
/** |
* Renvoie le nombre d'inscrits au projet. Effectue une requete dans la table |
* projet_statut_utilisateurs |
* |
* @return int |
* @access public |
*/ |
function getNombreInscrits( ) |
{ |
$requete = 'select count(psu_id_utilisateur) as nbre from projet_statut_utilisateurs where psu_id_projet='.$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
die ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ; |
} |
$ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT) ; |
return $ligne->nbre ; |
} // end of member function getNombreInscrits |
|
|
/** |
* Renvoie un tableau contenant les identifiants des fils du projet courant. |
* |
* @return Array |
* @access public |
*/ |
function getHierarchie( ) |
{ |
$requete = 'select ph_id_projet_fils from projet_hierarchie where ph_id_projet_pere='.$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
die ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ; |
} |
$tableau_resultat = array() ; |
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) { |
array_push ($tableau_resultat, $ligne->ph_id_projet_fils) ; |
} |
return $tableau_resultat ; |
} // end of member function getHierarchie |
|
/** |
* Renvoie l'identifiant du pere du projet courrant. |
* |
* @return int |
* @access public |
*/ |
function getIdPere() |
{ |
$requete = 'select ph_id_projet_pere from projet_hierarchie where ph_id_projet_fils='.$this->_db->escapeSimple($this->_id_projet) ; |
$resultat = $this->_db->query ($requete) ; |
if (DB::isError ($resultat)) { |
die ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ; |
} |
$tableau_resultat = array() ; |
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ; |
return $ligne->ph_id_projet_pere ; |
} // end of member function getIdPere() |
|
/** |
* Renvoie le nom Wiki du wikini associe au projet. |
* |
* @return string |
* @access public |
*/ |
function getWikini( ) |
{ |
return $this->_nom_wikini ; |
} // end of member function getWikini |
|
/** |
* Renvoie le type du projet, ou zero si le projet n'a pas de type. |
* |
* @return int |
* @access public |
*/ |
function getType( ) |
{ |
return $this->_type ; |
} // end of member function getType |
|
/** |
* Renvoie les themes du projet, ou zero si le projet n'a pas de type. |
* |
* @return int |
* @access public |
*/ |
function getThemes( ) |
{ |
return $this->_themes ; |
} // end of member function getType |
|
/** |
* Renvoie 1 si les inscriptions au projet sont moderees. |
* |
* @return int |
* @access public |
*/ |
function isModere( ) |
{ |
return $this->_isModere ; |
} // end of member function getType |
|
|
|
/** |
* initAttributes sets all projet attributes to its default value make |
* sure to call this method within your class constructor |
*/ |
function initAttributes( ) |
{ |
$this->chemin_wikini = "projet/wikini/"; |
} |
|
|
} // end of projet |
?> |